【问题标题】:always @ (posedge clk ) not triggering as expected总是@(posedge clk)没有按预期触发
【发布时间】:2019-12-09 04:00:43
【问题描述】:

总是阻止不连续触发

always@(posedge clk) begin
    for (int i=1;i<=32;i=i+1) begin
       clk_a=i;
       #0.3215
    end
    for (int j=31;j>=0;j=j-1) begin
       clk_a=j;
       #0.3215
    end
    clk_a=0;
    end

在第 5 个时钟中,第 7 和第 9 个时钟始终不会触发块 ||y,并且此行为是通过模拟随机发生的。

【问题讨论】:

  • 1/ 你的clk频率是多少。 2/ 你的`timescale 设置是什么?

标签: verilog system-verilog


【解决方案1】:

我假设您的时间精度足够小,以至于0.3215 不会四舍五入到0.322。另外,我假设您的两个 for 循环中有拼写错误。

第一个循环:i&lt;=32 应该是 i&lt;32
第二个循环:j=j+1 应该是 j--

唯一可能的解释是第二个循环结束和下一个@(posedge clk) 的竞争条件。你应该试试:

initial @(posedge clk) 
  forever begin
    for (int i=0;i<32;i++) begin
       clk_a=i;
       #0.3215
    end
    for (int j=31;j>=0;j--) begin
       clk_a=j;
       #0.3215
    end
    clk_a=0;
  end

【讨论】:

  • 是的,这是一个拼写错误。我对上面的代码做了修改
  • @Rahul,第一个循环呢? clk的频率是多少?
  • 嗨,dave,clk 的频率是可变的,我现在保持一个恒定值
  • 那个常数值是....?我的回答对你有意义吗?
  • 是的,戴夫,谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多