Перейти к содержанию
    

Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд,
Насколько "маленький" должен быть процессор в ресурсах ПЛИС? Есть пара "почти доделанных" вариантов 8-разрядникров "для души" (порядка 200-400 LE в зависимости от степени махровости) :)

 

который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16. И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.

Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла

А зачем так сложно? Размещейте код в блоках встроенного ОЗУ ПЛИСа. Для отладки кода можно использовать In-system Memory Content Editor. А финальная версия кода будет содержаться в pof'е и грузиться во всторенное ОЗУ ПЛИС в процессе конфигурирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочел ссылки, и на мой взгляд, Вы синтезируете аппаратный диспетчер для многозадачных процессов, с целью ускорения работы операционных систем. Но могу и ошибаться…

 

Это должно получиться в результате, но пока ещё работа далека от завершения. В текущем состоянии устройство представляет из себя маленький и довольно простой 32-битный микропроцессор. Единственное, что может оттолкнуть от его использования - отсутствие прерываний. При желании прерывания можно реализовать сверху, обернув ядро, но в конечном устройстве прерывания будут замещены сообщениями, поэтому не вижу особого смысла разрабатывать то, от чего потом придётся откзаться.

 

Меня же пока интересует маленький процессор на 8 или 16 разрядов, с ограниченным набором команд, который загружался бы в ПЛИС типа Cyclone III, например, с EPCS16.

 

Посмотрите вот это (кликабельно):

 

73fcfc319b8ac2db4f6cfe64f60c5b2d.png

 

И помимо процессора, чтобы можно было загружать программы к нему, а также другую аппаратную обвязку.

Для подобных загрузок надо знать, как вместе с процессором разместить в EPCS программу к нему, и как все это из EPCS выгрузить. Для NiosII это решается интегрированной средой и с применением jic-файла, но не понятны детали, как это все делать и увязать самому.

Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...

 

Задачи для души, по моему скромному мнению, это самый лучший стимул для разработки.

Я использовал мегафункцию ROM для размещения интерактивного монитора и загрузчика по протоколу X-modem непосредственно в ПЛИС.

В принципе, в микрокод можно поместить довольно сложные программы.

 

Ой... Вы имеете в виду как загрузить из EPCS пользовательскую программу в процессор и что NiosII умеет это делать.

Да, я тоже хотел бы это знать, как можно "программно" прочитать регион памяти из EPCS, в которой зашита прошивка устройства. Некоторая информация есть вот здесь .

 

 

Изменено пользователем alman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, товарищи! Не совсем пишу туда куда надо, но не хочу создавать целую тему, во всяком случае пока что, так что выскажусь здесь. Не имю большого опыта в работе с софт процессорами, но весчь безусловна интересная и архиполезная! Вот и я гуляя по просторам тырнета в поисках халявный ядрышек набрёл на сайтик http://www.oreganosystems.at/?page_id=96 на коем валяется бесплатный проектик ядра 8051. Вообщем собрал я его и запустил, удачно поморгал сетодиодиками, но вот в итоге встал вопрос, что дальше то? У меня стоит задача общения с n-ым кол-вом устройств по уарт на скорости до 1Мб/с. Однако как я понял, по диодикам, ядро работает не так что б аж "В ЛЁТ"! На симулирование времени не было. Досканально разбирать код - :cranky: крыша съедит, нет ни времени ни желания. Правда прогнал его через TimeQuest, в коем я совсем и не спец (ограничения задал лишь на клоковую частоту) ну и на 25МГц полезли слаки (хотя в даташитах написано, что эту частоту выставлять и надо). В составе ядра имеется т.н. datamux, который и портил картину - весь проект тактируется по переднему фронту, а этот блок по заднему! В следствии точо, что как я понял из схемы он и не нужен вообщем (схема видимо сыровата и последний раз правилась аж 10 лет назад) то я его исключил. И вроде на 25МГц завелось. Но вот мож но ли ещё частоту задрать? Вообщем вопрос в следующем, кто нибудь вообще с этой штукой ковырялся и стоит ли вообще её ковырять?

P.S.

Конечно, NiosII удовлетворяет с лихвой, но есть задачи и для души...

Сложно представить, во всяком случае если он эконом класса... т.е. БЕСплатный! АВРка и та могутнее в ряде случаев будит, хотя конечно если количество интерфейсов или счётчиков не нормировано... то да-с...

Изменено пользователем Грендайзер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

бесплатный проектик ядра 8051.

Вообщем вопрос в следующем, кто нибудь вообще с этой штукой ковырялся и стоит ли вообще её ковырять?

На открытых проектах полно разных процессоров. Так зачем их искать по "помойкам", да еще тех, которые не поддерживаются...

Чем не устраивают те, к которым есть компиляторы? Скажем Альтеровские? Или бесплатные Актеловские?

