Vitis HLSでリビジョン番号がオーバーフローしたときの対処法

エラー対処方法
スポンサーリンク

本記事の概要

概要

Vitis HLSで2022年になって発生した、リビジョン番号が符号付き整数で取り扱える範囲を超えてしまい、Export RTLが実行できない問題の対処方法をまとめています。
2022/1/8追記:修正用のパッチがXilinxから公開されました。記事にパッチの適用方法を追記しました。

2022年に入り、Vitis HLSでIPを生成(Export RTL)しようとしたところ、以下のようなエラーが発生し、IPの生成ができなくなるというトラブルに出くわしました。

****** Vivado v2021.2 (64-bit)
  **** SW Build 3367213 on Tue Oct 19 02:48:09 MDT 2021
  **** IP Build 3369179 on Thu Oct 21 08:25:16 MDT 2021
    ** Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.

source run_ippack.tcl -notrace
ipx::create_core: Time (s): cpu = 00:00:06 ; elapsed = 00:00:05 . Memory (MB): peak = 1235.949 ; gain = 0.000
ERROR: '2201021413' is an invalid argument. Please specify an integer value.
    while executing
"rdi::set_property core_revision 2201021413 {component component_1}"
    invoked from within
"set_property core_revision $Revision $core"
    (file "run_ippack.tcl" line 1498)
INFO: [Common 17-206] Exiting Vivado at Sun Jan  2 14:14:01 2022...
ERROR: [IMPL 213-28] Failed to generate IP.

Xilinx公式のコミュニティポータルフォーラムでも、この問題は報告されています。

https://support.xilinx.com/s/question/0D52E00006uxYjmSAE/bug-report-vivado-20212-revision-number-overflow-after-new-year?language=ja
https://support.xilinx.com/s/question/0D52E00006uxnnFSAQ/2022-timestamp-overflow-error-2201011128-is-an-invalid-argument-please-specify-an-integer-value?language=ja
https://support.xilinx.com/s/question/0D52E00006uxoDISAY/vivits-hls-20212-%E5%9C%A8%E5%AF%BC%E5%87%BAip%E6%A0%B8%E6%97%B6%E6%8A%A5%E5%A6%82%E4%B8%8B%E9%94%99%E8%AF%AFerror-2201011916-is-an-invalid-argument-please-specify-an-integer-value?language=ja

原因

IPのパッケージを行うときに、リビジョン番号を自動で割り振っているようですが、このリビジョン番号が4byteの符号付き整数型(signed integer)で取り扱える範囲(2^31 – 1 = 2,147,483,647)をオーバーフローしてしまうのが原因と報告されています。

Vitis HLSでは、リビジョン番号の割り当て規則をYYMMDDHHmmとしているようで、2022年に入ってから2,2**,***,***という表記に更新されました。その結果、 取り扱える範囲の上限2^31 – 1を超えてしまいます。

対処法

主な対処方法として、フォーラムでは2022/1/2現在2つの方法が紹介されています。
2022/1/8追記: Xilinx社のサポートフォーラムで修正パッチが公開されましたので、その修正パッチを適用するのがよいと思います。

  1. 修正パッチを適用する(2022/1/8追記)
  2. システム時間を2021年以降に戻す
  3. IPのパッケージングを実行するtclファイルを修正した後、実行する

1. 修正パッチを適用する

2022/1/7、サポートフォーラム内で修正パッチが公開されました。”Export IP Invalid Argument / Revision Number Overflow Issue (Y2K22)”というタイトルの記事です。

https://support.xilinx.com/s/article/76960?language=ja

Vitis HLS 2021.2 (OS: Windows 10)でパッチを適用し、実際にExport RTLが可能かどうか確認しました。
以下では、パッチの適用方法と、私の環境(Windows 10, Vitis HLS 2021.2)での結果を記載しました。

パッチのダウンロード

サポートフォーラム内の一番下にある[y2k22_patch-1.2.zip]をダウンロードします。

ダウンロードしたら、VivadoやVitisがインストールされているrootディレクトリにzipファイルを解凍します。
例えば、Windowsであれば、C:\Xilinxに解凍します。

修正スクリプトの適用

解凍したy2k22_patch内のReadmeファイルを開くと、Vitis HLSやVivado HLSの各バージョンに対する対応方法が記載されています。
ここでは、私がインストールしているVitis HLS 2021.2を例に、修正スクリプトを適用した方法とその結果を記載します。
なお、2018.3以前のバージョンに修正スクリプトを実行するには、Pythonを別にインストールする必要があるそうです。

Windowsの場合、コマンドプロンプトを開き、先ほどの C:\Xilinx にcdで移動します。

cd C:\Xilinx

次に、以下のコマンドを実行します。

Vivado\2021.2\tps\win64\python-3.8.3\python.exe y2k22_patch\patch.py

これで、修正パッチの適用は完了です。
コマンドプロンプトには以下のように表示されました。

Vitis HLS2021.2でExport RTLを試してみたところ、無事成功のようです。

2. システム時間を2021年以降に戻す

2はわかりやすい変更で、リビジョン番号が 2^31 – 1 を下回るように時刻を過去に戻せば、問題が解決します。例えば、Windows PCでは、図のようにデフォルトで右下に表示されている時刻表記を右クリックして手動で2021年に戻せば、Export RTLのエラーを回避することができます。
ただし、システム時間を変更すると、他のアプリケーションにも影響が出るため、一時的な方法としてはよいですが、継続的に使うのはできれば避けたい方法です。

3. IPのパッケージングを実行するtclファイルを修正した後、直接tclファイルを実行する

3のtclの修正を試してみましたので、その方法を記載します。

まず、Vitis HLSでエラーが発生したら、発生元の”run_ippack.tcl”を開きます。
“run_ippack.tcl”は、VitisHLS 2021.2では以下のパスに含まれます:

solutionのパス\impl\ip\run_ippack.tcl
solutionのパス はVitis HLSのプロジェクトディレクトリの各solutionのパスを意味します。

run_ippack.tclには、tclコマンドがシーケンシャルに記述されています。
そのうち、57行目にset Revisionというtclコマンドの記述があるので、これを 2^31 – 1以下の値に変更します。

例えば、Revisionを “2201021620″ から”2101021620″と変更してみましょう。

tclファイルの修正が完了したら、次にVivadoのtcl shellを開きます。
Windowsであれば、スタートメニューから選択できるはずです。

図のようにcdを使って、まずrun_ippack.tclのあるフォルダに移動しましょう。
次に、以下のコマンドでrun_ippack.tclを実行します。

source run_ippack.tcl -notrace
2022/1/3追記

marseeさんの「FPGAの部屋」でツイートを紹介していただきました!
tcl shell ではなく、コマンドラインから実行する方法が記載されています。

FPGAの部屋 Vivado HLS, Vitis HLS で 2022 年問題発生

しばらくすると、所望のIPがパッケージングされます。

パッケージしたZIPファイルは、Vivadoでインポートできるところまで確認しました。

tclの修正がやや面倒ですが、Vitis HLSのIP packageがどういう処理を行っているのかも垣間見れるので、個人的にはこっちの方がほかのトラブルがあったときにも対処しやすいかなと思いました。
2022/1/8追記:修正パッチが公開されたので、これを適用する1が最も良いと思います。

最後までご覧いただきありがとうございました。

コメント