Verilog编码规范

  • 格式:docx
  • 大小:38.20 KB
  • 文档页数:54

下载文档原格式

  / 54
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Verilog编码规范

(仅供内部使用)

拟制: xxx 日期:

xxx

审核:审核者日期:yyyy-mm-dd 批准:批准者日期:yyyy-mm-dd

版权所有侵权必究

修订记录

目录

1命名规范 (5)

2代码编写规范 (10)

2.1 版面 (10)

2.2 编写代码规范 (11)

3电路设计规则 (29)

3.1 时钟 (29)

3.2 复位 (31)

3.3 避免LATCH (32)

3.4 避免组合反馈 (33)

3.5 赋值语句 (33)

3.6 case语句和if-then-else语句 (33)

3.7 状态机 (34)

3.8 异步逻辑 (37)

4模块划分 (38)

5提高可移植性的编码风格 (39)

5.1 采用参数化设计 (39)

5.2 采用独立于工具平台和工艺库的设计 (40)

5.3 尽量使用已经得到验证的IP (41)

6其他一些设计建议 (42)

7附件 (45)

8参考文档: (54)

基本原则:简单,一致,可重用。

简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简

单的时钟,尽量使用简单的复位。

一致指尽量保持代码风格一致,尽量保持命名一致。

可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。

1命名规范

给信号命名就像给孩子取名字一样,有区别,有根源,有深度,还有一点,要简单,别冗长。

有区别指取名字不要一样,假如大家只有一个手机号码,那这个号码还能有什么用处?

有根源指取名字要能象姓氏一样,让人一看就直到是张家的后代而不是李家的。

有深度就是取名字要有涵义,张一,张二,张三虽然也是名字,但是请考虑一下被取名字人的感受。

简单点,几十个字母长的名字,打字的和看字的都累。

大小写规则:只有parameter,`define和module名称才能享受

大写。

Module 名应与文件名保持一致(文件名是小写),假如不想在设

计后面遇到麻烦的话。

不要尝试使用任何保留字,因为他们已经被保留了。

不要重复使用同样的名字去命名不同的数据。

(建议)对module名加”_LVx”的后缀,增强module名称的结

构层次含义

如:设计顶层为TOP LEVEL,即LEVEL1,命名为QTRxxxx_LV1;

时钟模块,IO_PAD,CORE,为LEVEL2,命名为CLK_PROC_LV2等等;CORE内子模块为LEVEL3,然后以此类推。

对于来自同一驱动源的所有时钟信号使用相同的名字。

对于低电平有效的信号,应该以_n结尾。

模块间相连端口名称要一致。

(建议)使用下表所列的命名缩写方式。

全称名称

clock Clk

reset rst

clear clr

address addr

data_in din

全称名称

memory mem

register reg

(建议)使用下列后缀命名方式

全称添加后缀

active low_n

enable_en

select_sel

flag_flg

delay_dly

信号命名的两个词之间用下划线间隔,如ram_addr,cnt_ctrl 等等

信号命名尽量不要使用孤立的、小写的英文字母L

2代码编写规范

2.1版面

语句独立成行,增加可读性和可维护性。

行的长度

保持每行小于或等于72个字符。因为有的终端或打印机每行不能超过80个字符。规定72个字符是为了留出边空,提高可读

性。还有一个原因是为象vi这样的编辑器留有显示行号的地方。

用回车来分割超过72个字符的行,并且在下一行用缩进来表示该行是前一行的继续。

缩进。

用缩进来提高续行和嵌套循环的可读性。

缩进采用4个空格。

避免使用TAB键。不同的编辑器或用户环境使得TAB的位置差别很大,造成缩进的混乱。有一些工具可以将TAB替换成空格。

(建议)使用注释

使用注释来解释端口、信号、信号组、always块、函数等。注释应该放在它所描述的代码的附近。注释应该简明扼要,并足够

说明问题。避免注释杂乱。显而易见的功能不用加注释。注释关键是说明设计意图。

2.2编写代码规范

在源文件中要有文件头

在源文件、script文件的开始应包含一个文件头。文件头至少应包含下列信息:文件名、作者、模块的功能描述和关键特征的列表、文件产生的日期、更改记录(日期、更改者、更改的内容)。

(参见代码模板sample.v)

模块名称用大写,例如:module MEM_CTRL。

端口声明时每行声明一个端口,并有注释(最好在同一行),也可对同一类型的一组端口加注释。对于时钟,复位以及其他控制信号,需要注释有效工作沿或者有效工作值

建议用下述顺序声明端口。

//INPUTs

clocks , // posedge active

resets , // active high

enables , // active high

other control signals ,

Data and address lines ,

//OUTPUTs

clocks ,

resets ,

enables ,

other control signals ,

data

在输入和输出两类端口之间留一个空行来提高可读性。如上例所示。

端口列表之后,使用parameter定义内部信号宽度以及其他参数化设置。

IO信号申明和内部信号申明要单独成行,参考sample.v文件

使用简单的语句,一般使用if …else…和case就能满足大部分需求,不要使用复杂的语句

常量