ひでみのアイデア帳

くだらないことなんだけど、忘れないために・・・

SDxのPlatformを作ってみた

昨日の続きで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 2016.4で気をつけるIP

ある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なのではないだろうか?

デグレしてるような不具合が発生するのは開発チームは崩壊寸前の末期症状なのかもしれない。 そう感じた今回の不具合だった。