k0b0's record.

Computer Engineering, Arts and Books

SystemVerilogのalways_comb、always_ff、always_latch

 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