您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > VerilogHDL模型的不同抽象级别
在前面8章里我们学习了Verilog硬件描述语言的发展历史、主要用途、基本概念和基本语法。在设计和验证部分(9--18章)里我们将通过许多简单和容易理解的例子分成十章由浅入深地讲解:序言:不同抽象级别的Verilog模型和他们的作用如何编写和验证简单的纯组合逻辑模块;如何编写和验证简单的时序逻辑模块;可综合模块的标准风格和注意事项;如何对简单电路模块进行功能的全面测试;复杂的数字系统是如何构成的;怎样根据系统需求,把组合逻辑和时序逻辑配合起来设计复杂的数字系统模块;怎样完整地验证所做的设计,以保证设计的正确性。序言:在阅读课本的基础上,同学们可以通过在计算机上自己动手做一遍课本上的实验练习示例,再结合思考题改进设计,并验证改进后的设计是否达到了要求,来达到学习的目的。只有通过艰苦的练习才能够掌握设计的诀窍。序言:Verilog模型可以是实际电路不同级别的抽象。所谓不同的抽象级别,实际上是指同一个物理电路,我们可以在不同的层次上用Verilog语言来描述它只从行为和功能的角度来描述某一电路模块,就称它为行为模块从电路结构的角度来描述该电路模块,就称它为结构模块前言:抽象的级别和它们对应的模块类型常可以分为以下五种,Verilog语法支持数字电路系统的五种不同描述方法:系统级(system)算法级(algorithmic)RTL级(RegisterTransferLevel):门级(gate-level):开关级(switch-level)前言:系统级、算法级和RTL级是属于行为级的门级是属于结构级的。对于数字系统的逻辑设计工程师而言,熟练地掌握门级、RTL级、算法级、系统级是非常重要的对于电路基本部件(如:与或非门、缓冲器、驱动器等)库的设计者而言,则需要掌握用户自定义源语元件(UDP)和开关级的描述前言:复杂电路的完整VerilogHDL模型是由若干个VerilogHDL模块构成的,每一个模块又可以由若干个子模块构成。这些模块可以分别用不同抽象级别的VerilogHDL模块描述,在一个模块中也可以有多种级别的描述。利用VerilogHDL语言提供的这种结构,我们就能以这种清晰的模块层次构造来描述极其复杂的大型设计。前言:一个逻辑电路是由许多逻辑门和开关所组成,因此用基本逻辑门的模型来描述逻辑电路结构是最直观的。VerilogHDL提供了一些门类型的关键字,可以用于门级结构建模。9.1.门级结构描述VerilogHDL中有关门类型的关键字共有26个之多,在本教材中我们只介绍最基本的八个。VerilogHDL中有关门类型的关键字共有26个之多,在本教材中我们只介绍最基本的八个。9.1.1.与非门、或门和反向器等及其说明语法and与门nand与非门nor或非门or或门xor异或门xnor异或非门buf缓冲器not非门9.1.1.与非门、或门和反向器等及其说明语法门与开关的说明语法可以用标准的声明语句格式和一个简单的实例引用加以说明。门声明语句的格式如下:门的类型[驱动能力延时]门实例1[,门实例2,…门实例n];门的类型是门声明语句所必需的,它可以是VerilogHDL语法规定的26种门类型中的任意一种。驱动能力和延时是可选项,可根据不同的情况选不同的值或不选。9.1.1.与非门、或门和反向器等及其说明语法门类型的引用:nand#10nd1(a,data,clock,clear);这说明在模块中引用了一个名为nd1的与非门(nand),输入为data、clock和clear,输出为a,输出与输入的延时为10个单位时间。Verilog语法支持的基本逻辑部件其行为是由该基本逻辑部件的原语(Primitive)提供的,Verilog编译或解释器能正确地处理有关的语法现象。9.1.1.与非门、或门和反向器等及其说明语法用VerilogHDL语言描述的D型主从触发器模块:[例1]用基本逻辑单元组成触发器。(文件名为:flop.v)moduleflop(data,clock,clear,q,qb);inputdata,clock,clear;outputq,qb;nand#10nd1(a,data,clock,clear),//注意结束时用逗号,最后才用分号nd2(b,ndata,clock),//表示nd1到nd8都是nand(与非门)nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand#9nd3(c,a,d),nd7(q,e,qb);not#10iv1(ndata,data),iv2(nclock,clock);endmodule9.1.2.用门级结构描述D触发器在这个VerilogHDL结构描述的模块中,flop定义了模块名,设计上层模块时可以用模块名(flop)调用这个模块;module,input,output,endmodule等都是关键字;nand表示与非门,在Verilog语法中有这个基本逻辑单元的行为,它由原语(Primitive)描述,这是一种类似真值表的描述(见本章1.3节用户定义的原语UDP);#10表示10个单位时间的延时;nd1,nd2,......,nd8,iv1,iv2分别为图9.1.2中的各个基本部件9.1.2.用门级结构描述D触发器9.1.2.用门级结构描述D触发器可以在另外的模块中引用已经编制的一个模块,引用的方法与门类型的实例引用非常类似。flopf1op_d(d1,clk,clrb,q,qn);flopflop_d(.clock(clk),.q(q),.clear(clrb),.qb(qn),.data(d1));端口对应有两种不同的表示方法模块的端口名可以按序排列也可以不必按序排列9.1.3.由已经设计成的模块来构成更高一层的模块[例2]用触发器组成带清零端的四位寄存器。(文件名为:hardreg.v)`includeflop.vmodulehardreg(d,clk,clrb,q);inputclk,clrb;input[3:0]d;output[3:0]q;flopf1(d[0],clk,clrb,q[0],),//注意结束时用逗号,最后才用分号f2(d[1],clk,clrb,q[1],),//表示f1到f4都是flopf3(d[2],clk,clrb,q[2],),f4(d[3],clk,clrb,q[3],);endmodule9.1.3.由已经设计成的模块来构成更高一层的模块请注意当f1到f4实例引用模块flop时,由于不需要flop端口中的qb口,故在引用时把它省去,但逗号仍需要留着。9.1.3.由已经设计成的模块来构成更高一层的模块显而易见,通过Verilog语言中的模块实例引用,可以构成任何复杂结构的电路。这种以结构方式所建立的Verilog模型不仅是可以仿真的,也是可综合的,其本质是表示电路的具体结构的。也可以说这种Verilog文件也是一种结构网表。这就是以电路结构为基础建模的基本思路。9.1.3.由已经设计成的模块来构成更高一层的模块对于上面两个例子,我们还可以用比较抽象Verilog描述方法来建立模型。9.2.VerilogHDL的行为描述建模[例3]用行为描述的方法来描述带请零端的四位寄存器。(文件名为:hardreg.v)modulehardreg(d,clk,clrb,q);inputclk,clrb;input[3:0]d;output[3:0]q;reg[3:0]q;always@(posedgeclkorposedgeclrb)beginif(clrb)q=0;elseq=d;endendmodule[例3]的行为和[例2]的功能是完全一致的,实际上它们是同一物理电路的两种不同的表示方法如果有一种工具能自动地把[例3]的描述转换为[例2],再细化为由四个[例1]组成的结构,这样就把比较抽象的行为描述具体化为门级电路的描述。而门级描述表示的是电路结构,它是电路布线的依据。设计的目的就是产生行为和功能准确的电路结构。电路结构看起来相当复杂,难以理解,而行为的描述比较直观。9.2.VerilogHDL的行为描述建模可以用比较直观的行为描述来开始设计过程,通过Verilog语言的仿真测试验证其正确后,就完成了第一步设计工作。然后用一种工具把行为模块自动转化为门级结构,再次经过Verilog语言的仿真测试验证其正确后,便完成了前端的逻辑设计。接下去可以进行后端制造的准备工作,这样做可以大大提高了设计的效率和准确性。这就是用Verilog语言设计复杂逻辑电路的基本思路。这种能把行为级的Verilog模块自动转换为门级结构的工具叫综合器(SynthesisTool)。9.2.VerilogHDL的行为描述建模为了对已设计的模块进行检验往往需要产生一系列信号作为输出,输入到已设计的模块,并检查已设计模块的输出,看它们是否符合设计要求。这就要求我们编写测试模块,也称作测试文件(英文为test-bench或test-fixture),常用带.tf扩展名的文件来描述测试模块,也可以仍旧用带.V扩展名的文件来描述测试模块。9.2.1仅用于产生仿真测试信号的VerilogHDL行为描述建模下面的VerilogHDL行为描述模型用于产生时钟信号,以验证电路功能。9.2.1仅用于产生仿真测试信号的VerilogHDL行为描述建模modulegen_clk(clk,reset);outputclk;outputreset;regclk,reset;initialbeginreset=1;//initialstateclk=0;#3reset=0;#5reset=1;endalways#5clk=~clk;endmodule9.2.1仅用于产生仿真测试信号的VerilogHDL行为描述建模用这种方法所建立的模型主要用于产生仿真时测试下一级电路所需的信号如下一级电路有输出反馈到上一级电路,并对上一级电路有影响时,也可以在这个模型中再加入输入信号,用于接收下一级电路的反馈信号。、用简单的波形描述信号能更好地仿真实际电路9.2.1仅用于产生仿真测试信号的VerilogHDL行为描述建模[例4]对四位带清零端的寄存器进行全面的测试。(文件名为:hardreg_top.v)`includeflop.v`includehardreg.v//仿真时需要包含文件hardreg.v和flop.v/***如果仿真环境可以把有关的文件安排在一个项目中,只要底层模块经过编译,并记录在编译的库中,可以不用包含文件。**/modulehardreg_top;//顶层模块,没有输入和输出的端口regclock,clearb;//为产生测试用的时钟和清零信号需要寄存器reg[3:0]data;//为产生测试用数据需要用寄存器wire[3:0]qout;//为观察输出信号需要从模块实例端口中引出线`definestim#100data=4'b//宏定义stim,可使源程序简洁eventend_first_pass;//定义事件end_first_passhardregreg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout));/************************************************************************把本模块中产生的测试信号data、clock、clearb输入实例reg_4bit以观察输出信号qout。实例reg
本文标题:VerilogHDL模型的不同抽象级别
链接地址:https://www.777doc.com/doc-4720928 .html