RvTfIo
TF カードの byte-stream 入出力(RvCore の周辺機器. docs/riscv.md「TF カードからのブート」)
TfCtrl と MMIO の間に送受信それぞれ 1 byte のバッファを置く.
ソフトウェアは TF_CTRL の rx_valid / tx_space をポーリングし,
TF_DATA で 512 byte を直接受け渡す.TfCtrl は stream の
handshake 待ちで SCK を停止するため,CPU に実時間制約はない.
セクタ全体の RAM と word/byte 変換を持たないため,
RvTfSector より LUT と BSRAM の使用量が少ない.
Parameters
| InitDivider | u32 | 初期化クロック分周比(`TfCtrl` へそのまま渡す.テストで短縮する) |
|---|
Ports
| i_clk | input | clock | クロック |
|---|---|---|---|
| i_rst | input | reset | リセット |
| i_start | input | logic | 1 サイクルパルス.セクタ入出力を開始する |
| i_wr | input | logic | 0 = リード,1 = ライト(i_start と同時に見る) |
| i_lba | input | logic<32> | 対象の論理ブロックアドレス |
| o_status | output | logic<32> | bit0 busy / bit1 init_done / bit4:2 init_err / bit7:5 err / bit8 rx_valid / bit9 tx_space |
| i_rx_pop | input | logic | 受信バイトを消費する(1 サイクルパルス) |
| o_rx_data | output | logic<8> | 受信バイト |
| o_rx_valid | output | logic | 受信バイトあり |
| i_tx_push | input | logic | 送信バイトを追加する(1 サイクルパルス) |
| i_tx_data | input | logic<8> | 送信バイト |
| o_tx_space | output | logic | 送信バッファに空きがある |
| o_sclk | output | logic | TF SCK |
| o_mosi | output | logic | TF MOSI |
| o_cs_n | output | logic | TF CS# |
| i_miso | input | logic | TF MISO |