Yosys 中的原语

Primitives in Yosys

我正在使用 YOSYS 将 Verilog 转换为 BLIF。输入是一个电路 (L_0_0),它只包含 not、and、or 原语和一些行为锁存代码。

Here is my Verilog code

我使用的命令是:

> read_verilog <file>
> proc; opt; memory; opt; techmap; opt;
> write_blif <file>

输出文件包含 $_DFF_PN0_ 作为没有 .model 的 .subckt,因此当我将此文件输入到 MVSIS 时,它会忽略所有 subckts。

如何将此子电路映射到其他工具已知的部分?

.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 [=11=]\outs[0:0]
1-0 1
-11 1
.names r_out_2_0 w_out_2_0 ce [=11=]\r_out_2_0[0:0]
1-0 1
-11 1
.names r_out_1_0 w_out_1_0 ce [=11=]\r_out_1_0[0:0]
1-0 1
-11 1
.names r_out_0_0 w_out_0_0 ce [=11=]\r_out_0_0[0:0]
1-0 1
-11 1
.subckt $_DFF_PN0_ C=clk D=[=11=]\outs[0:0] Q=outs R=rst
.subckt $_DFF_PN0_ C=clk D=[=11=]\r_out_0_0[0:0] Q=r_out_0_0 R=rst
.subckt $_DFF_PN0_ C=clk D=[=11=]\r_out_1_0[0:0] Q=r_out_1_0 R=rst
.subckt $_DFF_PN0_ C=clk D=[=11=]\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 [=12=]\outs[0:0]
1-0 1
-11 1
.names w_out_1_0 $false rst [=12=]\r_out_1_0[0:0]
1-0 1
-11 1
.names w_out_0_0 $false rst [=12=]\r_out_0_0[0:0]
1-0 1
-11 1
.latch [=12=]\outs[0:0] outs re clk 2
.latch [=12=]\r_out_0_0[0:0] r_out_0_0 re clk 2
.latch [=12=]\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

BLIF 文件格式不支持具有异步重置的存储元素。不幸的是,您没有 post 您用作输入的 Verilog 代码,但从您所 post 编辑的内容来看,很明显您的 Verilog 确实包含此类存储元素。 ($_DFF_PN0_ 是一种 Yosys 内部单元类型,用于表示具有负极性异步复位为零的正边沿触发器。Yosys 仅按原样输出该单元,因为 BLIF 中没有对应的等效结构.)

如果您想使用 BLIF 输出,则必须避免在设计中使用异步复位。 Yosys 对此无能为力,因为这是 BLIF 文件格式的限制。

如果您不想更改 HDL 代码,但可以将异步复位转换为同步复位,那么您可以在 运行ning 运行 techmap -map +/adff2dff.v proc.