Yosys中的加减法优化

问题描述

我有以下非常简单的verilog模块,根据输入op来执行a + b或a-b。

module addsub (a,b,op,r);
    parameter DATA_WIDTH = 4;
    input [DATA_WIDTH-1:0] a,b;
    input op;
    output [DATA_WIDTH-1:0] r;
    
    assign r = op ? a-b : a+b;
endmodule

现在,当我使用yosys(下面的脚本,版本0.9)合成此代码时,我得到两个$ alu模块,均由输入a和b馈送,其中一个具有CI和BI输入。输出r是使用多路复用器生成的。

read_verilog addsub.v
synth -flatten -run begin:fine
#share -aggressive; opt
show

但是,我想让yosys认识到,CI和BI输入连接到op时只需要一个$ alu。因此,我尝试了share命令(在上面的脚本中添加了注释),并且确实将两个$ alus合并为一个,但是现在我在输入a和b see here处得到了一个奇怪的(冗余)多路复用器结构。 / p>

我的问题是我在做错什么,是否有特殊的方法可以摆脱这些多路复用器,或者我在这里完全走错了路?

David Shah建议的解决方案: 我安装的yosys版本没有opt_share命令。因此,我编译了当前版本(0.9 + 3558),现在以下综合脚本可以按预期工作:

read_verilog addsub.v
synth -flatten -run begin:fine
share -aggressive; opt
opt_share; opt
show

解决方法

您要查找的通行证是 $.mobile.changePage("otherPage.html"); $("#div_in_otherPage").html("Hello"); ,但它可能比0.9版本要新,在这种情况下,您将需要git master的Yosys。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...