サーチ…


構文

  • 常に@(posedge clk)begin / * statements * / end
  • 常に@(negedge clk)begin / * statements * / end
  • 常に@(posedge clkまたはposedge reset)//同期リセットより効率的に合成できない

シンプルカウンター

FPGAスタイルのフリップフロップの初期化を使用するカウンタ:

module counter(
    input clk,
    output reg[7:0] count
)
initial count = 0;
always @ (posedge clk) begin
    count <= count + 1'b1;
end

ASIC合成に適した非同期リセットを使用して実装されたカウンタ:

module counter(
  input            clk,  
  input            rst_n, // Active-low reset
  output reg [7:0] count
)
always @ (posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    count <= 'b0;
  end
  else begin
    count <= count + 1'b1;
  end
end

これらの例の手順ブロックは、クロックの立ち上がりエッジごとにcountアップしcount

ノンブロッキング割り当て

ノンブロッキング代入( <= )は、エッジセンシティブalwaysブロック内の代入に使用されます。ブロック内では、ブロック全体が処理されるまで新しい値は表示されません。例えば:

module flip(
    input clk,
    input reset
)
reg f1;
reg f2;

always @ (posedge clk) begin
  if (reset) begin // synchronous reset
    f1 <= 0;
    f2 <= 1;
  end
  else begin
    f1 <= f2;
    f2 <= f1;
  end
end
endmodule

ここにノンブロッキング( <= )割り当てを使用していることに注目してください。最初の割り当てはプロシージャブロックの後で実際に有効になるわけではないので、2番目の割り当てはブロックされた代入( = )や他の言語の代入とは異なり、2つの変数を意図して実際に交換します。 f1はブロック内の2番目の割り当ての右側にまだ元の値を持ちます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow