高位合成ベースのIPコアを最大256個含むブロックデザインを自動で作る(ネタ)
2022年の5月くらいに作ってたTclスクリプトの紹介 実用的な回路を256個も含んで並列処理、というのはハードウェアリソースの面で現実的ではなさそうなのでネタっぽさはあるが、複数のIPコアを含むブロックデザインを作る際に、作成したTclスクリプトで作業効率が上がった。 「IPコア」という表記をする場合は高位合成ベースのIPコアを指す。 背景 VivadoのブロックデザインにはIPコア同士を接続できる機能Run Connection Automationがある。この機能を使って、Zynq SoC向けにVitis HLSで作成したIPコアを複数個使ってブロックデザインを作成したいが、AXI4-Liteインターフェイスを含むIPコアを64個より多く含んで自動接続することができない。その原因は、AXI Interconnectのマスタ側は最大64接続?であるが、その数を超えたIPコアがあっても新たにAXI Interconnectを追加してくれないためである。実際に128個の加算回路IPコアを追加しRun Connection Automationした際のエラーを画像に示す。65個目の加算回路IPコアの接続でエラーが出ている。 また、Zynq SoC向けにAXI4-StreamインターフェイスのIPコアをAXI DMA IPを用いてデータ入出力することがしばしば発生する。IPコアを複数個追加しAXI DMA IPと1対1に接続するとき、追加した数だけAXI DMA IPの設定(チャネルの設定)する必要があり、手間である(AXI Interconnectの件よりも、これを解決するのが本命だった)。 何をしたか UG835を参考に、Zynq SoC向けの高位合成ベースのIPコアを最大256個含むブロックデザインを自動で追加・接続のできるTclスクリプトを作成した。スクリプトは vivado-auto-bd-playgroud - GitHub にてMITライセンスで公開している。 どんなブロックデザインが生成できるか 同一のIPコアを複数個 作成したスクリプトを使うことで画像のようなブロックデザインを自動で作成することができる。以下の画像は入出力がAXI4-Liteの加算回路のIPコアを自動で256個追加・接続したときのブロックデザインである(画像では、もやは何がなんだかわからない)。 異種のIPコアを複数個 また、複数種類のIPコアを複数個、追加・接続することもできる。以下の画像は、入出力にAXI4-Streamを使うIPコアを4つ、入出力にAXI4-Liteを使うIPコアを8個追加した例である。AXI4-Streamの場合はDMA回路の設定を含めて自動で行われる。 スクリプトの使い方 後述の環境と制限をよく読み、Vitis HLSでC Synthesis、export RTL vivado_block_design.tclを必要なパラメータと一緒にvivadoのコマンドライン引数に渡す vivado -nolog -nojournal -mode batch \ -source ./vivado_block_design.tcl \ -tclargs -project_name vivado \ -device_part <デバイスパーツ> \ -ips_directory <IPコア(....