SystemVerilog|BMPファイルを読み込む

Systemverilog
田中太郎
田中太郎

SystemVerilogを使用してBMPファイル(バイナリファイル)を読み込みます

BMPファイルを読み込む

BMPファイルはヘッダー、インフォ、カラーバレット(ない場合も)、画素データからなります

詳しい内容はここでは割愛します

下記のは512×512画素のグレー画像を取得して、なにもせず保存するサンプルコードです

入力画像
サンプルコード
module tb;
    // 定数
    localparam IMG_H = 207;
    localparam IMG_W = 196;
    localparam HEADER_SIZE = 14;
    localparam INFO_SIZE = 40;

    reg byte unsigned header[HEADER_SIZE]; // BMPのヘッダーを格納する
    reg byte unsigned info[INFO_SIZE];     // BMPのインフォを格納する
    reg byte unsigned color[1024];         // BMPのカラーバレットを格納する
    reg byte unsigned data[IMG_H*IMG_W];   // 画素データを格納する

    int f;
    initial begin
        f = $fopen("rob.bmp", "rb");  // バイナリリード型で開く
        $fread(header, f, 0, HEADER_SIZE); // ヘッダー取得
        $fread(info, f, 0, INFO_SIZE);     // インフォを取得
        $fread(color, f, 0, 1024);         // カラーバレットを取得
        $fread(data, f, 0, IMG_H*IMG_W);   // 画素データを取得
        $fclose(f);

        f = $fopen("result.bmp", "wb"); // result.bmpをバイナリライト型で開く
        foreach(header[i])
            $fwrite(f, "%c", header[i]); // ヘッダー
        foreach(info[i])
            $fwrite(f, "%c", info[i]); // インフォ
        foreach(color[i])
            $fwrite(f, "%c", color[i]); // カラーバレット
        foreach(data[i])
            $fwrite(f, "%c", data[i]); // 画素データ
        $fclose(f);
    end
endmodule
出力画像

まとめ

SystemVerilogでBMP(ビットマップ)ファイルを取得して作成しました。

コメント

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