Yosys Open SYnthesis Suite

yosys

Понадобилось мне средство создания схемы из 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 вот так:

quartus 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 и из его командной строки набрать последовательно эти команды, чтобы получить первый результат:

yosys cmd

Сразу запускается Graphviz и отображает схему, соответствующую моему проекту:

yosys show

Схема выглядит не очень "как схема", но при внимательном рассмотрении оказывается полным эквивалентом схемы, которую создал Quartus RTL Viewer. на обеих схемах есть регистр, сумматор, сравниватель и три мультиплексора.

Если нужно проследить судьбу каждого сигнала, каждого логического элемента и каждого регистра, то нужно еще выполнить команды techmap, opt и тогда show покажет совсем другую схему, более сложную и более детальную:

yosys techmap show

Тут уже можно все в подробности рассмотреть. Здесь уже не будет "сумматора" или "сравнивателя", останутся только AND, XOR, OR, MUX и регистры. Вообще дальнейшая детализация уже будет зависит от конкретной реализации библиотечных элементов, куда должна быть отображена схема. Для этого детального map нужны библиотеки конкретной микросхемы ASIC или FPGA ну и для этого специфического map есть специальные команды dfflibmap и abc.

Библиотеки для Xilinx-7 и iCE40 включены в состав пакета Yosys. Думаю это результат реверс инжениренга, хотя, может Xilinx и Lattice предоставили автору подробную информацию о внутреннем устройстве своих ПЛИС? Вот для Intel FPGA - библиотек к сожалению нет.. Тем не менее, Yosys показался мне довольно интересным инструментом.

 

Добавить комментарий