サーチ…
構文
- 常に@(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