zoukankan      html  css  js  c++  java
  • Verilog之delay的两种用法(inter/intra)

    verilog语言中有两种延迟方式:inter-delay和intra-delay,关于inter和intra。这两个英文前缀都有“内部,之间”的意思,但又有所不同。inter表达不同事物之间,intra表达同类事物之间,两者具体的含义请细细体会:)。以阻塞式赋值为例(block assignment):

    1.inter-delay的表达式为:  #delay-value a=b+c;
        先说说阻塞式赋值语句执行的一般过程:
        block assignment方程的RHS先估值(evaluation)接着将结果赋值给LHS,就是assignment;简单来说就是先evaluation再assignment。对于阻塞赋值,这两个过程是一气呵成的(当然是在没有intra-delay的情况下),体现了“block”的含义。
        回到这句话的含义上来,inter-delay要求赋值语句在执行之前先延迟一个delay-value的仿真时间,然后再执行上述的两个过程,完成一次语句赋值。就是说inter-delay只是将这个赋值方程的执行时间整体延迟了,不会对表达式本身的执行过程产生影响。
    2.intra-delay的表达式为:a = # delay-value  b+c;
       对于intra-delay可以将它理解为是这条语句的一个部分,当这条语句被执行时刻,仿真器以此时刻的b和c的值进行估值,然后等待delay-value的仿真时间,再将值assignment给a。注意:在等待的delay-value这段时间内,b/c的任何变化将是被忽略的,就是说这个赋值方程的LHS在这段时间内不会再估值即使b/c的值有变化!
     
    对于intra-delay,它用于对实际电路的interial delay进性建模。至于什么是电路元件的interial delay这里就暂时不做介绍了。
    有了上述解释,下面这两段代码的区别就不言自明了(代码来自论文:Correct Methods For Adding Delays To Verilog Behavioral Models
    module adder_t7a (co, sum, a, b, ci);
    output co;
    output [3:0] sum;
    input [3:0] a, b;
    input ci;
    reg co;
    reg [3:0] sum;
    reg [4:0] tmp;
    always @(a or b or ci) begin
    #12 tmp = a + b + ci;
    {co, sum} = tmp;
    end
    endmodule
     
    module adder_t7b (co, sum, a, b, ci);
    output co;
    output [3:0] sum;
    input [3:0] a, b;
    input ci;
    reg co;
    reg [3:0] sum;
    reg [4:0] tmp;
    always @(a or b or ci) begin
    tmp = a + b + ci;
    #12 {co, sum} = tmp;
    end
    endmodule
  • 相关阅读:
    Jumpserver之安装在CentOS主机步骤
    Nginx负载均衡后端健康检查(支持HTTP和TCP)
    Nginx负载均衡后端健康检查
    ELK之使用packetbeat分析网络包流量
    ELK之使用heartbeat监控WEB站点
    ELK之elasticsearch导致CPU居高不下系统慢解决办法
    Saltstack如何修改主机名或者minion id
    mac中使用 sourcetree 的快速配置和git服务器登录
    [转]从三层架构迈向领域驱动设计 — 关于领域设计中描述相对简要及明了的一篇文章
    io-nio 区别示意图
  • 原文地址:https://www.cnblogs.com/chip/p/4100251.html
Copyright © 2011-2022 走看看