良好代码编写风格可以满足信、达、雅的要求。在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。良好代码编写风格的通则概括如下:
(1) 对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;
(2) 使用有意义的信号名、端口名、函数名和参数名;
(3) 信号名长度不要太长;
(4) 对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀;
(5) 对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;
(6) 对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。注意在同一个设计中要使用同一个小写字母表示低电平有效;
(7) 对于复位信号使用rst 作为信号名,如果复位信号是低电平有效,建议使用rst_n;
(8) 当描述多比特总线时,使用一致的定义顺序,对于verilog 建议采用bus_signal[x:0]的表示;
(9) 尽量遵循业界已经习惯的一些约定。如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等;
(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;
(11)使用适当的注释来解释所有的always 进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;
(12)每一行语句独立成行。尽管VHDL 和Verilog 都允许一行可以写多个语句,当时每个语句独立成行可以增加可读性和可维护性。同时保持每行小于或等于72 个字符,这样做都是为了提高代码得可读性;
(13)建议采用缩进提高续行和嵌套语句得可读性。缩进一般采用两个空格,如西安交通大学SOC 设计中心2 如果空格太多则在深层嵌套时限制行长。同时缩进避免使用TAB 键,这样可以避免不同机器TAB 键得设置不同限制代码得可移植能力;
(14)在RTL 源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取Verilog 和VHDL 语言的关键字;
(15)在进行模块的端口申明时,每行只申明一个端口,并建议采用以下顺序:
输入信号的clk、rst、enables other control signals、data and address signals。然后再申明输出信号的clk、rst、enalbes other control signals、data signals;
(16)在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射,这样可以提高代码的可读性和方便debug 连线错误;
(17)如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将函数通用化,以使得它可以复用。注意,内部函数的定义一般要添加注释,这样可以提高代码的可读性;
(18)尽可能使用循环语句和寄存器组来提高源代码的可读性,这样可以有效地减少代码行数;
(19)对一些重要的always 语句块定义一个有意义的标号,这样有助于调试。注意标号名不要与信号名、变量名重复;
(20)代码编写时的数据类型只使用IEEE 定义的标准类型,在VHDL 语言中,设计者可以定义新的类型和子类型,但是所有这些都必须基于IEEE 的标准;
(21)在设计中不要直接使用数字,作为例外,可以使用0 和1。建议采用参数定义代替直接的数字。同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系;
(22)不要在源代码中使用嵌入式的dc_shell 综合命令。这是因为其他的综合工具并不认得这些隐含命令,从而导致错误的或较差的综合结果。即使使用Design Compiler,当综合策略改变时,嵌入式的综合命令也不如放到批处理综合文件中易于维护。这个规则有一个例外的综合命令,即编译开关的打开和关闭可以嵌入到代码中;
(23)在设计中避免实例化具体的门级电路。门级电路可读性差,且难于理解和维护,如果使用特定工艺的门电路,设计将变得不可移植。如果必须实例化门电路,我们建议采用独立于工艺库的门电路,如SYNOPSYS 公司提供的GTECH 库包含了高质量的常用的门级电路;
(24)避免冗长的逻辑和子表达式;
(25)避免采用内部三态电路,建议用多路选择电路代替内部三态电路。

良好的代码编写风格(二十五条)相关推荐

  1. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  2. VHDL+Verilog良好的代码编写风格(转载)

    良好代码编写风格可以满足信.达.雅的要求.在满足功能和性能目标的前提下,增强代码的可读性.可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每 ...

  3. mysql web搜索系统_【20201011】做个搜索引擎(6)——网页蜘蛛代码编写(二)

    介绍 介绍 上一堂课福哥给大家展示了一个半成品的蜘蛛对象Spider,今天我们继续. 做事要有目标,并努力使之达成! 今天我们的目标就是:实现网页的爬取分析并将内容保存到webpages数据表当中: ...

  4. 规范你的代码编写风格

    笔者寄语:一份编写规范的代码会让人赏心悦目,养成良好的代码编写习惯是每一个程序员应该具备的基本素养! 1.基本规则 [规则1-1]标识符应当直观且可以拼读,可望文知意,不必进行"解码&quo ...

  5. c语言课程设计可以炒细面,二十五条药方头发浓密没问题.doc

    方一] 柏枝(干药).椒仁.半夏,各90克.将药加水500毫升煎至250毫升,入蜜少许,再煎1--2min,沸用时入生姜汁少许调匀,擦无发处每日2次. [方二] 白矾.郁金各等分,将白矾.郁金制成丸, ...

  6. 对于‘用C#编写一个员工工资计算’问题的代码编写风格和结构设计考虑的比较【发现自己还是太弱,大家可以在评论区中提出我代码中的不足】

    目录 1.'用C#编写一个员工工资计算'问题描述 2.个人思考和实现 2.1代码实现: 2.2调试结果及保存txt内容: 3.他人的实现 3.1代码实现: 3.2保存的txt内容: 1.'用C#编写一 ...

  7. LCD驱动程序——代码编写(二)

    转自http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ 在编写代码之前我们先来看一看原理图 引脚说明: VC ...

  8. 【百度分享】基于内核模块的测试代码编写(二)

    4. 用户空间和内核空间的交互 在解决了在内核空间置入可运行代码后,需要解决的是用户空间和内核空间的交互.具体来说,需要达到以下三个功能:用户空间的程序向内核空间下的程序控制,用户空间到内核空间的数据 ...

  9. 【数据结构学习之完全从零实现所有数据结构的代码编写之二】智能指针

    今天我们依然暂时不讲解数据结构里面的内容,我们来复习一下昨天学的模板技术用于数据结构编程的思想,给出一个模板技术的实例:智能指针的应用.喜欢看我分享的加我q:1126137994 加我共同学习交流各种 ...

