crazybird

【原创】数据位宽的定义原来还可以这么表示的

0
阅读(3989)

    在Verilog HDL中,定义一个(MSB-LSB+1)位的变量或端口a格式如下所示:

reg   [MSB:LSB]     a;或者wire   [MSB:LSB]   a;或者input/inout/output   [MSB:LSB]   a;

    其中,我们见得最多和用得最多的是MSB和LSB都是正整数。前段时间,不小心看到MSB和LSB可以用负数表示,于是用Verilog HDL写了个功能模块验证了一下,发现确实可以。举个例子,定义一个8位的无符号数,其中4位整数、4位小数,如下所示:

reg    [7:0]    cnt;      //4位整数、4位小数

等价于      

reg    [3:-4]    cnt;

    这倒好了,有了这种写法后,当进行定点运算时,再也不用定义了一个变量后还要添加多少位整数、多少位小数的注释了。正数和0表示整数,负数表示小数,一看就知道多少位整数、多少位小数,很方便。再也不会因为这次忘了注释,下次翻看时忘记了多少位整数、多少位小数了。