TfImageDemo
TF カード画像表示デモ (docs/tfcard.md「画像表示デモ仕様」,パッチ #8)
ルート直下の IMAGE.BMP (既定.ReqName で変更可) を Fat32Reader から読み,
無圧縮 24 bpp BMP を解析して RGB565 へ変換し,
PSRAM のフレームバッファへ AXI4-Lite で書く.
結果は 1 行の ASCII で報告する.
報告行:
IMG OK: ロード成功 (以降 o_img_done=1.ImageScanout が表示を開始する)TF ERR <d>: TF カード初期化失敗 (d は TfTypes::Error の値)FS ERR <d>: FAT32 リーダのエラー (d は TfTypes::FsError の値)IMG ERR <d> <hhhh>: BMP が受理条件を満たさない (1=BM シグネチャ不一致 / 2=24 bpp・無圧縮でない / 3=寸法が SrcW x SrcH と 不一致 / 4=画素データが途中で終了).hhhhは診断値で, d=1 ならファイル先頭 2 バイト,d=2 なら biBitCount, d=3 なら実際の幅と高さの下位バイト (幅:高さ)
v1 は寸法を SrcW x SrcH 固定で要求する (部分展開によるフレームバッファの 未定義領域を作らないため).ボトムアップ (biHeight > 0) は書き込み行を 反転して PSRAM 上は常に上から下の順に格納する.
Parameters
| SrcW | u32 | ソース画像の幅 [px] (偶数.32 bit ワード = 2 px のため) |
|---|---|---|
| SrcH | u32 | ソース画像の高さ [px] |
| FbWordBase | u32 | フレームバッファ先頭のワード番号 (32 bit 単位) |
| MaxLen | u32 | ファイル読み出し要求長の上限 [byte] |
| ReqName | logic<88> | 対象ファイルの 8.3 名 11 バイト (既定 "IMAGE BMP"). ワイルドカード `'?'` (3Fh) も使えるが,拡張子だけの照合は 中身が BMP でない同名拡張子のファイルを拾いうるため既定では使わない |
Ports
| i_clk | input | clock | クロック |
|---|---|---|---|
| i_rst | input | reset | リセット |
| i_init_done | input | logic | 初期化完了 |
| i_init_err | input | TfTypes Error | 初期化エラー |
| o_req_valid | output | logic | ファイル読み出し要求 |
| o_req_name | output | logic<88> | 8.3 名 |
| o_req_offset | output | logic<32> | 開始オフセット |
| o_req_len | output | logic<32> | 読み出し長 |
| i_req_ready | input | logic | 要求受付可能 |
| i_done | input | logic | 完了パルス |
| i_err | input | TfTypes FsError | 完了時のエラー種別 |
| fdat | modport | stream_if sink | ファイル内容 (Fat32Reader から) |
| msg | modport | stream_if source | 報告行 (TX アービタへ) |
| m_axi | modport | $std __axi4_lite_if__$std___axi4_lite_pkg__22__4__1 master | PSRAM へのライト |
| o_img_done | output | logic | フレームバッファ展開完了 (表示可) |