SystemVerilog defineマクロについて考える

はじめに

defineマクロが思ったよりいろんな使い方ができたので、試してみました。

サンプル1 値を置換

`define DEF_INIT 2

always_ff @(posedge clk, negedge rst_n)
    if (!rst_n)
        data <= `DEF_INIT

サンプル2 組み合わせ回路を置換

`define DEF_XOR(a, b) a & ~b | ~a & b;

always_ff @(posedge clk, negedge rst_n)
    if (!rst_n)
        c <= '0;
    else
        c <= `DEF_XOR(a, b)

サンプル3 FlipFlopを置換

`define FF(clk, rst_n, din, dout) \
    always_ff @(posedge clk, negedge rst_n) \
        if (!rst_n) \
            dout <= '0; \
        else \
            dout <= din;

`FF(clk, rst_n, din, dout)

サンプル4 moduleを置換

`define DEF_MODULE(clk, rst_n, din, dout, name) module name #( \
)( \
    input clk, \
    input rst_n, \
    input [2:0] din, \
    output logic [2:0] dout \
); \
    always_ff @(posedge clk, negedge rst_n) \
        if (!rst_n) \
            dout <= '0; \
        else \
            dout <= din; \
endmodule

`DEF_MODULE(clk, rst_n, din, dout, dut)

まとめ

defineマクロを使用しました。

コメント

タイトルとURLをコピーしました