You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Verilog测试台中为40ns翻转的时钟添加15ns初始延迟?

在Verilog测试台中实现带初始延迟的周期性时钟

没问题,这在Verilog测试台里非常容易实现,我给你两种常用的写法,你可以根据自己的习惯选择:

方法一:使用initial块结合forever循环

这种写法最直观,先等待指定的15ns延迟,再进入持续翻转的循环:

`timescale 1ns/1ps // 务必设置时间单位,确保延迟精度

module tb;
  reg clk;

  initial begin
    clk = 1'b0;       // 初始化时钟为低电平
    #15;              // 等待15ns后再开始翻转
    forever begin
      #40 clk = ~clk; // 每40ns翻转一次时钟
    end
  end

  // 这里可以添加你的DUT实例化和其他测试逻辑
endmodule

逻辑说明:

  • 前15ns时钟保持初始的低电平,15ns时刻开始第一次翻转;
  • 之后每40ns翻转一次,时钟周期为80ns(完全符合每40ns翻转的要求);
  • forever循环会一直执行,直到仿真结束。

方法二:initial块触发第一次翻转,always块维持周期性翻转

这种写法把初始延迟和后续的周期性翻转分开,逻辑同样清晰:

`timescale 1ns/1ps

module tb;
  reg clk;

  initial begin
    clk = 1'b0;       // 初始时钟低电平
    #15 clk = ~clk;   // 15ns时完成第一次翻转
  end

  always #40 clk = ~clk; // 第一次翻转后,每40ns自动翻转一次
endmodule

逻辑说明:

  • 初始15ns时钟保持低电平,15ns时刻完成第一次翻转为高电平;
  • always块会在第一次翻转后,每隔40ns自动触发翻转,和方法一的效果完全一致;
  • 这种写法适合把初始状态设置和周期性行为分开的场景。

注意事项:

  • 一定要在测试台开头加上timescale语句,比如1ns/1ps,确保延迟时间的单位和精度符合预期;
  • 如果需要初始时钟为高电平,只需要把clk = 1'b0改成clk = 1'b1即可,后续逻辑无需调整。

内容的提问来源于stack exchange,提问作者qwertyuiop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:08:46