单行单语句,RTL编码的一点小技巧,很实用
随着功能复杂度的快速提升,对芯片的要求也是随着提高,所以现在一款芯片的开发,往往需要数十人,长达几个月的共同开发才能完成。
因为Verilog HDL的语法相对开放,所以每个人开发的Verilog HDL之间的差异也是非常的大。但是一个设计团队之间,进行RTL模块的交叉review、相互调用是非常频繁的事情,所以为了增强RTL代码的可移植性,以及review的效率,我们通常在一个项目开始的时候,会统一整理一个RTL编码规则,里面的内容包括,命名的规则、单词的缩略原则,一些标准电路的常用写法等等。往往这个编码规则会写的很具体,但是个人认为,这是非常有必要的。在前面的五篇文章中,我们已经聊了一些,今天的文章,我就继续来聊一聊一般常见的规则。
RTL推荐编码规则
每一个独立行,只写一行有效代码。个人看来,这条规则十分重要,有的朋友可能认为,这样会增加很多代码行数,使得文件冗长,但是有一个原则是"只要代码便于阅读,那么即使行数多一些,总体看来,阅读效率还是要高的"。所以毫无疑问,我坚持这条原则的原因主要有以下两个:语句独立成行,增加了RTL的阅读性;语句独立成行,增加了RTL的可维护性;
而在我看来,RTL的可阅读性和可维护性的优先级是非常高的。
我们还是通过例子来说明这一个观点。
程序段一:
reg[1:0] a;
always@(posedge clk or negedge rst_n)
begin if(!rst_n) a <= 2"d0 ;else a <= 2"d1 ; end
程序段二:
reg[1:0] a;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
a <= 2"d0 ;
else
a <= 2"d1 ;
end
从上面这两段程序中,我们可以清楚的看出两者的差异。
程序段一,将所有的语句都锁到一行,这样貌似节省了RTL代码行数,但是阅读起来,很不畅快。因为这个例子相对功能简单,所以对功能理解的影响还算比较小,如果说功能再复杂一点,当阅读RTL的工作人员,读到这段RTL的时候,相信感觉是十分糟糕的。
相反,程序段二中,我们可以清楚的看到每条语句的条件,以及赋值过程,适当的缩进,可以很好的表现出程序的逻辑层次(python就是通过缩进来体现代码的逻辑层次),读起来就会清晰很多了。这样做唯一的缺点就是,增加了RTL代码的逻辑行数,现在已经不是很早之前,存储设备很宝贵的年代,所以这点消耗,应该不是问题了。
小结
今天的这条编码规则,看似很小,但是确实很实用,当我们在工作中去阅读大量的RTL时候,就是这一个小点,可能就能在很大程度上,提升我们的阅读效率,所以还是希望朋友们能够重视了。