《Verilog HDL语言学习.ppt》由会员分享,可在线阅读,更多相关《Verilog HDL语言学习.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心EDA课程设计-Verilog HDL 程序设计 教师:郑兆兆 2013年12月30日燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l原理图设计输入l硬件描述语言设计输入(硬件描述语言设计输入(VHDL、Verilog HDL)l波形设计输入l底层设计输入l层次设计输入EDA设计输入方式燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 Verilog HDL是目前应用最为广泛的硬件描述语言之一,与VHDL各有千秋。1993年,IEEE专门成立IEEE 1364工作组制定Verilog HDL的标准,在1995年发布
2、了第1个Verilog HDL的标准,即IEEE 1364-1995。随后,IEEE在2002年发布了经过修订的Verilog HDL新标准,命名为IEEE 1364-2001。Verilog HDL允许在不同的抽象级别上对数字电路系统进行描述,这些抽象级别包括系系统统级级(System Level)、算算法法级级(Algorithm Level)、寄寄存存器器传传输输级级(Register Transfer Level)、门级(Gate Level)和开关级(Switch Level)。系统级、算法级、寄存器传输级描述都被称为行为描述。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心
3、心Verilog HDL语言特点:(1)Verilog HDL语法规则与C语言十分相像。(2)Verilog HDL语法检查不严格。(3)Verilog HDL自身带有仿真指令。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心Verilog HDL基础lVerilog HDL设计模块结构 一个完整的Verilog HDL设计模块包括端口定义、I/O声明、变量类型声明和功能描述等4个部分。module decide(f,a,b,c);/端口定义 input a,b,c;/*I/O output f;声明*/wire a,b,c;/*变量 reg f;类型声明*/always(a or
4、b or c)/*功 begin 能 .描 end 述*/endmodule燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 (1)模块端口定义 模块端口定义用来声明电路设计模块的输入输出端口,端口定义格式如下:module 模块名(端口1,端口2,端口3,);例:例:module decide(f,a,b,c);(2)模块的I/O声明 模块的I/O声明用来声明模块端口定义中各端口数据流动方向,包括:input(输入),output(输出)和inout(双向)。I/O声明格式如下:input 端口1,端口2,端口3,;/声明输入端口 output 端口1,端口2,端口3,;/声明输出
5、端口 例:例:input a,b,c;output f;燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 (3)变量类型声明 变量类型声明用来表明设计电路的端口和内部电路使用的变量的数据类型。变量的数据类型主要有wire(连线),reg(寄存器),integer(整型),real(实型)和time(时间)输入输入/输出端口类型默认时,自动定义输出端口类型默认时,自动定义为为wire型。型。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 (4)功能描述 功能描述是Verilog HDL程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑关系,在电路上相当于器
6、件的内部电路结构。功能描述可以用assign语句、元件例化(InstAntiate)、always块语句、initial块语句等方法来实现,通常把确定这些设计模块描述的方法称为建模。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l Verilog HDL的词法 (一)空白符和注释 (二)常数 (三)字符串 (四)标识符 区分大小写(区分大小写(字母字母、数字、数字、下划线下划线)(五)关键词 (六)操作符 (1)算术操作符 求余符号%(2)逻辑操作符 (3)位运算 (4)关系操作符 等 (七)Verilog HDL数据对象燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l
7、Verilog HDL的语句的语句 (一一)赋值语句赋值语句 (1)门基元赋值语句门基元赋值语句 基本逻辑门关键词基本逻辑门关键词 例化门标识符例化门标识符(门输出门输出,门输入门输入1,门门输入输入2,门输入门输入n);例如:例如:具有具有a,b,c,d输入和输入和y输出与非门的门基元赋值语句输出与非门的门基元赋值语句为:为:nand u1(y,a,b,c,d);燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(2)连续赋值语句连续赋值语句的关键词是assign,赋值符号是“=”,连续赋值语句“=”号两边的变量都应该是wire型变量。连续赋值语句的格式为assign 赋值变量=表达
8、式;例如,具有a,b,c,d输入和y输出与非门的连续赋值语句为assign y=(a&b&c&d);燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(3)过程赋值语句过程赋值语句出现在initial和always块语句中,包括阻塞赋值语句、非阻塞赋值语句。在过程赋值语句中,赋值变量必须是寄存器型变量(reg、integer、real)。i)阻塞赋值语句 阻塞赋值符号是“=”,语句格式为 赋值变量=表达式;例:y=(a&b&c&d);其值在该语句结束即可得到。ii)非阻塞赋值语句 非阻塞赋值符号是“=”,语句格式为:赋值变量=表达式;例:y=(a&b&c&d);其值不像在阻塞赋值语句那
9、样,语句结束时即刻得到,而在该块语句结束才可得到。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心always(posedge clock)beginm=3;n=75;n=m;r=n;/r=75;end燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心阻塞赋值、非阻塞赋值用法8要点:(1)时序电路建模时,用非阻塞赋值=。(2)锁存器电路建模时,用非阻塞赋值=。(3)用always块建立组合逻辑模型时,用阻塞赋值=。(4)在同一个always块中建立时序和组合逻辑电路时,用非阻塞赋值。(5)在同一个always块不要既用非阻塞赋值又用阻塞赋值。(6)不要在一个以上always块
10、中为同一个变量赋值。(7)用$strobe系统任务来显示用非阻塞赋值的变量值。(8)在赋值时不要使用#0延迟。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 (二二)条件语句条件语句 条件语句包含if语句和case语句,它们都是顺序语句,应放在always或initial块中。(1)if语句 if语句有3种格式 i)if(表达式)begin 语句;end ii)if(表达式)begin 语句;end else begin 语句;end iii)if(表达式)begin 语句;end else if(表达式).燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(2)case语
11、句case(表达式)选择值1:语句1;选择值2:语句2;选择值n:语句n;default:语句n+1;endcase/case语句变体casex、casez燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 (三三)循环语句循环语句 循环语句包含for语句,repeat语句,while语句和forever语句4种。建议使用for语句。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(四四)结构声明语句结构声明语句结构声明语句包括always,initial,task和function等4种结构。(1)always块语法结构always(敏感信号表达式)/列出影响块内取值的所有
12、信号,各信号之间用“or”连接。对于组合电路而言,所有输入信号都是敏感信号;对于时序电路而言,一般取时钟信号和复位信号为敏感信号。begin/过程赋值语句;/if语句,case语句;/tast语句、function语句;end燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心敏感信号使用注意事项:(1)敏感信号列表中的任何信号发生变化时,都将启动always块语句,使always块内语句按顺序执行一次。(2)敏感信号可以为电平敏感信号,也可以是边沿敏感信号。(3)关键词“posedge”表示上升沿,关键词“negedge”表示下降沿。(4)在一个敏感信号列表中,不要既有电平信号又有边沿
13、信号。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(五)语句的顺序执行与并行执行 Verilog HDL中由顺序执行语句和并行执行语句之分。Verilog HDL的always块中的语句是顺序语句,按照程序书写的顺序执行。但always块本身却是并行语句,always块语句中敏感信号表中列出的任何信号的改变,都将启动always块语句,使always块语句内相应的顺序语句被执行一次。always块、initial块、和assign都是并行的。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心 Verilog HDL模块设计模块设计(一)门电路设计(一)门电路设计(1)as
14、sign语句建模语句建模用用assign描述一个描述一个2输入端与非门的语句格输入端与非门的语句格式为式为assign y1=(a1&b1);y1为为wire型变量型变量燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(2)用门级元件例化建模方式(门基元赋值语句)门类型关键词例化门的名称(端口列表);门类型关键词包括:not(非门)、and(与门)、nand(与非门)、or(或门)、nor(或非门)、xor(异或门)、xnor(异或非门)、buf(缓冲器)及bufif1、bufif0、notif1和notif0等各种三态门。用门级元件例化建模方式来描述2输入端与非门的语句格式为 na
15、nd u1(y1,a1,b1);/u1是可选的例化门名称燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(二)组合逻辑电路设计(二)组合逻辑电路设计 在组合逻辑电路中,任何时刻的输出仅决定于当时的输入信号 在数字系统中,有些逻辑电路是经常使用的,如加法器、编码器、译码器、数据选择器、数据比较器、奇偶校验器等。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l用Verilog HDL的case语句可以直接描述真值表3-3(35页)表示的逻辑抽象结果,完整的源程序bcd8421.v如下:lmodule bcd8421(A,B);linput3:0 A;loutput3:0 B;
16、lreg3:0 B;lalways(A)lbeginlcase(A)l0:B=3;1:B=4;l2:B=5;3:B=6;l4:B=7;5:B=8;l6:B=9;7:B=10;l8:B=11;9:B=12;ldefault:B=4bx;lendcaselendlendmodule燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l下面是用Verilog HDL的if语句编写的8421BCD码到余3BCD码转换电路bcd8421_1.v:lmodule bcd842_1(A,B);linput3:0 A;loutput3:0 B;lreg3:0 B;lalways(A)lbeginlif(
17、A=9)lB=A+3;lelse B=4bx;lendlendmodulel在源程序中,仅用“B=A+3;”就可以得到余3BCD码的结果。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(三)基于(三)基于Verilog HDL的触发器设计的触发器设计 图图3-2 基本基本RS触发器电路结构触发器电路结构 根据基本根据基本RS触发器的输出表达式用触发器的输出表达式用Verilog HDL的结构描述的结构描述方式编写的源程序方式编写的源程序RS_FF.v如下:如下:lmodule RS_FF(Q,QN,SDN,RDN);linput SDN,RDN;loutput Q,QN;lassi
18、gn Q=(SDN&QN);lassign QN=(RDN&Q);lendmodule 燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l根据基本RS的特性(见表3-4,37页),也可以用Verilog HDL行为描述方式设计基本RS触发器,源程序RS_FF_1.v如下:lmodule RS_FF(Q,QN,SDN,RDN);linput SDN,RDN;loutput Q,QN;lreg Q,QN;lalways(RN or SN)lbeginlcase(RN,SN)lb00:begin Q=bx;QN=bx;endlb01:begin Q=0;QN=1;endlb10:begin
19、 Q=1;QN=0;endlb11:begin Q=Q;QN=QN;endlendcaselendlendmodule燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心(四)时序逻辑电路设计时序逻辑电路设计 电路结构决定了时序逻辑的特点,即任一时刻电路结构决定了时序逻辑的特点,即任一时刻的输出信号不仅取决于当时的输入信号,而且的输出信号不仅取决于当时的输入信号,而且还取决于电路的原来的状态。还取决于电路的原来的状态。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l根据十进制同步计数器(异步清除)的功能,用Verilog HDL设计的源程序CT74160.v如下:lmodul
20、e CT74160(LDN,D3,D2,D1,D0,CP,CRN,EP,ET,Q3,Q2,Q1,Q0,OC);linput LDN,D3,D2,D1,D0,CP,CRN,EP,ET;loutput Q3,Q2,Q1,Q0,OC;lreg Q3,Q2,Q1,Q0,OC;lreg3:0 Q_TEMP;lalways(posedge CP or negedge CRN)lbeginlif(CRN)Q_TEMP=4b0000;lelse if(LDN)Q_TEMP=D3,D2,D1,D0;l else if(EP&ET)l if(Q_TEMP4b1001)Q_TEMP=Q_TEMP+1;l else
21、Q_TEMP=4b0000;l else Q_TEMP=Q_TEMP;lendlalwayslbeginlif(Q_TEMP=4b1001&ET=1b1)OC=1b1;lelse OC=1b0;lQ3,Q2,Q1,Q0=Q_TEMP;lendlendmodule燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心用结构描述实现电路系统设计用结构描述实现电路系统设计l任何用任何用Verilog HDL描述的电路设计模块描述的电路设计模块(module),均可用模块例化语句,例化,均可用模块例化语句,例化一个元件,来实现电路系统的设计。一个元件,来实现电路系统的设计。l模块例化语句格式模块例
22、化语句格式与逻辑门例化语句格与逻辑门例化语句格式相同,具体格式如下:式相同,具体格式如下:l元件名元件名例化元件的名称例化元件的名称(端口列表端口列表);燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l(一)位置关联法l位置关联法要求端口列表中的引脚名称应与设计模块的输入/输出端口一一对应,多个端口名之间用“,”(半角逗号)分隔。l例如,在4位二进制计数器cnt4e的设计中,Q、COUT、CLK和ENA分别是4位二进制计数器的状态输出端和使能控制输入端(注意这是电路设计时用“module cnt4e(Q,COUT,CLK,ENA);”语句定义的端口名称和顺序),则语句“cnt4e
23、u1(X1,X2,CLK,ENA);”表示cnt4e元件的Q、COUT、ClK和ENA引脚分别与插座上的X1、X2、CLK和ENA引脚连接。燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l(二)名称关联法l名称关联法的端口列表格式如下:l(.设计模块端口名(插座引脚名),.设计模块端口名(插座引脚名,);燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心lcnt4e是用Verilog HDL设计的4位二进制计数器的元件符号,源程序如下。lmodule cnt4e(Q,COUT,CLK,ENA);linput CLK,ENA;loutput3:0 Q;loutput COUT
24、;lreg3:0 Q;lreg COUT;lalways(posedge CLK)lbeginlif(ENA)lQ=Q+1;lif(Q=b1111)COUT=b1;lelse COUT=b0;lendlendmodule燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心ldec7s是用Verilog HDL设计的七段显示译码器的元件符号,源程序如下。lmodule dec7s(A,Q);linput3:0 A;loutput6:0 Q;lreg 6:0 Q;lalways(A)lbeginlcase(A)l0:Q=b0111111;l1:Q=b0000110;l2:Q=b1011011
25、;l3:Q=b1001111;l4:Q=b1100110;l5:Q=b1101101;l6:Q=b1111101;l7:Q=b0000111;l8:Q=b1111111;l9:Q=b1101111;l10:Q=b1110111;l11:Q=b1111100;l12:Q=b0111001;l13:Q=b1011110;l14:Q=b1111001;l15:Q=b1110001;lendcaselendlendmodule燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心l根据图3-4所示的原理图结构,用Verilog HDL位置关联法描述的计数译码电路的顶层源程序文件cnt_dec7s.
26、v如下:lmodule cnt_dec7s(Q,COUT,CLK,ENA);linput CLK,ENA;loutput6:0 Q;loutput COUT;lwire3:0 X1;lcnt4e u1(X1,COUT,CLK,ENA);/module cnt4e(Q,COUT,CLK,ENA);ldec7s u2(X1,Q6:0);/module dec7s(A,Q);lendmoduleX1燕燕 山山 大大 学学 电电 子子 实实 验验 中中 心心cnt4e u1(.Q(X1),.COUT(COUT),.CLK(CLK),.ENA(ENA);dec7s u2(.A(X1),.Q(Q6:0);X1