1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

vivadoでカスタムIPコアを使って回路をつくる

Last updated at Posted at 2019-11-18

「PYNQで遊ぶシリーズ 第6回 カスタムIPを作ってPYNQ overlayに組み込む」は、AXIインターフェースをもつ周辺回路のカスタムIPで作って、ZYNQのブロックデザインを作る話をでした。今回は、AXI周辺回路でない一般の回路のIPコアをつくる話です。

今回のvivadoは2018.2です。バージョンによってはバグがとれているかも。

##想定する回路の作りかた

  • 部品を作って、ブロックデザインでつないで回路を組み立てていく
  • 部品はIPコア。ありものがない部品はカスタムIPを作る。
  • カスタムIPはプロジェクトにIP_XXXXのフォルダを作ってそこにおく

プロジェクトを用意する

  1. プロジェクトを作る(略)
  2. 開発対象とする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コアを含めたい

  1. ソースに含めたいIPコアを追加する(IP catalogから追加する or Add Source([+]アイコン)で、既存コアのxciファイルを追加)
    ※ core container形式(xcixファイル)は対応しない。xcix形式になっている場合は、右クリックしてdisable core containerで分解してxciをとりだす
  2. [package IP]タブの[pakaging step]の[File group]を選択し、Synthesisを右クリックし[add files]を選び、含めたいxciを追加する
  3. Synthesisのファイル一覧からxciファイルをドラッグして先頭に移動する。
  4. xciファイルを右クリックすると現れる[IP File Properties]のName プロパティを絶対パスから、現在のIP packagerのフォルダからの相対パスになるように変更する

##IP Packagerの機能制限やバグ

デフォルトではリセットの極性が負論理

RSTポートは自動的に負極性に設定されるので、指定しなおす必要がある

  1. reset interfaceを右クリックして、Edit Interfaceを選択
  2. ParameterにPOLARITYを追加
  3. 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 更新

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?