本文为移植文章,在 原有基础 上进行了更改完善。其中结合了自身的编写习惯及互联网寻找资料。互联网参考资料可以点此进入下载链接进行下载查阅。 本文将分为三部分,第一部分
本文为移植文章,在 原有基础 上进行了更改完善。其中结合了自身的编写习惯及互联网寻找资料。互联网参考资料可以点此进入下载链接进行下载查阅。
本文将分为三部分,第一部分为自我感觉舒适的代码编程风格,第二部分为第一部分的一些附加说明。第三部分为我阅读相关文章时所作的记录,用于提炼总结第一部分。读者阅读第一、二部分就足够了,如有兴趣也欢迎浏览第三部分。
V编程规范整理
有关命名
通用
- 模块/信号名尽量使用全小写字母(若无特殊情况)。
- 模块/信号名应使用有意义的单词表示。
单词连接使用下划线符号 "_"。
模块命名
- 一个模块一般放置一个文件中,文件名、模块名保持一致。
模块名控制在20个字符的长度。
信号命名
- 为了避免信号名标识符过于冗长,适当使用简写。
- 常数定义使用大写字母(全大写/首字母大写)。
- 低电平有效信号,在其后添加后缀 "_n"。
- 三态信号,在其后添加后缀 "_z"。
寄存器打节拍信号,在其后添加后缀 "_r"。(次数不使用 "_reg"的愿意是部分综合器会对信号自行生成x_reg的信号,可能会造成一定的混淆)
有关注释
通用
- 必要的注释可以增加代码的可读性、可移植性、可维修性。
文件中代码所占据的部分应当不少于整体的1/3。
文件注释
- 文件的开头,模块声明前需要一个头部注释。
- 模块名
- 模块功能
- 作者
修改记录,应包含修改人,修改内容,修改时间等信息。
代码注释
- 代码注释尽量使用行注释而非段落注释
- 输入输出端口、所声明变量都需要注释简单说明作用
程序块(always块)需要注释说明作用,其中还需要不等条的注释增加说明。
有关书写
- 特殊符号前后使用空格进行隔开,增加代码可读性。
- 常使用 Tab 符号进行一些符号的对齐,设定 Tab 符号为 4 个空格。
- 如有判断语句使用括号,括号的前后适当的使用空格隔开。
- 多级 if...else 嵌套,严格保证缩进对齐。
- 使用 begin...end 时,begin 跟在语句后(同一行),减小行数。实例说明可见附加说明中相关部分。
- 例化时严格使用 ".signal()" 来进行参数的传递。
- 三态逻辑可以在顶层使用,子模块尽量避免使用三态信号。
- case 结构需要做到 full-case。
附加说明
说明一, 常用简写
说明二,暂无
个人阅读笔记摘抄
在风格上,很多地方都有一致性,重复部分不赘述。
- 每个模块一般存在一个单独的文件,通常模块名、文件名保持一致。
- 每个文件在开头部分都应包含必要的注释,应包含以下部分:
- 年份及公司名称
- 作者
- 文件名
- 所属项目
- 顶层模块
- 模块名称及描述
- 修改记录
- 如果没有特殊情况,模块名和信号名一律采用小写字母。
- 常数定义(`define)和(parameter)采用大写字母(全大写或者部分大写)。参数名小于20个字母。
- 标识符采用传统C语言方式,单词之间使用符号下划线"_"连接,比如 data_size。且需要采用用意义反应对象特征的一些标识符。
- 为了避免标识符过于冗长,可以使用一定的缩写,比如write变为wt这些。
- 适当使用空格符号和Tab制表符号,Tab制表符定义为4个空格。
- 特殊符号前后应使用空格分隔开,比如:a <= a + 1‘b1;
- 括号中有判断条件的话,括号前后需要空格。
- 多级嵌套中,每一层需要严格对齐,begin...end要严格对齐。
- 注释是必须的,增加可读性和可移植性,注释内容应不少于整篇的30%。
- For FSM variables, naming in
, - Use comments for port declarations (input and output), Use comments for internal signal declarations (wire or reg), Use comments for functional sections (always block).
- 多用"//"行注释的方式替换段落注释"/.../"。段落注释可以用于文件开头注释。
- 例化时添加注释说明,且使用.()例化方式。
- 及时删除无效代码
- 每一行声明一个变量
- 线宽尽量对应。
- 低电平信号,信号后缀"_n"。
- 使用降序排列定义向量有效位顺序,最低位0。
- 时钟信号前缀"clk",复位信号前缀"rst"。
- 三态信号后缀加"_z",reg寄存器节拍信号后缀使用"_r"。
- 代码中不能使用VHDL及Verilog保留字。
- 三态逻辑可以在顶层使用,子模块避免使用。