Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

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