FC2カウンター FPGAの部屋 Vivado
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado 2020.1 に AR# 75369 2020.1 緊急パッチを適用する

AR# 75369 2020.1 緊急パッチ - Vivado タイミングおよび制約 - 間違って自動生成されたクロック名、解析の違い、ツールのクラッシュなど、複数の問題を修正するためのパッチ”を適用してみよう。

AR# 75369 の問題の説明文を引用する。

問題 1:

同じバージョンの Vivado に DCP を読み込むと、名前が変更されたクロックおよび自動生成されたクロック名が正しく維持されず、タイミング解析の結果が間違いになります。

この問題は、DCP が別のバージョンの Vivado で生成され、開かれている場合には発生しません。

問題 2:

階層ピンで定義されている生成クロックがあるとき、インメモリ デザインと読み込まれた DCP との間のタイミング結果値に差が出る可能性があり、そのネットのすべてのロード ピンへクロックが伝播するのをブロックします。

ロード ピンが生成クロックの定義によってブロックされていなければ、この問題は発生しません。

問題 3:

制約にコレクション (opt/place_design を実行する前と opt/place_design を実行した後のリスト) がある場合、置き換えられたオブジェクトの一部がコレクションに追加されます。
リストのリストは Vivado 2020.1 では現在サポートされていません。
デザインが Vivado 2020.1 でインプリメントされていて、同じ Vivado 2020.1 で DCP が再度読み込まれている場合は、問題は発生しません。

インプリメンテーションと DCP の再読み込みで異なるバージョンの Vivado が使われている使用されている場合は、この問題が発生します。

このケースでは、タイミングの不一致が一部あるので、一部のパターンが一致しないことが原因でチェックポイントが再度読み込まれると、警告メッセージが生成されます。

問題 4:

「Phase 1.3 Build Placer Netlist Model」という配置フェーズで Vivado がクラッシュします。


添付されているパッチのインストール手順の内の方法1 を試してみよう。
方法1 を引用する。

方法 1: (Vivado 2014.4 およびそれ以降のみ)
1. $XILINX_VIVADO/patches ディレクトリ (Linux) または C:\Xilinx\Vivado\\patches ディレクトリ (Windows) に移動します (このディレクトリがない場合は作成します)。
2. 「AR75369」という名前で始まるディレクトリに ZIP アーカイブを解凍します。
注記: ほとんどの解凍ツールでは、ZIP ファイルと同じ名前のディレクトリが解凍時に自動的に作成されます。
3. 元のインストール場所から Vivado を実行します。


まずは、
source /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vitis/2020.1/settings64.sh
が実行済みのターミナルで、
echo $XILINX_VIVADO
を実行した時の結果は
/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2020.1
だった。

/media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2020.1 に patches ディレクトリを作成した。
AR75369_vivado_2020_1_preliminary_rev1.zip を同じディレクトリにダウンロードした。
AR75369_1_200729.png

AR75369_vivado_2020_1_preliminary_rev1.zip を表示すると、vivado ディレクトリが見えた。
AR75369_2_200729.png

方法1 の様に AR75369 で始まるディレクトリ名ではないので、 /media/masaaki/Ubuntu_Disk/tools/Xilinx/Vivado/2020.1/patches ディレクトリの下に AR75369_vivado_2020_1_preliminary_rev1 ディレクトリを作成した。
AR75369_3_200729.png

AR75369_vivado_2020_1_preliminary_rev1 ディレクトリの下に、AR75369_vivado_2020_1_preliminary_rev1.zip を解凍した。
AR75369_4_200729.png

この状態にで Vivado 2020.1 を vivado & で起動すると起動メッセージに

Vivado v2020.1_AR75369 (64-bit)

があった。以前の Vivado の起動メッセージと比べてみた。
AR75369_5_200729.png

起動した Vivado 2020.1 もタイトルが、 Vivado 2020.1_AR75369 になっていた。
AR75369_6_200729.png

AR# 75369 が当たったようだ。
  1. 2020年07月29日 05:01 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2020.1 を使用して IP を作り、Vivado 2020.1 で実装してみよう2(Vivado 編)

