PsramPhySdrCore
PSRAM SDR fallback 物理層 (docs/psram.md「SDR fallback phy」)
IOLOGIC (ODDR/IDDR) を一切使わず,ファブリック FF のみで HyperBus を 駆動する低速 phy.L4 切り分け (IOLOGIC bitstream 実挙動の疑い) と 動作実績のあるビットバング方式 (spike 段 1,CK 6.75 MHz) の一般化を 兼ねる.PsramPhy と同一の FSM 側 SDR インタフェースを持ち, PsramCtrl (i_en 付き) をそのまま接続できる.
1 SDR サイクル (= 1 CK) を i_clk の 4 位相で構成する (i_clk 27 MHz → CK 6.75 MHz).FSM は o_en (位相 3) のサイクルのみ状態更新し, FSM 出力は位相 0..3 の間安定している:
- 位相 0→1 エッジ: CS#/RESET#/byte A/OE をパッド FF へロード
- 位相 1→2 エッジ: CK 立上り (i_ck_en=1 のとき).byte A に対し 90° 遅れ
- 位相 2→3 エッジ: byte B をロード + リード byte A 取り込み + FSM への提示
- 位相 3→0 エッジ: CK 立下り.byte B に対し 90° 遅れ
リード取り込みは CK エッジの 1 位相 (37 ns) 後に平 FF でサンプルする (RAM の tCKD 後で安定).FSM へは 1 SDR サイクル遅れで (A, B) ペアを 提示する (PsramCtrl のペア検出は遅延不変).
コア (PsramPhySdrCore, プリミティブなし・L1 テスト可) と IOBUF ラッパ (PsramPhySdr) に分割する.
Ports
| i_clk | input | clock | |
|---|---|---|---|
| i_rst | input | reset | |
| o_en | output | logic | FSM 状態更新イネーブル (位相 3 で 1) |
| i_ck_en | input | logic | CK 駆動 (1 で 1 CK パルス) |
| i_cs_n | input | logic | CS# |
| i_reset_n | input | logic | RESET# |
| i_dq_a | input | logic<8> | DQ 送出 byte A (CK 立上り側) |
| i_dq_b | input | logic<8> | DQ 送出 byte B (CK 立下り側) |
| i_dq_oe | input | logic | DQ 出力イネーブル |
| i_rwds_a | input | logic | RWDS 送出 A (ライトマスク) |
| i_rwds_b | input | logic | RWDS 送出 B |
| i_rwds_oe | input | logic | RWDS 出力イネーブル |
| o_dq_a | output | logic<8> | DQ 取り込み (立上り) |
| o_dq_b | output | logic<8> | DQ 取り込み (立下り) |
| o_rwds_a | output | logic | RWDS 取り込み (立上り) |
| o_rwds_b | output | logic | RWDS 取り込み (立下り) |
| o_ck | output | logic | |
| o_ck_n | output | logic | |
| o_cs_n | output | logic | |
| o_reset_n | output | logic | |
| o_dq | output | logic<8> | |
| o_dq_oe | output | logic | |
| i_dq | input | logic<8> | |
| o_rwds | output | logic | |
| o_rwds_oe | output | logic | |
| i_rwds | input | logic |