Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

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