verillog模块的定义与调用_第1页
verillog模块的定义与调用_第2页
verillog模块的定义与调用_第3页
verillog模块的定义与调用_第4页
verillog模块的定义与调用_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、一、模块的结构与定义1、模块的结构Verilog的基本设计单元就是“模块”。它主要由两部分构成,一部分描述接口,另一部分描述逻辑功能。eg:moudle block(a,b,c,d);input a,b;output c,d;assign c=a|b;assgin d=a&b;endmoudleaabcd模块是模块是verilog设计中的基本功能块设计中的基本功能块,这里,这里详细介绍模块内部详细介绍模块内部构成构成module 模块名 ( 端口列 表 );端口声明端口声明, ,参数声明参数声明wire,regwire,reg和其它类型和其它类型的变量声明的变量声明数据流语句数据流语句(ass

2、ign)assign)低层模块实例低层模块实例alwaysalways和和initialinitial块,所有块,所有行为语句都在块内行为语句都在块内任务和函数任务和函数endmoduleendmodule必须出现必须出现可选可选modulemodule能够表示:能够表示:物理块,如物理块,如ICIC或或ASICASIC单元单元逻辑块,如一个逻辑块,如一个CPUCPU设计的设计的ALUALU部分部分整个系统整个系统每一个模块的描述从关键词每一个模块的描述从关键词modulemodule开始,有一个名称(如开始,有一个名称(如SN74LS74SN74LS74,DFFDFF,ALUALU等等),由

3、关键词等等),由关键词endmoduleendmodule结束结束。module内部的内部的5个部分:个部分:变量声明变量声明数据流语句数据流语句低层模块实例低层模块实例行为描述块行为描述块任务和函数任务和函数每一部分在每一部分在module内部出现的顺序是任意的。内部出现的顺序是任意的。一个一个verilog源文件中可以有多个模块,且对排列顺序不做要求源文件中可以有多个模块,且对排列顺序不做要求。模块端口等价于芯片的管脚(模块端口等价于芯片的管脚(pin)pin)模块通过端口与外部通信模块通过端口与外部通信 端口是模块与外界环境交互的接口例如IC芯片的输入、输出引脚就是它的端口。对于外部环境

4、来讲,模块内部是模块内部是不可见的,对模块的调用不可见的,对模块的调用( (实例引用实例引用) )只能通过其端口进行。只能通过其端口进行。这种特点为设计者提供了很大的灵活性:只要接口保持不变,模块内部的修改并不会影响到外部环境我们也常常将端口称为终端(Terminal)。input input 输入端口输入端口output output 输出端口输出端口inout inout 双向端口双向端口端口在模块名字端口在模块名字后的括号中列出后的括号中列出端口可以说明为端口可以说明为inputinput, , outputoutput及及inoutinout端口等价于硬件端口等价于硬件的引脚的引脚(p

5、in)(pin)端口声明端口声明/D /D 触发器触发器module D_FF (input d, clk, clr,module D_FF (input d, clk, clr, output reg q,qb); output reg q,qb);endmoduleendmodulemodule adder ( cout,sum,a,b,cin ); input 2:0 a,b; input cin; output cout; output 2:0 sum; assign cout,sum=a+b+cin;endmodule例设计三位全加器例设计三位全加器这个例子描述了一个三位的加法器。从

6、例子中可以看出整个这个例子描述了一个三位的加法器。从例子中可以看出整个Verilog HDLVerilog HDL程序是嵌套在程序是嵌套在modulemodule和和endmoduleendmodule声明语句里的,声明语句里的,只出现了一个只出现了一个assignassign语句。语句。adderaddersum2:0a2:0a2:0b2:0b2:0cincincoutcout模块名模块名端口列表端口列表端口声明端口声明数据流语句数据流语句=1&ABC=ABABSCCOCOCOABABCiSCOCIABS例例SR触发器模块触发器模块/SR /SR 触发器触发器modulemodule SR_

7、FF (SR_FF (Q, Q_n,S,RQ, Q_n,S,R););output Q, Q_n; /output Q, Q_n; /端口声明端口声明input S,R;input S,R;nandnand n1(Q, S,Q_n); n1(Q, S,Q_n);nandnand n2(Q_n,R,Q); n2(Q_n,R,Q);endmoduleendmodule模块中的模块中的5个部分并没全部出现,个部分并没全部出现,只出现在低层次模块实例只出现在低层次模块实例化化nandnand为为verilogverilog中的与中的与非门门级原语部件非门门级原语部件/D /D 触发器触发器module

8、 module D_FF (D_FF (d, clk,clr,q,qbd, clk,clr,q,qb););output q, qb;output q, qb;input d,clk,clrinput d,clk,clr; ;reg q, qb;/reg q, qb;/输出端口输出端口q, qbq, qb值保存值保存always always (posedge clk)(posedge clk)beginbeginif (clr)if (clr)q=1b0;q=1b0;elseelseq=d;q=d;endendnot not (qb,q);(qb,q);endmoduleendmodule

