学期が始まってから急に忙しくなって、長らく作業が止まっていたのですが、ちょっと時間がとれたのでいくつかやってみたことがあります。わかったことのまとめ。
– PS の初期化 (CPU clockのPLLとか、PS側のI/Oの設定) は FSBL によって行われる。.bit ファイルではない。
– したがって、boot.bin に .bit ファイルを含めることは必ずしも必須ではない (ZYBOの場合はちがう: 後述)
– FSBL は前半で最低限の設定をし、PL が構成されたら後半の作業をする
– ZYBO の場合、この後半の作業で I2C ROM から MAC アドレスを読み出すが、I2C は PL 経由の EMIO に接続されているので、ここをつなぐ .bit ファイルがロードされていないと FSBL の途中で固まる。
– PS がびっくりしない程度の範囲で PL は起動後に書き換えてもよさそう。たとえば、Master AXI ポートの先の回路が変わるくらいはなんともない模様。ただ、Slave AXI ポートとか、ACP ポートはどうかな…
とりあえず、Master AXI の先に LED とスイッチつないで、/dev/mem を mmap したところ、スイッチの値は読み出せましたが、LED は全然だめで、おそらくこれはキャッシュか何かが悪さをしているのだと思います。
FreeBSD/ARM の /dev/mem はまだ buggy なようで、キャッシュしちゃったりするようです。memcontrol も使えないし、まあ、そのあたりの実装がまだちゃんとできていない、ということなのでしょう。なので、AXI なモジュールつくったら、デバイスドライバ書かないといけない感じですね。というわけで、適当なドライバを書いたあたりで、また記事を書くことにしましょう。