|
Свои процессоры, Разработка своих процессоров со своей системой команд |
|
|
|
 |
Ответов
(210 - 224)
|
Mar 20 2015, 16:57
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 16-01-10
Пользователь №: 54 852

|
Цитата(des00 @ Mar 19 2015, 20:56)  меги 128ые (128к флеша) забивали на асме, а тут всего 4к команд. мельчает народ  Как мой вопрос связан с количеством ассемблерных инструкций? Вопрос был связан со средствами разработки (отладчик, симулятор, транслятор/компилятор). Новая система команд - новые инструменты. А 128к ассемблерных инструкций меня не испугаешь.  Цитата(Leka @ Mar 19 2015, 23:35)  Зависит от компилятора ЯВУ - насколько переносимым является генерируемый ассемблерный код. Например, переходы - на метку, или же смещение задается константой, и тд и тп. Для msp430, например, GCC выдает хороший ассемблерный код в плане независимости от системы команд и машинных кодов - можно внести заметные изменения. От компилятора ЯВУ на мой взгляд отличия системы команд не зависят вообще. Не процессор же пишут под конкретный компилятор, а компилятор под систему команд процессора. Править ассемблерный код после компилятора на мой взгляд не очень продуктивное занятие. Цитата(Timmy @ Mar 20 2015, 12:46)  Теоретически процессор должен быть полностью совместим по командам со старым LatticeMico8, до того, как его пришили к Вишбону. А как система команд зависит о шины? Там вроде всего две команды работы с шиной import/inp и export/outp.
|
|
|
|
|
Mar 23 2015, 06:13
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(Leka @ Mar 20 2015, 16:18)  А отдельного Си компилятора нету, чтобы на Альтеру имело смысл перенести ядро? Для LatticeMico8 есть backend к gcc, так что компилятор Си как бы есть. Правда, я что-то не видел исходников патча для binutils, только gcc. С-компилятор там какой-то странный, он во всех моделях памяти(включая 8-битную) делает 32-битные указатели(по-крайней мере, так в мануале написано). В случае переноса на классические Циклоны, придётся хранить регистры, стек и scratchpad в одном M9K(туда же можно запихнуть и код  ), при этом один такт на инструкцию невозможен. Предполагаемый объём для клона Mico8 - 270LE.
|
|
|
|
|
Mar 23 2015, 10:18
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Цитата(Timmy @ Mar 23 2015, 10:13)  Для LatticeMico8 есть backend к gcc, так что компилятор Си как бы есть. ... Если С-компилятор - интегрированный в софт от Lattice, тогда смысла в переносе lm8 на Циклоны нет, наверно. Цитата ...при этом один такт на инструкцию невозможен. Согласен, у M9K/etc нет гарантированного режима "write before read", чтение и запись _данных_ в одном такте рискованно делать (без проверки адресов).
|
|
|
|
|
Mar 23 2015, 11:55
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(Timmy @ Mar 23 2015, 09:13)  ...при этом один такт на инструкцию невозможен.. В моем miniByte на Cyclone III с памятью М9К, инструкция выполняется за один период тактовой частоты. Это при входном регистре адреса в М9К и без выходного регистра данных... Для обработки двухбайтных команд применил двухпортовый доступ, где текущий и последующий байт считываются одновременно.. Что тут не так, в чем вопрос?
|
|
|
|
|
Mar 23 2015, 12:10
|
Частый гость
 
Группа: Свой
Сообщений: 100
Регистрация: 20-04-12
Из: Нижний Новгород
Пользователь №: 71 488

|
Serhiy_UAА как вам удалось обойтись без выходного регистра данных, если память в cyclone III синхронная? на выражение типа такого Код assign dout = ram[addr]; квартус отвечает, что не может синтезировать такое на блочной памяти.
Сообщение отредактировал ~Elrond~ - Mar 23 2015, 12:10
|
|
|
|
|
Mar 23 2015, 12:32
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(~Elrond~ @ Mar 23 2015, 15:10)  Serhiy_UA А как вам удалось обойтись без выходного регистра данных, если память в cyclone III синхронная? Для памяти программ используется Tools ->MegaWizard Plag-In-Manager ->Memory Compiler ->ROM 2-PORT, где в диалоге задается регистр адреса на входе и выход памяти без регистра данных. А далее двухпортовая память включается в проект примерно таким кодом. То есть, я задал в Memory Compiler тактирование только регистра адреса: [//------- ROM 2 ------ rom_2p rom_2p_inst ( .address_a ( a), .address_b ( a+1), .clock ( clk), .q_a ( q), .q_b ( q1) ); ][/code]
|
|
|
|
|
Mar 23 2015, 12:58
|
Знающий
   
Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112

|
Цитата(~Elrond~ @ Mar 23 2015, 16:41)  Serhiy_UA Отключение этой опции в мегавизарде приводит к уменьшению latency с 2 до 1 такта, но никак не ликвидирует её полностью. Хорошо, тогда к тому коду, что был выше, еще несколько строк кода, что бы понять основные увязки: always @ (posedge clk or posedge reset) //write PC if (reset) PC<=0; else PC<=a; То есть, какая-то комбинационная схема КС, что в момент выполнения текущей, формирует адрес "а" для следующей команды. С выхода КС адрес "а" одновременно записыается и в программный счетчик РС и в регистр адреса, что есть на входе памяти М9К. Таким образом все выполняется за такт, и с одним фронтом clk, Да еще, второй регистр на выходе М9К, позволит на конвейере выполнять две команды одновременно. Но здесь надо почитать теорию, что бы не изобретать велосипед. Пока мои поиски соответствующей литературы ничего не дали..
|
|
|
|
|
Mar 23 2015, 13:54
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(Serhiy_UA @ Mar 23 2015, 14:55)  В моем miniByte на Cyclone III с памятью М9К, инструкция выполняется за один период тактовой частоты. Это при входном регистре адреса в М9К и без выходного регистра данных... Для обработки двухбайтных команд применил двухпортовый доступ, где текущий и последующий байт считываются одновременно.. Что тут не так, в чем вопрос? Да, можно сделать ,то что надо, на двух M9K, плюс потребуются два bypass регистра и схема обнаружения коллизий чтения/записи по одному адресу, это +30LE примерно. Так в nios2 делают, просто для пикопроцессора это чересчур, IMHO.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|