总是@(posedge clk)未能按预期触发

时间:2019-12-09 04:00:43

标签: verilog system-verilog

总是阻止不会连续触发

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个clk中,第7个和第9个时钟始终不会触发|| y块,并且这种行为是通过模拟随机发生的。 enter image description here

1 个答案:

答案 0 :(得分:1)

我认为您的时间精度足够小,因此0.3215不会四舍五入到0.322。另外,我假设您在两个for循环中有错别字。

第一个循环:i<=32应该为i<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