HDL使用简介课件_第1页
HDL使用简介课件_第2页
HDL使用简介课件_第3页
HDL使用简介课件_第4页
HDL使用简介课件_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VerilogHDL使用简介张建良shandy98@数字大规模集成电路讲义VerilogHDL使用简介张建良数字大规模集成电路讲义1VerilogHDL使用简介张建良数字大规模集成电路讲义V提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?2提纲什么是VerilogHDL?提纲什么是Verilog提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?3提纲什么是VerilogHDL?提纲什么是Verilog什么是VerilogHDL?VerilogHDL是一种硬件描述语言,用于从算法级、结构级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于开关级电路(例如pmos/nmos)、简单的门(例如库单元描述)和完整的复杂电子数字系统之间(例如CPU)什么是VerilogHDL?VerilogHDL是一种硬4什么是VerilogHDL?VerilogHDL是一种硬什么是VerilogHDL?(cont.)VerilogHDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。提供了编程语言接口(PLI),通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。支持多个设计层次的混合层次建模什么是VerilogHDL?(cont.)Verilog5什么是VerilogHDL?(cont.)Verilog更重要的是...VerilogHDL语言与C语言很相似,从C语言中继承了多种操作符和结构,其核心子集非常易于学习和使用--而这对大多数建模应用来说这已经足够。更重要的是...VerilogHDL语言与C语言很相似,从6更重要的是...VerilogHDL语言与C语言很相似,从VerilogHDL的历史最初是于1983年由GatewayDesignAutomation公司(后被CadenceDesignSystems公司收购)为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言,由于他们的模拟、仿真器产品的广泛使用,VerilogHDL作为一种便于使用且实用的语言逐渐为众多设计者所接受。VerilogHDL语言于1990年被推向公众领域。OpenVerilogInternational(OVI)是促进Verilog发展的国际性组织,1992年,OVI决定致力于推广VerilogOVI标准成为IEEE标准。这一努力最后获得成功,Verilog语言于1995年成为IEEE标准,称为IEEEStd1364-1995。完整的标准在Verilog硬件描述语言参考手册中有详细描述。VerilogHDL的历史最初是于1983年由Gat7VerilogHDL的历史最初是于1983年由Gat提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?8提纲什么是VerilogHDL?提纲什么是VerilogVerilogHDLvs.VHDLVerilogHDL和VHDL都是用于逻辑设计的硬件描述语言并且都已成为IEEE标准。VHDL是在1987年成为IEEE标准,VerilogHDL则在1995年才正式成为IEEE标准。VerilogHDL和VHDL共同的特点:能形式化地抽象表示电路的行为和结构支持逻辑设计中层次与范围的描述,可借用高级语言的精巧结构来简化电路行为的描述具有电路仿真与验证机制以保证设计的正确性支持电路描述由高层到低层的综合转换硬件描述与实现工艺无关,有关工艺参数可通过语言提供的属性包括进去便于文档管理易于理解和设计重用。VerilogHDLvs.VHDLVerilogHD9VerilogHDLvs.VHDLVerilogHDVerilogHDLvs.VHDL(cont.)VerilogHDL和VHDL又各有其自己的特点:VerilogHDL拥有更广泛的设计群体,成熟的资源也远比VHDL丰富VerilogHDL是一种非常容易掌握的硬件描述语言(类C语言),而掌握VHDL设计技术就相对比较困难(类Ada语言)。一般认为VerilogHDL在系统级抽象方面比VHDL略差一些而在门级开关电路描述方面比VHDL强得多大学、研究机构更多使用VHDL,而工业界更多使用VerilogHDLVerilogHDLvs.VHDL(cont.)Ve10VerilogHDLvs.VHDL(cont.)Ve提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?11提纲什么是VerilogHDL?提纲什么是Verilog//sampel_reg.v数据采样模块modulesample_reg(clk,rst,din,dout);inputclk,rst;input[3:0]din;output[3:0]dout;reg[3:0]data;assigndout=data;always@(posedgeclkornegedgerst)

begin

if(!rst)begin data<=4’b0; endelsebegin data<=din; end

