SystemACE

なんとか SystemACE の ace ファイルというものを作ることができた。えらく苦労した。まず、情報がない。その上、エラーが起こっても、エラーが起こったということがわかるだけで、それ以上何もわからない。

SystemACE が何をやっているかというと(あくまで予測だけど)、次の機能を持っている。

  • FAT を追う機能
  • SVF を再生する機能

あと、FPGA からみて CF コントローラに見える機能もあるのだろう(Linux のソースを見ればわかりそう)

最初、むかしの Unix の boot ファイルシステムみたいに連続したセクターにファイルがないといけないのかと思ったけど、Windows から単純に FAT を更新しても問題なく動作しているところを見ると、FAT をちゃんと追っている。
ディレクトリも追うのでしょう。さらに、指定された ACE ファイルは SVF から変換をかけて、いるのをみると、SVF を再生する機能がある。

ACE ファイルを作るときに JTAG で本体とつながなければならない(それに気が付くのにえらく時間がかかった)のは、バウンダリスキャンのやり取りを記録するため。たとえば、普段は手作業で iMPACT でビットストリームをダウンロードし、XMD で elf をダウンロードするとする。それらは基本的に JTAG を通して作業が行われる。これらのやり取りを SVF で記録して、再生する、それが SystemACE の役割(たぶん)。
したがって、ACE ファイルを作るときには当然 JTAG で本体とつながなければならないし、その過程でエラーが起こってはならない。
EDK には便利になるように genace.tcl がついてくる。genace.tcl はよくできていて一発で ACE ファイルを作ることができる。しかし、問題は genace したときにエラーが起こることがあって、それはボードの状態がおかしかったりするときなのだが、それが報告されずに ACE ファイルができることがある。その ACE ファイルは一見ただしそうだが、エラーも含めたシーケンスをもつ SVF になる。
だから、それを再生してもエラーが起こるだけ。(というかさらにまた別のエラーが起こるだろうな)
あと genacl.tcl は XMD のコマンドを自動的に発行してくれるわけだが、その制御結果を知るために人間さま用の文字列を見るというコンピュータの世界であってはならない(失敗プロジェクトによくある発想だ、、、)インタフェースになっている。バージョンによって XMD の吐き出す文字列は違うので、XMD と genacl.tcl のバージョンがあっていないとちゃんと動かない。
ML405 のリファレンスデザインにはなぜか genacl.tcl がついてきてしまうが、手元のXMDとあっている保証はないので(古い XMD を対象としているのでほとんどの人が不整合だろう)、その genacl を使うと手元の XMD とバージョンの不整合がある場合どうやってもちゃんとした ACE ファイルはできない。
ということで、ちゃんとした genacl を使うと、、、、一発は目はできなかった、、、、理由は分からない。そこで、genacl を mygenacl と名前を変えてハックしながら使うと、、、(うまく動いているか確認しながら、、、)うまくできた。
なんだよ。今度もうチョイまとめよう。