如何在 yosys 中简化复合赋值
How to simplify compound assignments in yosys
我正在尝试让 yosys 将我的设计综合为结构 verilog 的工具,该工具不理解语法 {A, B}
来指定值 A
和 B
的串联.
因此,例如当 yosys 生成类似
的语句时
assign C = {A,B};
assign {D,E} = F;
工具卡住了。我想过使用 splitnets
传递来消除多位线,但多位端口仍然导致 yosys 生成 {}
语法。即使 运行ning 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.in
、a1.k0a
和 a1.v0
仅出现在设计中,因为 yosys 试图保留尽可能多的原始信号名称,以使更容易调试设计。
取消对 opt_clean -purge
命令的注释将使 yosys 删除这些信号,生成不使用 {..}
运算符的输出文件:
$ grep -c '{' out.v
0
我正在尝试让 yosys 将我的设计综合为结构 verilog 的工具,该工具不理解语法 {A, B}
来指定值 A
和 B
的串联.
因此,例如当 yosys 生成类似
的语句时assign C = {A,B};
assign {D,E} = F;
工具卡住了。我想过使用 splitnets
传递来消除多位线,但多位端口仍然导致 yosys 生成 {}
语法。即使 运行ning 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.in
、a1.k0a
和 a1.v0
仅出现在设计中,因为 yosys 试图保留尽可能多的原始信号名称,以使更容易调试设计。
取消对 opt_clean -purge
命令的注释将使 yosys 删除这些信号,生成不使用 {..}
运算符的输出文件:
$ grep -c '{' out.v
0