关于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

把这个的代码的波形加载后观看
在这里插入图片描述
由于延后时的ai和bi的电平值相同,因此无法判断是先采样后延时赋值还是先延时后采样赋值,因此需要对原代码进行修改。

2、修改

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

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

下载波形查看
在这里插入图片描述
由波形可以看出

  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. 因此结论正如原文中所说先采样,后延时赋值.
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贱贱的剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值