SystemVerilogの3種類のalways文をメモ。
3種類のalways文を使い分けて記述することでコードの可読性が高くなったり、予期しない回路の生成を防ぐことが出来る。
always_comb
組合わせ回路記述する際に使うalways文。センシティビティリストには何も記述しない。
記述例
module comb_exp(input i0,i1, output reg o); /*Generate combination circuit */ always_comb begin o = i0 & i1; end endmodule
always_ff
順序回路を記述する際に使うalways文。記述スタイルは普通のalwaysと同じ
記述例
module ff_exp(input ck,reset,d, output reg q); /* Generate flip-flop circuit */ always_ff @(negedge ck or negedge reset) begin if(!reset) q <= 1'b0; else q <= d; end endmodule
always_latch
ラッチ回路を記述する際に使うalways文。センシティビティリストには何も記述しない。
記述例
module latch_exp(input i, input [1:0] sel, output reg o); /* Generate latch circuit */ always_latch begin case(sel) 2'b00 : o=i; 2'b01 : o=1; 2'b10 : o=0; endcase end