CdcHandshake
非同期ハンドシェイク CDC (トグルハンドシェイク + 2FF 同期)
単一データのクロックドメイン間転送.src 側で valid/ready 成立時に データをラッチしてトグルを反転,dst 側は同期したトグルの変化で データを取り込み od_valid を立てる.dst の消費で dst 状態が反転し, src へ同期して ready が回復する(単一アウトスタンディング).
データレジスタは転送中不変(トグルハンドシェイクの保証)のため, ’d 側でのラッチは安全(unsafe (cdc) で明示).
注: std::async_handshake と同方式だが,同部品は内部で導出リセットを 用いるため veryl 0.20.2 のネイティブシミュレーションで初期化されず L1 検証不能だった(docs/psram.md「CDC」).本実装はリセットを各 ドメインの FF へ直結し,検証可能性を確保する.
Parameters
| TYPE | type | 転送データ型 |
|---|
Clock Domains
| 'd |
|---|
| 's |
Ports
| is_clk | input | 's | clock | src クロック |
|---|---|---|---|---|
| is_rst | input | 's | reset | src リセット |
| is_valid | input | 's | logic | src データ有効 |
| os_ready | output | 's | logic | src 受理可能 |
| is_data | input | 's | TYPE | src データ |
| id_clk | input | 'd | clock | dst クロック |
| id_rst | input | 'd | reset | dst リセット |
| od_valid | output | 'd | logic | dst データ有効 |
| id_ready | input | 'd | logic | dst 受理可能 |
| od_data | output | 'd | TYPE | dst データ |