随着功能复杂度的快速提升,对芯片的要求也是随着提高,所以现在一款芯片的开发,往往需要数十人,长达几个月的共同开发才能完成。
因为Verilog HDL的语法相对开放,所以每个人开发的Verilog HDL之间的差异也是非常的大。但是一个设计团队之间,进行RTL模块的交叉review、相互调用是非常频繁的事情,所以为了增强RTL代码的可移植性,以及review的效率,我们通常在一个项目开始的时候,会统一整理一个RTL编码规则,里面的内容包括,命名的规则、单词的缩略原则,一些标准电路的常用写法等等。往往这个编码规则会写的很具体,但是个人认为,这是非常有必要的。在前面的文章中,我们已经聊了一些,今天的文章,我就继续来聊一聊一般常见的规则。
采用合适的缩进来保证RTL代码的层次,提升可读性。在之前的文章中,我介绍了一般情况下,需要缩进的地方有三处,并且详细介绍了第一类,即在同一个always块里面,适当的缩进可以表现出RTL的逻辑层次,便于分辨不同的RTL分支语句的逻辑关系。
在今天的文章中,我将继续介绍剩下的第二种情况:
在RTL编写过程中,如果有非常复杂的逻辑表达式,那么写出来的代码就非常冗长,而我们编码的编辑器(一般Vi的使用比较广泛),一行可以显示的字节数是有限的,所以在这种情况下,就会出现在编译器里面,一行显示不完的情况。
如果这个时候,我们对这段RTL代码,不进行认为分开、对齐的话,阅读起来就变得非常困难,变得困难的主要原因有两方面:
我们还是通过一个例子来说明这种情况,例如:
input cond_a;
input cond_b;
input cond_c;
input cond_d;
output out;
assign out = (~cond_a) ^ cond_b | cond_c & cond_d &(~cond_b) | (~cond_c) & (cond_d | cond_a | cond_b) ^ (~cond_d | cond_c | cond_b);
上面这个例子是用来说明情况,请不要关注整条语句的合理性。
类似于上面的一条逻辑赋值语句,看起来是非常困难的,这个换行动作,无疑加重了阅读的复杂度。
在这种情况下,我们可以试着通过合适的换行动作,使得这条语句简单一些。例如,在编写这条代码时候,我们可以根据逻辑关系,将同一个优先级的表达式放在同一行,如果优先级不同,可以放到不同的行里面,我们试着改写一下这条语句。
assign out = (~cond_a) ^ cond_b
| cond_c & cond_d &(~cond_b)
| (~cond_c) & (cond_d | cond_a | cond_b)
| (~cond_d | cond_c | cond_b);
通过上面的变形,我们在阅读的时候,逻辑表达式的优先级比之前清晰了很多,很大程度的减少了阅读的复杂度。
对于特别复杂的逻辑表达式,我们一般通过两种方式,进行规避,第一种是,将逻辑表达式打散,分成多个小的逻辑表达式,第二种,就是通过换行,来增加可读性了。
个人更加推荐第一种处理方法,第二种方法是迫不得已而为之了。
对于今天的内容,欢迎大家来和我进行讨论了。
页面更新:2024-03-30
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号