原创 代码风格很重要

2015-1-30 15:36 877 8 8 分类: FPGA/CPLD

      看了某大神的博客有感,代码风格很重要,下面转载大神总结的几条verilog代码风格,非常实用。

变量与参数命名
1.不用语言的关键词命名变量与参数
这是废话,就是我同意您老这么**,编译也不会教您好受的。
2.命名尽量体现信号的特点
很多人不喜欢长的名字,不是到是键盘输入不好还是懒。贫僧建议还是长点的名字更利于以后的阅读。例如,一个同步信号名字叫“syn”看起来简单呢,还是“synchronization_1sec”看起来容易理解?
3.常数,尤其是状态机的状态面,用宏表示
代码里面的常数,在后期阅读中绝对是埋下的**,需要专门的注释或者处理。在做状态机的时候的状态名称是自己规定的,这时候宏就是一个很好的机制。“if state == STATE_IDLE”远比“state= = 4’b0000”容易理解。
4.所有定义必须有说明
这些说明内容需要尽可能详细,尤其是位宽、速度这些信息一定要有,以方便以后重用。我们前面各讲都说了,系统内部参数的位宽,会影响结构的设计。很多程序员为了以后的重用,又喜欢吧位宽定义为参数。这样问题来了,原来8比特的代码,到了128比特能重用的可能性有多少呢?所以,一定要好好说明,防止被误用。
5.宏、参数和变量等通过名称里面的大小写区别,并且严格执行
这是防止例如给宏赋值之类的错误,也方便代码的阅读。

代码与注释
1.模块开头必须加详细说明,介绍输入、输出、功能以及参考文件
2.注释必须有一定的比例
很多人不重视写注释,认为不是有效代码,敲起来还老长。实际上,很大程度上,注释就是你为以后自己阅读代码留下的指路标记,用来防止后面你自己都不认识自己的代码了。
3.首格缩进一定要对齐
这也是为了方便阅读,首格缩进不一致很容易造成阅读困难。
4.一个always模块里面只操作一个寄存器
以前强调过,我们设计是“看图说话”,所以这个要求不难达到。那些说“臣妾做不到”的,肯定是不自信、心急的,不画图就写代码了。这个风格实在是问题多多。
5.“if”语句层次不能太多
“if”就是比较器,多层的“if”就是串联的比较器,这或造成组合逻辑在时间上的灾难。
6.分层设计,每个模块的功能必须单一
自顶向下,分层设计是被实践证明最有效的工程流程,需要遵守。

调试与纪录
1.在修改程序时,不要直接修改原来部分,最好注释掉原来语句,在重写修改部分
一般规律,改错比改正容易。所以保留原来的部分,实在不成还能恢复,否则可能是欲哭无泪。
2.认真纪录模块注释的“历史”部分
列宁说:“忘记历史就意味着背叛”,贫僧曰:“纪录历史,防止二过”。
3.如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数
一次修改多处,出了问题都不知道到底是哪里的问题了。

设计风格
1.严格采用同步设计,异步部分必须隔离。所有模块中触发一致
2.所有寄存器的输出信号都能被复位/置位;
3.遵守先写后读,否则要清醒地剔除掉无效数据
4.每个模块寄存器入寄存器出
5.相信综合工具,bug绝对是自己搞的,别瞎怀疑
6.嵌入式存储器中使用BIST
7.如果时间充裕,通过时钟做一个多锁存器来取代用MUX
8.芯片内部无需“三态”
9.一定要做时序仿真
10.一个计算式中,排列每个信号的位数
11.不要使用语言里面的复杂逻辑。例如:乘法器和触发器

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条