【问题标题】:Addition/Substraction Optimization in YosysYosys 中的加法/减法优化
【发布时间】:2020-12-22 17:22:47
【问题描述】:

我有以下非常简单的 verilog 模块,它根据输入操作执行 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 认识到只需要一个 $alu,其中 CI 和 BI 输入连接到 op。因此,我尝试了 share 命令(在上面的脚本中注释掉了),并且确实将两个 $alus 合并为一个,但是现在我在输入 a 和 b see here 处得到了一个奇怪的(冗余)多路复用器结构。

我的问题是我做错了什么,是否有特殊的通行证可以摆脱这些多路复用器,还是我完全走错了路?

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

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

【问题讨论】:

    标签: synthesis yosys


    【解决方案1】:

    您要查找的通行证是 opt_share,但它可能比 0.9 版本更新,在这种情况下,您需要 git master 的 Yosys。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多