参考华为内部的verilog
编程规范,总结自己的代码风格。
设计风格
内容包括变量(信号)命名规范,模块命名规范等
信号与常量
- 对低电平有效的信号,信号名后缀“_n”
- 使用降序排列的定义向量有效位顺序,最低为是0
- 使用大写字母定义
parameter
,使用小写字母定义input
,reg
,output
等信号的命名 - 时钟信号统一使用前缀 "clk",复位信号统一使用前缀 "rst"
模块
- 模块的命名全部小写
- 到其他模块的信号声明顺序按照 : 输入、(双向)、输出
- 每个模块只包含一个模块,模块名称与文件名保持一致
- 在调用模块时,使用
name_based
的方式进行调用而不是order_based
的方式进行调用 - 模块例化统一使用 "U_name_i",进行命名,如果多次例化,则i使用数字编号
可靠性
在模块设计时遵守以下原则:
- 同步时序逻辑块
always
块中有且只有一个使用信号,并且在同一个沿做出动作 - 不要在时钟信号路径上添加任何
buffer
- 不要采取向量的方式定义一组时钟信号
- 一个
always
语句中只能有一个事件列表 - 时序逻辑电路中统一使用非阻塞赋值方式
- 组合逻辑电路中统一使用阻塞赋值方式