资源描述:
《夏宇闻著作:从算法设计到硬线逻辑的实现(免费!!!!!)第四章》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第四章不同抽象级别的VerilogHDL模型-AX.—1—刖旨从笫三章我们知道,Verilog模型nJ以是实际电路不同级别的抽彖。这些抽彖的级别和它们对应的模型类型共有以下五种:1)系统级(system)2)算法级(algorithmic)3)RTL级(RegisterTransferLevel):4)门级(gate-level):5)开关级(switch-level)在本章的各节屮我们将通过许多实际的VerilogIIDL模块的设计來了解不同抽象级别模块的结构和町综合性的问题。对于数字系统的逻辑设计工程师而言,熟练地掌握门级、RTL级、算法级、系统级是非常
2、重要的。而对于电路基木部件(如门、缓冲器、驳动器等)库的设计者而言,则需要掌握用户白定义源语元件(UDP)和开关级的描述。在本教材中由于篇幅有限,我们只简单介绍了UDP,略去了开关级的描述。一个复杂电路的完整VerilogHDL模型是由若干个VerilogHDL模块构成的,每一个模块又可以由若干个子模块构成。这些模块可以分别用不同捕象级别的VerilogHDL描述,在一个模块小也可以有多种级别的描述。利用VerilogHDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构來描述极其复杂的人型设计。4.1・门级结构描述一个逻辑网络是由许多逻辑门和开关
3、所组成,因此用逻辑门的模型来描述逻辑网络是最直观的。VerilogHDL提供了一些门类型的关键字,可以用于门级结构建模。4.1.1•与非门、或门和反向器等及其说明语法VerilogIIDI.中冇关门类型的关键字共冇26个Z多,在本教材中我们只介绍最基本的八个。冇关其它的门类型关键字,读者可以通过翻阅VerilogHDL语言参考书,在设计的实践屮逐步掌握。下面列岀了八个基本的门类型(GATETYPE)关键字和它们所表示的门的类型:门门门非器门非非门或或冲门与」或或异异缓非andnandnororxorxnorbufnot门与开关的说明语法可以用标准的声明语句格
4、式和一个简单的实例引用加以说明。门声明语句的格式如下:〈门的类型>[<鞭动能力〉〈延时〉]〈门实例1>[,〈门实例2>,...〈门实例n>];门的类型是门声明语句所必需的,它可以是VerilogHDL语法规定的26种门类型屮的任意一种。驱动能力和延时是可选项,可根据不同的情况选不同的值或不选。门实例1是在木模块中引用的第一个这种类型的门,而门实例n是引用的第n个这种类型的门。有关驱动能力的选项我们在以后的章节里再详细加以介绍•最后我们用一个具体的例子来说明门类型的引用:nand#10ndl(a,data,clock,clear);这说明在模块中引用了一个名为
5、ndl的与非门(nand),输入为data、clock和clear,输出为a,输出与输入的延时为10个单位吋间。4.1.2.用门级结构描述D触发器下而的例了是用VerilogHDL语言描述的D型主从触发器模块,通过这个例了,我们可以学习门级结构建模的基本技术。moduleflop(data,clock,clear,q,qb);inputdata,clock,clear;outputq,qb;nand#10ndl(a,data,clock,clear),nc!2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),n
6、cl6(f,d,nclock),nd8(qb,q,f,c1ear);nand#9nd3(c,a,d),nc!7(q,e,qb);not#10ivl(ndata,data),iv2(nclock,clock);cndmodule在这个VerilogHDL结构描述的模块屮,flop定义了模块名,设计上层模块时可以用这个名(flop)调用这个模块;module,input,output,endmodule等都是关键字;nand表示与非门;#10表示10个单位时间的延时;ndl,nd2,,nd8,ivl,iv2分别为图4.1.2中的各个基本部件,而其后面括号中的参数
7、分别为图4.1.2屮各基木部件的输入输出信号。4.1.3.由已经设计成的模块来构成更高一层的模块如果已经编制了一个模块,如4.1.2.中的flop,我们可以在另外的模块中引用这个模块,引用的方法与门类型的实例引用非常类似。只需在前面写上已编的模块名,紧跟着写上引用的实例名,按顺序写上实例的端口名即可,也可以川已编模块的端口名按对应的原则逐一填入,见下面的两个例子:1)flopflopd(dl,elk,clrb,q,qn);2)flopflop_d(.clock(elk),.q(q),.clear(clrb),.qb(qn),.data(dl));这两个例子都
8、表示实例flop_d引用已编模块flop。从上面的两