gpt4 book ai didi

verilog - 如何在 yosys 中简化复合赋值

转载 作者:行者123 更新时间:2023-12-02 03:20:27 34 4
gpt4 key购买 nike

我正在尝试让 yosys 将我的设计综合为结构 verilog 的工具,该工具不理解语法 {A, B} 来指定值的串联 AB

例如,当 yosys 生成如下语句时

assign C = {A,B};
assign {D,E} = F;

工具扼流圈。我想过使用 splitnets 传递来消除多位线,但多位端口仍然导致 yosys 生成 {} 语法。即使运行 splitnets -ports 也会留下一些任务,例如

assign {A, B} = {C, D}

通过额外运行 opt,我终于能够让这些分配消失。但这似乎是消除 {} 构造的一种非常困惑的方式。

有没有更好的方法来消除这种构造而不拆分所有输入端口?

最佳答案

没有普遍适用的方法来做到这一点。 {..} 运算符是 verilog 的一部分,因此 verilog 后端会在适当的时候使用它。

但是,在示例中,您给出的 verilog 输出中的所有单元都具有单位输入和输出,因此分配单元端口不需要 {..} 运算符,仅用于分配相互连接。

我使用以下脚本(在您的 rtl/ directory 中执行)作为基准:

read_verilog aes_128.v table.v round.v
hierarchy -top aes_128
proc; flatten; synth
# opt_clean -purge
write_verilog -noattr -noexpr out.v

这将生成一个 Verilog 文件,其中包含使用 {..} 运算符的以下分配:

$ grep '{' out.v
assign \a1.S4_0.in = { key[23:0], key[31:24] };
assign { \a1.k0a [31:25], \a1.k0a [23:0] } = { key[127:121], key[119:96] };
assign \a1.v0 = { key[127:121], \a1.k0a [24], key[119:96] };

但是,信号 a1.S4_0.ina1.k0aa1.v0 仅存在于设计中,因为 yosys尝试保留尽可能多的原始信号名称,以便更轻松地调试设计。

取消对 opt_clean -purge 命令的注释将使 yosys 删除这些信号,生成不使用 {..} 运算符的输出文件:

$ grep -c '{' out.v 
0

关于verilog - 如何在 yosys 中简化复合赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33940496/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com