SystemVerilog|二値化 サンプルコード

Systemverilog
田中太郎
田中太郎

入力を二値化するSystemVerilogのサンプルコードです

サンプルコード

仕様

・入力信号のMSBが1ならALL 1、それ以外はALL 0を出力する
例)入力が3ビットのとき、100以上は111を出力、011以下は000を出力する

・サイクル数 1

RTL

module binary #(
    parameter BIT_WIDTH = 3
)(
    input clk,
    input rst_n,
    input [BIT_WIDTH-1:0] din,
    output logic [BIT_WIDTH-1:0] dout
);

    always_ff @(posedge clk, negedge rst_n) begin
        if (!rst_n) begin
            dout <= '0;
        end
        else begin
            if (din[BIT_WIDTH-1]) begin
                dout <= '1;
            end
            else begin
                dout <= '0;
            end
        end
    end

endmodule

TestBench

module tb;

initial begin
    $dumpfile("wave.vcd");
    $dumpvars(0,tb);
end
initial begin
    #100;
    $finish;
end

reg clk = 0;
logic rst_n;
always #5 clk = !clk;
initial begin
    rst_n = 0;
    din = 0;
    #10;
    rst_n = 1;
end

always_ff @(negedge clk) begin
    din += 1;
end

logic [3-1:0] din;
logic [3-1:0] dout;
binary #(
) dut(
    .clk(clk),
    .rst_n(rst_n),
    .din(din),
    .dout(dout)
);

endmodule

波形

まとめ

入力を二値化するSystemVerilogのサンプルコードを紹介しました

入力のビット幅が変わるときはBIT_WIDTHの調整してください

コメント

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