没有普遍适用的方法可以做到这一点。运算符是verilog的{..}
一部分,因此verilog 后端在适当的时候使用它。
但是,在示例中,您给 verilog 输出中的所有单元格都提供了一位输入和输出,因此{..}
分配单元格端口时不需要操作符,仅用于相互分配线路。
我使用以下脚本(在您的rtl/ 目录中执行)作为基线:
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