wire和reg的定义放哪?空格ORtab?问题虽小,意义很大
随着功能复杂度的快速提升,对芯片的要求也是随着提高,所以现在一款芯片的开发,往往需要数十人,长达几个月的共同开发才能完成。
因为Verilog HDL的语法相对开放,所以每个人开发的Verilog HDL之间的差异也是非常的大。但是一个设计团队之间,进行RTL模块的交叉review、相互调用是非常频繁的事情,所以为了增强RTL代码的可移植性,以及review的效率,我们通常在一个项目开始的时候,会统一整理一个RTL编码规则,里面的内容包括,命名的规则、单词的缩略原则,一些标准电路的常用写法等等。往往这个编码规则会写的很具体,在之前我已经写了一系列文章来详细探讨了编码规范,但是还是有朋友问我各种各样的问题,今天我就来回答一些比较常见的问题。
wire与reg定义的位置
wire和reg的变量定义位置,常见的一般有两种:放在input/output后面;随时使用,随时定义。
从Verilog语法规范的角度来讲,wire和reg的变量定义可以是非常灵活,所以以上两种在语法上面都是可以的,但是我们可以看到很多的编码规范文档基本上都要求使用第一种方式,也就是统一放在port端口定义之后,就有很多朋友问我,这是为什么?
第二种方式的好处是非常方便,我们需要这根信号的时候,再去定义它,并且查看信号的时候,不用每次都要翻到RTL的顶端去看,这根信号定义的性质,位宽等信息。但是这么做的最大问题在于,对于稍微复杂的模块而言, 随时使用,随时定义的方式将会产生前后混淆问题,并且我们在维护代码的时候,这种方式,将人为的带来复杂度的提升。
所以个人也是建议,wire和REG的定义放在module的IO定义之后。
如果有的朋友已经习惯了第二种方式,那么请记得在module写完之后,要将定义的wire/reg移动到module的IO定义之后,可以通过手动方式,也可以写一个脚本,达成这样的目的。
空格和tab到底用哪个
这个问题,不仅仅是对Verilog,对所有编程的朋友来讲,都是一个问题。
一般的编程语言,在代码中表示层叠关系时,都会纠结在使用空格还是用tab,关于选哪个的问题,早就已经是众说纷纭。
支持使用tab的朋友的理由,主要是快捷,因为一个tab键相当于4个空格,这样效率自然是要高很多。
但是个人还是支持使用空格来表示层叠关系,主要是因为空格的使用范围更加广泛,在各个编辑器下都可以无差别显示。
所以一般情况之下,在一个项目组内我们都会强制大家统一使用空格来进行缩进,也是为了方便代码的维护。
小结
今天和大家聊的这两个问题,看着是很小的问题,但是确实是很多新朋友刚开始最不理解的问题,不管怎样,芯片行业是多人合作的行业,既然大家在一个团队,就要遵守团队的规范,这样不管是对团队,还是对个人来讲,都是好事情,团队的效率更高了,个人完成的工作也更加容易得到团队成员的认可,是双方受益的结果了。