举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > verilog时延单元 Verilog 时延

verilog时延单元 Verilog 时延

2023-05-12 12:31 Verilog手册

verilog时延单元 Verilog 时延

verilog时延单元

Verilog时延单元是一种用于模拟电路设计的工具,它可以帮助电子工程师们更好地理解和分析电路的行为。Verilog时延单元可以帮助电子工程师们更好地理解和分析电路的行为,并且可以有效地减少开发时间。

Verilog时延单元是一种非常有效的工具,它可以帮助电子工程师们快速、准确地测量信号传递时间。它使用一个特定的语法来表示信号传递时间,这样就能够快速、准确地测量信号传递时间。此外,Verilog时延单元还能够有效地减少开发时间,因为它能够快速、准确地测量信号传递时间。

module delay_unit (input clk, input reset, input data_in, output data_out);
  reg [7:0] counter;

  always @(posedge clk) begin
    if (reset) begin
      counter <= 0;
    end else begin
      counter <= counter + 1;
    end 
  end

  assign data_out = (counter == 8'hFF) ? data_in : 0;   // 8'hFF is the maximum value of the counter.  
endmodule  // delay_unit 

Verilog 时延

关键词:时延, 惯性时延

连续赋值延时语句中的延时,用于控制任意操作数发生变化到语句左端赋予新值之间的时间延时。

时延一般是不可综合的。

寄存器的时延也是可以控制的,这部分在时序控制里加以说明。

连续赋值时延一般可分为普通赋值时延、隐式时延、声明时延。

下面 3 个例子实现的功能是等效的,分别对应 3 种不同连续赋值时延的写法。

//普通时延,A&B计算结果延时10个时间单位赋值给Z
wire Z, A, B ;
assign #10    Z = A & B ;
//隐式时延,声明一个wire型变量时对其进行包含一定时延的连续赋值。
wire A, B;
wire #10        Z = A & B;
//声明时延,声明一个wire型变量是指定一个时延。因此对该变量所有的连续赋值都会被推迟到指定的时间。除非门级建模中,一般不推荐使用此类方法建模。
wire A, B;
wire #10 Z ;
assign           Z =A & B

惯性时延

在上述例子中,A 或 B 任意一个变量发生变化,那么在 Z 得到新的值之前,会有 10 个时间单位的时延。如果在这 10 个时间单位内,即在 Z 获取新的值之前,A 或 B 任意一个值又发生了变化,那么计算 Z 的新值时会取 A 或 B 当前的新值。所以称之为惯性时延,即信号脉冲宽度小于时延时,对输出没有影响。

因此仿真时,时延一定要合理设置,防止某些信号不能进行有效的延迟。

对一个有延迟的与门逻辑进行时延仿真。

module time_delay_module(
    input   ai, bi,
    output  so_lose, so_get, so_normal);
 
    assign #20      so_lose      = ai & bi ;
    assign  #5      so_get       = ai & bi ;
    assign          so_normal    = ai & bi ;
endmodule

testbench 参考如下:

`timescale 1ns/1ns

module test ;
    reg  ai, bi ;
    wire so_lose, so_get, so_normal ;
 
    initial begin
        ai        = 0 ;
        #25 ;      ai        = 1 ;
        #35 ;      ai        = 0 ;        //60ns
        #40 ;      ai        = 1 ;        //100ns
        #10 ;      ai        = 0 ;        //110ns
    end
 
    initial begin
        bi        = 1 ;
        #70 ;      bi        = 0 ;
        #20 ;      bi        = 1 ;
    end
 
    time_delay_module  u_wire_delay(
        .ai              (ai),
        .bi              (bi),
        .so_lose         (so_lose),
        .so_get          (so_get),
        .so_normal       (so_normal));
 
    initial begin
        forever begin
            #100;
            //$display("---gyc---%d", $time);
            if ($time >= 1000) begin
                $finish ;
            end
        end
    end
 
endmodule

仿真结果如下:

信号 ​so_normal ​为正常的与逻辑。

由于所有的时延均大于 5ns,所以信号 ​so_get ​的结果为与操作后再延迟 5ns 的结果。

信号 ​so_lose ​前一段是与操作后再延迟 20ns 的结果。

由于信号 ai 第二个高电平持续时间小于 20ns,​so_lose ​信号会因惯性时延而漏掉对这个脉冲的延时检测,所以后半段 ​so_lose ​信号仍然为 0。


点击这里下载源码


阅读全文
以上是鳄鱼CMS为你收集整理的verilog时延单元 Verilog 时延全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们