Verilog 当模块为BLIF时,如何使多位端口在Yosys中工作?

Verilog 当模块为BLIF时,如何使多位端口在Yosys中工作?,verilog,yosys,Verilog,Yosys,我不知道如何在Yosys中单独合成模块。考虑这个简单的两个模块例子: bottom.v 模块底部(x,向外); 输入[0:7]x; 输出[0:7]输出; 分配出=x+1; 端模 top.v 模块顶部(x,向外); 输入[0:7]x; 输出[0:7]输出; 底部b(.x(x),.out(out)); 端模 现在,将这些因素综合在一起可以达到预期效果: $ yosys -q -o top.blif -S top.v bottom.v $ 但是如果我首先从bottom.v合成bottom.bli

我不知道如何在Yosys中单独合成模块。考虑这个简单的两个模块例子:

bottom.v

模块底部(x,向外);
输入[0:7]x;
输出[0:7]输出;
分配出=x+1;
端模
top.v

模块顶部(x,向外);
输入[0:7]x;
输出[0:7]输出;
底部b(.x(x),.out(out));
端模
现在,将这些因素综合在一起可以达到预期效果:

$ yosys -q -o top.blif -S top.v bottom.v
$
但是如果我首先从bottom.v合成bottom.blif,我会收到一条错误消息,说模块底部没有端口:


为什么会发生这种情况?通过谷歌搜索问题,我发现在我不完全理解的上下文中引用了hierarchy命令。我在synth之前尝试过运行该命令,但它不会影响结果。

BLIF文件格式不支持多位端口。这与Yosys无关,只是文件格式的限制。因此,当将具有多位端口的设计写入BLIF文件时,所有端口将自动拆分为单位端口。因此在BLIF文件中没有8位宽端口
out
,有8个单位端口
out[7]
out[6]
out[5]
out[4]
out[3]
out[2]
out[1]
,以及
out[0]

因此,当您尝试像前面所述混合Verilog和BLIF文件时,
bottom
模块与
top.b
单元的接口不再匹配


编辑:我现在在git commit中添加了
read_blif-wideports
。这允许您在将BLIF文件读回Yosys时再次合并单个单位端口。通过这种方式,您可以使用BLIF作为Yosys和ABC之间的交换格式,而不会中断具有多位端口的模块接口

$ yosys -q -o bottom.blif -S bottom.v
$ yosys -q -o top.blif -S top.v bottom.blif
ERROR: Module `bottom' referenced in module `top' in cell `b' does not have a port named 'out'.
$