门延迟类型介绍

门延迟类型
前两节中所介绍的门级电路都是没有延迟的,实际门级电路都是有延迟的。
verilog 中允许用户使用门延迟,来定义输入到其输出信号的传输延迟。
门延迟类型主要有以下 3 种。
上升延迟
在门的输入发生变化时,门的输出从 0,x,z 变化为 1 所需要的转变时间,称为上升延迟。
下降延迟
在门的输入发生变化时,门的输出从 1,x,z 变化为 0 所需要的转变时间,称为下降延迟。
关断延迟
关断延迟是指门的输出从 0,1,x 变化为高阻态 z 所需要的转变时间。
门输出从 0,1,z 变化到 x 所需要的转变时间并没有被明确的定义,但是它所需要的时间可以由其他延迟类型确定,即为以上 3 种延迟值中最小的那个延迟。
门延迟可以在门单元例化时定义,定义格式如下:
gate_type [delay] [instance_name] (signal_list) ;其中,delay 的个数可以为 0 个、1 个、2 个或 3个 。
下表为不同延迟个数时,各种类型延迟的取值情况说明。
延迟类型无延迟1 个延迟 (d)2 个延迟 (d1, d2)3 个延迟 (d1, d2, d3)
上升 0 d d1 d1
下降 0 d d2 d2
关断 0 d 最小(d1, d2) d3
to_x 0 d 最小(d1, d2) 最小(d1, d2, d3)
如果用户没有指定延迟值,则默认延迟为 0 。
如果用户指定了 1 个延迟值,则所有类型的延迟值大小均为此值。
如果用户指定了 2 个延迟值,则他们分别代表上升延迟和下降延迟,关断和“to_x”延迟均为这 2 种延迟值中最小的那个。
如果用户指定了 3 个延迟值,则他们分别代表上升延迟、下降延迟和关断延迟,“to_x”延迟为这 3 种延迟值中最小的那个。
带有延迟值的门级单元例化如下:
//rise, fall and turn-off delay are all 1 and #(1) (out1, in1, in2) ; //rise delay = 2.1, fall dalay = 2, trun-off delay = 2 or #(2.1, 2) (out2, in1, in2) ; //rise delay = 2, fall dalay = 1, trun-off delay = 1.3 bufif0 #(2, 1, 1.3) (out3, in1, ctrl) ;需要说明的是,多输入门(如与门)和多输出门(如非门)最多只能定义 2 个延迟,因为输出不会是 z 。
三态门和单向开关单路(mos 管、cmos 管等)可以定义 3 个延迟。
上下拉门级电路不会有任何的延迟,因为它表示的是一种硬件属性,上下拉状态不会发生变化,且没有输出值。
双向开关(tran)在传输信号时没有延迟,不允许添加延迟定义。
带有控制端的双向开关(tranif1, tranif0)在开关切换的时候,会有开或关的延迟,可以给此类双向开关指定 0 个、1 个或 2 个的延迟,例如:
//turn-on and turn-off delay are all 1 tranif0 #(1) (inout1, inout2, ctrl); //turn-on delay = 1, turn-off delay = 1.2 tranif1 #(1, 1.2) (inout3, inout4, ctrl);最小/典型/最大延迟
由于集成电路制造工艺的差异,实际电路中器件的延迟总会在一定范围内波动。 verilog 中,用户不仅可以指定 3 种类型的门延迟,还可以对每种类型的门延迟指定其最小值、典型值和最大值。 在编译或仿真阶段,来选择使用哪一种延迟值,为更切实际的仿真提供了支持。
最小值:门单元所具有的最小延迟。
典型值:门单元所具有的典型延迟。
最大值:门单元所具有的最大延迟。
下面通过例化实例,来说明最小、典型、最大延迟的用法。
//所有的延迟类型:最小延迟 1, 典型延迟 2, 最大延迟 3 and #(1:2:3) (out1, in1, in2) ; //上升延迟:最小延迟 1, 典型延迟 2, 最大延迟 3 //下降延迟:最小延迟 3, 典型延迟 4, 最大延迟 5 //关断延迟:最小延迟 min(1,3), 典型延迟 min(2,4), 最大延迟 min(3,5) or #(1:2:3, 3:4:5) (out2, in1, in2) ; //上升延迟:最小延迟 1, 典型延迟 2, 最大延迟 3 //下降延迟:最小延迟 3, 典型延迟 4, 最大延迟 5 //关断延迟:最小延迟 2, 典型延迟 3, 最大延迟 4 bufif0 #(1:2:3, 3:4:5, 2:3:4) (out3, in1, ctrl) ;d 触发器
下面从门级建模的角度,对 d 触发器进行设计。
sr 触发器
sr 触发器结构图及真值表如下所示。
1> 当 s 为低电平,g1 输出端 q 为高电平,并反馈到 g2 输入端。 如果此时 r 为高电平,则 g2 输出端 q' 为低电平。
2> r 为低电平 s 为高电平时,分析同理。
3> s 与 r 均为高电平时,如果 q = 1 (q' = 0) , 则 q 反馈到 g2 输入端后输出 q' 仍然为 0, q' 反馈到 g1 输入端后输出 q 仍然是 1,呈现稳态。 如果 q =0 (q' = 1) 同理,q 与 q' 的值仍然会保持不变。 即 s 与 r 均为高电平时该电路具有保持的功能。
4> 如果 s 与 r 均为低电平,则输出 q 与 q' 均为高电平,不再成互补的关系。 所以此种情况是禁止出现的。
sr 锁存器
在基本的 sr 触发器前面增加 2 个与非门,可构成带有控制端 sr 锁存器。
sr 锁存器及其真值表如下所示。
当 en=0 时,g3、g4 截止,sr 锁存器保持输出状态不变。
当 en=1 时,与基本的 sr 触发器工作原理完全相同。
d 锁存器
基本的 sr 触发器输入端不能同时为 0, 带有控制端的 sr 锁存器输入端不能同时为 1,否则会导致输出端 q 与 q' 的非互补性矛盾。
为消除此种不允许的状态,在带有控制端的 sr 锁存器结构中加入取反模块,保证 2 个输入端均为相反逻辑,则形成了 d 锁存器。
其结构图和真值表如下所示。
1> 当 en=1 时,输出状态随输入状态的改变而改变。
2> 当 en=0 时,输出状态保持不变。
d 锁存器是一种电平触发。
如果在 en=1 的有效时间内,d 端信号发生多次翻转,则输出端 q 也会发生多次翻转。 这降低了电路的抗干扰能力,不是实际所需求的安全电路。
为提高触发器的可靠性,增强电路抗干扰能力,发明了在特定时刻锁存信号的 d 触发器。
d 触发器
将两个 d 锁存器进行级联,时钟取反,便构成了一种简单的 d 触发器,又名 flip-flop。
其结构图和真值表如下所示。
第一级 d 锁存器又称为主锁存器,在 cp 为低电平时锁存。 第二级 d 锁存器又称为从锁存器,时钟较主锁存器相反,在 cp 为高电平时锁存。
1> cp=1 时,主锁存器输出端 qm 会和 d 端信号的变化保持一致,而从锁存器处于保持状态,输出 qs 保持不变。
2> cp由高电平变为低电平时,主锁存器锁存当前 d 的状态,传递到输出端 qm 并保持不变。 而从锁存器输出端 qs 会和 qm 的变化保持一致。 此时处于锁存状态下的主锁存器输出端 qm 会保持不变,所以 d 触发器输出端 qs 端得到新的 qm 值后, 也会保持不变。
综上所述,d 触发器输出端 qs 只会在时钟 cp 下降沿对 d 端进行信号的锁存,其余时间输出端信号具有保持的功能。
将双级 d 锁存器展开为门级结构,如下图所示。
对 d 触发进行门级建模,并加入门级延时,verilog 模型如下:
module d_tri( input d, cp, output q, qr); parameter rise_time = 0.11 ; parameter fall_time = 0.07 ; //part1, not gate wire cpn, dn ; not #(rise_time, fall_time) (cpn, cp); not #(rise_time, fall_time) (dn, d); //part2, master trigger wire g3o, g4o ; nand #(rise_time, fall_time) (g3o, d, cp); nand #(rise_time, fall_time) (g4o, dn, cp); wire #(rise_time, fall_time) g1o, g2o ; nand #(rise_time, fall_time) (g1o, g3o, g2o); nand #(rise_time, fall_time) (g2o, g4o, g1o); //part3, slave trigger wire g7o, g8o ; nand #(rise_time, fall_time) (g7o, g1o, cpn); nand #(rise_time, fall_time) (g8o, g2o, cpn); wire g5o, g6o ; nand #(rise_time, fall_time) (g5o, g7o, g6o); nand #(rise_time, fall_time) (g6o, g8o, g5o); assign q = g5o ; assign qr = g6o ;endmoduletestbench 编写如下:
`timescale 1ns/1psmodule test ; reg d, cp = 0 ; wire q, qr ; always #5 cp = ~cp ; initial begin d = 0 ; #12 d = 1 ; #10 d = 0 ; #14 d = 1 ; #3 d = 0 ; #18 d = 0 ; end d_tri u_d_trigger( .d (d), .cp (cp), .q (q), .qr (qr)); initial begin forever begin #100; //$display(---gyc---%d, $time); if ($time >= 1000) begin $finish ; end end endendmodule仿真结果如下。
由图可知,q/qr 信号均在时钟 cp 下降沿采集到了 d 端信号,并在单周期内保持不变,且输出有延迟。
对 cap3 时刻进行放大,对延时进行追踪,如下图所示。
cp 端到 cpn 端有上升延迟,时间为 110ps;
cpn 端到 g8o 端有下降延迟,时间为 70ps;
g8o 端到 g6o 端有上升延迟,时间为 110ps;
g6o 端到 q 端有下降延迟,时间为 70ps;
共 360ps,符合设置的门延迟。

电容有移相作用,那移相具体是什么作用?
奔驰EQC座舱与T-Box拆解分析
国内MCU厂商如何应对涨价危机?
NPN和PNP两种型号三极管的使用和连接方法
专业传感器厂商霍尼韦尔调整战略
门延迟类型介绍
深圳市特发信息发布2018年第三季度报告,实现营业收入40.26亿元,同比增长7.25%
中兴通讯与英特尔联合发布了Light Cloud方案
答不上这三点,都不好意思说是干智能网联的
区块链将为汽车行业带来更多利益开辟新的篇章
直流电与交流电有什么区别
如何用Python制作一个自动发送程序
BlueHost的美国独立服务器怎么样
网约车经营暂行管理办法总则全文 十一月一日起正式实施
零中频接收机有哪些主要的优缺点呢?
紫光增资800亿 布局并购
三维数字化技术应用:基于M-Track的桌面级协作机器人校准
FPGA学习系列:内存128M的flash芯片设计
1999不涨价!小米6配满血版骁龙835,高配8G运存!
未来iPhone或支持RCS融合通信