Vitis HLS 2020.1 を使用して IP を作り、Vivado 2020.1 で実装してみよう1(Vitis HLS 編)”の続き。

Vitis HLS 2020.1 を使用して IP を作り、Vivado 2020.1 で実装してみたいということで、正式リリースされた Vitis HLS 2020.1 を使って IP を作ってみることにしたということで、前回は、Ubuntu 18.04 の Vitis HLS 2020.1 でAXI4 Lite インターフェースの乗算 IP を作った。今回は、Vivado 20202.1 を使用して、前回作った乗算 IP を使用して、プロジェクトを作成しよう。Export Hardware Platform が前のバージョンから変更があったので、2 種類試してみた。

まずは、Vivado 2020.1 で ZYBO Z7-10 ボード用の multi_hls201 プロジェクトを作成した。(もうビットストリームの生成まで終了しているが)
Vivado201_1_200620.png

前回、Vitis HLS 2020.1 で作成した multi_apuint IP を IP Catalog に登録して、 multi_hls ブロックデザインを作成した。
すでにブロックデザインはできあがっている。
Vivado201_2_200620.png

Address Editor 画面を示す。
Vivado201_3_200620.png

Vivado 2019.2 からでは少し変わっているようだ。

Project Summary を示す。
Vivado201_4_200620.png

Vitis を起動するために、ハードウェアをエクスポートしよう。
File メニューから Export -> Export Hardware... を選択した。
Export Hardware Platform ダイアログが開いた。これは、2020.1 で大きく変わっている。
Fixed ラジオボタンを選択した。アクセラレーション対応プラットフォームの場合は、 Expandable を選択するようだ。後でやってみよう。
Vivado201_5_200620.png

Output 画面で Include bitstream のラジオボタンを有効にした。
Vivado201_6_200620.png

Files 画面で Finish ボタンをクリックする。
Vivado201_7_200620.png

ultra96v2_min2_201.xsa が生成された。
Vivado201_14_200620.png


次に、”Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る1(ハードウェア・コンポーネント編)”で作った ultra96v2_min2_201 プロジェクトをやってみよう。
Vivado201_8_200620.png

これは、アクセラレーションをサポートしたプラットフォームなので、Export Hardware Platform で Expandable ラジオボタンが選択されていた。
Vivado201_9_200620.png

Platform State 画面で、Post-implementation の方は DFX つまりパーシャル・リコンフィギュレーションの設定が必要そうなので、Pre-synthesis ラジオボタンをクリックした。
Vivado201_10_200620.png

Platform Properties 画面、デフォルトのまま。
Vivado201_11_200620.png

Files 画面では、XSA file name を ultra96v2_min2_201 に修正して、Finish ボタンをクリックした。
Vivado201_12_200620.png

ログを見ると ultra96v2_min2_201.xsa が生成されたのが分かる。
Vivado201_13_200620.png
  1. 2020年06月20日 07:38 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2020.1 での起動時のエラーの解消方法

Vivado 2020.1 を起動すると ”Could nt locate Help files. Quick Help will not be available.”というエラーダイアルログが出るが、その解消方法を windy さんに教えてもらったので、書いておく。
Vitis_Platform201_2_200610.png

私は Ubuntu 18.04 で出ているが windy さんによると Windows の Vivado 2020.1 でも出ているそうだ。どうやら日本語の Quick Help が無いらしい?

OK ボタンをクリックすると Vivado が起動できる。
これを解消する方法も windy さんに教えていただいた。 windy さんありがとうございます。

Vivado の Tools メニューから Settings... を選択する。
Settings ダイアログで左の Tool Settings で Help を選択して、Tooltips and Quick Help の Language: を Japanese から English に設定変更する。
Vivado_20201_200611.png

これで、Vivado 2020.1 を落として、もう一度、
vivado &
で起動してもエラー・ダイアログがでなくなった。
  1. 2020年06月11日 04:43 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

なひたふさんの「Vivadoのプロジェクトをgitで管理する最小限は何か」を参考にしてVivado のプロジェクトをTCLファイルで復元した2

