0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

门延迟类型介绍

CHANBAEK 来源:数字IC与好好生活的两居室 作者:除夕之夜啊 2023-03-30 11:31 次阅读

门延迟类型

前两节中所介绍的门级电路都是没有延迟的,实际门级电路都是有延迟的。

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 ;


endmodule

testbench 编写如下:

`timescale 1ns/1ps
module 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
   end


endmodule

仿真结果如下。

由图可知,Q/QR 信号均在时钟 CP 下降沿采集到了 D 端信号,并在单周期内保持不变,且输出有延迟。

图片

对 cap3 时刻进行放大,对延时进行追踪,如下图所示。

CP 端到 CPN 端有上升延迟,时间为 110ps;

CPN 端到 G8O 端有下降延迟,时间为 70ps;

G8O 端到 G6O 端有上升延迟,时间为 110ps;

G6O 端到 Q 端有下降延迟,时间为 70ps;

共 360ps,符合设置的门延迟。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    3903

    浏览量

    132585
  • 信号
    +关注

    关注

    11

    文章

    2683

    浏览量

    75761
  • Verilog
    +关注

    关注

    28

    文章

    1328

    浏览量

    109507
  • 时钟
    +关注

    关注

    10

    文章

    1498

    浏览量

    130556
  • 门级电路
    +关注

    关注

    0

    文章

    15

    浏览量

    1939
收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用/元服务开发-延迟任务说明(一)

    一、功能介绍 应用退至后台后,需要执行实时性要求不高的任务,例如有网络时不定期主动获取邮件等,可以使用延迟任务。当应用满足设定条件(包括网络类型、充电类型、存储状态、电池状态、定时状态
    发表于 01-16 14:57

    如何有效评估SAN网络延迟(latency)?

    SAN网络性能有着至关重要的作用,今天主要给家介绍SAN网络主要延迟类型(主要包括链路延迟和交换机延迟,主机
    发表于 01-07 16:20

    pspice 逻辑怎么样修改模型参数?

    请问大家,pspice的逻辑模型,比如说与门7408,该怎样修改其参数?我想修改7408的延迟时间,输出电平等等,怎么弄?关于右键点击然后edit pspice model的方法,我试过,只是出来
    发表于 06-24 10:09

    cyclone ii 的PLL时钟相位延迟问题

    我使用megawizard生成PLL,外部50M,生成3个依次延迟90度的100M时钟,C0 0度, C1 90度 ,C2 180度,然后使用modelsim 级仿真,出来的结果不太对啊!不应该是依次延迟1/100M/4么?R
    发表于 01-20 17:44

    PlanAhead报告时间:路径延迟类型代表什么?

    嗨,我正在尝试为Virtex 4QV进行时序分析。有人知道报告计时选项中的路径延迟类型“最大/最小”是什么意思吗?最差温度的类型是“Max”,最佳温度是Min?如果是这样,温度是多少?最好的祝福
    发表于 02-25 09:51

    请问如何在CPLD中引入延迟

    Dummy:STD_LOGIC:='0';属性keep:string;属性保持虚拟:信号为“真”;开始假我不确定我是否正确地设置了所有内容,但我没有看到引入延迟。如何确保信号Dummy包含所有那些NOT
    发表于 03-25 08:29

    请问有各种ADC类型原理介绍的文章吗?

    各位,谁各种ADC类型原理介绍的文章,能够发一份给小弟
    发表于 05-22 11:40

    ms延迟返回错误

    嗨,很抱歉,这肯定是个愚蠢的问题。我已经从常见问题解答中找出了ms延迟的代码。我刚刚复制并粘贴了它,它返回了这个错误。错误:未知的类型名称“WORD”void DelayMs(WORD延迟)我试着
    发表于 08-29 06:31

    如何检查AND的逻辑

    你好。我是在FPGA上设计系统的初学者。我的fpga是XC7K325T -2 FFG900(knitex - 7系列)我想计算基本15位2输入加法器的逻辑延迟。如果我能检查AND或OR
    发表于 05-25 07:28

    IAR调试中不同复位类型介绍

    IAR调试中不同复位类型介绍在IAR 环境下调试有不同的复位类型,其中一些只复位内核不复位MCU 外设的复位方式在特定情况下可能会造成仿真问题
    发表于 10-19 07:54

    延迟线,延迟线是什么意思

    延迟线,延迟线是什么意思  延迟线  delay line  用于将电信号延迟一段时间的元件或器件称为延迟线。
    发表于 03-09 11:33 8326次阅读

    AN-0983应用笔记分享:零延迟时钟计时技术介绍

    AN-0983:零延迟时钟计时技术介绍
    发表于 04-23 10:58 0次下载
    AN-0983应用笔记分享:零<b class='flag-5'>延迟</b>时钟计时技术<b class='flag-5'>介绍</b>

    延迟式电子熔丝电路

    本文介绍延迟式电子熔丝,是参考延迟保险丝的原理设计的.它既能避免电动机、彩电等在开机瞬间产生大电流冲击时的误动作。
    的头像 发表于 01-26 09:18 3371次阅读
    <b class='flag-5'>延迟</b>式电子熔丝电路

    Xilinx Vivado I/O延迟约束介绍

    1 I/O延迟约束介绍 要在设计中精确建模外部时序,必须为输入和输出端口提供时序信息。Xilinx Vivado集成设计环境(IDE)仅在FPGA边界内识别时序,因此必须使用以下命令指定超出这些边界
    的头像 发表于 11-29 10:01 4678次阅读

    电阻的封装类型介绍

    电阻的封装类型介绍
    的头像 发表于 12-29 10:18 1926次阅读