相同模块的两个实例之间的延迟

时间:2014-08-18 05:31:36

标签: verilog

我想运行以下代码:

module a (input a1 ,clock, reset, output aout);

----
----
----

key k1(a1,clock,reset,k1out); // it takes around 40 cycles to complete 

key k2(k1out,clock,reset,k2out);

endmodule

k1out显示正确,但k2out未正确显示。事实上,我将k2out作为 xxxxx 。有没有办法在这两个实例之间提供延迟,以便它们按顺序执行,我可以正确获得输出?

1 个答案:

答案 0 :(得分:0)

您描述的硬件,这两个实例并行存在。

您可以控制每个块的时钟,以便顺序执行,或者构建一个状态机来对它们进行排序。

使用时钟门控(密钥内部):

module a (input a1 ,clock, reset, output aout);

----
----
----

logic [6:0] state;
always @(posedge clock or posedge reset) begin
  if (reset) begin
    state <= 'b0;
  end
  else begin
    if (state >= 7'd80) begin
      state <= 'b0 ;
    end else 
      state <= state + 1'b1;
  end
end

wire k1_enable = (state <  7'd40 );
wire k2_enable = (state >= 7'd40);


key k1(a1,   clock,reset,k1out, k1_enable); 
key k2(k1out,clock,reset,k2out, k2_enable);

endmodule

现在使用密钥的顺序元素:

always @(posedge clock or posedge reset) begin
  if (reset) begin
    data <= 1'b0;
  end
  else begin
    if (enable) begin
      data <= ; //next value
    end
    //else hold data
  end
end