なひたふさんの「Vivadoのプロジェクトをgitで管理する最小限は何か」を参考にしてVivado のプロジェクトをTCLファイルで復元した”の続き。

前回、Vivado プロジェクトを送る時に最小限のファイルで送れればとっても良い。そこで、なひたふさんの「Vivadoのプロジェクトをgitで管理する最小限は何か」を参考にして最小限のファイルでVivado プロジェクトを復元してみたのだが、手続きが多すぎた。そこで、もっと簡単にできる方法ということで、tcl ファイルを編集してみた。

これが今回、移動する Vivado 2019.2 のプロジェクトだ。
Vivado 2019.2 の sums_ex3 プロジェクトで、同じ階層に Vivado HLS 2019.2 の s_squares_axim プロジェクトがあって、s_squares_axim\solution1\impl\ip の IP をブロックデザインの IP として使用している。
Vivado_2019_2_1_200223.png

File メニューから Project -> Write Tcl... を選択した。
Vivado_2019_2_2_200223.png

Write Project to Tcl ダイアログが表示された。Copy sources to new project と Recreate Block Designs using Tcl にチェックを入れて、OK ボタンをクリックした。
Vivado_2019_2_3_200223.png

sums_ex3.tcl が出力された。書き換える行は origin_dir のある行だ。(set origin_dir ".")
150 行目と 159 行目となる。
Vivado_2019_2_4_200223.png

150 行目の set_property "ip_repo_paths"は Vivado HLS の IP へのパスなので、 "$origin_dir/s_squares_axim/solution1/impl/ip" とした。
159 行目はインポートするブロックデザインのラッパー HDL ファイルへのパスなので、"${origin_dir}/Vivado/sums_bd_wrapper.v"(Vivado フォルダの下にある)
Vivado_2019_2_5_200223.png

これで、修正は終了し、セーブした。

Vivado プロジェクトを作成するフォルダに sums_ex3.tcl をコピーした。Vivado HLS 2019.2 の s_squares_axim フォルダをコピーした。
Vivado_2019_2_6_200223.png

Vivado フォルダの下には、sums_bd_warpper.v をコピーした。
Vivado_2019_2_7_200223.png

スタートメニューから Vivado 2018.3 Tcl Shell を開く。
cd で希望のフォルダに行った。
sums_ex3.tcl を起動した。
source sums_ex3.tcl
Vivado_2019_2_8_200223.png

Vivado_2019_2_9_200223.png

sums_ex3 フォルダが生成され、フォルダの中に sums_ex3.xpr という名前の Vivado 2019.2 プロジェクト・ファイルが生成されていた。sums_ex3.xpr を Vivado 2019.2 で読み込んで、ブロックデザインを表示した。
Vivado_2019_2_11_200223.png

ビットファイルも問題なく生成できた。
Vivado_2019_2_12_200223.png
  1. 2020年02月23日 15:13 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

同じ Vivado HLS IP を複数個インスタンスした場合、Vivado 2018.3 でハードウェアをエクスポートしてSDKを立ち上げたときにその他のVivado HLS のIPのドライバがSDKのハードウェア・プラットフォームに入らない

Vivado 2018.3 でハードウェアをエクスポートしてSDKを立ち上げたときに、同じ Vivado HLS IP を複数個インスタンスした場合、その他のVivado HLS のIPのドライバが入らないという問題があったので、ブログに書いておく。多分バグじゃないのかな?

Vivado 2018.3 の sums_ex4 プロジェクトを示す。このプロジェクトはZybo Z7-10 用のプロジェクトだ。
SDK_bug_1_190914.png

sums_bd ブロックデザインを示す。
SDK_bug_2_190914.png

ブロックデザインを見ると DMA2axis8 IP が 2 つあるのが分かる。これらは、DDRメモリからDMA Read を行って、s_squares_axis IP にAIX4-Stream でデータを供給し、平方数の和を取って、axis2DMA IP にAIX4-Stream でデータを送る。axis2DMA IP はAXI4-Stream で送られてきたデータをDMA Write するというような回路になっている。
s_squares_axis IP のソースコードは”2つのAXI4 Stream 入力データを演算してAXI4 Stream 出力1”だ。
DMA2axis8.cpp を貼っておく。