最新文章

  1. 大数据学习之路(七)——学习小结
  2. MODEL COMPRESSION VIA DISTILLATION AND QUANTIZATION 论文笔记
  3. Windows环境下基于python3 + selenium构建网络爬虫
  4. android 判断当前窗口,Android判断当前界面是否是home界面
  5. mysql用navicat无法远程连接,mysql 发现 navicat 可以远程连接,代码无法远程连接
  6. RK3399Pro Android Rock-X 人工智能开发系列(2)
  7. 你关注什么,输出什么
  8. 一条语句引发的思考:装箱和拆箱,空指针的类型转换
  9. PySpark-Recipes : RDD对象的基本操作
  10. 【LwM2M】LwM2M协议官方文档
  11. HOG特征,LBP特征,Haar特征(图像特征提取)
  12. java.lang.ClassNotFoundException问题的解决
  13. c语言数组文曲星猜数游戏编程,第7章 数组-8数组的其他应用——文曲星猜数游戏.pdf...
  14. 键盘与鼠标按键的键值对照表
  15. 浅谈基于openssl的多级证书,Multi-level CA的签发和管理,以及双向认证
  16. 2021年终总结--躺平的一年
  17. android的一些简单配置修改(2)
  18. linux系统磁盘分区查看,linux下磁盘查看和分区
  19. 如何隐藏html路径,怎么显示隐藏文件夹
  20. CentOS 8 EOL如何切换源

热门文章

  1. boost::range模块实现map_keys相关的测试程序
  2. boost::mpi模块实现一个简单的点类,我们可以构建、添加、比较和 连载
  3. boost::mp11::mp_replace相关用法的测试程序
  4. boost::hana::zip_shortest用法的测试程序
  5. boost::container实现多态双端队列的测试程序
  6. boost::contract模块日历的测试程序
  7. ITK:将内核应用于图像中的每个像素
  8. DCMTK:验证服务类用户(C-ECHO操作)
  9. VTK:PolyData之SurfacePointPlacer
  10. VTK:图片之ImageMedian3D