2007年08月06日

ModelSimでビットマップのリードライト

ModelSim+VHDLでビットマップのリードライトを行えるモジュールを作成中だが、思ったように時間がとれないので難航している。
とりあえずパッケージだけ出来たので公開。(ボディは半分くらい)これを作るのに「textio.vhd」はとても参考になる。一度目を通すことをおすすめしたい。
これが出来るとModelSimXE Starterでビットマップを直接扱うことが出来る。
私の仕事上、画像ファイルを扱うことが多いのでこれが出来るとModelSimのライセンスが空いていない時にもシミュレーションが出来るようになる。ModelSimSEだとFLIが使えるので前に作ったコレでも出来るが...


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

package bmp_pkg is

    ----------------------------------------------------------------------------
    -- データタイプ定義
    ----------------------------------------------------------------------------
    -- ファイルヘッダ定義
    type    BITMAPFILEHEADER    is record
        bfType              :   bit_vector(15 downto 0);
        bfSize              :   bit_vector(31 downto 0);
        bfReserved1         :   bit_vector(15 downto 0);
        bfReserved2         :   bit_vector(15 downto 0);
        bfOffBits           :   bit_vector(31 downto 0);
    end record;

    -- インフォヘッダ定義
    type    BITMAPINFOHEADER    is record
        biSize              :   bit_vector(31 downto 0);
        biWidth             :   bit_vector(31 downto 0);
        biHeight            :   bit_vector(31 downto 0);
        biPlanes            :   bit_vector(15 downto 0);
        biBitCount          :   bit_vector(15 downto 0);
        biCompression       :   bit_vector(31 downto 0);
        biSizeImage         :   bit_vector(31 downto 0);
        biXPelsPerMeter     :   bit_vector(31 downto 0);
        biYPelsPerMeter     :   bit_vector(31 downto 0);
        biClrUsed           :   bit_vector(31 downto 0);
        biClrImportant      :   bit_vector(31 downto 0);
    end record;

    -- パレット定義
    type    RGBQUAD             is record
        rgbBlue             :   bit_vector(7 downto 0);
        rgbGreen            :   bit_vector(7 downto 0);
        rgbRed              :   bit_vector(7 downto 0);
        rgbReserved         :   bit_vector(7 downto 0);
    end record;

    -- パレットのポインタ定義
    type    RGBQUADARRAY        is array( natural range <> ) of RGBQUAD;
    type    RGBQUADACCESS       is access RGBQUADARRAY;

    -- バイトのポインタ定義
    subtype BYTE                is bit_vector(7 downto 0);
    type    BYTEARRAY           is array( natural range <> ) of BYTE;
    type    BYTEACCESS          is access BYTEARRAY;

    -- ビットマップ全体を定義
    type    BMP_INFO            is record
        bmp_fh              :   BITMAPFILEHEADER;
        bmp_ih              :   BITMAPINFOHEADER;
        col_tbl             :   RGBQUADACCESS;
        pix_data            :   BYTEACCESS;
    end record;

    -- ファイルタイプ定義
    type    BIN             is file of character;

    ----------------------------------------------------------------------------
    -- 公開サブプログラム定義
    ----------------------------------------------------------------------------
    -- ビットマップオープン(ファイル指定)
    procedure open_bmp (
                            filename        : in    string;
                            bmp_info_data   : out   BMP_INFO;
                            result          : out   boolean
                        );
    -- ビットマップオープン(空データ)
    procedure open_bmp (
                            x_size          : in    std_logic_vector(31 downto 0);
                            y_size          : in    std_logic_vector(31 downto 0);
                            bitcount        : in    integer;
                            bmp_info_data   : out   BMP_INFO;
                            result          : out   boolean
                        );
    -- ビットマップ保存
    procedure save_bmp (
                            filename        : in    string;
                            bmp_info_data   : inout BMP_INFO;
                            result          : out   boolean
                        );
    -- ビットマップクローズ
    procedure close_bmp (
                            bmp_info_data   : inout BMP_INFO;
                            result          : out   boolean
                        );
    -- ビットマップリード
    procedure read_bmp (
                            x_pos           : in    std_logic_vector(31 downto 0);
                            y_pos           : in    std_logic_vector(31 downto 0);
                            pix_data        : out   std_logic_vector(31 downto 0);
                            bmp_info_data   : inout BMP_INFO
                        );
    -- ビットマップライト
    procedure write_bmp (
                            x_pos           : in    std_logic_vector(31 downto 0);
                            y_pos           : in    std_logic_vector(31 downto 0);
                            pix_data        : in    std_logic_vector(31 downto 0);
                            bmp_info_data   : inout BMP_INFO
                        );

end bmp_pkg;




投稿時刻(21:15)│コメント(0)ModelSim 

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
最新コメント
カテゴリ別表示
月別表示