PsramCtrl
PSRAM コントローラ (HyperBus FSM,clk_mem 単一ドメイン.docs/psram.md)
初期化 (RESET# パルス → tVCS 待機 → CR0 書き込み → IR0 読み出し自己診断) の後,req/rsp インタフェースの 32bit アクセスを 16bit HyperBus トランザクション 2 回に分割して実行する (単一アウトスタンディング).
- レイテンシは固定 2x (CR0[3]=1).データ位相は CA 3 クロック目立上りを 起点に 2*InitialLatency CK 後 (spike 段1 実測 L=0B で確定した起点)
- リードは RWDS 修飾のペア検出で語を取り込む.phy の IDDR 取り込みが CK に対しどちらの半サイクルへ載るか (位相依存の半サイクルずれ) に よらず {RWDS=1 の半サンプル, 続く RWDS=0 の半サンプル} を語として 組むため,位相調整 (L4 残余⑤) で壊れない
- ライトの WSTRB は RWDS マスク (High=マスク) へ写像し, 両バイトマスクの半語はトランザクション自体を省略する
- 初期化未完了の間は req_ready を落として待たせる.応答は常に完了 (エラー応答なし.リードのタイムアウト時は FFFF を返し,初期化中の IR0 照合失敗は o_init_ok=0 として観測する)
Parameters
| ResetPulseCycles | u32 | RESET# パルス幅 [cyc] (tRP 200 ns min → 296 ns @54 MHz) |
|---|---|---|
| TvcsCycles | u32 | RESET# 解除後の待機 [cyc] (tVCS 150 µs min → 200 µs @54 MHz) |
| InitialLatency | u32 | CR0 に設定する Initial Latency (54 MHz ≤ 83 MHz → 3) |
| Cr0Value | logic<16> | CR0 書き込み値 (IL=3, 固定 2x, 他はデフォルト維持) |
| WriteCr0 | bit | CR0 書き込みを行うか (0 で POR デフォルト IL=6 のまま動作.L4 切り分け用) |
| Ir0Expected | logic<16> | IR0 期待値 (Winbond / 32 Mbit.spike 段1 実測値) |
| DetectStartCyc | u32 | リード検出ウィンドウ開始 [txn cyc] (CA 期間の RWDS High を誤検出しない下限) |
| TimeoutCyc | u32 | リード検出打ち切り [txn cyc] |
Ports
| i_clk | input | clock | |
|---|---|---|---|
| i_rst | input | reset | |
| i_en | input | logic | 位相イネーブル.1 のサイクルのみ状態更新する (1 サイクル = 1 CK の関係を 保ったまま SDR fallback phy の 1/4 レートで駆動するため.全速 phy では 1 固定). 注意: req/rsp を全速の相手 (CdcHandshake) と結ぶ場合,o_req_ready と o_rsp_valid は i_en で修飾して渡すこと (非イネーブルサイクルでの 取りこぼし・二重送信防止.Top の配線参照) |
| i_req_valid | input | logic | |
| o_req_ready | output | logic | |
| i_req | input | psram_pkg req_t | |
| o_rsp_valid | output | logic | |
| i_rsp_ready | input | logic | |
| o_rsp | output | psram_pkg rsp_t | |
| o_init_done | output | logic | 初期化シーケンス完了 |
| o_init_ok | output | logic | IR0 照合成功 (init_done 後に有効) |
| o_ck_en | output | logic | |
| o_cs_n | output | logic | |
| o_reset_n | output | logic | |
| o_dq_a | output | logic<8> | |
| o_dq_b | output | logic<8> | |
| o_dq_oe | output | logic | |
| o_rwds_a | output | logic | |
| o_rwds_b | output | logic | |
| o_rwds_oe | output | logic | |
| i_dq_a | input | logic<8> | |
| i_dq_b | input | logic<8> | |
| i_rwds_a | input | logic | |
| i_rwds_b | input | logic |