ZYNQのスタンバイモード中にPLは動いているか
ZYNQのスタンバイモード時に何が起きているかを詳しく調べてみました。
まず、JTAGバウンダリスキャンを使ってUARTとDDR3の信号を見たところ、/sys/power/stateドライバを操作されてから実際にスタンバイするまでの時間は150msくらいと推定されます。復帰はさらに早く数十ms以内でした。
Linuxのコンソールに戻れるので、完全にシャットダウンするよりも圧倒的に早く戻れます。
スタンバイモードでは、DDR3の信号はRAS=L、CAS=L、WE=H、CS=H、CKE=Lで停止しているようです。
気になるのはPLも一緒に停止しているかどうかです。
PLが停止してしまったらEMIOを通したUARTからの復帰ができないのでそんなことはないと思うのですが・・
念のため、PLから各部のクロック信号を出してみたところ、MMCMを経由したクロックは停止していて、それ以外のクロックは極端に遅くなっていました。
実際にオシロで測ってみると、PSからPLへ送られるクロックが100MHzのものは3.33MHzになり、250MHZのものは8.33MHzになっていました。
スタンバイ前↓
スタンバイ後↓
つまり、FCLKが30分の1の速度になってしまっているのです。3.3MHzではMMCMはロックできないから動作を停止したのでしょう。
結論を言うと、
- スタンバイモードにしてもPLは停止しない
- PSからのクロックが怪しくなるので、PSクロックを使わない設計にするべし
- 当然ながらPLからもDDR3メモリは使えないと心得るべし
です。
PSが動いていることが確認できたので、例えばEMIO経由のGPIOで起こすようにしておけば、CPUは常にスタンバイモードにしてPLだけで計測しておいて、1分ごとにCPUを起こしてちょっと統計とか通信をしてまた眠るというアプリが作れそうです。
| 固定リンク






コメント