问题描述
我有以下非常简单的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。