Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

PsramPhy

PSRAM 物理層 (ODDR/IDDR/IOBUF ラッパ,docs/psram.md「物理層」)

FSM 側の SDR インタフェース (1 サイクル = 1 CK,A=CK 立上り側 / B=立下り側) を DDR パッド信号へ変換する.

  • すべての出力パッド (CK/CK#/CS#/RESET#/DQ/RWDS) を ODDR 経由とし, 出力パイプライン段数を構成的に一致させる (段数の絶対値に依存しない)
  • CK/CK# は clk_mem_p (+90°) の ODDR によるクロックフォワーディングで生成し, clk_mem 側で出すデータに対する 90° 位相関係を PLL の位相シフト設定のみで 決める (位相調整を単一変数化,L4 残余(5))
  • 入力 (DQ/RWDS) は clk_mem の IDDR で取り込む (Q0=立上り / Q1=立下り)

注意: ODDR の INIT は 1’b0 固定のため,コンフィグ直後〜FSM 駆動開始までの 遷移期間は CS#=0/RESET#=0 がパッドへ出る.RESET#=0 が RAM をリセットに 保持するため CS# の値は無害だが,FSM は必ず RESET# パルス→tVCS 待機から 開始すること.

Clock Domains


'mem
'memp

Ports


i_clk input 'mem clock clk_mem (FSM/データ,54 MHz)
i_clk_p input 'memp clock clk_mem_p (+90°,CK 出力用)
i_rst input 'mem reset リセット
i_ck_en input 'mem logic CK 駆動 (1 で 1 CK パルス)
i_cs_n input 'mem logic CS#
i_reset_n input 'mem logic RESET#
i_dq_a input 'mem logic<8> DQ 送出 byte A (CK 立上り側)
i_dq_b input 'mem logic<8> DQ 送出 byte B (CK 立下り側)
i_dq_oe input 'mem logic DQ 出力イネーブル
i_rwds_a input 'mem logic RWDS 送出 A (ライトマスク)
i_rwds_b input 'mem logic RWDS 送出 B
i_rwds_oe input 'mem logic RWDS 出力イネーブル
o_dq_a output 'mem logic<8> DQ 取り込み (立上り)
o_dq_b output 'mem logic<8> DQ 取り込み (立下り)
o_rwds_a output 'mem logic RWDS 取り込み (立上り)
o_rwds_b output 'mem logic RWDS 取り込み (立下り)
o_pad_ck output 'memp logic CK パッド
o_pad_ck_n output 'memp logic CK# パッド (差動)
o_pad_cs_n output 'mem logic CS# パッド
o_pad_reset_n output 'mem logic RESET# パッド
io_pad_dq inout 'mem trilogic<8> DQ パッド
io_pad_rwds inout 'mem trilogic RWDS パッド