Понадобилось мне средство создания схемы из Verilog файла. Самый понятный способ для меня - это использования самого Intel Quartus. В среде квартуса после компиляции проекта, а именно, после анализа и синтеза проекта, можно посмотреть результирующую схему устройства.
Делается так:
1) Меню Processing => Start => Start Analysis & Synthesis
2) Меню Tools => Netlist Viewers => RTL Viewers
Например, рассмотрю вот такой топ модуль Verilog (десятичный счетчик с синхронным сбросом и и сигналом разрешения счета):
module cnt(
input wire clk,
input wire rst,
input wire ena,
output reg [3:0]q
);
always @(posedge clk)
if(rst)
q <= 0;
else
if( ena )
begin
if( q==9 )
q <= 0;
else
q <= q+1;
end
endmodule
Квартус после синтеза покажет его в RTL Viewer вот так:
Все это очень хорошо, но мне хотелось найти средство попроще, желательно opensource и чтобы можно было бы запускать из скрипта. Самый подходящий вариант, который я нашел - это Yosis - Yosys Open SYnthesis Suite. Далее расскажу, что я знаю про него.
Инструмент Yosys довольно прост, но работает.
Страница проекта: http://www.clifford.at/yosys/
Его исходники можно взять на github: https://github.com/YosysHQ/yosys
Его просто собрать, он написан на c++.
Yosys позволяет обрабатывать и синтезировать проекты на Verilog-2005, а так же преобразовывать Verilog файлы в файлы BLIF (Berkeley Logic Interchange Format) / EDIF (Electronic Design Interchange Format) и другие форматы. Yosys позволяет представлять проект (Mapping) в базовых библиотечных элементах (через библиотеки Liberty File Format). В частности, Yosys имеет библиотеки для FPGA Xilinx 7-Series и Lattice iCE40. Yosys может быть использован как отправная точка для новых разработок для будущих ПЛИС, ASIC, OpenFPGA.
Попробую получить схему того же самого счетчика, описанного выше на Verilog, но с помощью yosys.
Потребуется знание всего нескольких команд, хотя команд в Yosys Suit довольно много - читайте документацию.
Рассмотрим только некоторые команды:
- read_verilog - читает verilog файла;
- hierarchy - составляет иерархию verilog файла или проекта;
- proc - обрабатывает always блоки;
- opt - проводит оптимизацию, если возможна;
- techmap - позволяет выполнить отображение каждого элемента схемы;
- show - отобразить схему устройства в графическом виде. Создается dot файл и отображается с помощью Graphviz.
Достаточно запустить yosys и из его командной строки набрать последовательно эти команды, чтобы получить первый результат:
Сразу запускается Graphviz и отображает схему, соответствующую моему проекту:
Схема выглядит не очень "как схема", но при внимательном рассмотрении оказывается полным эквивалентом схемы, которую создал Quartus RTL Viewer. на обеих схемах есть регистр, сумматор, сравниватель и три мультиплексора.
Если нужно проследить судьбу каждого сигнала, каждого логического элемента и каждого регистра, то нужно еще выполнить команды techmap, opt и тогда show покажет совсем другую схему, более сложную и более детальную:
Тут уже можно все в подробности рассмотреть. Здесь уже не будет "сумматора" или "сравнивателя", останутся только AND, XOR, OR, MUX и регистры. Вообще дальнейшая детализация уже будет зависит от конкретной реализации библиотечных элементов, куда должна быть отображена схема. Для этого детального map нужны библиотеки конкретной микросхемы ASIC или FPGA ну и для этого специфического map есть специальные команды dfflibmap и abc.
Библиотеки для Xilinx-7 и iCE40 включены в состав пакета Yosys. Думаю это результат реверс инжениренга, хотя, может Xilinx и Lattice предоставили автору подробную информацию о внутреннем устройстве своих ПЛИС? Вот для Intel FPGA - библиотек к сожалению нет.. Тем не менее, Yosys показался мне довольно интересным инструментом.
Подробнее...