随着功能复杂度的快速提升,对芯片的要求也是随着提高,所以现在一款芯片的开发,往往需要数十人,长达几个月的共同开发才能完成。
因为Verilog HDL的语法相对开放,所以每个人开发的Verilog HDL之间的差异也是非常的大。但是一个设计团队之间,进行RTL模块的交叉review、相互调用是非常频繁的事情,所以为了增强RTL代码的可移植性,以及review的效率,我们通常在一个项目开始的时候,会统一整理一个RTL编码规则,里面的内容包括,命名的规则、单词的缩略原则,一些标准电路的常用写法等等。往往这个编码规则会写的很具体,但是个人认为,这是非常有必要的。在前面的四篇文章中,我们已经聊了一些,今天的文章,我就继续来聊一聊一般常见的规则。
RTL推荐编码规则数字参数化的使用。在RTL编码过程中,我们一般常常使用到很多数字,但是我建议减少数字的直接使用,多使用参数,参数的命名可以在一定程度上代表数字的含义,这样不论是代码维护升级还是别人阅读代码,都比直接看数字要方便的多。但是也有例外,一般我们在寄存器初始化时候,经常使用到的0或者1,就可以直接使用数字,不过在使用时,最好能够带上变量的位宽,比如说我们定义了一个4比特的REG a,使用a <= 4'h0的写法要优于a <= 0,后一种因为没有定义位宽,所以在仿真或者综合过程中,会报出位宽不匹配的warning。而且在逻辑计算过程中,等式左边变量的位宽是随着计算不断变化的,它的位宽和计算公式中变量的位宽有直接的关系,这种情况下,我建议左边变量的位宽,可以使用右边计算公式中变量的参数计算来得到。比如说,a[WIDTH_A-1:0], b[WIDTH_B-1:0], c=a*b,则c的比特宽度就可以直接借助a/b定义位宽时候使用的参数WIDTH_A和WIDTH_B,直接使用[WIDTH_A+WIDTH_B-1:0]来表示,这样在维护RTL过程中,如果a、b的位宽发生了变化,c的信号定义部分基本就不用做任何变化,它能够跟随a/b一块变化,这就是参数化带来的一个好处。
但是在参数化的过程中,有一个问题,需要朋友们注意,就是使用参数进行计算的公式不宜太长。如果公式太长,在后面debug或者阅读RTL的过程中,如果你想去确认现在的位宽是否合适,就要花费非常多的精力。那么这个长度究竟多少合适,个人建议,最多不超过4个参数的连加,类似于[WIDTH_A+WIDTH_B+WIDTH_C+WIDTH_D-1:0]。
小结今天的文章讲了一个非常实用的编码规则,数字参数化,相信使用过的朋友对它的好处是深有体会的。如果您对内容有什么建议或者疑问,欢迎和我进行讨论。