RvMem
RvCore 用のワードメモリ (docs/riscv.md「メモリマップ」)
32 bit ワード x Words.バイトイネーブル付きで,SB / SH のために
8 bit 幅の RAM を 4 面並べる($std::ram はバイトイネーブルを持たないため).
レイテンシは 1 サイクル(BUFFER_OUT: true で BSRAM の登録読み出しになる)。
プロトコル:
- コアが
i_validを上げ,アドレス等を保持する - メモリは受理した次のサイクルに
o_doneを 1 サイクル上げ, リードならこのときo_rdataが有効 - コアは
o_doneでi_validを下ろす(同一サイクルに次の要求は出さない)
i_dbg_* はテストベンチからの直接書き込み(プログラムのプリロード)用で,
合成時は 0 固定にする.i_dbg_we の間はコアの要求を受け付けないため,
コアはリセット解除後でも o_done 待ちで停止したままプリロードできる.
Parameters
| Words | u32 | 語数(32 bit ワード) |
|---|
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> | ストアデータ(バイトレーンへ整列済み) |
| i_wstrb | input | logic<4> | バイトイネーブル |
| o_done | output | logic | 完了(1 サイクル) |
| o_rdata | output | logic<32> | リードデータ(o_done のサイクルで有効) |
| i_dbg_we | input | logic | テストベンチからの直接書き込み |
| i_dbg_word | input | logic<32> | 書き込むワード番号 |
| i_dbg_wdata | input | logic<32> | 書き込むデータ |