RvSoc
RV32I ソフトコアの SoC (docs/riscv.md「メモリマップ」)
コア・ブート ROM・データ RAM・MMIO をアドレスデコードで束ねる.
| 範囲 | 内容 |
|---|---|
0x0000_0000–0x0000_1FFF | ブート ROM(8 KB 相当,リードのみ) |
0x0000_2000–0x0000_3FFF | データ RAM(RamWords x 4 byte,最大 8 KB) |
0x1000_0000–0x103F_FFFF | PSRAM ch0(AXI4-Lite マスタとして外へ出す) |
0x2000_0000–0x2000_0FFF | MMIO レジスタ(UART / LED / TOHOST / タイマ / TF) |
デコードは addr[29] で MMIO,addr[28] で PSRAM,
残りを addr[13] で ROM / RAM に分ける.
コアは完了まで o_mem_addr を保持するため,組合せデコードで足りる.
PSRAM サブシステム本体(PLL / phy / ctrl / ブリッジ)はクロックドメインが 異なるため SoC の外に置き,ここでは AXI4-Lite マスタ端子だけを出す.
Parameters
| RamWords | u32 | データ RAM の語数(`addr[13]` で選ぶので最大 2048 語 = 8 KB) |
|---|---|---|
| TfInitDivider | u32 | TF カードの初期化クロック分周比(`TfCtrl` へ渡す.テストで短縮する) |
Ports
| i_clk | input | clock | クロック |
|---|---|---|---|
| i_rst | input | reset | リセット |
| tx | modport | stream_if source | UART TX へ |
| rx | modport | stream_if sink | UART RX から |
| m_psram | modport | $std __axi4_lite_if__$std___axi4_lite_pkg__22__4__1 master | PSRAM へ(AXI4-Lite) |
| o_leds | output | logic<6> | LED(active-high) |
| o_tohost_valid | output | logic | 終了通知 |
| o_tohost | output | logic<32> | 終了コード |
| o_pc | output | logic<32> | 現在の PC(観測用) |
| o_trap | output | logic | トラップ受理(観測用) |
| o_cause | output | logic<32> | トラップ原因(観測用) |
| o_illegal | output | logic | 不正命令例外を起こした(診断用) |
| o_tf_sclk | output | logic | TF SCK |
| o_tf_mosi | output | logic | TF MOSI |
| o_tf_cs_n | output | logic | TF CS# |
| i_tf_miso | input | logic | TF MISO |