RvMmio
RvCore のメモリマップドペリフェラル (docs/riscv.md「メモリマップ」)
レイテンシと握手は RvMem と同じ(要求の次サイクルに o_done).
| オフセット | 幅 | 動作 |
|---|---|---|
0x00 TOHOST | W | 終了通知.o_tohost_valid を 1 サイクル上げ値を出す(riscv-tests と同じ規約) |
0x10 UART | W | 下位 8 bit を UART TX へ送出する |
0x10 UART | R | bit0 = 送信可(0 なら前のバイトが未送出) |
0x14 UART RX | R | bit8 = 受信あり,bit7-0 = データ.読むと 1 バイト消費する |
0x20 LED | W | 下位 6 bit を LED へ(極性は Top 側で扱う) |
0x30 MTIME_LO | R | 自走カウンタ(クロック毎に +1)の下位 32 bit |
0x34 MTIME_HI | R | 同上位 32 bit |
0x38 MTIMECMP_LO | R/W | 比較値の下位 32 bit |
0x3C MTIMECMP_HI | R/W | 同上位 32 bit |
0x50 TF_CTRL | W | bit0 = 開始,bit1 = 方向(0 = リード,1 = ライト) |
0x50 TF_CTRL | R | 状態語(bit0 busy / bit1 init_done / bit4:2 init_err / bit7:5 err / bit8 rx_valid / bit9 tx_space) |
0x54 TF_LBA | R/W | 入出力する論理ブロックアドレス |
0x58 TF_DATA | R | bit8 = 受信あり,bit7:0 = 受信データ.読むと 1 バイト消費する |
0x58 TF_DATA | W | 下位 8 bit をライトデータとして送出する |
タイマ割り込みは mtime >= mtimecmp で o_timer_irq を上げる(CLINT 相当).
mtimecmp はリセット時に全 1 とし,設定するまで割り込まない.
UART は 1 バイトのバッファのみ持つ.ソフトウェアは送信前に
0x10 を読んで bit0 が 1 であることを確認する.
Ports
| i_clk | input | clock | クロック |
|---|---|---|---|
| i_rst | input | reset | リセット |
| i_valid | input | logic | アクセス要求 |
| i_addr | input | logic<32> | バイトアドレス |
| i_write | input | logic | 1 でストア |
| i_wdata | input | logic<32> | ストアデータ |
| o_done | output | logic | 完了(1 サイクル) |
| o_rdata | output | logic<32> | リードデータ |
| tx | modport | stream_if source | UART TX へ |
| rx | modport | stream_if sink | UART RX から |
| o_leds | output | logic<6> | LED(active-high.Top で反転する) |
| o_tohost_valid | output | logic | 終了通知 |
| o_tohost | output | logic<32> | 終了コード |
| o_timer_irq | output | logic | タイマ割り込み(mtime >= mtimecmp) |
| o_tf_start | output | logic | TF セクタ入出力開始(1 サイクルパルス) |
| o_tf_wr | output | logic | TF の方向(0 = リード,1 = ライト) |
| o_tf_lba | output | logic<32> | TF の読み出し LBA |
| i_tf_status | input | logic<32> | TF の状態語 |
| o_tf_rx_pop | output | logic | TF 受信バイト消費(1 サイクルパルス) |
| i_tf_rx_data | input | logic<8> | TF 受信バイト |
| i_tf_rx_valid | input | logic | TF 受信バイトあり |
| o_tf_tx_push | output | logic | TF 送信バイト追加(1 サイクルパルス) |
| o_tf_tx_data | output | logic<8> | TF 送信バイト |
| i_tf_tx_space | input | logic | TF 送信 buffer に空きがある |