我经常声明这样的位宽:
parameter FOO_BITS=4;
reg [(FOO_BITS-1):0] foo_1;
reg [(FOO_BITS-1):0] foo_2;
也就是说,我为宽度声明了一个参数,然后我声明了一个宽度为参数减去一个的数据类型。
- 1 语法对我来说非常令人瞩目。我只能说FOO_BITS=3
,但4
更容易将参数的意图传达给读者:foo数据类型的宽度应为4位。
这只是Verilog的生活事实吗?有没有办法让它更清洁,更少重复?
答案 0 :(得分:3)
不幸的是,你不可能完全摆脱-1
,除非你想改变FOO_BITS
或0
的索引的含义,两者都不是建议 - 它们会违反惯例,并且会让其他人更难理解您的代码。您可以删除多余的括号,并使该行难以解析。
另一种整理方法是使用typedef:
parameter FOO_BITS = 32;
typedef logic [FOO_BITS-1:0] word_t;
word_t foo_1;
word_t foo_2;
我发现这在使用多维数组时也使代码更具可读性:
word_t foo_3;
word_t [N_WORDS-1:0] foo_array;
答案 1 :(得分:1)
我想不出一种摆脱-1的方法,但就像任何其他重复的构造一样,你可以将它隐藏在宏后面:
`define RANGE(_WIDTH_) _WIDTH_-1:0
现在您可以将数组定义为:
reg [`RANGE(FOO_BITS)] foo_1;
不确定这是不是一个眼睛,但它需要读者参考RANGE的定义。