« VivadoのIPインテグレータでRTLソースをIP化せずに、モジュールとして追加する | トップページ | おれデバ 第3話がついに完結しました »

2016.08.15

VivadoとArtix-7でハマったバグ!?仕様!?

今ごろからVivadoの勉強をしている私ですが、Artix-7でハマったこと3つ挙げます。

使っているボードは「特電Artix-7ボード」。小さなサイズにUSB3.0とDDR3メモリが乗っているので便利です。

① DDR3メモリコントローラを作ろうとするとクラッシュする

MIGを使ってArtix-7用のDDR3メモリコントローラを作ろうとしたとき、既存のXDCファイルを読み込んでピン配置をインポートしようとすると、クラッシュしてしまいます。

Mig_error2

ここでRead XDC/UCFを押すと、

Mig_error1


Failed to generate IP 'main_mig_7series_0_0'. Failed to generate 'Custom UI' outputs:

フォーラム等を見ると同じ悩みの人がいるみたいで、

https://forums.xilinx.com/t5/Installation-and-Licensing/2014-1-windows-8-1-MIG-IP-generator-fails-to-run/td-p/450554/page/2

-m32オプションを付けると良いとかいろいろ書かれていますが、どれも駄目。

どうやら、Windows8 64bit版 Vivadoを使うとだめみたいです。

結局、プロジェクトを作るたびに手作業でポチポチと入力することになります。

↓これを再度設定するべし!

Mig_error3

② コンフィグオプションの件

BitStreamを作ると、デフォルトではSPI ROMから1bit×3MHzで読み出す設定になってしまいます。これだとXC7A100Tの読み出しに10秒近くかかるので、遅すぎます。

速くするにはコンフィグオプションでプロパティ

set_property BITSTREAM.CONFIG.CONFIGRATE 66 [current_design]

をセットすると良いと書かれているのですが、VivadoのTclコンソールでやってもうまくいかない。しかもISEのようにGUIで設定できない・・と悩んでいたのですが、解決策は簡単でした。

XDCファイルに書けばよいのです。

set_property CONFIG_VOLTAGE 1.8 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 66 [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 2 [current_design]
set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design]
set_property CFGBVS GND [current_design]

これで、コンフィギュレーションが66MHzの2bitと高速になります。

ちなみに、GUIからやるには、Implementationが終わったらImplemented Designを押してインプリ済みのデザインをロードします。

そうすると、BitStream Settingsに「Configure additional bitstream settings.」が押せるようになるので、

Bitstream1

ここを押せばBitStreamの設定をGUIからできるようになります。

Bitstream2

これはなかなか見つけられなかった。(゚Д゚)ノ

なお、CONFIG_VOLTAGEを1.8Vにしたら、CFGBVSはGNDと書かなければなりません。
CONFIG_VOLTAGEを3.3Vにしたら、CFGBVSはVCCOです。

③ XDCのピン定義は大文字小文字を区別する

いざ回路をインプリメントすると、CriticalWarningが山ほど出ました。

どうやらxdcのピン定義で出ているようなのですが、いろいろ実験していってわかりました。

このXDCでのピン定義は大文字小文字を区別している。

試しにDDR3_*という部分の1か所を小文字にしてみたら、そこでCriticalWarningが出てくれました。

Vivado_xdc

結構律儀なやつですね。

まだ解決していない悩み

IPカタログの中にあるXILINX FIFOの中で

[Common 17-55] 'get_property' expects at least one object.

というCriticalWarningが出てしまいます。

Criticalwaring

XDCのこの部分

set wr_clock          [get_clocks -of_objects [get_ports wr_clk]]
set rd_clock          [get_clocks -of_objects [get_ports rd_clk]]
set_max_delay -from [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_gc_reg[*]] -to [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[*].wr_stg_inst/Q_reg_reg[*]] -datapath_only [get_property -min PERIOD $rd_clock]
set_max_delay -from [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/wr_pntr_gc_reg[*]] -to [get_cells inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/gsync_stage[*].rd_stg_inst/Q_reg_reg[*]] -datapath_only [get_property -min PERIOD $wr_clock]

が原因のようなのですが、フォーラムとかアンサーとかを見ると、create_clockでクロックを作成するとよいということが書いてあるのですが、よくわからないですね。

|

« VivadoのIPインテグレータでRTLソースをIP化せずに、モジュールとして追加する | トップページ | おれデバ 第3話がついに完結しました »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« VivadoのIPインテグレータでRTLソースをIP化せずに、モジュールとして追加する | トップページ | おれデバ 第3話がついに完結しました »