// DMA2axis8.cpp (2019/09/10 by marsee)

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>

int DMA2axis8(volatile ap_int<8> *in, hls::stream<ap_axis<8,1,1,1> >& outs){
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE axis register both port=outs
#pragma HLS INTERFACE m_axi depth=10 port=in offset=slave
    ap_axis<8,1,1,1> out_val;

    for(int i=0; i<10; i++){
#pragma HLS PIPELINE II=1
        out_val.data = in[i];
        if(i == 0)
            out_val.user = 1;
        else
            out_val.user = 0;
        if(i==9)
            out_val.last = 1;
        else
            out_val.last = 0;
        outs << out_val;
    }
    return(0);
}


axis2DMA.cpp を貼っておく。

// axis2DMA.cpp (2018/05/18 by marsee)

#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>

int axis2DMA(hls::stream<ap_axis<32,1,1,1> >& ins, volatile ap_int<32> *out){
#pragma HLS INTERFACE s_axilite port=return
#pragma HLS INTERFACE m_axi depth=10 port=out offset=slave
#pragma HLS INTERFACE axis register both port=ins
    ap_axis<32,1,1,1> in_val;

    for(int i=0; i<10; i++){
#pragma HLS PIPELINE II=1
        ins >> in_val;
        out[i] = in_val.data;
    }
    return(0);
}


論理合成、インプリメンテーション、ビットストリームの生成を行った。レポートを示す。
SDK_bug_3_190914.png
SDK_bug_4_190914.png

ハードウェアをエクスポートしてSDKを立ち上げた。
SDK_bug_5_190914.png

axis2DMA, DMA2axis8, s_squares_axis が入っているのは見えるが、ハードウェア・プラットフォームの drivers には、DMA2axis8 しか入っていないのが分かる。これだと他のVivado HLS IP のドライバ関数が使用できなかった。

次に Vivado 2018.3 で sums_ex4_temp プロジェクトを作成した。
SDK_bug_6_190914.png

sums_bd ブロックデザインを示す。
SDK_bug_7_190914.png

DMA2axis8 を 1 個のみインスタンスして、他は Constant で代用した。
これで論理合成、インプリメンテーション、ビットストリームの生成を行った。レポートを示す。
SDK_bug_8_190914.png
SDK_bug_9_190914.png

これでハードウェアをエクスポートしてSDKを立ち上げたところ、ハードウェア・プラットフォームには、3 個のVivado HLS で作成したIP のドライバが入っている。
SDK_bug_10_190914.png

やはり、Vivado 2018.3 のブロックデザインでVivado HLS で作成したIP を複数個入れているとSDK のハードウェア・プラットフォーム上に他のVivado HLS IP のドライバがロードされないようだ。バグじゃないだろうか?

なお、Vivado HLS IP のドライバがハードウェア・プラットフォームに入っていないことの回避方法としては、”SDKにVivado HLSで作製したIPのドライバをインポートする”がある。
この方法で、local Repositories か Global Repositories にIP のフォルダを追加しておけばよい。今回は、Global Repositories にIP のフォルダを追加した。これでVivado HLS で作成した IP のドライバを使えるようになる。
  1. 2019年09月15日 04:50 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

なひたふさんの「Vivadoのプロジェクトをgitで管理する最小限は何か」を参考にしてVivado のプロジェクトをTCLファイルで復元した

Vivado プロジェクトを送る時に最小限のファイルで遅れればとっても良い。そこで、なひたふさんの「Vivadoのプロジェクトをgitで管理する最小限は何か」を参考にして最小限のファイルでVivado プロジェクトを復元してみた。

復元させるVivado 2019.1 プロジェクトは、”Vivado 2018.3 のプロジェクトを Vivado 2019.1 に変換してみた”とする。
vivado2019_1_5_190605.png

File メニューから Project -> Write Tcl... を選択した。

Write Project to Tcl ダイアログが表示された。Copy sources to new project と Recreate Block Designs using Tcl にチェックを入れて、OK ボタンをクリックした。
vivado2019_1_6_190605.png

