天天看点

数字逻辑实践2->Verilog编写规范

数字逻辑实验课后对于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 @ ( … )

逻辑运算符、算术运算符、比较运算符等运算符两侧各留一个空格。(单数操作运算符例外)

使用”//” 注释时,在”//”后应当有一个空格