Vivado 2019.2から2020.1への移行でハマったこと
私はVivadoは最新版を追わず、だいたい1~2年前のこなれたバージョンを使っているのですが、本日Cosmo-Zのデザインを2019.2から2020.1に移行したら意外なところでハマったのでブログに書きます。
Vivado 2019.2で作ったCosmo-ZのデザインをVivado 2020.1で開きます。
大きなエラーもなく開くことができたので、IP StatusでUpdate Selectedを行います。
特に問題なくUpdateできたのですが、論理合成しようとした際に大量のエラーがでました。
エラーというのは、こいう感じです。
[BD 41-237] Bus Interface property FREQ_HZ does not match between /SignalProcess/upp_0/DIN(125000000) and /SignalProcess/FILTER/cosmoz_data_combine_0/DOUT(100000000)
[BD 41-238] Port/Pin property FREQ_HZ does not match between /SignalProcess/FILTER/cosmoz_data_combine_0/clk(100000000) and /SignalProcess/adcblock_0/adcclk_o(125000000)
[BD 41-1031] Hdl Generation failed for the IP Integrator design D:/naitou/np1068/CosmoZFPGA2021-vivado2020/vivado/vivado.srcs/sources_1/bd/cosmoz_main/cosmoz_main.bd
IPとIPの間をつないでいるAXI Streamのクロックの速度が両端で異なっているということのようです。どうやら、Vivado 2020.1ではValidateのときのクロック速度の伝搬がうまくいっていないように思われます。
どのように解決したかというと、
① エラーを起こしているIPをEdit in Packagerで開く
② Package IPを開き、Ports and Interfacesを開く
③ エラーを起こしているバスに関連付いているクロックのInterfaceのプロパティを開く
(バスのプロパティではない)
④ Parameters->Requires User Settingの中にあるFREQ_HZを適切に設定する
これでクロックの相違によるエラーは消えます。
VivadoではSynthesisの前にValidateを行います。Validateというのは信号の上流から下流に向かってバス幅やクロック速度などの情報を伝搬させていって、VHDLのGeneric(Verilogのparameter)を自動設定するとともにデザインルールチェックを行うものです。(と、私は解釈している)
こうやってエラーを一つ一つつぶしていったのですが、IPコアをUpdateした後でSynthesisを行うとエラーになったこともあります。
これは、IPコアを使うときにGenerateという作業が行われるのですが、下記のダイアログでSKIPしていた場合にはSynthesisのときにGenerateが行われるからです。GenerateというのはIPコアのソースをVivadoプロジェクトのローカルフォルダの中にコピーして(Update IPの本体)、軽く処理することだと解釈しています。もしかしたらラッパを作っているのかもしれません。
つまり、VivadoはUpdate IP → Generate → Validate → Synthesis → Implement → Generate BitStreamという流れで動いているのですが、Synthesisの際にまだGenerateされていないIPコアを見つけると、GenerateとValidateをやり直してエラーが出ていまうということもあります。結果として、エラーが次々と出てくるように見えます。
原因としてはクロック速度の伝搬がうまくいっていないだけなのでFREQ_HZを手動設定すればよいのですが、なぜ伝搬が自動でなされないんでしょうね。ちょっと疑問でした。
| 固定リンク
コメント