Verilog模块modul.ppt_第1页
Verilog模块modul.ppt_第2页
Verilog模块modul.ppt_第3页
Verilog模块modul.ppt_第4页
Verilog模块modul.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第二讲Verilog语法,Verilog模块moduleVerilog语法要素Verilog数据类型及逻辑系统,2.1模块module,模块是verilog设计中的基本功能块,在第一讲有简单交待,这里详细介绍模块内部构成,wire,reg和其它类型的变量声明,数据流语句(assign),低层模块实例,always和initial块,所有行为语句都在块内,任务和函数,endmodule,module能够表示:物理块,如IC或ASIC单元逻辑块,如一个CPU设计的ALU部分整个系统每一个模块的描述从关键词module开始,有一个名称(如SN74LS74,DFF,ALU等等),由关键词endmodule结束。,module内部的5个部分:变量声明数据流语句低层模块实例行为描述块任务和函数每一部分在module内部出现的顺序是任意的。一个verilog源文件中可以有多个模块,且对排列顺序不做要求。,端口(Terminal),端口是模块与外界环境交互的接口例如IC芯片的输入、输出引脚就是它的端口。对于外部环境来讲,模块内部是不可见的,对模块的调用(实例引用)只能通过其端口进行。这种特点为设计者提供了很大的灵活性:只要接口保持不变,模块内部的修改并不会影响到外部环境我们也常常将端口称为终端(Terminal)。,模块端口等价于芯片的管脚(pin)模块通过端口与外部通信,端口列表和端口声明,端口在模块名字后的括号中列出,端口可以说明为input,output及inout,端口等价于硬件的引脚(pin),input输入端口output输出端口inout双向端口,端口声明,也可以采用类似ANSIC格式来声明端口,/D触发器moduleD_FF(inputd,clk,clr,outputregq,qb);endmodule,moduleadder(cout,sum,a,b,cin);input2:0a,b;inputcin;outputcout;output2:0sum;assigncout,sum=a+b+cin;endmodule,例设计三位全加器,这个例子描述了一个三位的加法器。从例子中可以看出整个VerilogHDL程序是嵌套在module和endmodule声明语句里的,只出现了一个assign语句。,模块名,端口列表,端口声明,数据流语句,例SR触发器模块,/SR触发器moduleSR_FF(Q,Q_n,S,R);outputQ,Q_n;/端口声明inputS,R;nandn1(Q,S,Q_n);nandn2(Q_n,R,Q);endmodule,模块中的5个部分并没全部出现,只出现在低层次模块实例化,nand为verilog中的与非门门级原语部件,D触发器模块,/D触发器moduleD_FF(d,clk,clr,q,qb);outputq,qb;inputd,clk,clr;regq,qb;/输出端口q,qb值保存always(posedgeclk)beginif(clr)q=1b0;elseq=d;endnot(qb,q);endmodule,该模块内包括always行为块语句,always块行为描述语句,4位寄存器设计,moduleD_FF(d,clk,clr,q,qb);.endmodulemoduleREG4(d,clk,clr,q,qb);output3:0q,qb;input3:0d;inputclk,clr;D_FFd0(d0,clk,clr,q0,qb0);D_FFd1(d1,clk,clr,q1,qb1);D_FFd2(d2,clk,clr,q2,qb2);D_FFd3(d3,clk,clr,q3,qb3);endmodule,模块中只出现在低层次模块实例化,可以将模块的实例通过端口连接起来构成一个大的系统或元件。在上面的例子中,REG4有模块DFF的四个实例。注意,每个实例都有自己的名字(d0,d1,d2,d3)。实例名是每个对象唯一的标记,通过这个标记可以查看每个实例的内部。实例中端口的次序与模块定义的次序相同。模块实例化与调用程序不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。,模块实例化(moduleinstances),.端口与外部信号的连接,在调用模块时,可以用顺序连接和按名连接把模块定义的端口与外部信号连接起来顺序连接:需要连接的信号需要与模块声明的端口列表一致;按名连接:端口和外部信号按名字连接在一起.,D_FFd0(d0,clk,clr,q0,qb0);D_FFd1(d1,clk,clr,q1,qb1);D_FFd2(d2,clk,clr,q2,qb2);D_FFd3(d3,clk,clr,q3,qb3);,当设计大规模系统时,端口太多,记住端口顺序不大可能,可以采用按名连接方法。,不需要连接的端口直接忽略掉即可,D_FFd0(.d(d0),.clk(clk),.clr(clr),.q(q0),.qb(qb0);,D_FFd0(.d(d0),.clk(clk),.clr(clr),.q(q0);,2.2Verilog语法要素,标识符关键词空白和注释常量字符串延时操作符,1.标识符(identifiers),标识符是用户在描述时给Verilog对象起的名字标识符必须以字母(a-z,A-Z)或(_)开头,后面可以是字母、数字、($)或(_)。最长可以是1023个字符标识符区分大小写,sel和SEL是不同的标识符模块、端口和实例的名字都是标识符moduleMUX2_1(out,a,b,sel);outputout;inputa,b,sel;notnot1(sel_,sel);andand1(a1,a,sel_);andand2(b1,b,sel);oror1(out,a1,b1);endmodule,Verilog标识符,合法和非法标识符,合法的:shift_reg_abusa_indexbus263,非法的:34net/不能用数字开头a*b_net/不能含有非字母符号*n263/不能含有非字母符号,1、用有意义的有效的名字如Sum、CPU_addr等。2、用下划线区分词。3、采用一些前缀或后缀,如时钟采用Clk前缀:Clk_50,Clk_CPU;低电平采用_n后缀:Enable_n;4、统一一定的缩写如全局复位信号Rst。5、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。6、参数采用大写,如SIZE。,标识符书写注意事项:,2.关键词,VerilogHDL定义了一系列保留字,叫做关键词。注意只有小写的关键词才是保留字。例如,标识符always(这是个关键词)与标识符ALWAYS(非关键词)是不同的。,alwaysandassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisableedgeelseendendcaseendmoduleendfunctionendprimitiveendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0highz1ififnoneinitialinoutinputintegerjoinlargemacrmodulemediummodulenandnegedgenmosnornotnotif0notif1oroutputparameterpmosposedgeprimitivepull0pull1pulluppulldownrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamstrong0strong1supply0supply1tabletasktimetrantranif0tranif1tritri0tri1triandtriortriregvectoredwaitwandweak0weak1whilewireworxnorxor,3.空白符和注释,moduleMUX2_1(out,a,b,sel);/Portdeclarationsoutputout;inputsel,/controlinputb,/*datainputs*/a;/*Thenetlistlogicselectsinput”a”whensel=0anditselects”b”whensel=1.*/not(sel_,sel);and(a1,a,sel_),(b1,b,sel);/Whatdoesthis/linedo?or(out,a1,b1);endmodule,格式自由使用空白符提高可读性及代码组织。Verilog忽略空白符除非用于分开其它的语言标记。,多行注释,在/*/内,4.整数常量和实数常量,整数的大小可以定义也可以不定义。整数表示为:其中size:大小,由十进制数表示的位数(bit)表示。缺省为32位base:数基,可为2(b)、8(o)、10(d)、16(h)进制。缺省为10进制value:是所选数基内任意有效数字,包括X、Z。实数常量可以用十进制或科学表示法表示。,Verilog中,常量(literals)可是整数也可以是实数,整数常量和实数常量,整数的大小可以定义也可以不定义。整数表示为:数字中(_)忽略,便于查看没有定义大小(size)整数缺省为32位缺省数基为十进制数基(base)和数字(16进制)中的字母无大小写之分当数值value大于指定的大小时,截去高位。如2b1101表示的是2b01实数常量实数可用科学表示法或十进制表示科学表示法表示方式:,表示:尾数10指数,5.字符串(string),字符串要在一行中用双引号括起来,也就是不能跨行。字符串中可以使用一些C语言转义(escape)符,如tn可以使用一些C语言格式符(如%b)在仿真时产生格式化输出:”Thisisanormalstring”Thisstringhasattabandendswithanewlinen”Thisstringformatsavalue:val=%b”,Verilog中,字符串大多用于显示信息的命令中。Verilog没有字符串数据类型,6.延时说明,“#”用于说明过程(procedural)语句和门的实例的延时,但不能用于模块的实例化。moduleMUX2_1(out,a,b,sel);outputout;inputa,b,sel;not#1not1(sel_,sel);and#2and1(a1,a,sel_);and#2and2(b1,b,sel);or#1or1(out,a1,b1);endmodule门延时有很多类名字:门延时(gatedelay),传输延时(propagationdelay),固有延时(intrinsicdelay),对象内在延时(intra-objectdelay),7.操作符,对数据进行运算,可分为算术操作符关系操作符相等操作符逻辑操作符其它,算术操作符,加减乘除:+,-,*,/取模:%算术操作结果的长度由最长的操作数决定,关系操作符,大于:小于:不大于:=,相等关系操作符,逻辑相等:=逻辑不等:!=全等:=z,x等位严格相等非全等:!=例:对于A=2b1x和B=2b1x,则A=B结果为x,A=B结果为1,逻辑操作符,逻辑与:当Addr为1时,Result=CodeA当Addr为0时,Result=CodeB,连接和复制操作,连接:将小表达式连接为大表达式例:wire7:0Dbus;assignDbus=Dbus3:0,Dbus7:4/将Dbus的低4位和高4位互换,2.3Verilog的数据类型及逻辑系统,学习Verilog逻辑值系统学习Verilog中不同类的数据类型理解每种数据类型的用途及用法数据类型说明的语法,学习内容:,1.Verilog采用的四值逻辑系统,0,Low,False,LogicLow,Ground,VSS,NegativeAssertion1,High,True,LogicHigh,Power,VDD,VCC,PositiveAssertionXUnknown:OccursatLogicalWhichCannotbeResolvedConflictHiZ,HighImpedance,Tri-Stated,DisabledDriver(Unknown),2.主要数据类型,Verilog主要有三类(class)数据类型:,net(线网):表示器件之间的物理连接register(寄存器):表示抽象存储元件parameters(参数):运行时的常数(run-timeconstants),(1)net(线网),net需要被持续的驱动,驱动它的可以是门和模块。当net驱动器的值发生变化时,Verilog自动的将新值传送到net上。在例子中,线网out由or门驱动。当or门的输入信号变化时将传输到线网net上。,net类的类型(线网),有多种net类型用于设计(design-specific)建模和工艺(technology-specific)建模没有声明的net的缺省类型为1位(标量)wire类型。但这个缺省类型可由下面的编译指导改变:default_nettype,net类的类型(线网),wire类型是最常用的类型,只有连接功能。wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源。或者将一个net声明为tri以指示这个net可以是高阻态Z(hign-impedance)。可推广至wand和triand、wor和triorwand、wor有线逻辑功能;与wire的区别见下页的表。trireg类型很象wire类型,但trireg类型在没有驱动时保持以前的值。这个值的强度随时间减弱。修改net缺省类型的编译指导:default_nettypenettype不能是supply1和supply0。,net类在发生逻辑冲突时的决断,Verilog有预定义的决断函数支持与工艺无关的逻辑冲突决断wire-and用于集电极开路电路wire-or用于射极耦合电路,(2)寄存器类(register),寄存器类型在赋新值以前保持原值寄存器类型大量应用于行为模型描述及激励描述。在下面的例子中,reg_a、reg_b、reg_sel用于施加激励给2:1多路器。用行为描述结构给寄存器类型赋值。给reg类型赋值是在过程块中。,寄存器类的类型,寄存器类有四种数据类型,不要混淆寄存器数据类型与结构级存储元件,如udp_dff,(3)Verilog中net和register区别,线网类型用于对结构化器件之间的物理连线的建模。线网类型主要有wire和tri两种。由于线网类型代表的是物理连接线,因此它不存贮逻辑值,必须由器件所驱动。当一个wire类型的信号没有被驱动时,缺省值为Z(高阻)。信号没有定义数据类型时,缺省为wire类型。,线网(net),寄存器类型通常用于对存储单元的描述,如D型触发器、ROM等。存储器类型的信号当在某种触发机制下分配了一个值,在分配下一个值之时保留原值。reg是最常用的寄存器类型,表示无符号整数变量。但必须注意的是,reg类型的变量,不一定都是存储单元,如在always语句中进行描述的必须用reg类型的变量。寄存器类型的值可取负数,但若该变量用于表达式的运算中,则按无符号类型处理,寄存器(Register),(4)Verilog中net和register声明语法,net声明rangedelay,net_name;net_type:net类型range:矢量范围,以MSB:LSB格式delay:定义与net相关的延时net_name:net名称,一次可定义多个net,用逗号分开。,举例:wirea;wandw;/一个标量wand类型nettri15:0busa;/16位三态总线wire0:31w1,w2;/两个32位wire,MSB为bit0,Verilog中net和register声明语法,举例:rega;/一个标量寄存器reg3:0v;/从MSB到LSB的4位寄存器向量reg7:0m,n;/两个8位寄存器integerA,B,C;/3个整数型寄存器,寄存器声明range,reg_name;reg_type:寄存器类型range:矢量范围,以MSB:LSB格式。只对reg类型有效reg_name:寄存器名称,一次可定义多个寄存器,用逗号分开,(5)端口的数据类型选择,moduletop;wirey;rega,b;DUTu1(y,a,b);initialbegina=0;b=0;#5a=1;endendmodule,moduleDUT(Y,A,B);outputY;inputA,B;wireY,A,B;and(Y,A,B);endmodule,输入端口可以由net/register驱动,但输入端口只能是net,输出端口可以是net/register类型,输出端口只能驱动net,在过程块中只能给register类型赋值,若Y,A,B说明为reg则会产生错误。,in1,in2,O,A,B,Y,双向端口输入/输出只能是net类型,a.输入端口从模块内部来讲,输入端口必须为线网(net)数据类型;从模块外部来看,输入端口可以连接到线网(net)或reg数据类型的变量。,b.输出端口从模块内部来讲,输出端口可以为线网(net)或reg数据类型;从模块外部来看,输出端口必须连接到线网(net)数据类型的变量。,C.输入/输出端口从模块内部来讲,输入/输出端口必须为线网(net)数据类型;从模块外部来看,输入/输出端口必须连接线网(net)数据类型的变量。,d.位宽匹配在进行调试或模块调用时,verilog允许模块内、外位宽不同,一般情况下编译器会给出警告。,e.未连接端口Verilog允许模块实例端口保持未连接状态。,/D触发器moduleTopregs1,s2,a,b;wirec;/调用D_FF模块,这里命名为dff0D_FFdff0(a,b,c,s1,s2);endmodule,例端口的互连,/D触发器moduleToprega,b;wirec,s1,s2;/调用D_FF模块,这里命名为dff0D_FFdff0(a,b,c,s1,s2);endmodule,/D触发器moduleD_FF(d,clk,clr,q,qb);outputq,qb;inputd,clk,clr;regq,qb;/输出端口q,qb值保存.endmodule,4.参数(parameters),用参数声明一个可变常量,常用于定义延时及宽度变量。参数定义的语法:parameter;可一次定义多个参数,用逗号隔开。在使用文字(literal)的地方都可以使用参数。参数的定义是局部的,只在当前模块中有效。参数定义可使用以前定义的整数和实数参数。,modulemod1(out,in1,in2);.parametercycle=20,prop_del=3,setup=cycle/2-prop_del,p1=8

温馨提示

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

评论

0/150

提交评论