昨日の続きでSDx Platformのハードウェア定義を作っていく。
componentではSDxで使用できるハードウェア情報を定義する。
<xd:component xd:BRAM="140" xd:DSP="220" xd:FF="106400" xd:LUT="53200" xd:library="xd" xd:name="z-turn" xd:type="platform" xd:vendor="aquaxis.com" xd:version="1.0">
項目 | 詳細 |
---|---|
xd:BRAM | 使用できるBRAM数 |
xd:DSP | 使用できるDSP数 |
xd:FF | 使用できるFF数 |
xd:LUT | 使用できるLUT数 |
xd:library | |
xd:name | 名前 |
xd:platform | |
xd:vendor | ベンダー名 |
xd:version | バージョン |
ここではPlatformがサポートするハードウェアを定義する。
<xd:deviceInfo xd:architecture="zynq" xd:device="xc7z020" xd:package="clg400" xd:speedGrade="-1"/>
<xd:registeredDevices xd:kio="0" xd:uio="0"/>
<xd:systemClocks xd:defaultClock="2">
<xd:clock xd:frequency="666.666687" xd:instanceRef="ps7" xd:name="CPU" xd:period="1" xd:status="reserved"/>
<xd:clock xd:frequency="166.666672" xd:id="0" xd:instanceRef="ps7" xd:name="ps7_FCLK_CLK0" xd:normalizedPeriod="4.000" xd:period="6" xd:status="changeable"/>
<xd:clock xd:frequency="50.000000" xd:id="1" xd:instanceRef="ps7" xd:name="ps7_FCLK_CLK1" xd:normalizedPeriod="13.333" xd:period="20" xd:status="changeable"/>
<xd:clock xd:frequency="100.000000" xd:id="2" xd:instanceRef="ps7" xd:name="ps7_FCLK_CLK2" xd:normalizedPeriod="6.667" xd:period="10" xd:status="changeable"/>
<xd:clock xd:frequency="200.000000" xd:id="3" xd:instanceRef="ps7" xd:name="ps7_FCLK_CLK3" xd:normalizedPeriod="3.333" xd:period="5" xd:status="changeable"/>
</xd:systemClocks>
デバイス情報を定義する。
パラメータはサンプルを見れば一目瞭然なので解説しない。
項目 | 詳細 |
---|---|
xd:archtecture | |
xd:device | |
xd:package | |
xd:speedGrade |
ドキュメントに記載されていないので不明な部分であるがおそらくLinux Kernelですでに使用しているUIO、KIO(これがどのI/Oを指しているか不明)の数を示しておくみたいだ。
すでにLinuxシステムでUIOを使用しているのであれば、注意すべき設定項目であると思われる。
PLに出力されているクロックを定義する。 クロックの設定はVivadoプロジェクトのPSの設定と同じにしなければならない。
その他の定義は基本はSDxで使用しても良いリソースを定義する。 つまり、ベースとなるVivadoプロジェクトで例えば、M_AXI_GP0を使用しているのであれば、このポートを定義してはならない。 あとは見様見真似で作成すればよいだろう。
参考資料はXilinx社にドキュメントを集めた「Zynq関連デザインハブ」が準備されているのでここで確認すると良い。
あるVivadoプロジェクトはこれのおかげでVivado 2016.4に一生進めなくなってしまったがその犯人は次のIPである。
Block Memory GeneratorのV8.3(Rev5)
Block Memory GeneratorはVivado 2016.3ではV8.3(Rev4)だった。 2016.4でリビジョンがひとつ上がった。 IPでメモリを作らなければ問題ないのでそれほど、問題視していないがこのIPって一番、使用率が高いIPなのではないだろうか?
デグレしてるような不具合が発生するのは開発チームは崩壊寸前の末期症状なのかもしれない。 そう感じた今回の不具合だった。