首页 第4章模块和端口

第4章模块和端口

举报
开通vip

第4章模块和端口第4章模块和端口学习目标●说明Verilog模块定义中的各个组成部分,例如模块名、端口列表、参数、变量声明、数据流描述语句、行为语句、调用(实例引用)其他模块以及任务和函数等。●理解如何定义模块的端口列表以及在Verilog中如何声明。●讲述模块实例的端口连接规则。●理解如何通过有序列表和名字将端口与外部信号相连。●解释对Verilog标识符的层次引用。4.1模块module模块名,端口列表,端口声明(如果有端口)参数声明(可选)wire,reg和其他类型的变量的声明数据流语句(assige)低层模块实例alway...

第4章模块和端口
第4章模块和端口学习目标●说明Verilog模块定义中的各个组成部分,例如模块名、端口列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 、参数、变量声明、数据流描述语句、行为语句、调用(实例引用)其他模块以及任务和函数等。●理解如何定义模块的端口列表以及在Verilog中如何声明。●讲述模块实例的端口连接规则。●理解如何通过有序列表和名字将端口与外部信号相连。●解释对Verilog标识符的层次引用。4.1模块module模块名,端口列表,端口声明(如果有端口)参数声明(可选)wire,reg和其他类型的变量的声明数据流语句(assige)低层模块实例always块和initial块,所有行为语句全都在这些块中endmodule模块语句结束任务和函数图4.1Verilog模块的部件4.1模块模块定义以关键字module开始,模块名、端口列表、端口声明和可选的参数声明必须出现在其他部分的前面,endmodule语句必须为模块的最后一条语句。端口是模块与外部环境交互的通道,只有在模块有端口的情况下才需要有端口列表和端口声明。模块内部的5个组成部分是:变量声明、数据流语句、低层模块实例、行为语句块以及任务和函数。这些部分可以在模块中的任意位置,以任意顺序出现。在模块的所有组成部分中,只有module、模块名和endmodule必须出现,其他部分都是可选的,用户可以根据设计的需要随意选用。在一个Verilog源文件中可以定义多个模块,Verilog对模块的排列顺序没有要求。4.1模块为了理解模块的各个组成部分,下面我们以SR锁存器为例进行详细说明,如图4.2所示。图4.2SR锁存器4.1模块我们可以从例4.1中注意到以下几个特点:●在SR锁存器的描述中,图4.1中显示的各组成部分并未全部出现,例如变量声明、数据流(assign)语句和行为语句块(always和initial结构);●在SR锁存器的激励模块中包括了模块名、线网/寄存器/变量声明、低层模块实例、行为语句块和endmodule语句,但是没有包括端口列表、端口声明和数据流(assign)语句;●除了module和endmodule这一对关键字以及模块名,其他部分都是可选的,可以根据设计需要混合使用。//本例说明模块的构成部件//模块名和端口列表//SR锁存器模块moduleSR_latch(Q,Qbar,Sbar,Rbar);//端口声明outputQ,Qbar;inputSbar,Rbar;//调用(实例引用)较低层次的模块//本例中调用(实例引用)的是verilog原语部件nand,即与非门//注意它们之间互相交叉连接的情况nandn1(Q,Sbar,Qbar);nandn2(Qbar,Rbar,Q);//模块语句结束endmodule//模块名和端口列表//测试激励信号模块moduleTop;//声明wire,reg和其他类型的变量wireq,qbar;regset,reset;//调用(实例引用)较低层次的模块//本模块中调用(实例引用)的是SR_latchSR_latchml(q,qbar,~set,~reset);//行为模块,初始化initialbegin$monitor($time,"set=%b,reset=%b,q=%b\n",set,reset,q);set=0;reset=0;#5reset=1;#5reset=0;#5set=1;end//模块语句结束endmodule4.2端口端口是模块与外界环境交互的接口,例如IC芯片的输入、输出引脚就是它的端口。对于外部环境来讲,模块内部是不可见的,对模块的调用(实例引用)只能通过其端口进行。这种特点为设计者提供了很大的灵活性:只要接口保持不变,模块内部的修改并不会影响到外部环境。我们也常常将端口称为终端(terminal)。4.2端口4.2.1端口列表在模块的定义中包括一个可选的端口列表。如果模块和外部环境没有交换任何信号,则可以没有端口列表。考虑一个在顶层模块Top中被调用(实例引用)的四位加法器,图4.3显示了输入/输出端口的示意图。图4.3全加器和顶层模块的I/O端口4.2端口例4.2端口列表modulefulladd4(sum,c_out,a,b,c_in);//有端口列表的模块moduleTop;//没有端口列表的模块,仿真用顶层模块4.2.2端口声明端口列表中的所有端口必须在模块中进行声明,Verilog中的端口具有以下三种类型:输入/输出双向端口inout输出端口output输入端口input端口类型Verilog关键字根据端口信号的方向,端口具有三种类型:输入、输出和输入/输出。4.2.2端口声明例4.3端口声明modulefulladd4(sum,c_out,ina,inb,c_in);//端口声明开始output[3:0]sum;outputc_cout;input[3:0]ina,inb;inputc_in;//端口声明结束…﹤模块的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 ﹥…endmoduleassign{cout,sum}=ina+inb+cin;4位全加器的仿真程序`timescale1ns/1ns`include"adder4.v"moduleadder_tp;//测试模块的名字reg[3:0]ina,inb;//测试输入信号定义为reg型regcin;wire[3:0]sum;//测试输出信号定义为wire型wirecout;integeri,j;adder4adder(sum,cout,ina,inb,cin);//调用测试对象always#5cin=~cin;//设定cin的取值initialbeginina=0;inb=0;cin=0;for(i=1;i<16;i=i+1)#10ina=i;//设定a的取值endinitialbeginfor(j=1;j<16;j=j+1)#10inb=j;//设定b的取值endinitial//定义结果显示 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 begin$monitor($time,,,"%d+%d+%b={%b,%d}",ina,inb,cin,cout,sum);#160$finish;endendmodule在Verilog中,所有的端口隐含地声明为wire类型,因此如果希望端口具有wire数据类型,将其声明为三种类型之一即可;如果输出类型的端口需要保存数值,则必须将其显式地声明为reg数据类型。例4.4DFF模块的端口声明moduleDFF(q,d,clk,reset);outputq;regq;//输出端口q保持值,因此它被声明为寄存器类型(reg)的变量inputd,clk,reset;……endmodule不能将input和inout类型的端口声明为reg数据类型,这是因为reg类型的变量是用于保存数值的,而输入端口只反映与其相连的外部信号的变化,并不能保存这些信号的值。4.2.2端口声明例4.5ANSIC风格的端口声明modulefulladd4(outputreg[3:0]sum,outputregc_out,input[3:0]a,b,//默认类型为wireinputc_in;//默认类型为wire…﹤模块的内容﹥…endmoduleassign{cout,sum}=ina+inb+cin;4.2.3端口连接规则我们可以将一个端口看成是由相互连接的两个部分组成,一部分位于模块的内部,另一部分位于模块的外部。当在一个模块中调用(实例引用)另一个模块时,端口之间的连接必须遵守一些规则。图4.4端口连接规则4.2.3端口连接规则输入端口从模块内部来讲,输入端口必须为线网数据类型;从模块外部来看,输入端口可以连接到线网或reg数据类型的变量。输出端口从模块内部来讲,输出端口可以是线网或reg数据类型;从模块外部来看,输出必须连接到线网类型的变量,而不能连接到reg类型的变量。输入/输出端口从模块内部来讲,输入/输出端口必须为线网数据类型;从模块外部来看,输入/输出端口也必须连接到线网类型的变量。4.2.3端口连接规则位宽匹配在对模块进行调用(实例引用)的时候,Verilog允许端口的内、外两个部分具有不同的位宽。在一般情况下,Verilog仿真器会对此给予警告。未连接端口Verilog允许模块实例的端口保持未连接的状态。例如,如果模块的某些输出端口只用于调试,那么这些端口可以不与外部信号连接。fulladd4fa0(SUM,A,B,C_IN);//输出端口c_out没有连接4.2.3端口连接规则非法端口连接举例下面我们以例4.3中的模块fulladd4在测试激励块Top中的调用(实例引用)为例,来说明端口的连接规则。例4.6非法端口连接moduleTop;//声明连接变量reg[3:0]A,B;regC_IN;reg[3:0]SUM;wireC_OUT;//调用(实例引用)fulladd4,在本模块中把它命名为fa0fulladd4fa0(SUM,C_OUT,A,B,C_IN);//非法连接,因为fulladd4模块中的输出端口sum被连接到Top模块中的寄存器变量SUM上·﹤测试激励﹥·endmodule在这个例子中,如果把SUM变量声明为wire类型,则这种连接是正确的。4.2.4端口与外部信号的连接在对模块调用(实例引用)的时候,可以使用两种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 将模块定义的端口与外部环境中的信号连接起来:按顺序连接以及按名字连接。但是,这两种方法不能混合在一起使用。顺序端口连接对于初学者,按照顺序进行端口连接是很直观的方法。在这种方法中,需要连接到模块实例的信号必须与模块声明时目标端口在端口列表中的位置保持一致。moduleTop;//声明连接变量reg[3:0]A,B;regC_IN;wire[3:0]SUM;wireC_OUT;//调用(实例引用)fulladd4,在本模块中把它命名为fa_ordered//信号按照端口列表中的次序连接fulladd4fa_ordered(SUM,C_OUT,A,B,C_IN);…﹤测试激励﹥…endmodulemodulefulladd4(sum,c_out,a,b,c_in);output[3:0]sum;outputc_cout;input[3:0]a,b;inputc_in;…﹤模块的内容﹥…endmodule例4.7顺序端口连接顺序端口连接信号按照端口列表中的次序连接4.2.4端口与外部信号的连接命名端口连接在大型的设计中,模块可能具有很多个端口。在这种情况下,要记住端口在端口列表中的顺序是很困难的,而且很容易出错。因此,Verilog提供了另一种端口连接方法:命名端口连接。顾名思义,在这种方法中端口和相应的外部信号按照其名字进行连接,而不是按照位置。使用这种方法调用(实例引用)模块fulladd4的Verilog程序代码如下所示。4.2.4端口与外部信号的连接//调用(实例引用)以fa_byname命名的全加器模块fulladd4,通过端口名与外部信号连接Fulladd4fa_byname(.cout(C_OUT),.sum(SUM),.b(B),.c_in(C_IN),.a(A),);注意,在这种连接方法中,需要与外部信号连接的端口必须用名字进行说明,而不需要连接的端口只需简单地忽略掉即可。例如,如果端口c_out需要悬空,则Vefilog程序代码如下所示。注意,在端口连接列表中端口c_out被忽略。//调用(实例引用)以fa_byname命名的全加器模块fulladd4,通过端口名与外部信号连接fulladd4fa_byname(.sum(SUM),.b(B),.c_in(C_IN),.a(A),);相对于顺序端口连接,命名端口连接的另一个优点是,只要端口的名字不变,即使模块端口列表中端口的顺序发生了变化,模块实例的端口连接也无需进行调整。【实验1】简单组合电路的设计(三选一电路)modulemux21a(a,b,s,y);inputa,b,s;outputy;regy;always@(aorbors)beginif(s==1'b0)beginy<=a;endelsebeginy<=b;endendendmodulemoduleMUXK(a1,a2,a3,s0,s1,outy);inputa1,a2,a3,s0,s1;outputouty;wireouty;wiretmp;mux21au1(.a(a2),.b(a3),.s(s0),.y(tmp));mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy));endmodule4.3层次命名用Verilog进行层次化设计。每一个模块实例、信号或变量都使用一个标识符进行定义;在整个设计层次中,每个标识符都具有惟一的位置。层次命名允许设计者在整个设计中通过惟一的名字表示每个标识符。层次名由一连串使用“.”分隔的标识符组成,每个标识符代表一个层次,这样设计者就可以在设计中的任何地方通过指定完整的层次名对每个标识符进行访问。4.3层次命名我们将设计中的顶层模块称为“根模块”,它不能被其他模块所调用(实例引用),它是整个设计层次的起点。我们可以从这个起点出发,沿着层次路径找到设计中的每个标识符。激励(根层)m1(SR_latch)n1(nand)n2(nand)Q,QbarS,R(信号)q,qbarset,reset(变量)图4.5SR锁存器仿真的设计层次例4.8层次名stimulusstimulus.qstimulus.qbarstimulus.setstimulus.resetstimulus.m1stimulus.ml.Qstimulus.ml.Qbarstimulus.ml.Sstimulus.ml.Rstimulus.nlstimulus.n2例子中,stimulus是顶层模块,它不能在其他模块中被调用(实例引用),因此是设计层次的根。在stimulus中定义的标识符包括q,qbar,set和reset,并且调用(实例引用)了模块SR_latch(实例名为m1)。在实例m1中调用(实例引用)了预定义的nand(实例名为n1和n2),其中定义的端口信号为Q,Qbar,S和R。4.4小结●模块定义包括多个组成部分。关键字module和endmodule是必须使用的。其他各个部分,诸如端口列表、端口声明、变量和信号声明、数据流语句、行为语句块、低层模块实例以及任务和函数都是可选的,由用户根据需要进行添加。●端口是模块与其他模块或外部环境通信的渠道。模块可以具有一个端口列表,其中的每个端口必须在模块中声明为输入、输出或输入/输出三种类型之一。在对模块进行调用(实例引用)的时候,必须遵守有关端口连接的规则。ANSIC风格的端口声明将端口声明嵌入到端口列表中。●端口的连接方法有两种:顺序连接和命名连接。●设计中的每个标识符都具有惟一的层次名,它使得用户可以在设计中的任何位置访问设计中的每个标识符。4.5习题1.模块的基本组成部分有哪些?哪几个部分必须出现?答:1.module,模块名2.端口列表portlist3.参(变)数的参数Parameters4.线网/寄存器/变量声明Declarationsofwires,regsandothervariables5.低层模块实例Instantiationoflowerlevelmodules6.数据流语句Dataflowstatements(assign)7.行为语句块(always和initial结构)alwaysandinitialblocks8.任务和函数tasksandfunctions9.endmodule模块语句结束只有module、模块名和endmodule必须出现,其他部分都是可选的2.一个不与外部环境交互的模块是否有端口?模块定义中是否有端口列表?答:一个不与外部环境交互的模块没有端口如果模块和外部环境没有交换任何信号,则可以没有端口列表。4.5习题3.一个4位并行移位寄存器的FO引脚如下图所示。写出模块shift_reg的定义,只需写出端口列表和端口定义,不必写出模块的内部结构。4.5习题moduleshift_reg(reg_out,reg_in,clock);output[3:0]reg_out;input[3:0]reg_in;inputclock;//不必写出模块的内部结构endmodule4.5习题4.定义一个顶层模块stimulus,在其中声明reg变量REG_IN(4位)和CLK(1位)以及wire变量REG_OUT(4位)。在其中调用(实例引用)模块shift_reg,实例名为sr1,使用顺序端口连接。modulestimulus;wire[3:0]reg_out;reg[3:0]reg_in;regclock;shift_regsr1(reg_out,reg_in,clock);//不必写出模块的内部结构endmodule4.5习题5.将上题的端口连接方法改为命名连接。modulestimulus;wire[3:0]REG_OUT;reg[3:0]REG_IN;regCLOCK;shift_regsr1(.reg_out(REG_OUT),.reg_in(REG_IN),.clock(CLOCK));//不必写出模块的内部结构endmodule6.写出REG_IN,CLK和REG_OUT的层次名。答:Stimulus.REG_INStimulus.CLKStimulus.REG_OUT4.5习题7.写出模块实例sr1及其端口clock和reg_in的层次名。答:Stimulus.sr1.clockStimulus.sr1.reg_in
本文档为【第4章模块和端口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_732362
暂无简介~
格式:ppt
大小:639KB
软件:PowerPoint
页数:0
分类:
上传时间:2021-09-14
浏览量:5