endendmoduleclkrstdin[3:0]dout[3:0]data[3:0]DQRSTCK//tb_sample_reg.v数据采样模块的testbench`timescale1ns/100ps`include“sample_reg.v”moduletb_sample_reg;reg[3:0]din;wire[3:0]dout;regreset,clk;sample_regu0(clk,reset,din,dout);initialforever#10clk=~clk;initial$monitor($time,“clk=%b,din=%b,dout=%b,data=%b”,clk,din,dout,u0.data);initialbegin clk=0; reset=0; din=4’b0101; #20reset=1; #20din=4’b1010; #40$stop; endendmoduleModemSim仿真输出:#at0clk=0,din=0101,dout=0000,data=0000#at100clk=1,din=0101,dout=0000,data=0000#at200clk=0,din=0101,dout=0000,data=0000#at300clk=1,din=0101,dout=0101,data=0101#at400clk=0,din=0101,dout=0101,data=0101#at500clk=1,din=1010,dout=1010,data=1010#at600clk=0,din=1010,dout=1010,data=1010#at700clk=1,din=1010,dout=1010,data=1010一个完整的数据采样器设计实例//sampel_reg.v数据采样模块clkrstdi12//sampel_reg.v数据采样模块clkrstdiVerilogHDL语法-模块模块(module)是VerilogHDL的基本单位,除了编译指令,其它所有的设计代码都必须放在一个或多个模块中一个模块内部可以使用其它模块,称为实例。上层模块可以引用底层任意层次模块的变量,引用方法为:实例名.[第二层实例名.]变量名模块内部可以包含若干个“块”VerilogHDL语法-模块模块(module)是V13VerilogHDL语法-模块模块(module)是VVerilogHDL语法-语法规范与注释VerilogHDL中的标识符可以是任意一组字母、数字、$符号和下划线符号的组合,但标识符的第一个字符必须是字母或者下划线。标识符区分大小写。Verilog是自由格式的,即结构可以跨越多行编写,也可以在一行内编写。白空(新行、制表符和空格)没有特殊意义。

initialbeginTop=3'b001;#2Top=3'b011;end

和下面的指令一样:

initial

begin

Top=3'b001;

#2Top=3'b011;

end在VerilogHDL中有两种形式的注释:

/*第一种形式:可以扩展至 多行*/

//第二种形式:在本行结束。VerilogHDL语法-语法规范与注释Verilog14VerilogHDL语法-语法规范与注释VerilogVerilogHDL语法-值集合VerilogHDL有下列四种基本的值:

1)0:逻辑0或“假”

2)1:逻辑1或“真”

3)x:未知

4)z:高阻在门或一个表达式的输入中有为“z”的值则输出通常解释成“x”。此外,x值和z值都是不分大小写的。

VerilogHDL中的常量是由以上这四类基本值组成的。VerilogHDL语法-值集合VerilogHDL15VerilogHDL语法-值集合VerilogHDLVerilogHDL语法-常量VerilogHDL中有三类常量: 1)整型:1,-2,4’b0101,16’o47,32’hEEEEFFFF,... 2)实数型:1.234,-56.78,3.6e4, 3)字符串型:”verilog!!”–看做9个8位无符号整数,可用\转义特殊字符,例如\n,\t下划线符号(_)可以随意用在整数或实数中,它们就数量本身没有意义。它们能用来提高易读性;唯一的限制是下划线符号不能用作为首字符。例如: 32’b0010_1101_1110_1111等价于32’b0010110111101111VerilogHDL语法-常量VerilogHDL中16VerilogHDL语法-常量VerilogHDL中VerilogHDL语法-数据类型VerilogHDL有两大类数据类型。 1)线网类型。nettype表示Verilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。 2)寄存器类型。registertype表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量具有x的缺省值。VerilogHDL语法-数据类型VerilogHDL17VerilogHDL语法-数据类型VerilogHDLVerilogHDL语法-数据类型(cont.)线网类型:

•wire •supply0,supply1 •tri,wor,trior,wand,triand,trireg,tri1,tri0例如:

wirerdy,finish;//2个1位的连线。

wire[3:0]result;//1个4位的连线使用assign赋值,例如: assignrdy=a&b;//rdy赋值为a和b的与操作结果 assign#20result=a*b;//result经过20个时间单位后赋值为a*bVerilogHDL语法-数据类型(cont.)线网类型18VerilogHDL语法-数据类型(cont.)线网类型VerilogHDL语法-数据类型(cont.)寄存器类型:

•reg

•integer–一般相当于32位的reg(可能更多),但不允许作为位向量访问,用于高层次建模 •time,real,realtime 例如:

regrdy,finish;//2个1位的寄存器

reg[3:0]result;//1个4位的寄存器

reg[3:0]mem4x64[63:0]//mem4x64为64个4位寄存器的数组,可表示存储器

intergerI;//定义一个整数,至少32位 并不一定对应为硬件寄存器,可能映射为latch,也可能为连线参数:parameter--类似于常量,可表示任意数据。例如:

parameterLOAD=4'd12,STORE=4'd10;VerilogHDL语法-数据类型(cont.)寄存器类19VerilogHDL语法-数据类型(cont.)寄存器类VerilogHDL语法-操作符算术操作符:+,-,*,/,%关系操作符:>,<,>=,<=相等操作符:==,!=,===,!==逻辑操作符:&&,||,!按位操作符:~,&,|,^,~^,^~归约操作符:&,~&,|,~|,^,~^移位操作符:<<,>>条件操作符:exp?exp1:exp2;连接和复制操作符:{exp1,exp2},{rep{exp}}

assignbus[3:0]={bus[0],bus[1],bus[2],bus[3]};//反转

