Verilog编码规范.docx
- 文档编号:4163088
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:12
- 大小:19.29KB
Verilog编码规范.docx
《Verilog编码规范.docx》由会员分享,可在线阅读,更多相关《Verilog编码规范.docx(12页珍藏版)》请在冰豆网上搜索。
Verilog编码规范
Verilog编码规范
(仅供内部使用)
拟制:
xxx
日期:
xxx
审查:
审查者
日期:
yyyy-mm-dd
同意:
同意者
日期:
yyyy-mm-dd
版权全部XX
订正记录
订正日期订正版本描绘订正者
基来源则:
简单,一致,可重用。
简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
一致指尽量保持代码风格一致,尽量保持命名一致。
可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。
1命名规范
给信号命名就像给孩子取名字相同,有差异,有本源,有深度,还有一点,要简单,别冗长。
有差异指取名字不要相同,若是大家只有一个手机号码,那这个号码还可以有什么用途有本源指取名字要能象姓氏相同,让人一看就直到是张家的后辈而不是李家的。
有深度就是取名字要有涵义,张一,张二,张三固然也是名字,可是请考虑一下被取名字人的感觉。
简单点,几十个字母长的名字,打字的和看字的都累。
大小写规则:
只有parameter,`define和module名称才能享受大写。
Module名应与文件名保持一致(文件名是小写),若是不想在设计后边碰到麻烦的话。
不要试试使用任何保存字,由于他们已经被保存了。
不要重复使用相同的名字去命名不一样的数据。
(建议)对module名加”_LVx”的后缀,加强module名称的构造层次含义
如:
设计顶层为TOPLEVEL,即LEVEL1,命名为QTRxxxx_LV1;
时钟模块,IO_PAD,CORE,为LEVEL2,命名为CLK_PROC_LV2等等;
CORE内子模块为LEVEL3,而后以此类推。
关于来自同一驱动源的全部时钟信号使用相同的名字。
关于低电平有效的信号,应当以_n结尾。
模块间相连端口名称要一致。
(建议)使用下表所列的命名缩写方式。
全称
名称
clock
Clk
reset
rst
clear
clr
address
addr
data_in
din
data_out
dout
interruptrequest
int
readenable
rden
writeenable
wren
count
cnt
request
req
全称
名称
control
ctrl
arbiter
arb
pointer
ptr
segment
seg
memory
mem
register
reg
(建议)使用以下后缀命名方式
全称
增添后缀
activelow
_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文件的开始应包括一个文件头。
文件头起码应包括以下信息:
文件名、作者、模块的功能描绘和重点特点的列表、文件产生的日期、改正记录(日期、改正者、改正的内容)。
(拜见代码模板)
模块名称用大写,比如:
moduleMEM_CTRL。
端口申明时每行申明一个端口,并有说明(最幸亏同一行),也可对同一种类的一
组端口加说明。
关于时钟,复位以及其余控制信号,需要说明有效工作沿或许有
效工作值
建议用下述次序申明端口。
.)
if(...)
d0=A+B;
else
d0=C+D;
中,DC可能只会生成一个加法器。
条件算子中不存在资源共享
如:
z=(cond==1’b1)(a+b):
(c+d);
一定使用两个加法器;
而等效的条件if-else语句能够资源共享,如:
if(cond==1’b1)
z=(a+b);
else
z=(c+d);
只需加法器的输入端复用,就能够实现加法器的共享,使用一个加法器实现。
(d)尽量采纳公共子表达式
如:
x=a+b+c
y=d+a+b
改为:
z=a+b
x=z+c
y=d+z
(2)算符
(a)条件运算符
r1=gater2:
r3;
防止使用条件嵌套:
r1=(aa=0)((bb==0)r2:
r3):
r4;or
r1={aa,bb}==0r2:
{aa,bb}==0r3:
{aa,bb}==0R4:
r4;
(b)逻辑操作符
在if(),while(),()A:
B之类的表达式中,括号中的表达式应当是一个逻辑表达式,相应的操作符应当用逻辑操作符。
如:
wire
x,A,B;
(x)A:
B
与
(x==1'b1)A:
B
If(A&B)
与
if((A&&B)
==1’b1)
While(A=B)与while(A==B)
操作结果相同,但明显前者不规范。
(c)乘法运算符“*”
关于一个变量data与常数constant相乘data*constant,假如常数不是
2的整数次幂,建议先将其分解,如constant=53=32+16+4+1=2^5
+2^4+2^2+2^0,这样乘积就能够表示为变量data移位结果的相加。
对
于乘法运算符“*”,综合后往常获得的是乘法器,时延较大。
赋值语句
(1)不要在信号列表中进行运算操作如:
Bad:
addr(a,b,d&e);
Good:
addr(a,b,c);c=d&e;
(2)BLOCK赋值和NON-BLOCK赋值的使用
(a)组合逻辑采纳BLOCK赋值(=)如:
always@(dat)i_dat=dat;
(b)非组合逻辑(主若是存放器)采纳NON-BLOCK赋值并加delay以保证前仿真和后仿真的一致
如:
always@(posedegclk)
q<=#`DELd;
(3)在同一块语句中不一样意同时出现堵塞赋值和非堵塞赋值
条件语句
(1)IF语句
(a)向量比较时,比较的向量长度要相等,相同向量和常量比较时长度也要求匹
配,长度不一样时要求进行显式位扩展(verilog对位数小的向量做0扩展以
使它们的长度相般配,该扩展是隐式的)
如:
reg
[7:
0]
abc;
reg
[3:
0]
def;
.......
if(abc=={4'b0,def})begin
.......
if(abc==8'h0)begin
(b)不要采纳if表达式的简写形式比如:
if(variable)等同于if(variable!
=0)
if(!
variable)等同于if(variable==0)
但后者才符合规范
(c)每个if都应当有一个else与之相对应,假如条件为假时不进行任何操作,则用一条空语句else;防止产生latch
(d)if...elseif...elseif...else
的代码书写格式以下,要注意优先级
if(...)
begin
......
end
else
begin
if(...)
......
else(...)
if(...)
else(...)
end
(d)假如变量在if-else语句中非完整赋值,则应给变量一个缺省值如:
if(a==b)begin
v1=2'b01;
v2=2'b10;....
end
always语句
(1)在使用always生成组合逻辑时,敏感表要列全,敏感表中也不可以包括没实用到
的变量。
Rule:
Combinationalsensitivitylistsshouldinclude
1)Anysignalonrighthandsideofassignment
2)Anysignaliniforcaseexpression
Forexample:
......
modulesense_list_ex(
b,
c,
d
);
1’1’....
end
else
begin
....
end
采纳时钟上涨沿触发。
有限状态机(FSM)
(1)组合逻辑和时序逻辑分开描绘;
COMBINATERIALLOGICFORNEXTSTATELOGICFORCURRENTSTATE1’COMBINATERIALLOGICFORNEXTSTATELOGICFORCURRENT
STATE
state
register
SET
DQ
CLRQ
combinatorial
inputs
logicoutput
register
SEToutputs
DQ
clkCLRQ
SETSETSET
DQDQDQ
combinatorialtoinnerlogic
logic
CLRQCLRQCLRQ
clk1clk2
1’1’1’1’1’1’1’Ltd.
77m
cpu_cs,
cpu_addr,
cpu_datain,
cpu_rd,
cpu_we,
.
.
.
.
.
);
77m77mst
(rst),
.addr
(sts_num),
.clk
(clk77m_sys),
.din
(din),
.we
(1'b1),
.dout_en
(1'b1),
out(dout_tmp)
);
endmodule
3参照文档:
1.ReuseMethodolgyManual_2,byMichaelKeatingandPierreBricaud
2.TheTenCommandmentsofExcellentDesigns,byPeterChambers
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 编码 规范