zoukankan      html  css  js  c++  java
  • [原创]Verilog 代码编程规范(个人用)

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

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

    V编程规范整理

    有关命名

    通用

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

    模块命名

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

    信号命名

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

    有关注释

    通用

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

    文件注释

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

    代码注释

    1. 代码注释尽量使用行注释而非段落注释
    2. 输入输出端口、所声明变量都需要注释简单说明作用
    3. 程序块(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 <fsm_cs>, <fsm_ns>
    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. 三态逻辑可以在顶层使用,子模块避免使用。
  • 相关阅读:
    使用LR编写windows sockets协议xml报文格式脚本实战
    使用LR编写HTTP协议Json报文格式接口脚本实战
    web类协议脚本-飞机订票系统示例
    使用LR编写下载类脚本
    python算法-选择排序
    python算法-冒泡排序
    用户在浏览器中输入一个url发生的奥秘
    浅谈cookie和session
    selenium加载配置参数,让chrome浏览器不出现‘Chrome正在受到自动软件的控制’的提示语,以及后台静默模式启动自动化测试,不占用桌面的方法
    Python之文件和目录操作
  • 原文地址:https://www.cnblogs.com/airbird/p/11455204.html
Copyright © 2011-2022 走看看