assignbus[3:0]={2{bus[0]},2{bus[3]}};//扩展VerilogHDL语法-操作符算术操作符:+,-,20VerilogHDL语法-操作符算术操作符:+,-,VerilogHDL语法-过程结构initial语句:只执行一次,并在模拟开始时执行,即在0时刻开始执行。通常用于初始化(例如赋给寄存器一个初始值)、波形产生和仿真控制always语句:也是在0时刻开始执行,但是在整个仿真期间被反复多次执行initial块和always块内部的语句顺序执行一个模块中可以包含任意多个initial或always语句。这些语句相互并行执行,即这些语句的执行顺序与其在模块中的顺序无关。一个initial语句或always语句的执行产生一个单独的控制流注意#的时延控制用法initialbegin reset=0; a=4’b0101 b=4’b1010;

#20reset=1;

#50$display(“sumis%d”,sum); $finish;endalways@(posedgeclkornegedgereset)begin if(!reset)begin data<=0; endelsebegin data<=din; endendVerilogHDL语法-过程结构initial语句:21VerilogHDL语法-过程结构initial语句:VerilogHDL语法-表达式线网类型使用assign语句赋值,称为连续赋值寄存器使用“=”或”<=“赋值,并只能用于initial、always、task和function块内!注意两者区别:

a=b;//执行到此语句后a的值马上更新为b,称为阻塞性赋值

a<=b;//执行到此语句后要等到当前仿真时刻结束后a的值才更新为b,称为非阻塞性赋值 #5a=b;//延迟赋值,过5个单位时间后a的值更新为b位选择、部分选择:

r=state[3]&state[2]

state[3:1]=2’b01VerilogHDL语法-表达式线网类型使用assig22VerilogHDL语法-表达式线网类型使用assigVerilogHDL语法-表达式(cont.)if(cond.)...[elseif(cond.)]...[else]... if(a>10)begin result=123;

endelseif(a<5)begin result=456;

endelsebegin result=789;

end

