Verilog HDL入门基础之门级建模
- 格式:pdf
- 大小:602.58 KB
- 文档页数:9
Verilog门级建模 门级建模就是将逻辑电路图⽤HDL规定的⽂本语⾔表⽰出来,即调⽤Verilog语⾔中内置的基本门级元件描述逻辑图中的元件以及元件之间的连接关系。
Verilog语⾔内置了12个基本门级元件模型,如下表所⽰。
门级元件的输出、输⼊必须为线⽹类型的变量。
1.多输⼊门 and、nand、or、nor、xor和xnor是具有多个输⼊的逻辑门,它们的共同特点是:只允许有⼀个输出,但可以有多个输⼊。
and的⼀般调⽤格式为:and A1(out, in1, in2, in3); 其中,调⽤名A1可以省略。
nand、or、nor、xor和xnor的调⽤格式与and的类似。
2.多输出门 buf、not是具有多个输出的逻辑门,它们的共同特点是:允许有多个输出,但只有⼀个输⼊。
⼀般的调⽤格式为: buf B1(out1, out2,..., in);not N1(out1, out2,..., in); 其中,调⽤名B1、N1可以省略。
3.三态门 bufif1、bufif0、notif1和notif0是三态门元件模型。
这些门有⼀个输出、⼀个数据输⼊和⼀个输⼊控制。
如果输⼊控制信号⽆效,则三态门的输出为⾼阻态z。
⼀般的调⽤格式为:bufif1 B1(out, in, ctrl);bufif0 B0(out, in, ctrl);notif1 N1(out, in, ctrl);notif0 N0(out, in, ctrl); 其中,调⽤名B1、B0、N1和N0可以省略。
例1:1module _2to1muxtri(A, SEL, L);23input A, SEL;4output L;5tri L;67bufif1(L, A, SEL);89endmodule。
第四章 Verilog-HDL的建模1.内容回顾通常认为,给硬件建模的模型可以分为5个层次:▪系统级和算法级建模通常是软件工程师用C语言开发的软件模型,目的在于验证设计思想是否正确。
HDL也能做一些算法级建模的工作,但是有很多算法描述不被综合工具支持。
▪行为级建模主要考虑一个模块的抽象功能描述,而不考虑其具体以实现(具体电路结构由综合工具得到)。
▪门级模型是对电路结构的具体描述,主要是描述与、或、非等基本门电路的连接方式。
▪开关级模型是把最基本的MOS晶体管连接起来实现电路功能。
注:这5个层次从高到低越来越接近硬件。
Verilog HDL有两种建模方法:结构建模方法和行为建模方法。
结构建模方法是对电路具体结构的描述:1.调用Verilog内置门元件(门级结构描述)2.调用开关级元件(晶体管级结构描述)3.用户自定义元件UDP(也在门级)4.子模块调用行为建模方法是对电路功能的描述1.数据流行为建模2.顺序行为建模2.结构建模结构建模是对电路具体结构的描述,是一种比较底层的方法。
简单说,就是把所需要的基本电路单元(逻辑门、MOS开关等)调出来,再用连线把这些基本单元连接起来。
(调用、连线)。
2.1 内置的基本单元Verilog HDL为门级电路建模提供了26个内置基本单元,分类如下:多输入门:and, nand, or, nor, xor, xnor多输出门:buf, not三态门: bufif0, bufif1, notif0, notif1上拉、下拉电阻:pullup, pulldownMOS开关:cmos, nmos, pmos, rcmos, rnmos, rpmos双向开关:tran,tranif0, tranif1, rtran, rtranif0, rtranif1注:多输入门、多输出门和三态门构成Verilog-HDL的内置基本门。
2.1.1多输入门1.内置的多输入门包括: and nand nor or xor xnor2.这些逻辑门只有单个输出, 1个或多个输入。
门级建模门级建模是指调用Verilog内部自定义的基本门元件(或者用户自定义基本元件)来对硬件电路进行结构描述门级建模方式采用的是一种特殊的模块调用方式。
此时所调用的模块式Verilog内部预先定义好的基本门级元件或者用户自定义的基本元件,在这种建模方式下硬件电路将被描述成由一组基本门级元件的实例组成。
内置基本门级元件Verilog HDL内含的基本门级元件有14中,包括and(与门)、nand(与非门)、or(或门)、nor(或非门)、xor(异或门)、xnor(异或非门)、buf(缓冲器)、not(非门)、bufif1(高电平使能缓冲器)、bufif0(低电平使能缓冲器)、notif1(高电平使能非门)、notif0(低电平使能非门)、pullup(上拉电阻)、pulldown(下拉电阻)基本门级元件的调用其语法格式为:<门级元件名><驱动强度说明>#(<门级延时量>)<实例名>(端口连接表);对上述格式做如下说明:•<门级元件名>:就是前面列出的Verilog HDL内含的14种基本门级元件类型中的任意一种,它用于指明被当前模块调用的是哪一种门级基本元件。
•<驱动强度说明>:这一项是可选项,它的格式为:(<对高电平的驱动强度>,<对低电平的驱动强度>)<驱动强度说明>用来对本次基本门级元件调用所引用的门级元件实例的输出端驱动能力加以说明。
这是因为:在结构建模方式下,一条连线可能会由多个前级输出端同时驱动,该连线最终的逻辑状态将取决于各个驱动端的不同驱动能力,因此有必要对元件实例的输出驱动能力进行说明。
对于门级元件,驱动强度分为对高电平(逻辑1)的驱动强度和对低电平(逻辑0)的驱动强度,因此<驱动强度说明>部分由<对高电平的驱动强度>和<对低电平的驱动强度>这两种成分组成。
其中的每一种驱动强度成分可以是supply、strong、pull、weak和highz中的某一个等级。
因此有如下关键字出现在<驱动强度说明>中:Supply1 strong1 pull1 weak1 highz1Supply0 strong0 pull0 weak0 highz0上面第一行中表示<对高电平的驱动强度>的五个等级,第二行中表示<对低电平的驱动强度>的五个等级。
在基本门级元件实例语句的<驱动强度说明>中,<对高电平的驱动强度>和<对低电平的驱动强度>这两个成分在括号内的前后位置可以互换,比如:and(strong0,weak1) AND_1(out,in1,in2);and(weak1,strong0) AND_2(out,in1,in2);其中引入了两个与门实例AND_1和AND_2。
这两个实例拥有相同的输出端驱动强度,高电平输出强度为weak,低电平输出强度为strong。
如果基本门级元件实例语句中的<驱动强度说明>部分被省略,则默认的驱动强度为(strong0,strong1)。
•#(<门级延时量>):这一项也可以是默认的,它说明了信号从门级元件实例的输入端流动到输出端时所经历的延迟时间长度。
其中<门级延时量>是由若干个延时值组成的,当它只包含一个延时值时,其外部的圆括号可以省略。
请读者注意:上述门级元件实例的门级延时量进行指定的方式与前面讲述的对模块参数值进行修改的第一种方式(使用带有参数值的模块实例语句)是相似的。
这两种情况下,对应的实例语句中都出现了“#<数量值>”部分。
该部分内容在模块实例语句中代表模块参数的新参数值;而在门级实例语句中则代表了门级元件实例输入输出端口间的门级延时量。
在进行模块调用时不能采用像门级元件调用那样的方式指定延时量(只能利用specify块结构来指定延时量);而在进行基本门级元件调用时又不能像模块调用那样对参数值进行修改(只有用户自定义元件才能有参数值)•<实例名>:是为本次元件调用后生成的门级元件实例所取的第一个名称。
与进行模块调用的情况不同,在进行基本门级元件调用时,<实例名>可以省略。
在默认<实例名>的情况下,Verilog编译系统将自动以“<元件名><实例序号>”的形式为门级元件实例取名•(端口连接表):与模块实例语句中的端口连接表类似,但是在进行基本门级元件调用时只能采用端口位置关联方式。
而且与基本门级元件实例各个端口相连的信号端子只能是宽度为一位的表达式或变量标识符多输入门内置多输入门包括6种门级元件:and、nand、or、nor、xor、xnor。
其格式为:<门级元件名>(<输出端口>,<输入端口1>,<输入端口2>,……,<输入端口n>)其中的<门级元件名>就是上面给出的六种多输入门名称之一,在端口列表中出现的第一个端口是输出端口,其后是多个输入端口。
这六种门的真值表为:AND 0 1 X Z0 0 0 0 01 0 1 x ZX 0 x x zZ 0 x x xNAND 0 1 X Z0 1 1 1 11 1 0 x XX 1 X x xZ 1 X x xOR 0 1 X Z0 0 1 x X1 1 1 1 1X X 1 X XZ X 1 X XNOR 0 1 X Z0 1 0 X X1 0 0 0 0X X 0 X XZ X 0 X XXOR 0 1 X Z0 0 1 X X1 1 0 X XX X X X XZ X X X XXOR 0 1 X Z0 1 0 X X1 0 1 X XX X X X XZ X X X X对多输入门进行调用的元件实例语句将采用如下形式:<多输入门元件名><驱动强度说明>#(<门级延时量>)<延时量>(<输出信号端子>,<输入信号端子1>,<输入信号端子2>,…….,<输入信号端子n>);在上述元件实例语句格式中,与多输入门元件输出端相连的外部信号端子(即<输出信号端子>)必须出现在端口连接表的第一项中,与多输入门的各个输入端相连的外部信号端子则只能出现在端口连接表的后面几项内。
这些输入信号端子将以此与多输入门的各个输入端相连。
信号端子和元件端口之间的连接关系是采用“端口位置关联方式“来确定。
多输出门内置多输出门包括两种门级元件:buf和not。
这两种逻辑门的共同特点是:允许有多个输出,但只能有一个输入。
这两种多输出门的元件模型可以表示为:<门级元件名>(<输出端口1>,<输出端口2>,……,<输出端口n>,……,<输入端口>)其中,<门级元件名>是元件名称buf和not之一;端口列表中的最后一项是输入端口,前面的其余端口为输出端口。
它们的真值表如下:<多输出门元件名><驱动强度说明>#(<门级延时量>)<实例名>(<输出信号端子1>,<输出信号端子2>,……,<输出信号端子n>,<输入信号端子>);上述格式中,端口连接表中出现的最后一个信号端子将被连接到多输出门的输入端,而排在前面的其余信号端子将与多输出门的各个输出端依次相连。
信号端子和元件端口之间的连接关系是采用“端口位置关联方式”来确定的。
三态门内置三态门包括四种元件:bufif0、bufif1、notif0和notif1。
这四种逻辑门用来对三态驱动器建模,它们都有一个数据输出端。
一个数据输入端和一个控制输入端。
这几种三态门的特点是:它们的数据输出可以实现三态输出。
其元件模型可以表示为:<门级元件名>(<数据输出端口>,<数据输入端口>,<控制输入端口>)其中,<门级元件名>是前面给出的四种元件名称bufif0、bufif1、notif0和notif1之一;端口列表中的第一项是<数据输出端口>,第二项是<数据输入端口>,最后一项是<控制输入端口>。
它们的真值表为:真值表中有些项是不确定的,比如“0/z”表示输出状态既可以是0也可以是高阻态。
调用三态门的元件实例语句如下:<元件名><驱动强度说明>#(<门级延时量>)<实例名>(<输出信号端子>,<输入信号端子>,<控制信号端子>);上拉、下拉电阻上拉、下拉电阻包括两种元件:pullup和pulldown。
上拉电阻和下拉电阻这两种门级元件都只有一个输出端口而没有输入端口。
上拉电阻将置为1,下拉电阻将输出置为0.。
其调用的语法格式如下:<元件名><驱动强度说明><实例名>(<输出信号端子>);上述格式中,端口连接表内只能出现一个信号端子(输出信号端子),该信号端子将被连接到元件实例的输出端口。
由于上拉电阻只能输出逻辑状态1,下拉电阻只能输出逻辑状态0,所以在进行驱动强度说明时(在需要进行说明的情况下),对pullup元件只需指出对高电平的驱动强度,而对pulldown元件则只需指出对低电平的驱动强度。
下面两条语句就分别对上拉电阻和下拉电阻进行了调用。
Pullup (supply1) U1(power);Pulldown (pull0) U2(gnd);其中,第一条语句引入了上拉电阻的一个实例U1,该实例的输出端被连接到信号端子power;该输出端的驱动高强度为supply1。
第二句,仿照可以分析,此处不再赘述。
门级延时的说明门级延时反映的是信号变化从门级元件的任一输入端口流动到任一输出端口所经历的传输延时。
门级延时可以分为如下几类。
•上升延时:表示信号从“0”、“x”或“z”状态变化到“1”状态时受到的门传输延时。
•下降延时:表示信号从“1”、“x”或“z”状态变化到“0”状态时受到的门传输延时。
•截止延时:表示信号从“0”、“x”或“1”状态变化到“z”状态时受到的门传输延时。
•到不定态的延时:表示信号从“0”、“1”或“z”状态变化到“x”状态时受到的门传输延时。
由于多输入门(and、nand、or、nor、xor、xnor)以及多输入门(buf、not)的输出不可能是高阻态“z”,所以多输入门和多输出门这两类元件没有“截止延时”这类门级延时;对于三态门(bufif0、bufif1、notif0、notif1),这类元件具有全部的四种门级延时;对于上拉电阻和下拉电阻,这类元件不存在任何形式的门级延时。