1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vivado 2018.3でMIGを使うデザインがクラッシュする原因と対策

Last updated at Posted at 2019-12-14

Vivado 2018.3でMIGを使うデザインがクラッシュするという問題がありました。

下の図のようにMIGを使うデザインで、Synthesizeを行おうとしたり、MIGの設定を開こうとしたり、ひどいときにはプロジェクトを開くと、ログも残さずにクラッシュしてしまいます。
image.png

先行する報告

AR# 71898に「MIG 7 Series - パッチ - 2018.3 での既知の問題」というのがありますが、ここに書いてあるパッチを適用しても改善されません。また、フォーラムの記事でもAR71898を試したが改善しなかったという例が出ています。結局2019.1にアップデートして回避したようなのですが、Vivado 2018.3のMIGにはまだ知られていないバグがあるようです。

確実にクラッシュするプロジェクトを作る

原因を確かめるために、まずは確実にクラッシュするプロジェクトを作ります。

Vivadoで新規プロジェクトを作成

デバイスはSpartan-7の50にします。
image.png

MIGの配置

BlockDesignを作成し、MIGを配置します
image.png

MIGの設定ダイアログを開いてカスタマイズ

配置した直後は、クロックとリセットしかないMIGなので、ダブルクリックして設定画面を開き、Nextを押し押し最後まで設定します。カスタマイズする必要はありません。
image.png

ポートの出現

最後までカスタマイズすると、いろいろな入出力ポートが出てきます。
image.png

保存

Vivadoで一度セーブします。

論理合成をしてみる

何も特別なことをしていないMIG使用デザインですが、実は、この時点で諸悪の根源であるバグが埋め込まれています。
I/Oポートを付けたり、AXIのソースを付け加えたりして論理合成を開始するとクラッシュするでしょう。運が良ければ動くかもしれませんが。

原因の究明

MIGの設定の中身はどこ?

MIGはユーザが設定した内容をmig_a.prjというファイルに保存します。(mig_b.prjというのもありますが、おそらく1つの前の状態がバックアップされるものではないかと思います。)

prjは ** <プロジェクトフォルダ>\<プロジェクト名>.srcs\sources_1\bd\design_1\ip\design_1_mig_7series_0_0 ** にあります。
image.png

prjの中身

VivadoのSourceの中のConfigration Filesの中にあるmig_a.prjをクリックすると、フォルダを開くかと聞かれるので開くと、そこにあります。
image.png

prjの中身はXMLファイルのようで、その先頭は以下のような内容になっています。
image.png
これだけ見るとそんなに悪くはなさそうに見えます。

mig_a.prj
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project NoOfControllers="1">
  <ModuleName>design_1_mig_7series_0_0</ModuleName>
  <dci_inouts_inputs>1</dci_inouts_inputs>
  <dci_inputs>1</dci_inputs>
  <Debug_En>OFF</Debug_En>
・・・

バイナリで見てみる

ところが、バイナリエディタで開いてみると
image.png

<?xmlの前に、EF BB BFという3バイトのゴミがくっついていました。

どうやらこのゴミが悪さをしているようで、Synthesizeの開始時やプロジェクトのオープンの際にクラッシュしてしまうようです。バイナリエディタを使って綺麗に取り除くと、クラッシュしなくなります。

どうやって発見したのか?

どうやって気が付いたかというと、Vivado 2018.2で作ったプロジェクトをVivado 2018.3にアップグレード際にはこの問題が発生しなかったので、そのBlockDesignをTcl化してDIFFしてみました。TCL化BlockDesignの中ではmig_a.prjを生成する関数があるのですが、要するにprjファイルをベタに埋め込んでputsでファイルに書き込んでいるのですが、そこにゴミが映っていたのです。↓
image.png
このDIFFで見つけることができました。

まとめ

この3バイトのゴミはには以下の特徴があります。

  • Vivado 2018.3でのみ発生する (2018.1、2018.2では発生しない。2019.1は未確認)
    デバイスのファミリによらない。Spartan-7だけでなくKintex-7、ZYNQ、Artix-7でも発生する。* MIG 4.2でのみ発生すると考えられる。
  • AR71898のパッチを当てても改善しない
  • この3バイトのゴミの内容は変わることがある
  • パソコンの問題ではない(少なくとも3台のPCで検証した)

今は2019.2が流行しているので2018.3を使う機会は少ないかもしれませんが、困っている人がいたら是非prjファイルの先頭をバイナリエディタで見るということを伝えてあげてください。

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?