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 パッド |