9、该模块内包括该模块内包括alwaysalways行行为块语句为块语句alwaysalways块行为描述语句块行为描述语句4位寄存器设计位寄存器设计module D_FF (d, clk, clr, q, qb); .endmodulemodule REG4( d, clk, clr, q, qb); output 3: 0 q, qb; input 3: 0 d; input clk, clr; D_FF d0 (d 0, clk, clr, q 0, qb 0); D_FF d1 (d 1, clk, clr, q 1, qb 1); D_FF d2 (d 2, clk, clr, q 2,

10、 qb 2); D_FF d3 (d 3, clk, clr, q 3, qb 3);endmodule模块中只出现在模块中只出现在低层次模块实例化低层次模块实例化可以将模块的实例通过端口连接起来构成一个大的系可以将模块的实例通过端口连接起来构成一个大的系统或元件。统或元件。在上面的例子中,在上面的例子中,REG4REG4有模块有模块DFFDFF的四个实例。注意,的四个实例。注意,每个实例都有自己的名字每个实例都有自己的名字(d0, d1, d2, d3)(d0, d1, d2, d3)。实例名。实例名是每个对象唯一的标记,通过这个标记可以查看每个是每个对象唯一的标记,通过这个标记可以查看每个

11、实例的内部。实例的内部。实例中端口的次序与模块定义的次序相同。实例中端口的次序与模块定义的次序相同。模块实例化与调用程序不同。每个实例都是模块的一模块实例化与调用程序不同。每个实例都是模块的一个完全的拷贝,相互独立、并行。个完全的拷贝,相互独立、并行。模块实例化模块实例化(module instances)在调用模块时,可以用在调用模块时,可以用顺序连接顺序连接和和按名连接按名连接把模块定义的把模块定义的端口与外部信号连接起来端口与外部信号连接起来顺序连接:需要连接的顺序连接:需要连接的信号信号需要与模块声明的端口列表一致;需要与模块声明的端口列表一致;按名连接:端口和外部信号按名字连接在一起

12、按名连接:端口和外部信号按名字连接在一起. . D_FF d0 (d 0, clk, clr, q 0, D_FF d0 (d 0, clk, clr, q 0, qb 0);qb 0); D_FF d1 (d 1, clk, clr, q 1, D_FF d1 (d 1, clk, clr, q 1, qb 1);qb 1); D_FF d2 (d 2, clk, clr, q 2, D_FF d2 (d 2, clk, clr, q 2, qb 2);qb 2); D_FF D_FF d3d3 (d 3, clk, clr, q 3, (d 3, clk, clr, q 3, qb 3);

13、qb 3);当设计大规模系统时,端口太多,记住端口顺序不大可当设计大规模系统时,端口太多,记住端口顺序不大可能,可以采用按名连接方法。能,可以采用按名连接方法。不需要连接的端口直接忽略掉即可不需要连接的端口直接忽略掉即可D_FF D_FF d0d0 (.(.d d(d(d 0), . 0), .clkclk(clk), .(clk), .clrclr(clr), .(clr), .q q(q 0), .(q 0), .qbqb(qb 0);(qb 0); D_FF D_FF d0d0 (. (.d d(d 0), .(d 0), .clkclk(clk), .(clk), .clrclr(cl

14、r), .(clr), .q q(q 0);(q 0); 2、模块的定义 (1)端口定义 在模块被引用的时候,有些信号要输入到被引用的模块中,有的信号需要从被引用的模块中取出来。在引用模块的时候其端口可以直接用两种方法连接: (a)在引用的时候,严格按照模块定义的端口顺序来连接,不用标明原模块定义时规定的端口名,比如说:模块名(连接端口1信号名,连接端口2信号名,连接端口3信号名,); (b)在引用的时候,可以用“.”符号来标明原模块是定义时的端口名,比如:模块名(.端口1名(连接信号1名),端口2名(连接端口2名),);moudle tristl(sout,sin,ena);output s

15、out;input sin,ena;mytri tri_inst(.out(sout),.in(sin),.enable(ena);endmoudlemoudle mytri(out,in,enable);output out;input in,enable; assign out =enable?in:bz;endmoudletri_insttrist 1sinenainenableoutsoutmytri3、顺序执行 在用verilog模块实现一定的功能时,应该了解一下哪些是同时发生,哪些是顺序发生的,“assgin”语句、实例元件和“always”,这三个在同一个verilog模块里面,

16、它们的顺序不会影响功能的实现。它们三项式同时执行的,也就是并发的。 但是,在“always”模块内,逻辑是按照指定的顺序执行的,不过多个“always”之间却是并行执行的。 tips:(1)在verilog模块中所有过程块(如:initial块,always块)、连续赋值语句、实例引用都是并行的; (2)模块之间的连接是通过变量名互相连接起来的; (3)在同一模块中,“always”块,实例元件,“assign”块,这三个常用的语句申明出现的先后顺序没有关系; (4)不过只有连续赋值语句assign和实例引用语句独立于过程快而存在于模块的功能定义部分。顺序块和并行块 1、顺序块 顺序块,也叫过程块,关键字begin_end用于将多条语句组成顺序块。 特点: (1)当中的语句是一条接一条,按照顺序执行的,只有前边的语句执行完成以后才能执行后面的语句(除了带有内嵌套的非阻塞赋值语句); (2)如果语句包括延迟或时间控制,那么延迟总是相对于前面那条语句执行完成的仿真时间的。eg(1): reg x,y; reg 1:0 z,w; initial begin x=1b0; y=1b1; z=x,y; w=y,x; end eg(2) reg x,y; r

温馨提示

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

评论

0/150

提交评论