关于verilog的时延研究

时延赋值

疑问: 网页Verilog时延一章,有关assign #20 so_lose = ai & bi到底是先延时20个时间单位再采样还是先采样再时延20个时间单位。做了以下的实验

1、原代码

  1. time_delay_module模型
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
  1. 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

把这个的代码的波形加载后观看
关于verilog的时延研究_第1张图片
由于延后时的ai和bi的电平值相同,因此无法判断是先采样后延时赋值还是先延时后采样赋值,因此需要对原代码进行修改。

2、修改

将test模型的第一个initial的时间稍做修改,其余的保持不变,结果如下,即把第一个25个时间单位的时延改成3

 initial begin
     ai              = 0;
     #3           ai = 1;
     #35          ai = 0;
     #40          ai = 1;
     #10          ai = 0;
 end

下载波形查看
关于verilog的时延研究_第2张图片
由波形可以看出

  1. so_normal是没有时延的直接赋值,因此为ai&bi,结果为低电平。
  2. so_lose和so_get分别时延20和5个时间单位,但是刚开始的ai低平时钟只有3个单位,因此被忽略了,当ai到第3个时间单位时才重新计时。此时还是无法分清楚到底先采样后延时赋值还是先延时后采样赋值。

3.再修改

代码继续做如下改动,即将刚刚修改的3个延时的时间单位改成5

 initial begin
     ai              = 0;
     #5           ai = 1;
     #35          ai = 0;
     #40          ai = 1;
     #10          ai = 0;
 end

再拉取波形如下
在这里插入图片描述

  1. 这次so_get在5个单位前后拥有不同的电平值,可以很清楚的看到:ai的第5个单位是高电平而开始是低电平,so_get第5个单位是低电平,因此是先执行ai&bi为低电平,然后时延5个单位再赋值给so_get
  2. 因此结论正如原文中所说先采样,后延时赋值.

你可能感兴趣的:(Verilog,Verilog,时延)