「PYNQで遊ぶシリーズ 第6回 カスタムIPを作ってPYNQ overlayに組み込む」は、AXIインターフェースをもつ周辺回路のカスタムIPで作って、ZYNQのブロックデザインを作る話をでした。今回は、AXI周辺回路でない一般の回路のIPコアをつくる話です。
今回のvivadoは2018.2です。バージョンによってはバグがとれているかも。
##想定する回路の作りかた
- 部品を作って、ブロックデザインでつないで回路を組み立てていく
- 部品はIPコア。ありものがない部品はカスタムIPを作る。
- カスタムIPはプロジェクトにIP_XXXXのフォルダを作ってそこにおく
プロジェクトを用意する
- プロジェクトを作る(略)
- 開発対象とするFPGAまたはボード情報を選択
(PYNQ-Z1の場合)xc7z020clg400-1を選択、DIGLENT PYNQ-Z1 のDesign ResourceからMaster XDCとZynq Presetsをダウンロードし、あとからボード資源情報をセットする。
(KC-705の場合)(略)
IP Integratorを用いてブロックデザインを作成する。
略
カスタムIPコアを既存モジュールから作る方法
1)プロジェクトにカスタムIPコアごとにフォルダ(例えばIP_FOO)を作成し、そのフォルダにsrc/?hdl/やdoc/などのサブフォルダを作成する
2) このサブフォルダにソースやドキュメントを保存する
3) [Tools] メニューから [Create and Package New IP] をクリックするとウイザードがでてくる
4) [Package a new IP for the Vivado IP Catalog]を選択
5) [Packaging as a library core] はチェックしない。
なお、チェックするとIP をスタンドアロン IP としては使用できなくなる。「IP リポジトリから IP を参照できるが、IP カタログには表示されない。」とのことだが、それではどうやって使うのかわからん。
5) もろもろソースをチェック
###ブロックデザインからIPコアを作成する方法
ブロックデザインをまるごとIPコアにする。
ただし、この方法はIP Packgerの機能制限により、一旦作ったコアのデバッグがとっても面倒なので、あまりオススメできない。具体的には、後述するようにEdit IP in IP packagerでコアのデバッグができないので、デザインを作ったプロジェクトを保存しておき、それを修正してから毎回最初からIPコアを作り直す作業をすることになる。
TIPS
###wizardで作ったGTXをカスタムIPに埋め込みたい
src/vhd/の下にwizardで作ったIPのソースをそのままコピーする
他のIPコアを含めたい
- ソースに含めたいIPコアを追加する(IP catalogから追加する or Add Source([+]アイコン)で、既存コアのxciファイルを追加)
※ core container形式(xcixファイル)は対応しない。xcix形式になっている場合は、右クリックしてdisable core containerで分解してxciをとりだす - [package IP]タブの[pakaging step]の[File group]を選択し、Synthesisを右クリックし[add files]を選び、含めたいxciを追加する
- Synthesisのファイル一覧からxciファイルをドラッグして先頭に移動する。
- xciファイルを右クリックすると現れる[IP File Properties]のName プロパティを絶対パスから、現在のIP packagerのフォルダからの相対パスになるように変更する
##IP Packagerの機能制限やバグ
デフォルトではリセットの極性が負論理
RSTポートは自動的に負極性に設定されるので、指定しなおす必要がある
- reset interfaceを右クリックして、Edit Interfaceを選択
- ParameterにPOLARITYを追加
- POLARITYにACTIVE_HIGHをセットする
https://forums.xilinx.com/t5/Design-Entry/Packaged-IP-showing-wrong-reset-polarity/td-p/797472
portは natural,integerに非対応(2018.2)
naturalはパッケージ作成時にエラーになり、integerはバス幅が31bitになる。このためstd_logic_vectorに変換すること。
(追加情報)std_logicとstd_logic_vectorにしか対応していないようだ。
ブロックデザインからIPコアを作成すると、Edit IP in IP packagerでブロックデザインが使えない。
##履歴
2019.11.19 新規作成
2019.11.26 更新