Write Project to Tcl ダイアログでYes ボタンをクリックして、 cam_dp_183.tcl を表示した。
vivado2019_1_7_190605.png

cam_dp_183.tcl の一部を示す。
vivado2019_1_8_190605.png

現在のディレクトリの下にWork ディレクトリを作成し、cam_dp.xdc と cam_dp_wrapper.v, cam_dp_183.tcl の各ファイルと IP のディレクトリをコピーした。
vivado2019_1_9_190605.png

現在のプロジェクトをクローズしてから、Vivado 2019.1 のTcl Console でコマンドを入力した。
vivado2019_1_10_190605.png

cd /home/masaaki/HDL/Ultra96/cam_dp_191/Work/
source cam_dp_183.tcl

するとエラーになってしまった。
vivado2019_1_11_190605.png

ERROR: [Vivado 12-172] File or Directory '/home/masaaki/HDL/Ultra96/cam_dp_191/Work/cam_dp_183.srcs/sources_1/bd/cam_dp/hdl/cam_dp_wrapper.v' does not exist



cam_dp.xdc と cam_dp_wrapper.v は以前のディレクトリパスの下に置く必要があるようだ。

そこで、Work ディレクトリ下にディレクトリを構築した。
vivado2019_1_12_190605.png

もう一度、source cam_dp_183.tcl を実行するとエラーだった。一旦、cam_dp_183 ディレクトリを削除する必要があるようだ。
vivado2019_1_13_190605.png

cam_dp_183 ディレクトリを削除して、もう一度、source cam_dp_183.tcl を実行したところ、Vivado 2019.1 のプロジェクトが生成された。
vivado2019_1_14_190605.png

IP Catalog を見ると、IP はコピーされていないで、Work ディレクトリ直下のIP のディレクトリを指している。
vivado2019_1_15_190605.png

ちょっと残念。上のディレクトリも一緒に移動する必要あるな。。。
現在のWork ディレクトリの様子を示す。
vivado2019_1_16_190605.png

Work ディレクトリの下の cam_dp_183 ディレクトリの内容を示す。
vivado2019_1_17_190605.png

cam_dp.xdc と cam_dp_wrapper.v は cam_dp_183 ディレクトリの下にコピーされていた。
vivado2019_1_18_190605.png

生成されたVivado 2019.1 プロジェクトを論理合成、インプリメンテーション、ビットストリームの生成を行った。
途中、クリティカル・ワーニングが表示された。
vivado2019_1_19_190605.png

[IP_Flow 19-4965] IP pixel_fifo was packaged with board value 'em.avnet.com:ultra96v1:part0:1.2'. Current project's board value is unset. Please update the project settings to match the packaged IP.


そのまま、OK ボタンをクリックして、進めたところ、成功した。
vivado2019_1_20_190605.png

なお、SDK のディレクトリはコピーされないので、SDKを上げてSDKのディレクトリを生成してからSDK でアプリケーション・プロジェクトを作成後に正規の手順でプリケーション・ソフトのソースコードをコピーしたほうが良さそうだ。
  1. 2019年06月05日 05:36 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2018.3 のプロジェクトを Vivado 2019.1 に変換してみた

Vivado 2018.3 の cam_dp_183 プロジェクトをVivado 2019.1 に変換してみた。

まずは、cam_dp_183 をディレクトリごとコピーして、名前を cam_dp_191 に変更した。
vivado2019_1_1_190604.png

Vivado 2019.1 で cam_dp_191/cam_dp_183 プロジェクトを開いて、新しいプロジェクトに変換した。

IP を更新した。自作IP の下の pixel_fifo も更新した。

論理合成、インプリメンテーション、ビットストリームの生成まで成功した。
vivado2019_1_2_190604.png

Project Summary を示す。
vivado2019_1_3_190604.png

ハードウェアをエクスポートして、SDK を立ち上げた。
vivado2019_1_4_190604.png

cam_dp_wrapper_hw_platform_1 が生成された。

とりあえず、今の所問題なく Vivado 2018.3 のプロジェクトをVivado 2019.1 に変換できた。
  1. 2019年06月04日 05:13 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0
»