VerilogHDL语法-表达式(cont.)if(c23VerilogHDL语法-表达式(cont.)if(cVerilogHDL语法-表达式(cont.)case语句--一般对应多选器结构

case item1:exp1;

item2,item3:exp2; ...

default:expn; endcase

注意case的完备性,不完整的case语句可能带来不希望的latch结构例如: case(sel) 2’b00:dout=a; 2’b01:dout=b; 2’b10:dout=c;

default:dout=0;

endcaseVerilogHDL语法-表达式(cont.)case24VerilogHDL语法-表达式(cont.)caseVerilogHDL语法-表达式(cont.)循环语句:forever–常用于产生时钟信号

while(cond.)begin...end

for(init;cond.;step)begin

exp;

end

repeat`timescale1ns/100psforever#10clk=~clk;//产生100M的时钟while(cnt>0)begin

roll=roll<<1; cnt=cnt-1;endfor(cnt=0;cnt<10;cnt=cnt+1)begin data=data>>1;endVerilogHDL语法-表达式(cont.)循环语句25VerilogHDL语法-表达式(cont.)循环语句VerilogHDL语法-函数与任务VerilogHDL还定义了函数(function)和任务(task),可以用于完成复杂的行为描述函数只能有一个输出,而任务可以具有多个输出;两者都可以有多个输入函数和任务必须定义在module内VerilogHDL语法-函数与任务VerilogH26VerilogHDL语法-函数与任务VerilogHVerilogHDL语法-顺序执行与并行执行initial,always,function,task块内部的语句是顺序执行的,所有begin...end之间的语句也是顺序执行的同一个模块内部的所有initial,always块都是并行执行的fork...join块之间的语句是并行执行的(略)VerilogHDL语法-顺序执行与并行执行initi27VerilogHDL语法-顺序执行与并行执行initiVerilogHDL语法-编译指令以`(反引号)开始的某些标识符是编译器指令。在Verilog语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其它的不同编译程序指令。完整的标准编译器指令如下:`define,`undef--宏定义,类似于#define#undef,例如:

`defineMAX_BUS_SIZE 32 ... reg[`MAX_BUS_SIZE-1:0]AddReg;--注意引用时要加

`

`ifdef,`else,`endif--类似于#ifdef#else#endif`include--类似于#include,用于包含另外一个verilog文件`timescale`resetall`default_nettype`unconnected_drive,`nounconnected_drive`celldefine,`endcelldefineVerilogHDL语法-编译指令以`(反引号)开始的28VerilogHDL语法-编译指令以`(反引号)开始的VerilogHDL语法-编译指令(cont.)`timescale--定义时延单位和精度 在VerilogHDL模型中,所有时延都用单位时间表述。使用该指令将时间单位与实际时间相关联。指令格式为:

`timescaletime_unit/time_precision

time_unit和time_precision由值1、10、和100以及单位s、ms、us、ns、ps和fs组成。例如:

`timescale1ns/100ps

表示时延单位为1ns,时延精度为100ps。`timescale编译器指令在模块说明外部出现,并且影响后面所有的时延值。VerilogHDL语法-编译指令(cont.)`ti29VerilogHDL语法-编译指令(cont.)`tiVerilogHDL语法-系统函数以$字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制,可在设计的不同部分被调用。任务可以返回0个或多个值。函数除只能返回一个值以外与任务相同。此外,函数在0时刻执行,即不允许延迟,而任务可以带有延迟。$display$monitor$strobe

$time$stime$realtime$printtimescale$timeformat$stop$finish$fopen$fclose$fdisplay$fwrite$fmonitor$fstrobe$readmemb$readmemh$rtoi$itor$realtobits$bittoreal$random例如:

$display(“helloworld!”);//打印输出helloworld

$time//该系统任务返回当前的模拟时间。VerilogHDL语法-系统函数以$字符开始的标识符30VerilogHDL语法-系统函数以$字符开始的标识符提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?31提纲什么是VerilogHDL?提纲什么是Verilog设计描述层次算法(行为)级描述结构级描述寄存器传输级(RTL)描述开关级(门级)描述混合层次描述设计描述层次算法(行为)级描述32设计描述层次算法(行为)级描述设计描述层次算法(行为)级描述设计描述层次-算法(行为)级描述主要用于快速验证算法的正确性不一定可以综合成实际电路结构实例:n位整数除法器,D=A/B,R=A%Bmodulediv(A,B,D,R);parametern=32;input[n-1:0]A,B;output[n-1:0]D,R;reg[n-1:0]D,R;always@(AorB)beginD=0;for(R=A;R>B;R=R-B)beginD=D+1;endendendmodule设计描述层次-算法(行为)级描述主要用于快速验证算法的正33设计描述层次-算法(行为)级描述主要用于快速验证算法的正设计描述层次–结构级描述更接近电路的实际结构电路的层次化描述类似于电路框图moduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAYS=A^B;assign#AND_DELAYC=A&B;endmodulemoduleFA(P,Q,Cin,Sum,Cout);inputP,Q,Cin;outputSum,Cout;parameterOR_DELAY=1;wireS1,C1,C2;//两个模块实例语句HAh1(P,Q,S1,C1);//通过位置关联。HAh2(.A(Cin),.S(Sum),.B(S1),.C(C2));//通过端口与信号的名字关联。//门实例语句:or#OR_DELAYO1(Cout,C1,C2);endmodule使用两个半加器模块构造的全加器设计描述层次–结构级描述更接近电路的实际结构module34设计描述层次–结构级描述更接近电路的实际结构module设计描述层次-RTL级描述贴近实际电路结构的描述描述的细节到寄存器内容传输级别可以精确描述电路的工作原理、执行顺序细化到寄存器级别的结构描述也就是RTL级描述,并无绝对划分标准modulesample_reg(clk,rst,din,dout);inputclk,rst;input[3:0]din;output[3:0]dout;reg[3:0]data;assigndout=data;always@(posedgeclkornegedgerst)

begin

if(!rst)begin data<=4’b0; endelsebegin data<=din; end

endendmodule设计描述层次-RTL级描述贴近实际电路结构的描述modu35设计描述层次-RTL级描述贴近实际电路结构的描述modu设计描述层次–开关级(门级)描述完整描述了电路的细节最底层的电路描述可以描述pmos/nmosmoduleMUX4x1(Z,D0,D1,D2,D3,S0,S1);outputZ;inputD0,D1,D2,D3,S0,S1;andu0(T0,D0,S0bar,S1bar), u1(T1,D1,S0bar,S1), u2(T2,D2,S0,S1bar), u3(T3,D3,S0,S1),notu4(S0bar,S0), u5(S1bar,S1);oru6(Z,T0,T1,T2,T3);endmodule4路选1多选器设计描述层次–开关级(门级)描述完整描述了电路的细节mo36设计描述层次–开关级(门级)描述完整描述了电路的细节mo设计描述层次–混合层次描述以上各种层次描述方式可以任意混合使用,因此一个设计可能某些模块使用了行为描述的方式,而另外一些模块使用了开关级描述在实际设计中,功能复杂的模块可以先用行为级或结构级的描述来表示,而对功能简单的模块则使用RTL级的描述,以尽早完成系统的仿真和算法的验证;在设计的过程中逐步细化复杂模块,替代原来的行为描述,直至设计可以综合并满足设计指标设计描述层次–混合层次描述以上各种层次描述方式可以任意混37设计描述层次–混合层次描述以上各种层次描述方式可以任意混提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?38提纲什么是VerilogHDL?提纲什么是Verilog设计的测试与验证一般需要编写测试文件对设计进行仿真测试,称为testbenchtestbench一般采用行为级描述,产生一定的输入激励,得到设计的输出响应,并检查输出结果的正确性在规范的模块设计中,每一个模块都需要编写独立的测试文件对模块进行充分的测试注意选择合适的输入激励,保证测试能够覆盖典型输入和特殊输入设计的测试与验证一般需要编写测试文件对设计进行仿真测试,称为39设计的测试与验证一般需要编写测试文件对设计进行仿真测试,称为//sampel_reg.v数据采样模块modulesample_reg(clk,rst,din,dout);inputclk,rst;input[3:0]din;output[3:0]dout;reg[3:0]data;assigndout=data;always@(posedgeclkornegedgerst)

begin

if(!rst)begin data<=4’b0; endelsebegin data<=din; end

endendmoduleclkrstdin[3:0]dout[3:0]data[3:0]DQRSTCK//tb_sample_reg.v数据采样模块的testbench`timescale1ns/100ps`include“sample_reg.v”moduletb_sample_reg;reg[3:0]din;wire[3:0]dout;regreset,clk;sample_regu0(clk,reset,din,dout);initialforever#10clk=~clk;initial$monitor($time,“clk=%b,din=%b,dout=%b,data=%b”,clk,din,dout,u0.data);initialbegin clk=0; reset=0; din=4’b0101; #20reset=1; #20din=4’b1010; #40$stop; endendmoduleModemSim仿真输出:#at0clk=0,din=0101,dout=0000,data=0000#at100clk=1,din=0101,dout=0000,data=0000#at200clk=0,din=0101,dout=0000,data=0000#at300clk=1,din=0101,dout=0101,data=0101#at400clk=0,din=0101,dout=0101,data=0101#at500clk=1,din=1010,dout=1010,data=1010#at600clk=0,din=1010,dout=1010,data=1010#at700clk=1,din=1010,dout=1010,data=1010一个完整的数据采样器设计实例//sampel_reg.v数据采样模块clkrstdi40//sampel_reg.v数据采样模块clkrstdi提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?41提纲什么是VerilogHDL?提纲什么是Verilog可综合的设计虽然Verilog提供了大量的语法可以很方便地对电路系统进行各个层次的建模,但是能够综合成实际电路的只是其中的一个子集如果只是作算法验证,可以不考虑可综合设计的问题,但是如果目标是获得可工作的电路,必须依照可综合的语法规范来设计不同的综合器支持的可综合子集可能略有不同可综合设计的基本原则:你的每一行代码都必须具有电路的意义,能够映射成实际的电路结构;综合器没有你聪明,所以当你不知道你写的代码对应的是什么电路的时候往往综合器也不知道可综合的设计虽然Verilog提供了大量的语法可以很方便地对42可综合的设计虽然Verilog提供了大量的语法可以很方便地对可综合的语法举例and,or,nand等基本逻辑门if块和case块+,-,*,&,|,^,~等逻辑运算符&&,||,==,>,>=,<,<=,!=,!等关系运算符>>,<<,&(按位与),|(按位或),{}(连接运算)等位操作运算符=,<=,assign等赋值语句always块可综合的语法举例and,or,nand等基本逻辑门43可综合的语法举例and,or,nand等基本逻辑门可综合不可综合的语法举例initial块forever块for,while,repeat,force,release,task,enable,disable一般不可综合(注:某些特定情况下for和while等可能可以综合)系统函数如$display等除法,求模运算,实数运算等复杂算术运算一般不可综合(注:可能极少数综合器有库可以引用,可以综合)#延时赋值语句一般综合时会被忽略......不可综合的语法举例initial块44不可综合的语法举例initial块不可综合的语法举例init可综合的设计举例(1)modulesample_reg(clk,rst,din,dout);inputclk,rst;input[3:0]din;output[3:0]dout;reg[3:0]data;assigndout=data;always@(posedgeclkornegedgerst)

begin

if(!rst)begin data<=4’b0; endelsebegin data<=din; end

endendmodule这是一个采样锁存模块,在时钟上升沿锁存输入数据din到寄存器data(四位)中,dout连到data寄存器的输出。data对应的是带复位端的寄存器,其时钟信号为clk(上升沿有效),复位信号为rst(低电平有效)clkrstdin[3:0]dout[3:0]data[3:0]DQRSTCK可综合的设计举例(1)modulesample_reg(c45可综合的设计举例(1)modulesample_reg(c可综合的设计举例(2)modulesample_latch(clk,rst,din,dout);inputclk,rst;input[3:0]din;output[3:0]dout;reg[3:0]data;assigndout=data;always@(clkorrst)

begin

if(!rst)begin data<=4’b0; elseif(clk)begin data<=din; end

endendmodule这也是一个采样锁存模块,但是data对应的不是寄存器(register)而是锁存器(latch)clkrstdin[3:0]dout[3:0]data[3:0]DQRSTENA可综合的设计举例(2)modulesample_latch46可综合的设计举例(2)modulesample_latch可综合的设计举例(3)modulemux4(sel,a,b,c,d,r);input[1:0]sel;inputa,b,c,d;outputr;regr;always@(seloraorborcord)

begin case(sel) 2’b00:r<=a; 2’b01:r<=b; 2’b10:r<=c; 2’b11:r<=d; endcase

endendmodule这是一个四选一的多选器,虽然用了always块,但是对应的电路结构是一个纯组合逻辑sel[1:0]abcdr可综合的设计举例(3)modulemux4(sel,a,47可综合的设计举例(3)modulemux4(sel,a,提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?48提纲什么是VerilogHDL?提纲什么是Verilog有限状态机(FSM)状态机是绝大部分控制电路的核心结构

有限状态机可以使用always语句和case语句描述,状态保存在寄存器中,根据寄存器不同的值(状态)执行不同的操作,case语句的多个分支则代表了不同状态的行为

moore有限状态机:输出仅依赖于内部状态,跟输入无关

mealy有限状态机:输出不仅决定于内部状态,还跟外部输入有关

有限状态机(FSM)状态机是绝大部分控制电路的核心结构

49有限状态机(FSM)状态机是绝大部分控制电路的核心结构

有限moore有限状态机实例modulemoore_fsm(clk,reset,A,Z,finish);parameterSTATE_INIT=0;parameterSTATE_ST1=1;parameterSTATE_ST2=2;parameterSTATE_FINISH=3;inputclk,reset;inputA;output[1:0]Z;outputfinish;reg[1:0]state;reg[1:0]Z;regfinishalways@(negedgeresetorposedgeclk)beginif(!reset)beginstate<=STATE_INIT;Z<=2'b00;finish<=1'b0;endelsebegin

case(state)STATE_INIT:begin

state<=STATE_ST1;

Z<=2'b01;finish<=1'b0;endSTATE_ST1:begin

if(A)state<=STATE_ST2;elsestate<=STATE_FINISH;Z<=2'b11;finish<=1'b0;endSTATE_ST2:begin

state<=STATE_FINISH;Z<=2'b10;finish<=1'b0;endSTATE_FINISH:begin

//state<=STATE_FINISH;Z<=2'b01;finish<=1'b1;end

endcaseendendendmodulemoore有限状态机实例modulemoore_fsm(c50moore有限状态机实例modulemoore_fsm(cmoore有限状态机实例(cont.)STATE_ST1STATE_INITSTATE_ST2STATE_FINISHreset=1,A=1reset=1,A=0reset=0reset=1reset=1reset=1reset=0reset=0moore有限状态机实例(cont.)STATE_ST1ST51moore有限状态机实例(cont.)STATE_ST1STmealy有限状态机实例modulemealy_fsm(clk,reset,A,Z,finish);parameterSTATE_INIT=4’b0001;parameterSTATE_ST1=4’b0010;parameterSTATE_ST2=4’b0100;parameterSTATE_FINISH=4’b1000;inputclk,reset;inputA;output[1:0]Z;outputfinish;reg[3:0]current_state,next_state;reg[1:0]Z;regfinish;always@(negedgeresetorposedgeclk)begin if(!reset)current_state<=STATE_INIT; elsecurrent_state<=next_state;endalways@(currenet_stateorA)begin

finish<=1'b0;

case(current_state)STATE_INIT:begin

next_state<=STATE_ST1;

Z<=2'b01; endSTATE_ST1:begin

if(A)begin next_state<=STATE_ST2; Z<=2'b11;

endelsebegin next_state<=STATE_FINISH; Z<=2'b10; end endSTATE_ST2:begin

next_state<=STATE_FINISH;Z<=2'b10; endSTATE_FINISH:begin

//next_state<=STATE_FINISH;Z<=2'b01;

finish<=1'b1;end

endcaseendendmodulemealyFSM也可以用与moorleFSM一样的形式描述,这里给出一种更常用的FSM描述方式one-hot编码输出Z不仅与当前状态有关,还与输入A有关敏感变量列表mealy有限状态机实例modulemealy_fsm(c52mealy有限状态机实例modulemealy_fsm(c提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?53提纲什么是VerilogHDL?提纲什么是Verilog一个除法器的设计实例设计目标算法设计和优化算法验证结构设计RTL设计设计验证与综合一个除法器的设计实例设计目标54一个除法器的设计实例设计目标一个除法器的设计实例设计目标54除法器设计实例-设计目标设计一个32位无符号整数除法器,输入为两个32位无符号整数A和B,输出为32位商D和32位的余数R速度要求尽可能快(吞吐量尽可能大)电路面积、功耗不限可以要求外部给出合适的时钟和复位信号start信号为高电平时启动运算除数为0时应该给出错误信号(置err信号为高),运算结束时应该给出完成信号(置ok信号为高)32位整数除法器ABDRstarterrokclkreset除法器设计实例-设计目标设计一个32位无符号整数除法器,输入55除法器设计实例-设计目标设计一个32位无符号整数除法器,输入算法设计与优化除法器可用的结构很多(可以搜索IEEE,SCI的文献),最容易想到的是用串行移位减法的算法,n位的除法器最多需要n次减法必可给出正确结果

需要执行减法的次数由A和B的值决定,存在优化的空间,为简单起见,本例中不进行优化,即做32次减法获得商和余数

右边给出的行为级描述使用了for语句,不可综合//n位整数除法器的行为级描述,D=A/B,R=A%Bmodulediv(start,A,B,D,R,err,ok);parametern=32;inputstart;input[n-1:0]A,B;output[n-1:0]D,R;outputerr,ok;reg[n-1:0]D,R;regerr,ok;always@(posedgestart)begin err=0; ok=0; D=0; if(B==0)err=1; elsebegin for(R=A;R>B;R=R-B)D=D+1; end ok=1;endendmodule算法设计与优化除法器可用的结构很多(可以搜索IEEE,SC56算法设计与优化除法器可用的结构很多(可以搜索IEEE,SC算法验证上面给出了行为级的描述,可以用于验证算法的正确性可以编写testbench文件对算法的正确性进行验证更换A,B的值进行多次仿真,尤其注意对特殊输入的测试(例如除数为0,被除数小于或等于除数等)可以编写更复杂的测试,产生n组随机数作为激励,并自动把输出响应与正确结果相比较//除法器设计的测试文件`timescale1ns/100psmoduletb_div;regstart;reg[31:0]A,B;wire[31:0]D,R;wireerr,ok;divUDIV(start,A,B,D,R,err,ok);initial$monitor(“at%tA=%x,B=%x,start=%d,D=%d,R=%d,err=%d,ok=%d”,A,B,start,D,R,err,ok);initialbegin start=0; A=32’h12345678; B=32’habcd; #20 start=1; #50 $stopendendmodule算法验证上面给出了行为级的描述,可以用于验证算法的正确性//57算法验证上面给出了行为级的描述,可以用于验证算法的正确性//结构设计考虑设计的可综合性,可用计数器来代替for语句使用状态机控制运算的开始、进行、和结束可以编写行为级模型对结构进行再次验证STATE_INITSTATE_RUNSTATE_FINISHstart=1start=0B=0orcount=32reset=0count!=32状态转移图结构设计考虑设计的可综合性,可用计数器来代替for语句STA58结构设计考虑设计的可综合性,可用计数器来代替for语句STA结构设计(cont.)把设计根据控制部分和运算部分划分控制逻辑和数据通路分析和优化关键路径分别设计各个模块,对于一些基本运算(+,-,计数器,移位等),可以用自动综合的方法产生,但需要对预期的结果有基本的电路概念;对于复杂的运算和控制逻辑,可以考虑采用RTL的描述减法器D寄存器状态寄存器R寄存器B计数器控制逻辑数据通路加法器(加1)Amux关键路径结构设计(cont.)把设计根据控制部分和运算部分划分控制逻59结构设计(cont.)把设计根据控制部分和运算部分划分控制逻RTL设计modulediv(clk,reset,start,A,B,D,R,ok,err);parametern=32;inputclk,reset,start;input[n-1:0]A,B;output[n-1:0]D,R;outputok,err;

wireinvalid,load,run;

div_ctl#(n)UCTL(clk,reset,start,invalid,load,run,err,ok);div_datapath#(n)UDATAPATH(clk,reset,A,B,load,run,invalid,D,R);

endmodulemodulediv_ctl(clk,reset,start,invalid,load,run,err,ok);parameterSTATE_INIT=3'b001;parameterSTATE_RUN=3'b010;parameterSTATE_FINISH=3'b100;inputclk,reset,start,invalid;outputload,run,err,ok;

reg[2:0]current_state,next_state;reg[4:0]cnt;regload,run,err,ok;

always@(posedgeclkornegedgereset)beginif(!reset)current_state<=STATE_INIT;elsecurrent_state<=next_state;end...除法器:包含控制模块和数据通路控制模块:使用了状态机RTL设计modulediv(clk,reset,st60RTL设计modulediv(clk,reset,stRTL设计(cont.)always@(current_stateorinvalidorcnt)begincase(current_state)STATE_INIT:beginif(start)next_state<=STATE_RUN;err<=0;ok<=0;cnt<=0;load<=1;run<=0;endSTATE_RUN:beginload<=0;run<=1;cnt<=cnt+1'b1;if(invalid)beginerr<=1;next_state<=STATE_FINISH;endelseif(cnt==31)beginnext_state<=STATE_FINISH;endendSTATE_FINISH:beginload<=0;run<=0;ok<=1;endendcaseendendmodule控制模块:使用了状态机RTL设计(cont.)always@(current_s61RTL设计(cont.)always@(current_sRTL设计(cont.)modulediv_datapath(clk,reset,A,B,load,run,invalid,D,R);parametern=32;inputclk,reset;input[n-1:0]A,B;inputload,run;outputinvalid;output[n-1:0]D,R;reg[n-1:0]B0,D,R;wireinvalid;wire[n-1:0]minus,carry;

assigninvalid=(B0==0);assign{carry,minus}={1'b0,R}-{1'b0,B0};

always@(posedgeclkornegedgereset)beginif(load)beginD<=0;R<=A;B0<=B;endelseif(run&&carry)beginR<=minus;D<=D+1'b1;endendendmodule数据通路:自动综合加、减法器,也可以单独设计注:此设计没有进行详细验证,不保证正确性,仅作为设计流程的参考RTL设计(cont.)modulediv_datapat62RTL设计(cont.)modulediv_datapat设计验证与综合编写testbench文件对设计进行验证(略)使用synopsys公司的designanalyzer可以对设计进行综合,并得到面积、时延、功耗等报告,检查是否符合设计指标;如果不符合,需要分析原因,查找关键路径,并修改设计,直至满足设计要求(略)设计验证与综合编写testbench文件对设计进行验证(略)63设计验证与综合编写testbench文件对设计进行验证(略)提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?64提纲什么是VerilogHDL?提纲什么是Verilog常用仿真器和综合软件ActiveHDLModelSimcadenceLDV、cocentric、...synopsysDesignCompileravanti!...常用仿真器和综合软件ActiveHDL65常用仿真器和综合软件ActiveHDL常用仿真器和综合软件A网络资源7(/pub1/EDA,/pub3/EBooks/...)ftp://metech:metech@95smthBBSIM/METech/Circuit等版面google...网络资源7(/pu66网络资源7(/puThanksshandy98@

注:本讲义中仅供本课程学习使用,部分内容引自《VerilogHDL硬件描述语言》,文中均没有特别注明,若引用请注意版权。

Thanks

注:本讲义中仅供本课程学习使用,部分内容引自《67Thanks

注:本讲义中仅供本课程学习使用,部分内容引自《VerilogHDL使用简介张建良shandy98@数字大规模集成电路讲义VerilogHDL使用简介张建良数字大规模集成电路讲义68VerilogHDL使用简介张建良数字大规模集成电路讲义V提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?69提纲什么是VerilogHDL?提纲什么是Verilog提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?70提纲什么是VerilogHDL?提纲什么是Verilog什么是VerilogHDL?VerilogHDL是一种硬件描述语言,用于从算法级、结构级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于开关级电路(例如pmos/nmos)、简单的门(例如库单元描述)和完整的复杂电子数字系统之间(例如CPU)什么是VerilogHDL?VerilogHDL是一种硬71什么是VerilogHDL?VerilogHDL是一种硬什么是VerilogHDL?(cont.)VerilogHDL语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。提供了编程语言接口(PLI),通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。支持多个设计层次的混合层次建模什么是VerilogHDL?(cont.)Verilog72什么是VerilogHDL?(cont.)Verilog更重要的是...VerilogHDL语言与C语言很相似,从C语言中继承了多种操作符和结构,其核心子集非常易于学习和使用--而这对大多数建模应用来说这已经足够。更重要的是...VerilogHDL语言与C语言很相似,从73更重要的是...VerilogHDL语言与C语言很相似,从VerilogHDL的历史最初是于1983年由GatewayDesignAutomation公司(后被CadenceDesignSystems公司收购)为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言,由于他们的模拟、仿真器产品的广泛使用,VerilogHDL作为一种便于使用且实用的语言逐渐为众多设计者所接受。VerilogHDL语言于1990年被推向公众领域。OpenVerilogInternational(OVI)是促进Verilog发展的国际性组织,1992年,OVI决定致力于推广VerilogOVI标准成为IEEE标准。这一努力最后获得成功,Verilog语言于1995年成为IEEE标准,称为IEEEStd1364-1995。完整的标准在Verilog硬件描述语言参考手册中有详细描述。VerilogHDL的历史最初是于1983年由Gat74VerilogHDL的历史最初是于1983年由Gat提纲什么是VerilogHDL?VerilogHDLvs.VHDLVerilogHDL语法设计描述层次设计的测试与验证可综合的设计有限状态机(FSM)一个除法器的设计实例常用仿真器和综合软件网络资源提纲什么是VerilogHDL?75提纲什么是VerilogHDL?提纲什么是VerilogVerilogHDLvs.VHDLVerilogHDL和VHDL都是用于逻辑设计的硬件描述语言并且都已成为IEEE标准。VHDL是在1987年成为IEEE标准,VerilogHDL则在1995年才正式成为IEEE标准。VerilogHDL和VHDL共同的特点:能形式化地抽象表示电路的行为和结构支持逻辑设计中层次与范围的描述,可借用高级语言的精巧结构来简化电路行为的描述具有电路仿真与验证机制以保证设计的正确性支持电路描述由高层到低层的综合转换硬件描述与实现工艺无关,有关工艺参数可通过语言提供的属性包括进去便于文档管理易于理解和设计重用。VerilogHDLvs.VHDLVerilogHD76VerilogHDLvs.VHDLVerilogHDVerilogHDLvs.VHDL(cont.)VerilogHDL和VHDL又各有其自己的特点:VerilogHDL拥有更广泛的设计群体,成熟的资源也远比VHDL丰富VerilogHDL是一种非常容易掌握的硬件描述语言(类C语言),而掌握VHDL设计技术就相对比较困难(类Ada语言)。一般认为VerilogHDL在系统级抽象方面比VHDL略差一些而在门级开关电路描述方面比VHDL强得多大学、研究机构更多使用VHDL,而工业

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论