zoukankan      html  css  js  c++  java
  • vcs 仿真中遇到的verilog 延时问题

     

    在项目后仿的过程中,由于后端提供的网表并非完整的网表,而是分模块提供的独立网表。所以后仿是在仿真环境中既有rtl代码,又有网表。这种情况下rtl 模块与网表模块之间的接口存在信号的hold time无法满足的情况。所以需要将rtl给到网表的输入信号做一个delay再输入到网表中。在这个过程中研究了一下verilog中的延时问题。

    no bb,show me your code.

     module test(input in, output a,output b,output c,output d,output e,output f,output g);
    reg a;
    reg b;
    reg c;
    reg d;
       
    always@(*) begin
     #5 a=in;
     end
      
     always@(*) begin
     b= #5 in;
     end
      
     always@(*) begin
     #5 c<=in;
     end
      
    always@(*) begin
    d <=#5 in;
    end
      
      assign #5 e=in;
      assign f=in;
      assign #1 g=in;
      
     endmodule

     下面是以上代码再vcs下的仿真波形:

    首先看信号a,c

    信号a,c都是再always块被赋值,敏感条件是*,也就是只要输入信号in变化就会触发对应always块的执行,该always块内部先是执行#5,等待5个时间单位,然后把in的当前值(5ns时刻的值)赋给a,c。也就是在0时刻该always块触发以后等待5ns,将5ns时刻的in值0赋值给a,c.在always内部的#5等待5ns的这个时间段以内,输入信号in的任何变化都不会被响应。下次触发always的条件就是5ns后in的再次跳变。

    再来看信号b,d

     #5放在赋值符号之后,不同在于b采用的阻塞赋值,d采用的非阻塞赋值。两者都是将5ns之前的in值赋给b,d。但是阻塞赋值的情况信号b会忽略等待5ns这段时间的输入信号的变化。换个说法就是in信号的跳变触发always块,记录当前in值,然后等待#5,同时在等待的过程中忽略in的变化,等#5时间一到将之前记录的in值赋给b;信号d则不同,in信号的跳变触发always块,记录当前in值,然后等待#5,但是在等待#5的过程中也会记录in的变化。这种情况相当于信号d是将in整体后移了5ns。

    遗留问题

     assign #5 e=in;

  • 相关阅读:
    cmake使用的一些补充
    Visual Studio调试Tersseract
    Python实现重命名一个文件夹下的图片
    TensorFlow:使用inception-v3实现各种图像识别
    TensorFlow:谷歌图像识别网络inception-v3下载与查看结构
    TensorFlow 模型的保存与载入
    TensorFlow使用RNN实现手写数字识别
    TensorFlow卷积神经网络实现手写数字识别以及可视化
    tensorboard可视化
    tensorflow之tensorboard
  • 原文地址:https://www.cnblogs.com/linuxiaogang/p/15697503.html
Copyright © 2011-2022 走看看