事件控制,但不支持始终阻止的第一条语句

时间:2018-07-19 14:25:32

标签: verilog

我的代码在这里: /////////////////////////////

module edge_wait(
    input wire enable,
    input  wire clk,
    output reg trigger
    );

   always @(posedge enable)
  begin
       trigger <=0;
       repeat (10) 
           begin
            @ (posedge clk);
            end
       trigger <=1;     
 end      
endmodule

//////////////////////////// 当我运行综合时,出现错误“事件控制,但不支持始终阻止的第一条语句”。我怎么解决这个问题。

2 个答案:

答案 0 :(得分:0)

海伊!

您必须注意,RTL编码不支持延迟(基于常规或定时)。 (RTL表示可合成,即代码可以在硬件上实现)

您的代码将模拟但不会综合。(会给出您指定的错误)

尝试删除块中的@(posedge clk)。您不会收到错误。

答案 1 :(得分:0)

您需要将其转换为状态机/计数器

module edge_wait(
    input wire enable,
    input  wire clk,
    output reg trigger
    );
integer counter
  always @(posedge clk)
     if (enable) begin
       trigger <= 0;
       counter <=0;
     end
     else if (counter == 10)
         trigger <= 1;
     else
         counter <= counter + 1;
endmodule

这假设enable被视为同步重置。您将需要对其进行修改以处理未指定的行为,例如,当计数器计数时,如果使能多次变为高电平会发生什么。