元デザインの修正
Trenz社のサンプルプロジェクトの2017.1版のZynqberrydemo1~3は、Vivado 2017.3やSDSoC 2017.3以降で使用するときに様々なエラーを起こします。
このページではその対処方法を示します。
デバイスドライバの削除
Block Designを開き、audioの中にあるaxi_i2s_adi_0を選択して右クリックし、Edit in IP Packagerで子プロジェクトを開きます。
CSI入力の削除
Vivado 2017.3以降では、CSI入力回路がタイミングエラーを起こすため、削除します。
このタイミングエラーは微々たるものですが、XDCのset_falst_pathで消すことはできません。Vivadoで論理合成する場合は無視することができますが、SDSoCでは些細なタイミングエラーでも合成が止まってしまうため、ここではCSIモジュールごと削除することにします。
今後、VivadoやSDSoCのバージョンが上がった際には再び使えるようになるかもしれません。
まず、video_inを選択し、DELキーを押すか、右クリックしてDeleteを行います。
このように、AXI Interconnectに空きポートができます。
この状態で放置しておくと、AXI Interconnectの中がAXI Liteにならない(FULL AXIで作られる)ため、タイミング制約を満たすことができなくなって最終的にエラーとなってしまうため、空きポートを詰める処理をします。
AXI Interconnectをダブルクリックし、開いたダイアログでMaster Interfacesの数を5にして、OKを押します。
これだとポートの数が変わってしまうので、
- AudioのS00_AXIをinterconnectのM01_AXIに
- axi_reg32_0のS_AXIをinterconnectのM02_AXIに
- video_outのVTC_AXIをinterconnectのM03_AXIに
- video_outのCLKWIZ_AXIをinterconnectのM04_AXIに
それぞれ、つなぎなおします。
残っているCSI入力を削除します。
制約ファイルからも_i_csi.xdcを削除します。
これでCSI入力モジュールが安全に削除できました。
アドレスの再設定
CSIモジュールを削除したり、AXIポートをつなぎ変えた関係で、アドレスがずれている場合があります。
Addressエディタを開いて、Umpapped Slavesがある場合は右クリックしてアドレスを設定しなおします。
GPIOバッファモジュールの追加
Vivado 2017.3以降ではPS7のGPIOをそのまま双方向ポートに出せないため、Block Designに特電ライブラリに入っているgpiobufモジュールを追加します。
+ボタンを押して、Add IPを行います。
検索にgpioと入力すると、gpiobuf_v1_0というのが見つかるので、これを選択します。
gpiobufモジュールが追加されるので、下の図のようにPS7のGPIO_0を開いて、GPIO_0の中の3つのバスをgpiobuf_0につなぎます。
gpiobuf_0のGPIO_1ポートを選択し、右クリックして、Make Externalを行います。
デフォルトでGPIO_1_0というポートが作られるので、このポートをクリックします。
Vivadoの画面にあるプロパティウィンドウで、名前をgpio_1_tri_ioに変更します。
BitStreamを作ってみる
これでVivado 2018.1でも使えるZynqberrydemoのデザインができました。
一度保存して、Validate Design、Generate Output Productsを行って、Generate BitStreamを行ってみてください。
エラーを起こさずに論理合成が通るはずです。