« Raspberry Pi 5のJTAGポートを解析 | トップページ | Raspberry Pi 5をOpenOCDでつないでみた »

2023.12.19

XILINX PCI Express IPの非同期クロック動作

PCI Expressはマザーボードから送られてくるリファレンスクロックに同期して動作するのが標準的な動作なのですが、リファレンスクロックを使わずに、ボード上に乗せた発振器をベースにした非同期動作も規格上は可能です。なお、リファレンスクロックを使う動作のことをslot clockingといいます。

XILINX(AMD)のPCI Expressコアは非同期クロックを使って動作できるようですが、非同期クロックは使えないという記述もあります。

例えばPG054には以下のような記述があります。

Pcie_async_5

実際に、XILINXのXDMAコアで非同期コアが使えるかどうか試してみることにしました。

コアのIPを開くとMISCの中に、Enable Slot Clock Configurationというチェックボックスがあります。デフォルトでこれがチェックされているのでオフにします。

Pcie_async_1_20231222031501

これで論理合成を行うと、コアの中のPCIE_ASYNC_ENがtrueにセットされ、非同期動作が利用できるようになるようです。

Pcie_async_3

しかしながら、現実的にはうまくいきません。

PCI ExperssにはSSC(スペクトラム拡散クロック)とASPM(電源管理の何か)があるためです。

ASPMはPCの総合的な電源管理の仕組みでBIOSより下にあるものなのですが、通信データがない場合に低消費電力状態に落とすという動作があります。これはWindowsの電源管理の中でオフにすることはできます。

Pcie_async_4

スペクトラム拡散によってPCI Expressのデータレートは速くなったり遅くなったりするのですが、XILINXのギガビットトランシーバはリファレンスクロックが一定速度であれば、データレートの変化に追従することができません。そのため、SSCとASPMをオフにしないと使えないというわけです。

しかし、SSCについてはBIOS(UEFI)で無効にできなければどうすることもできません。

実際に実験してみたようすを動画にしました。

一番左端のLEDがPCI Expressのリンクアップを示すもので、一瞬だけリンクアップしてもすぐに切れてしまうことがわかります。

 

結論としては、XILINXのPCIeコアでは非同期クロックは使えないと思ったほうがよいでしょう。

|

« Raspberry Pi 5のJTAGポートを解析 | トップページ | Raspberry Pi 5をOpenOCDでつないでみた »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Raspberry Pi 5のJTAGポートを解析 | トップページ | Raspberry Pi 5をOpenOCDでつないでみた »