[原创]Verilog 代码编程规范(个人用)

本文为移植文章,在 原有基础 上进行了更改完善。其中结合了自身的编写习惯及互联网寻找资料。互联网参考资料可以点此进入下载链接进行下载查阅。

本文将分为三部分,第一部分为自我感觉舒适的代码编程风格,第二部分为第一部分的一些附加说明。第三部分为我阅读相关文章时所作的记录,用于提炼总结第一部分。读者阅读第一、二部分就足够了,如有兴趣也欢迎浏览第三部分。

V编程规范整理

有关命名

通用

  1. 模块/信号名尽量使用全小写字母(若无特殊情况)。
  2. 模块/信号名应使用有意义的单词表示。
  3. 单词连接使用下划线符号 "_"。

    模块命名

  4. 一个模块一般放置一个文件中,文件名、模块名保持一致。
  5. 模块名控制在20个字符的长度。

    信号命名

  6. 为了避免信号名标识符过于冗长,适当使用简写。
  7. 常数定义使用大写字母(全大写/首字母大写)。
  8. 低电平有效信号,在其后添加后缀 "_n"。
  9. 三态信号,在其后添加后缀 "_z"。
  10. 寄存器打节拍信号,在其后添加后缀 "_r"。(次数不使用 "_reg"的愿意是部分综合器会对信号自行生成x_reg的信号,可能会造成一定的混淆)

有关注释

通用

  1. 必要的注释可以增加代码的可读性、可移植性、可维修性。
  2. 文件中代码所占据的部分应当不少于整体的1/3。

    文件注释

  3. 文件的开头,模块声明前需要一个头部注释。
  4. 模块名
  5. 模块功能
  6. 作者
  7. 修改记录,应包含修改人,修改内容,修改时间等信息。

    代码注释

  8. 代码注释尽量使用行注释而非段落注释
  9. 输入输出端口、所声明变量都需要注释简单说明作用
  10. 程序块(always块)需要注释说明作用,其中还需要不等条的注释增加说明。

有关书写

  1. 特殊符号前后使用空格进行隔开,增加代码可读性。
  2. 常使用 Tab 符号进行一些符号的对齐,设定 Tab 符号为 4 个空格。
  3. 如有判断语句使用括号,括号的前后适当的使用空格隔开。
  4. 多级 if...else 嵌套,严格保证缩进对齐。
  5. 使用 begin...end 时,begin 跟在语句后(同一行),减小行数。实例说明可见附加说明中相关部分。
  6. 例化时严格使用 ".signal()" 来进行参数的传递。
  7. 三态逻辑可以在顶层使用,子模块尽量避免使用三态信号。
  8. case 结构需要做到 full-case。

附加说明

说明一, 常用简写

说明二,暂无

个人阅读笔记摘抄

在风格上,很多地方都有一致性,重复部分不赘述。

  1. 每个模块一般存在一个单独的文件,通常模块名、文件名保持一致。
  2. 每个文件在开头部分都应包含必要的注释,应包含以下部分:
    1. 年份及公司名称
    2. 作者
    3. 文件名
    4. 所属项目
    5. 顶层模块
    6. 模块名称及描述
    7. 修改记录
  3. 如果没有特殊情况,模块名和信号名一律采用小写字母。
  4. 常数定义(`define)和(parameter)采用大写字母(全大写或者部分大写)。参数名小于20个字母。
  5. 标识符采用传统C语言方式,单词之间使用符号下划线"_"连接,比如 data_size。且需要采用用意义反应对象特征的一些标识符。
  6. 为了避免标识符过于冗长,可以使用一定的缩写,比如write变为wt这些。
  7. 适当使用空格符号和Tab制表符号,Tab制表符定义为4个空格。
  8. 特殊符号前后应使用空格分隔开,比如:a <= a + 1'b1;
  9. 括号中有判断条件的话,括号前后需要空格。
  10. 多级嵌套中,每一层需要严格对齐,begin...end要严格对齐。
  11. 注释是必须的,增加可读性和可移植性,注释内容应不少于整篇的30%。
  12. For FSM variables, naming in ,
  13. Use comments for port declarations (input and output), Use comments for internal signal declarations (wire or reg), Use comments for functional sections (always block).
  14. 多用"//"行注释的方式替换段落注释"/.../"。段落注释可以用于文件开头注释。
  15. 例化时添加注释说明,且使用.()例化方式。
  16. 及时删除无效代码
  17. 每一行声明一个变量
  18. 线宽尽量对应。
  19. 低电平信号,信号后缀"_n"。
  20. 使用降序排列定义向量有效位顺序,最低位0。
  21. 时钟信号前缀"clk",复位信号前缀"rst"。
  22. 三态信号后缀加"_z",reg寄存器节拍信号后缀使用"_r"。
  23. 代码中不能使用VHDL及Verilog保留字。
  24. 三态逻辑可以在顶层使用,子模块避免使用。

猜你喜欢

转载自www.cnblogs.com/airbird/p/11455204.html