А может вообще, N+1 автомат нужен и все дела?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну по поводу открытых проектов - как я понял эти занимаются все у кого душа к этому тяготеет, и прожжёный спец и начинающий любитель... так что как попадёшь, и в этом плане данное ядро ничем не отличается от открытых ресурсов. А вот дока на него очень качественная! Теперь, что значит

не поддерживаются...
и
Чем не устраивают те, к которым есть компиляторы?

Программку то я для него написал и скомпилил!!! Более того скоомпилил в последней (бесплатной версии) Keil, её я скачал с сайта совсем не давно. Да и ядро это тащем то популярное... относительно, даже в нынешнее время! Ниос же как я писал эконом класа меня не устроил (не успевает он достойно обрабатывать прерывания на той скорости что я указывал), а "экспропреировать" его не выходит. С актеловскими вообще не знаком и как вообще аолучится ли их в альтеру то засунуть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для нового проекта перешел на Altera. Попробовал перенести давнишнее ядро, оптимизированное под Xilinx:

http://electronix.ru/forum/index.php?showt...mp;#entry597323

и сразу проблемы:

1) Квартус ни под каким соусом не хочет есть Верилоговское описание True Dual Port памяти с сигналом разрешения клока. Это действительно так, или плохо смотрел?

2) Квартус не хочет автоматом размещать в MLAB мелкие регистровые файлы с асинхронным чтением, без явного размещения атрибута (* ramstyle = "MLAB, no_rw_check" *) перед каждым объявлением мелкой памяти. Это действительно так, или плохо смотрел?

 

Пока-что двухпортовую память выделил в отдельную мегафункцию, и вставил нужный атрибут перед объявлением регистрового файла (но это неудобно, тк Верилоговский код синтезируется автоматом из другого описания). Дизайн заработал, результат синтеза для 32-разрядного ядра(Фон-Неймановская архитектура с 1К РФ в памяти) + память(2К слов) + UART + кнопки + светодиоды:

+------------------------------------------------------------------------------+
; Fitter Summary                                                              ;
+---------------------------------+--------------------------------------------+
...
; Family                         ; Cyclone V                                 ;
; Device                         ; 5CGXFC5C6F27C7                            ;
; Timing Models                  ; Final                                     ;
; Logic utilization (in ALMs)    ; 203 / 29,080 ( < 1 % )                    ;
; Total registers                ; 197                                       ;
; Total pins                     ; 26 / 364 ( 7 % )                          ;
; Total virtual pins             ; 0                                         ;
; Total block memory bits        ; 73,728 / 4,567,040 ( 2 % )                ;
...
+---------------------------------+--------------------------------------------+

 

 

Как описать такую память на Верилоге, чтобы Квартус понял?

post-9118-1409580953_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня есть на сайте статьи "микропроцессор своими руками"...

А вообще маленький микроконтроллер делается быстро. Самое главное - это сделать систему команд. И еще 2 стека: стек возвратов и стек данных. Двухпортовка в качестве регистрового файла... И команды перехода по выбору бита из байта.

Будут вопросы - могу подробнее объяснить.

"Наследие" MISC архитектуры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понял, к кому вопрос. Но могу пояснить, зачем мне понадобилось реанимировать собственное маленькое ядро - для проверки кое-каких идей по описанию схем с целью синтеза. Верилог (и тп) в синтезе == ассемблер в программировании. Ушли от ассемблера - давно уже пора уходить и от Верилога (и тп).

Поэтому и встал вопрос описания памяти. В ISE именно с этим проблем нет (но есть другая принципиальная проблема, почему и перешел на Квартус).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Квартус ни под каким соусом не хочет есть Верилоговское описание True Dual Port памяти с сигналом разрешения клока. Это действительно так, или плохо смотрел?

...

Как описать такую память на Верилоге, чтобы Квартус понял?

Не оно: Verilog HDL: True Dual-Port RAM with a Single Clock ?

Ну и другие примеры там посмотреть можно...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Квартус ни под каким соусом не хочет есть Верилоговское описание True Dual Port памяти с сигналом разрешения клока. Это действительно так, или плохо смотрел?

У меня вот такое нормально работает на альтере и хилых, не совсем разрешение клока конечно но может вам подойдёт:

//////////////////////////////////////////////////////////////////////////////////
module sdpram #(parameter p_DW = 0, parameter p_AW = 0)
(
   // SYS_CON
   input   i_clk,
   // IN / port-a
   input                   i_we_a,
   input       [p_AW-1:0]  iv_addr_a,
   input       [p_DW-1:0]  iv_data_a,
   // OUT / port-b
   input                   i_rd_b,
   input       [p_AW-1:0]  iv_addr_b,
   output  reg [p_DW-1:0]  ov_data_b
);
//////////////////////////////////////////////////////////////////////////////////
   // ram-MEM
   reg     [p_DW-1:0]  sv_mem [2**p_AW-1:0]; 

