Примитивы в Йосисе
Я использую YOSYS для преобразования Verilog в BLIF. Вход - это схема (L_0_0), которая содержит только не, и / или примитивы, и некоторый код поведенческой блокировки.
Команды, которые я использую:
> read_verilog <file>
> proc; opt; memory; opt; techmap; opt;
> write_blif <file>
Выходной файл содержит $_DFF_PN0_ в виде.subckt без.model, поэтому, когда я вношу этот файл в MVSIS, он игнорирует все подстроки.
Как я могу сопоставить эту подсеть с другими инструментами?
.model L_0_0
.inputs clk rst ce ins
.outputs outs
.names $false
.names $true
1
.names $undef
.names outs r_out_1_0 ce $0\outs[0:0]
1-0 1
-11 1
.names r_out_2_0 w_out_2_0 ce $0\r_out_2_0[0:0]
1-0 1
-11 1
.names r_out_1_0 w_out_1_0 ce $0\r_out_1_0[0:0]
1-0 1
-11 1
.names r_out_0_0 w_out_0_0 ce $0\r_out_0_0[0:0]
1-0 1
-11 1
.subckt $_DFF_PN0_ C=clk D=$0\outs[0:0] Q=outs R=rst
.subckt $_DFF_PN0_ C=clk D=$0\r_out_0_0[0:0] Q=r_out_0_0 R=rst
.subckt $_DFF_PN0_ C=clk D=$0\r_out_1_0[0:0] Q=r_out_1_0 R=rst
.subckt $_DFF_PN0_ C=clk D=$0\r_out_2_0[0:0] Q=r_out_2_0 R=rst
.names r_out_0_0 r_out_1_0 w_out_0_0
1- 1
-1 1
.names r_out_2_0 r_out_2_0 w_out_1_0
1- 1
-1 1
.names r_out_0_0 ins w_out_2_0
1- 1
-1 1
.names r_out_0_0 w_in_0_0
1 1
.names r_out_1_0 w_in_0_1
1 1
.names r_out_2_0 w_in_1_0
1 1
.names r_out_2_0 w_in_1_1
1 1
.names r_out_0_0 w_in_2_0
1 1
.names ins w_in_2_1
1 1
.end
Новый выход с синхронизацией сброса ниже. Все выходные порты Verilog подключены, и кажется, что они также подключены в BLIF.
# Generated by Yosys 0.7 (git sha1 61f6811, i686-w64-mingw32.static-gcc 4.9.3 -Os)
.model L_0_0
.inputs clk rst ins
.outputs outs
.names $false
.names $true
1
.names $undef
.names r_out_0_0 $false rst $0\outs[0:0]
1-0 1
-11 1
.names w_out_1_0 $false rst $0\r_out_1_0[0:0]
1-0 1
-11 1
.names w_out_0_0 $false rst $0\r_out_0_0[0:0]
1-0 1
-11 1
.latch $0\outs[0:0] outs re clk 2
.latch $0\r_out_0_0[0:0] r_out_0_0 re clk 2
.latch $0\r_out_1_0[0:0] r_out_1_0 re clk 2
.names r_out_0_0 r_out_1_0 w_out_0_0
11 1
.names ins r_out_1_0 w_out_1_0
1- 1
-1 1
.names r_out_0_0 w_in_0_0
1 1
.names r_out_1_0 w_in_0_1
1 1
.names ins w_in_1_0
1 1
.names r_out_1_0 w_in_1_1
1 1
.end
1 ответ
Формат файла BLIF не поддерживает элементы хранения с асинхронной перезагрузкой. К сожалению, вы не публикуете код Verilog, который вы использовали в качестве входных данных, но из того, что вы опубликовали, очевидно, что ваш Verilog действительно содержит такие элементы хранения. ($_DFF_PN0_
является внутренним типом ячейки Yosys, используемым для представления триггера с положительным фронтом с асинхронным сбросом в ноль с отрицательной полярностью. Yosys просто выводит эту ячейку такой, какая она есть, поскольку в BLIF для нее нет эквивалентной конструкции.)
Если вы хотите использовать вывод BLIF, вам следует избегать использования асинхронного сброса в вашем проекте. Здесь Yosys ничего не может сделать, потому что это ограничение формата файла BLIF.
Если вы не хотите изменять код HDL, но можете преобразовать асинхронный сброс в синхронный сброс, то вы можете просто запустить techmap -map +/adff2dff.v
после запуска proc
,