如何使参数化的位宽更清晰?

时间:2014-04-03 07:18:42

标签: verilog

我经常声明这样的位宽:

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的生活事实吗?有没有办法让它更清洁,更少重复?

2 个答案:

答案 0 :(得分:3)

不幸的是,你不可能完全摆脱-1,除非你想改变FOO_BITS0的索引的含义,两者都不是建议 - 它们会违反惯例,并且会让其他人更难理解您的代码。您可以删除多余的括号,并使该行难以解析。

另一种整理方法是使用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的定义。