//////////////////////////////////////////////////////////////////////////////////
//
// Construct "Simple Dual Port RAM" logic
//
always @ (posedge i_clk)
begin   :   RAM_LOGIC
   // IN / port-a
   if (i_we_a)
       sv_mem[iv_addr_a] <= iv_data_a;
   // OUT / port-b
   if (i_rd_b)
       ov_data_b <= sv_mem[iv_addr_b];
end
//////////////////////////////////////////////////////////////////////////////////
endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...но есть другая принципиальная проблема, почему и перешел на Квартус...

Уточните, в чем проблема и почему переход на Квартус ее решил...

 

Сделал недавно небольшой софт RISC-процессор на 8 разрядов. Память команд и данных по 4К. Система команд - 25 инструкций, схожая на MCS51. Всего 20% времени ушло на verilog-синтез и 80% - на программирование на С++ транслятора с ассемблера в машинные коды.Память программ сначала была одно-, а потом двух-портовая, что в итоге позволило двухбайтные команды также выполнять за один такт. На Cyclone III скорость 100 MГц.

Выгода этого дела - процессор можно постоянно улучшать как по системе команд и функционалу, так и по производительности. Если будет свободное время…

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое описание синтезируется:

//True Dual Port RAM
module mem(
    output reg [10-1:0] qA, qB,
    input [10-1:0] dA, dB,
    input [10-1:0] aA, aB,
    input weA, weB, reA, reB, clkA, clkB
);
    //(* ramstyle = "M10K, no_rw_check" *) 
    reg [10-1:0] ram[2**10-1:0];
    
    always@(posedge clkA)
        if(weA)
            ram[aA] = dA;

    always@(posedge clkB)
        if(weB)
            ram[aB] = dB;            
        
    always@(posedge clkA)
        //if(reA)
            qA <= ram[aA];

    always@(posedge clkB)
        //if(reB)
            qB <= ram[aB];

endmodule

а с сигналами разрешения чтения не синтезируется. Придется костыль приделывать...

 

Уточните, в чем проблема и почему переход на Квартус ее решил...

 

Мои интересы сейчас - переход на более высокий уровень описания синхронных схем.

И Quartus намного быстрее ISE синтезирует кошмар, сгенерированный моими прогами.

 

По поводу простого ядра - могу выложить свое 5-летней давности (более поздние еще не реанимировал) с простым компилятором(без исходника), но код малочитаем: 1) некоторые блоки ручками соптимизированы, 2) весь код автоматически сгенерирован из другого описания, в котором все сигналы по-умолчанию 64-разрядные(и тп), 3) док нет, тк это просто один из экспериментов по поиску "оптимальной" архитектуры.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Leka, если не трудно, то уточните.

Мои интересы сейчас - переход на более высокий уровень описания синхронных схем.
Это по отношению к верилогу, или что-то другое?

 

По поводу простого ядра - могу выложить свое 5-летней давности ...
Интересно было бы узнать его структурные данные.

 

весь код автоматически сгенерирован из другого описания...
С одного HDL в другой?

 

...это просто один из экспериментов по поиску "оптимальной" архитектуры.
Какими будут критерии оптимальности?

 

Меня еще интересует метод повышения быстродействия для стандартных инструкций для RISC-процессоров за счет конвейеризации. Где бы почитать об этом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

top.v - топ-модуль

soc.v - ядро + uart + кнопки + светодиоды

memA.v - RAM для CycloneV

memX.v - RAM для Xilinx

top.hex - код для загрузки ядра по uart (содержит служебную информацию)

q.pas - тестовая программа (конструкции языка + N-ферзей)

c.bat - запуск компилятора и симулятора

compile.exe - компилятор (без каких-либо проверок синтаксиса и тп, winXP), создает top.hex

core.exe - потактовый симулятор ядра (winXP), исполняет top.hex .

sof.bat - вызывает jtag загрузчик и устанавливает параметры uart, надо поправить путь к top.sof и номер uart

top.bat - компилирует программу и загружает код в ядро, надо поправить номер uart

u.exe - выводит на экран поток из uart (u.c, winXP)

 

Это по отношению к верилогу, или что-то другое?

По отношению к верилогу.

 

Какими будут критерии оптимальности??

Это целый опус писать надо, не сейчас.

core_i_.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, top.v для CycloneV Квартус 9sp1 (какой был с моделями старых Циклонов) без переделки собрал для CycloneIII, заменив асинхронный MLAB на синхронный M9K :wacko:

Платы с CycloneIII под рукой нет (только с CycloneV), если кто проверит в железе - буду признателен.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...