Comments 5
Verilog, VHDL ресурса rosettacode.org?
Так, к примеру, на этом ресурсе:
21 решённая задача на Verilog
и 11 решённых задач на VHDL
+ 12 решённых задач на SystemVerilog
P.S. Или задачи, представленные для решения на этом ресурсе больше подходят для Софт-процессоров реализованных в составе FPGA?
Сводная подборка информации по проектам Софт процессоров
Но, есть же к примеру проект и сообщество ПО FlProg
где даже в рамках логических элементов делают ПО под контроллеры Ардуино.
(не видно, вроде, проектов где для контроллеров общего применения был бы применён VHDL, Verilog ...)
Я ткнул в несколько примеров в rosettacode и к сожалению эти примеры не имеют вообще никакого отношения к дизайну микросхем на верилоге и просто используют верилог как язык программирования. ну это как использовать автомобиль жигули для занятия любовью на парковке. Ну то есть так можно, диван в нем есть, но это не то, для чего он предназначен.
Например http://rosettacode.org/wiki/100_doors#Verilog
module main;
integer i;
initial begin
$display("Las siguientes puertas están abiertas:");
for (i=1; i<=10; i=i+1) if (i%i*i<11) $display(i*i);
$finish ;
end
endmodule
Где здесь сигналы, логика, регистры, стадии конвейера, иерархия модулей итд? Что это вообще демонстрирует? Что в нем можно делать аналог printf для написания тестов.
Еще хуже сложение http://rosettacode.org/wiki/A%2BB#Verilog
В GrayCode приведено использование как выше и модуль с логикой. Второе можно использовать, но так как оно приведено вместе с первым, то для начинающего не понятно что с этим делать - писать как в первом варианте или во втором? При том что первый вариант не имеет никакого отношения к реальному использованию Verilog http://rosettacode.org/wiki/Gray_code#Verilog
Вот это вообще не пример, просто ошметки конструкций написанный человеком не в теме (command? он что, думает что верилог - это скриптовый язык?) http://rosettacode.org/wiki/Conditional_structures#Verilog
C VHDL и SystemVerilog то же самое - люди не в теме взяли справочник по языку, выдернули из него понятное лично для них по аналогии с другими языками и написали нечто, что уводит от реального использования. Если увидите там хоть один реальноподобный пример, кроме модульной версии gray counter я привел выше - покажите, мне интересно что там еще можно нарыть. Половина примера из 10 случайно ткнутых.
*** Сводная подборка информации по проектам Софт процессоров ***
Анализировать код софт-процессора для новичка, который не знает что такое последовательностная логика, как она выражается в верилоге (always @ (posedge clock)) и во что превращается (D-триггеры) так же бесполезно, как анализировать код Си-компилятора, даже простого типа LCC или PCC - человеку, который не знает что такое указатель, стек, дерево выражения или парсирование. И не умеет писать на Си.
Более того, софт-процессор софт-процессору рознь.
Прежде всего, софт-процессор используется в двух контекстах:
Чтобы противопоставить процессор реализованный в FPGA, процессору, реализованному в ASIC, например стоящему рядом с FPGA ядру ARM в Zynq. Проблема в том, что и для первого и для второго процессоры пишутся на верилоге, то есть между ними нет приниципиальной разницы, только всякие мелочи типа использование специального макро DSP48 в Xilinx FPGA для оптимизации ALU.
В компаниях процессорного IP, например MIPS Technologies где я работал, одно и то же ядро (например MIPS 4K используемое в микроконтроллерах Microchip PIC32) могло продаваться и как soft core, и hardened core (то есть не с исходниками а в виде "черного ящика" инстанциируемого в системе на кристалле заказчика на этапе физического проектирования). Принципиальной разницы тут нет - это как продавать программу либо в исходниках на Си, либо в виде скопилированной библиотеки - .lib, .dll, .so.
Так вот возвращаясь к вашей табличке, софт-процессор софт-процессору рознь. На одних (schoolRISCV) который мы используем в курсе, можно понять идею процессора, потому что он очень маленький (300 строк на верилоге). Если же вы возмете например процессорное ядро с конвейером используемое в микроконтроллерах, или не дай бог ядро T1 выпущенное на волю Sun-ом, то там для новичка, который вообще не знает концепции конвейера - это просто темная масса кода в десятки тысяч строк (есть в тысячи и в сотни тысяч, но идея понятна)
*** Но, есть же к примеру проект и сообщество ПО FlProg
где даже в рамках логических элементов делают ПО под контроллеры Ардуино. (не видно, вроде, проектов где для контроллеров общего применения был бы применён VHDL, Verilog ...) ***
Я не разбирал, что это, похоже что-то очередное no-code программирование. Если это так, это не имеет вообще никакого отношения к вопросу. Программирование микроконтроллера - это написание программы, кода, который превращается в цепочку инструкций, которые процессор вытаскивает из памяти и изменяет по этому поводу свое состояние. Проектирование на верилоге на уровне регистровых передач - это в частности конструирование самого процессора.
Разница как между умением водить автомобиль (программирование) и умением проектировать его двигатель (проектирование на уровне регистровых передач).
Я нарисовал для этого вот такие поясняющие картинки:
![](https://habrastorage.org/getpro/habr/upload_files/cf7/89c/a45/cf789ca45ab68f46fe6fe079b4a3615a.png)
![](https://habrastorage.org/getpro/habr/upload_files/b73/4f7/88a/b734f788a8f535ef5efd89209e3364c7.png)
![](https://habrastorage.org/getpro/habr/upload_files/abc/f7e/f2b/abcf7ef2b48a6a9c97311778f05f3e16.png)
Ни дня без строчки верилога — учим язык решением большого количества простых задач