《VERILOG 学习 第11章完稿.docx》由会员分享,可在线阅读,更多相关《VERILOG 学习 第11章完稿.docx(17页珍藏版)》请在三一办公上搜索。
1、VERILOG 学习 第11章完稿第十一章 开关级建模 - 在本书第一部分中,我们在逻辑门级、数据流级和行为级等较高抽象层次上解释了数字逻辑的设计和仿真。然而在少数情况下,设计者可能会选择用晶体管作为设计的底层模块,即叶级模块。Verilog语言具有对MOS晶体管级进行设计的能力。随着电路复杂性的增加及先进CAD工具的出现,以开关级为基础进行的设计正在逐渐萎缩。Verilog HDL目前仅提供用逻辑值0、1、x、z和与它们相关的驱动强度进行数字设计的能力,没有模拟设计能力。因此在Verilog HDL中,晶体管也仅被当作导通或者截止的开关。在本章中,我们讨论开关级建模的基本原理。大多数设计者只
2、需知道基本知识就足够了。附录A,即强度建模和高级线网类型定义,给出了信号强度和高级线网类型定义的详细内容。关于开关级建模的全部详细内容请参考有关IEEE Verilog硬件描述语言标准 的文档。 学习目标 l 能够描述基本MOS开关:nmos、pmos和cmos。 l 理解双向传输开关,电源 和地 的建模方法。 l 识别阻抗MOS开关。 l 解释在基本MOS开关 和双向传输开关上说明延迟的方法。 l 在Verilog中,用所提供的开关建立基本开关级电路。 11.1 开关级建模元件 Verilog提供了各种语言结构可以为开关级电路建立模型,MOS晶体管级数字电路可以用这些最基本的电路模型元件注1
3、 来描述。 - 注1: 可以用实例组来定义开关组。在5.1.3中对实例组进行了描述。 - 11.1.1 MOS开关 可以用关键字nmos和pmos定义两种类型的MOS开关。 /定义MOS开关的关键字 nmos pmos 关键字nmos用于NMOS晶体管建模;关键字pmos用于PMOS晶体管建模。NMOS和PMOS开关符号如图11-1所示。 out data out data control control NMOS PMOS 图11-1 NMOS和PMOS开关 在Verilog语言里,调用nmos和pmos开关,见例11-1所示。 例11-1 nmos和pmos开关的实例引用 nmos n1
4、(out, data, ncontrol ); /调用一个nmos开关; pmos p1 (out, data, ncontrol ); /调用一个pmos开关; 因为开关是用Verilog原语定义的,类似于逻辑门,实例名称是可选项,所以调用开关时可以不给实例命名。 nmos (out, data, ncontrol ) ; /调用一个nmos开关;无实例名称 pmos (out, data, ncontrol ) ; /调用一个pmos开关;无实例名称 信号out的值由信号data和control的值确定。 out的逻辑值如表11-1所示。信号data和control不同的组合导致这两个开关
5、输出1、0 或者z、x 逻辑值 (如果不能确定输出为1或0,就有可能输出z、x值)。符号L代表0或者z,H代表1或者z。 表11-1 NMOS和PMOS逻辑表 control control nmos pmos 0 1 x z 0 1 x z 0 z 0 L L 0 0 z L L 1 z 1 H H 1 1 z H H data data x z x x x x x z x x z z z z z z z z z z 因此,nmos开关在control信号为1时导通。如果control信号是0,则输出为高阻态值。与此类似,如果control信号是0则pmos开关导通。 11.1.2 CMOS
6、开关 CMOS开关用关键字cmos声明。 可以用nmos和pmos器件来建立cmos器件的模型。cmos开关的符号如图11-2所示。 pcontrol data out ncontrol CMOS 图11-2 CMOS开关 cmos开关的应用如例11-2所示 例11-2 cmos开关的实例引用 cmos c1 (out, data, ncontrol, pcontrol); / 调用一个cmos开关 cmos (out, data, ncontrol, pcontrol); / 没有指定实例名 信号ncontrol和pcontrol通常是互补的。当信号ncontrol为1且pcontrol信号
7、为0时,开关导通。如果信号ncontrol为0且pcontrol为1,则开关的输出为高阻值。cmos门本质上是两个开关:nmos和pmos的组合体。因此上述cmos的实例等价于: nmos (out, data, ncontrol); / 调用一个nmos开关 pmos (out, data, ncontrol); / 调用一个pmos开关 因为cmos开关由nmos和pmos开关派生出来,所以给定data、ncontrol和pcontrol的信号值就可以根据表11-1推断出cmos的输出值。 11.1.3 双向开关 NMOS、PMOS和CMOS门都是从漏极向源极导通,是单向的。在数字电路中,
8、双向导通的器件很重要。对双向导通的器件而言,其两边的信号都可以是驱动信号。通过设计双向开关就可以实现双向导通的器件。三个关键字用来定义双向开关:tran、tranif0和tranif1。 tran tranif0 tranif1 这些开关符号如下图11-3所示。 inout1 tran control inout1 inout2 tranif0 inout2 control inout1 tranif1 inout2 图11-3 双向开关 tran开关作为两个信号inout1和inout2之间的缓存。inout1或inout2都可以是驱动信号。仅当control信号是逻辑0时tranif0开关
9、连接inout1和inout2两个信号。如果control信号是逻辑1,则没有驱动源的信号取高阻态值z。有驱动源的信号仍然从驱动源取值。如果control信号是逻辑1则tranif1开关导通。 这些开关的使用如例11-3所示。 例11-3 双向开关的实例引用 tran t1 ( inout1, inout2 ); /实例名t1 是可选项 tranif0 ( inout1, inout2, control ); /没有指定实例名 tranif1 ( inout1, inout2, control ); /没有指定实例名 双向开关经常用来在总线或信号之间提供隔离。 11.1.4 电源和地 设计晶体
10、管级电路时需要电源和地两极。电源和地极用关键字supply1和supply0来定义。 源极类型supply1相当于电路中的Vdd且把逻辑1放在网表中。源极类型supply0相当于ground或Vss并将逻辑0放在网表中。在整个模拟过程中,supply1和supply0始终为网表提供逻辑1值和逻辑0值。 源supply1和supply0如下所示。 supply1 vdd; supply0 gnd; assign a = vdd ; / 连接到电源电压vdd assign b = gnd ; / 连接到地 11.1.5 阻抗开关 前面所讨论的MOS、CMOS和双向开关可以用相应的阻抗器件建模。阻抗
11、开关比一般的开关具有更高的源极到漏极的阻抗,且在通过它们传输时减少了信号强度。在相应的一般开关关键字前加带r前缀的关键字声明阻抗开关。阻抗开关与一般开关语法类似。 rnmos rpmos / 阻抗性nmos 和pmos 开关 rcmos / 阻抗性cmos 开关 rtran rtranif0 rtranif1 / 阻抗性双向开关 在一般开关和阻抗开关之间有两个主要区别:源极到漏极的阻抗和传输信号强度的方式。关于Verilog中强度级别参看附录A,强度建模和高级线网类型定义。 l 阻抗器件具有较高的源极到漏极阻抗。一般开关源极到漏极阻抗较低。 l 阻抗开关在传递信号时减少了它们的强度。变化如下所
12、示。一般开关从输入到输出一直保持强度级别不变。有一点例外,如果输入supply强度,则输出strong强度。表11-2显示出由于阻抗开关导致的强度缩减。 表11-2 阻抗开关的强度缩减 输入强度 输出强度 strong 译者注 supply strong pull pull weak weak medium large medium medium small small small high high - 译者注: 原文中此处输出强度为pull,与上文中解释不符合,翻译者认为改为strong比较合适。上文中好像讲的是一般开关通常不改变强度级别,只是在输入为supply时,输出慰strong。并
13、不是针对阻抗开关讲的。 - 11.1.6 开关中的延迟说明 MOS和CMOS开关 可以为通过这些开关级元件的信号指定延迟。延迟是可选项,它只能紧跟在开关关键字之后。延迟说明类似于5.2.1节中讨论的Rise、Fall和Turn-off 延迟。可以为开关指定零个、一个、两个或者三个延迟,参考表11-3。 表11-3 MOS和CMOS开关的延迟说明 开关元件 延迟说明 0个说明 1个说明 (所有暂态过程相同) 2个说明 (上升、下降) 3个说明 (上升、下降、关断) 0、1、2、3个延迟说明与上面相同 举例 pmos p1(out,data,control); pmos # (1 ) p1(out
14、,data,control); nmos # (1,2 ) p2(out,data,control); nmos # (1,2,3 ) p2 (out,data,control); cmos # (5 ) c2 ( out,data,nctrl,pctrl ); cmos # (1,2 ) c1 (out,data,nctrl, pctrl ); pmos, nmos, rpmos rnmos cmos, rcmos 双向传输开关 双向传输开关的延迟说明需要稍作区别解释。这种开关在传输信号时没有延迟。但是,当开关值切换时有开和关延迟。可以给双向开关指定零个、一个或者两个延迟,如表11-4所示。
15、 表11-4 双向开关的延迟说明 开关元件 tran , rtran 延迟说明 不允许指定延迟说明 0个延迟说明 tranif1, rtranif1 tranif0, rtranif0 1个延迟说明 2个延迟说明 举例 rtranif0 rt1( inout1, inout2, control ); tranif0 # (3) T (inout1, inout2, control ); tranif0 # (1,2 ) t1 (inout1, inout2, control ); Specify块 也可以给用开关设计的模块指定路径延迟及时序检查。用specify块描述路径延迟。在第10章时序和
16、延迟中详细讨论了路径延迟说明,它在开关级模型中也完全适用。 11.2 举例 本节我们讨论如何用开关级建模元件建立实际的数字电路。 11.2.1 CMOS或非门 虽然Verilog有nor门原语,我们在这里尝试用CMOS开关设计自己的或非门。或非门和或非门的开关级电路图如图11-4所示。 my_nor Vdd pwr c a out b out my_nor a b gnd 图11-4 或非门门级 / 开关级的电路图表示 使用11.1节中讨论的开关原语,开关建模元件,电路的Verilog描述如下例11-4所示。 例11-4 或非门的开关级Verilog描述 /定义自己的或非们,my_nor mo
17、dule my_nor(out, a, b); output out; input a, b; wire c; /定义电源和地 supply1 pwr; /pwr连接到Vdd supply0 gnd; /gnd连接到Vss(地) /实例引用pmos开关 pmos (c, pwr, b); pmos (out, c, a); /实例引用nmos开关 nmos (out, gnd, a); nmos (out, gnd, b); endmodule 我们可以用下列激励来测试我们的或非门 /测试该或非门的激励 module stimulus; reg A, B; wire OUT; /实例引用模块m
18、y_nor my_nor n1(OUT, A, B); /产生激励 initial begin /测试所有可能的输入信号组合 A = 1b0; B = 1b0; #5 A = 1b0; B = 1b1; #5 A = 1b1; B = 1b0; #5 A = 1b1; B = 1b1; end /检查测试结果 initial $monitor($time, OUT = %b, A = %b, B = %b, OUT, A, B); endmodule 仿真输出如下所示。 0 out = 1, A = 0, B = 0 5 out = 0, A = 0, B = 1 10 out = 0, A
19、= 1, B = 0 15 out = 0, A = 1, B = 1 这样我们就设计出了自己的或非门。如果设计者要定制某个库模块,可以采用开关级建模。 11.2.2 二选一多路选择器 可以用CMOS开关定义二选一多路选择器。我们将用11.2.1节中声明的my_nor门,一个CMOS或非门来实现非逻辑功能。多路选择器电路图如下图11-5所示。 i0 OUT Sbar i0 二选一 OUT 多路器 i1 i1 S 二选一多路器 S 图11-5 用开关表示的二选一多路器 二选一多路选择器在S=0时将输入I0传到输出OUT,在S=0时把I1传到OUT。二选一多路选择器的开关级描述如例11-5所示。
20、例11-5 二选一多路选择器的开关级Verilog描述 /用开关定义二选一多路选择器 module my_mux (out, s, i0, i1); output out; input s, i0, i1; /内部连线 wire sbar; / s的反 / 生成s的反 my_nor nt(sbar, s, s); /相当于1个非门 / 调用cmos 开关 cmos (out, i0, sbar, s); cmos (out, i1, s, sbar); endmodule 二选一多路选择器可以用一个小激励进行测试。激励留作读者练习。 11.2.3 简单的CMOS锁存器 我们在前面的例子中设计了
21、组合逻辑器件。现在我们来定义一种可以存储值的存储元件。电平敏感CMOS锁存器电路图如图11-6所示。 e qbar d C1 d qbar FF clock C2 q clk q 图11-6 CMOS锁存器 开关C1和C2是11.1.2节,CMOS开关中讨论的CMOS开关。如果clk=1则C1开关关闭,如果clk=0则C2开关关闭。clk的相反值被送给C2的ncontrol输入端。可以用MOS开关定义CMOS反相器,如图11-7所示。 my_not Vdd pwr out in out in my_not gnd 图11-7 CMOS反向器 现在已经准备好给CMOS锁存器写Verilog描述。
22、首先要用开关设计自己的反相器my_not。可以根据图11-7的开关级电路图来写CMOS反相器的Verilog模块描述。反相器的Verilog描述如例11-6所示。 例11-6 CMOS反相器 / 用 MOS 开关定义反相器 module my_not (out, in); output out; input in; /定义电源和地 supply1 pwr; supply0 gnd; /调用nmos 和 pmos 开关 pmos (out, pwr, in); nmos (out, gnd, in); endmodule 现在,CMOS锁存器可以用CMOS开关和my_not反相器来定义。CMOS
23、锁存器的Verilog描述如例11-7所示。 例11-7 CMOS触发器 /定义CMOS 触发器 module cff ( q, qbar, d, clk); output q, qbar; input d, clk; /内部连线 wire e; wire nclk; / 时钟信号 clock的反相 / 调用反相器 my_not nt(nclk, clk); /调用 CMOS 开关 cmos (e, d, clk, nclk); /switch C1; e = d when clk = 1. cmos (e, q, nclk, clk); /switch C2; e = q when clk
24、= 0. /调用反相器 my_not nt1(qbar, e); my_not nt2(q, qbar); endmodule 这里给读者留一个练习,写一个小激励模块来测试这个设计,验证这个锁存器的存取特性。 11.3 总结 本章讨论了Verilog的下面几方面内容: l 开关级建模处于很低的设计抽象层次。只在很少的情况下,比如在设计者需要定制自己的叶级元件时,才使用开关级建模。随着电路复杂度的增加,这个级别的Verilog设计越来越少见; l MOS、CMOS、双向开关和supply1、supply0源可用于设计任意的开关级电路。CMOS开关是MOS开关的一种组合; l 延迟对开关元件来说是
25、可选的。对不同的双向器件,有不同的延迟解释。 11.4 练习 1 使用nmos和pmos开关为异或门画电路图。写出它的Verilog描述。使用激励测试这个设计。 2 使用nmos和pmos开关为与门和或门画电路图。写出它们的Verilog描述。使用激励测试这两个设计。 3 使用1和2中设计的异或门、与门和或门设计下图所示的一位全加器。使用激励测试这个设计。 a s1 sum b c1 s2 c_out c_in 练习3图 一位全加器 4 设计一个四位的双向总线开关,其中一侧有两个总线BusA和BusB,另一侧有一个总线BUS。一个一位的control信号用作开关。当control=1时,BusA和BUS连接在一起。当control=0时,BusB和BUS连接在一起。使用激励测试这个设计。 BusA 总线开关 BUS BusB control 5 以下面的延迟值调用开关。使用自己的输入和输出端口名称。 a. rise = 2、fall = 3的pmos开关 b. rise = 4、fall = 6、turn-off = 5的nmos开关 c. delay = 6的cmos开关 d. turn-on = 5、turn-off = 6的tranif1开关 e. delay = 3的tranif0开关
链接地址:https://www.31ppt.com/p-3168545.html