适当的缩进,让您的RTL更加便于理解

随着功能复杂度的快速提升,对芯片的要求也是随着提高,所以现在一款芯片的开发,往往需要数十人,长达几个月的共同开发才能完成。


因为Verilog HDL的语法相对开放,所以每个人开发的Verilog HDL之间的差异也是非常的大。但是一个设计团队之间,进行RTL模块的交叉review、相互调用是非常频繁的事情,所以为了增强RTL代码的可移植性,以及review的效率,我们通常在一个项目开始的时候,会统一整理一个RTL编码规则,里面的内容包括,命名的规则、单词的缩略原则,一些标准电路的常用写法等等。往往这个编码规则会写的很具体,但是个人认为,这是非常有必要的。在前面的文章中,我们已经聊了一些,今天的文章,我就继续来聊一聊一般常见的规则。

适当的缩进,让您的RTL更加便于理解

RTL推荐编码规则

采用合适的缩进来保证RTL代码的层次,提升可读性。在之前的文章中,我介绍了一般情况下,需要缩进的地方有三处,并且详细介绍了第一类,即在同一个always块里面,适当的缩进可以表现出RTL的逻辑层次,便于分辨不同的RTL分支语句的逻辑关系。

在今天的文章中,我将继续介绍剩下的第二种情况:

  • 对于较长的逻辑代码,通过缩进进行续行;
  • 适当的缩进,让您的RTL更加便于理解


    对于较长的逻辑代码,通过缩进进行续行

    在RTL编写过程中,如果有非常复杂的逻辑表达式,那么写出来的代码就非常冗长,而我们编码的编辑器(一般Vi的使用比较广泛),一行可以显示的字节数是有限的,所以在这种情况下,就会出现在编译器里面,一行显示不完的情况。

    如果这个时候,我们对这段RTL代码,不进行认为分开、对齐的话,阅读起来就变得非常困难,变得困难的主要原因有两方面:

    1. RTL逻辑自己的复杂度较强;
    2. 显示器在显示的时候,客观上引入的阅读困难。

    我们还是通过一个例子来说明这种情况,例如:

    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);

    通过上面的变形,我们在阅读的时候,逻辑表达式的优先级比之前清晰了很多,很大程度的减少了阅读的复杂度。

    适当的缩进,让您的RTL更加便于理解


    小结

    对于特别复杂的逻辑表达式,我们一般通过两种方式,进行规避,第一种是,将逻辑表达式打散,分成多个小的逻辑表达式,第二种,就是通过换行,来增加可读性了。

    个人更加推荐第一种处理方法,第二种方法是迫不得已而为之了。

    对于今天的内容,欢迎大家来和我进行讨论了。

    展开阅读全文

    页面更新:2024-03-30

    标签:复杂度   优先级   可读性   表达式   语句   芯片   逻辑   例子   层次   合适   困难   规则   情况   代码   文章   科技

    1 2 3 4 5

    上滑加载更多 ↓
    推荐阅读:
    友情链接:
    更多:

    本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

    © CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
    闽公网安备35020302034903号

    Top