数字逻辑实验课后对于Verilog的标准书写的小总结,不是必须写成这样,但是是一种好的编程风格。
来源:数字逻辑与Verilog设计实验课讲解,个人做的笔记与整理。
良好的编程风格有利于减少消耗的硬件资源,提高设计的工作频率 。
提高系统的可移植性和可维护性。
程序的格式化能体现程序员的基本素质和整个团队的风貌。
有C语言基础的这部分可以简单略过,看看即可。无基础的可以跳过,有一定编程经验后再来总结提高。
用于命名的字符集为:字母A~Z和a~z, 数字0~9以及下划线组成。
例如:
参数(parameter)、常量(constant)和块标号(block label)名必须一致采用大写;
而信号,变量和结构名(construct)以及实例标号(instance)必须一致采用小写。
有利于在仿真时,区分不变和变化的 数据。
例子:
在不区分大小写的情况下,名字必须唯一。例如,名字state和State不能同时出现在同一设计中。因为有的EDA工具不区分大小写。
如果一个名字由多个字组成,则使用下划线连接,用以增加名字的可读性。
为了使信号的名字有意义,可以根据信号类型选取相应的后缀。
具体示例如下:
命名
信号类型
实例
xx_r
寄存器类型
Data_out_r
xx_a
异步信号
Addr_strobe_a
xx_clk
时钟信号
Sys_clk
xx_nc
不连续信号
Stata_nc
xx_n
低电平有效信号
Reset_n
xx_pn
有n个相位的信号
Enable_p2
xx_z
三态信号
Data_out_z
xx_next
状态机信号
Transmit_next
xx_test
测试模式信号
Parallel_clk_test
sys_xxx
系统信号
sys_dout,sys_din
clk_xxx
时钟信号(也可这样写)
clk_768MHZ
rst_xxx reset_xxx
复位信号
st_xxx set_xxx
置位信号
这个确实有点抽象...
顺序:
将模块英文名称的各个单词的首字母组合起来,形成3~5个符号的缩写。
Arithmatic logical unit —— ALU
若模块的英文名只有一个单词,可取该单词的前3个字母
Decider —— DEC
所有的变量命名分为两个部分:
第一部分表明数据方向,其中数据发出方在前,数据接收方在后;
第一部分全部大写,
第二部分为数据名称。
第二部分中所有具有明确意义的英文名全部拼写或者缩写的第一个字母大写,其余部分小写。
两个部分用下划线隔离开。
例:CPUMMU_WrReq (CPU发送给MMU的写请求信号)
模块内部的信号由几个单词连接而成,缩写要求能基本表明本单词的含义。
主要有三点:
普通描述注释“//”就可以
文件头注释有一点麻烦,但是显得很标准。
模块之间(always)的注释参照文件头注释
正文书写要求与C语言类似。
用四个空格代替TAB键;因为不同的编辑系统的Tab制表符间距可能不同。
每行只有一个Verilog语句;对于长的语句可以使用回车和缩进方法,表示成连续的语句行。
避免使用硬编码;建议使用宏或则参数来定义常数,避免使用硬编码数值。例如:
下面是更多出于美观的考虑:
各节之间加1行或者多行空格
不同变量,变量与符号,变量与括号之间都应该保留一个空格 alwaya @ ( … )
逻辑运算符、算术运算符、比较运算符等运算符两侧各留一个空格。(单数操作运算符例外)
使用”//” 注释时,在”//”后应当有一个空格