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

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

FPGAの部屋

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

同じ 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

Vivado 2019.1 WebPACK Edition をUbuntu 18.04 にインストールした

Vivado 2019.1 が出たので、WebPACK Edition を Ubuntu 18.04 の /tools ディレクトリにインストールした。

まずはWeb インストーラー(Xilinx_Vivado_SDK_Web_2019.1_0524_1430_Lin64.bin)をXilinx 社のダウンロードサイトよりダウンロードした。

Xilinx_Vivado_SDK_Web_2019.1_0524_1430_Lin64.bin の実行パーミッションが有効になっていないので、有効にした。
chmod +x Xilinx_Vivado_SDK_Web_2019.1_0524_1430_Lin64.bin

Linux 用Web インストーラーを起動してインストールを行った。(WebPACK Edition、/tools/Xilinx ディレクトリへのインストール)
sudo ./Xilinx_Vivado_SDK_Web_2019.1_0524_1430_Lin64.bin

自分のホームディレクトリの .Xilinx ディレクトリがスーパーユーザ権限になっているので、グループとオーナーを自分に変更した。
sudo chown -R masaaki:masaaki .Xilinx/
vivado2019_1_install_1_190530.png

ケーブル・ドライバをインストールする。
cd /tools/Xilinx/Vivado/2019.1/data/xicom/cable_drivers/lin64/install_script/install_drivers
sudo ./install_drivers

vivado2019_1_install_2_190530.png
vivado2019_1_install_3_190530.png

.bashrc の書き換えなどは、”Ubuntu16.04にVivado 2016.4をインストール”を参照ください。

環境設定を行って、Vivado 2019.1 を起動した。
source /tools/Xilinx/Vivado/2019.1/settings64.sh
vivado &

vivado2019_1_install_4_190530.png

Vivado 2019.1 が起動した。(ここからは、ツイッターであすてりず無さんのツィートを見たので、やってみた)
適当にプロジェクトを作成する過程でDefault Part のダイアログが出ている時を示す。
vivado2019_1_install_5_190530.png

ここで、Default Part のダイアログの Update Board Repositories ボタンをクリックする。
vivado2019_1_install_6_190530.png

Download Latest Board ダイアログが表示された。Download ボタンをクリックする。
vivado2019_1_install_7_190530.png

Download Boards ダイアログが表示された。
vivado2019_1_install_8_190530.png

すると、いろいろなボード・ファイルがインストールされて、Vendor を digileninc.com にすると、Zybo Z7-20 なども選択できるようになった。
vivado2019_1_install_9_190530.png

Vendor を em.avnet.com にするとUltra96 も選択できるがVer.1 だけでVer. 2 が無いのかも?
vivado2019_1_install_10_190530.png

なお、Vivado 2019.1 の Tools メニューから Download Latest Board... を選んでも同様にボード・ファイルをインストールすることができる。

あすてりず無さんのツィートによると、
Xilinx/XilinxBoardStore
のボード・ファイルがインストールされるようだ。
  1. 2019年05月31日 04:35 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2018.2 が出た

昨日、Vivado 2018.2 が出ていた。

Vivado HLS のAnalysis にSchedule Viewer が追加されたということでやってみることにした。

MNISTのCNNの特徴マップが 3 個の場合で確かめてみた。
Vivado 2018.2 で mnist_conv_nn3_hlss_k_org82 フォルダのVivado HLS プロジェクトをC コードの合成を行った。結果を示す。
下に 2018.1 の結果も示す。
vivado_2018_1_1_180620.pngtensorflow_keras_111_180618.png

同じ結果だった。

Analysis モードにすると、Schedule Viewer が起動した。新しいモードだ。
vivado_2018_1_2_180620.png

conv_layer1 > conv_layer_template を選択した。
赤い部分があるが、これはタイミング違反のブロックということだ。
どこからデータが来て、どこに行くのかが矢印で示されているのだと思う。
vivado_2018_1_3_180620.png

affine_layer1 > affine_layer_templat_1 を示す。
vivado_2018_1_4_180620.png

見やすくなった気がするが、どこの演算をしているのかがいまいち分からない?

Export RTLの結果を示す。2018.1 の結果も示す。
vivado_2018_1_5_180620.pngtensorflow_keras_112_180618.png

特に FF と SLICE の使用量が 2018.2 の方が少なくなっている。
CP achieved post-implementation が 9.525 ns から 8.846 ns に改善されているが、これはVivado の改善のようだ。


次に、Vivado 2018.2 を”Kerasを使用したMNIST CNNで手書き文字認識1(以前のVivado プロジェクトをVivado 2017.4に変換)”のVivado 2017.4 と比較してみよう。

Vivado 2018.2 の PYNQ ボードのMNIST のCNN プロジェクトを示す。
vivado_2018_1_6_180620.png

Vivado 2018.2 の結果を示す。 2017.4 の結果も示す。
vivado_2018_1_7_180620.pngvivado_2018_1_8_180620.png

LUT は少し 2018.2 の方が少なく、LUT RAM と FF がやはり、2018.2 の方が少なくなった。
今度から 2018.2 を使ってみようか?
  1. 2018年06月20日 04:50 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado スタートアップ・チュートリアル2日目

今日はVivado スタートアップ・チュートリアルの2日目です。

今日のお題目は、

Vivadoプロジェクトの新規作成
論理合成用Verilog-HDLコードの作成
ブロックデザインの作成
テストベンチ用Verilog-HDLコードの作成
RTLシミュレーション
論理合成
制約ファイルの作成(配置制約とタイミング制約)
インプリメンテーション、ビット・ファイルの生成
Implemented Design(FPGA内部素子への割り当ての確認)
Project Summary
実機テスト(Lチカ)


です。

なお、Vivado スタートアップ・チュートリアル1日目のお題は、
Vivadoプロジェクトの新規作成

論理合成用Verilog-HDLコードの作成
テストベンチ用Verilog-HDLコードの作成
RTLシミュレーション
論理合成
制約ファイルの作成
インプリメンテーション、ビット・ファイルの生成
Implemented Design(FPGA内部素子への割り当ての確認)
Project Summary
実機テスト(AND回路)


でした。

今回は、ブロックデザインを作成して、RTL IP を作成する手順と、制約ファイルを作るところでタイミング制約を GUI で作成する方法が追加されています。
今回のVivado スタートアップ・チュートリアルはVivado HLS を使う前に初めてVivado を使う人のためのチュートリアルとしてFPGAの内部構造を覚えることを目的としています。言わば、Vivado HLS を使うための第一歩としてのチュートリアルとなります。この後、Vivado をもっと勉強しても良いですし、Vivado HLS を使って C 言語でIP を作成するようになっても良いと思います。

Vivado HLS のチュートリアルも去年受講した元B4 生に聞いたところ、AXI4 MasterとAXI4-Streamで急に例題が難しくなって分からなくなったという声があったので、初心者用のAXI4 MasterとAXI4-Stream のチュートリアルを追加しようと思います。
  1. 2018年05月02日 06:09 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Ubuntu 16.04.3 LTS 上のVivado 2017.3 のLaunch Runs ダイアログが透明になってしまう

Ubuntu 16.04.3 LTS 上のVivado 2017.3 のLaunch Runs ダイアログが透明になってしまうバグがあって、論理合成ができなくなってしまった。

状況はUltraZed-EG Starter Kit のVivado プロジェクトを新規作成して、IP Integrator でブロック・デザインを作成した。
Vivado2017_3_bug_1_171129.png

出来上がったので、Flow Navigator からGenarate Bitstream をクリックして、論理合成、インプリメント、ビットストリームの生成を行おうとした。

No Implementation Results Available ダイアログが表示された。Yes ボタンをクリックした。
Vivado2017_3_bug_2_171129.png

次に、Launch Runs ダイアログが表示された。このダイアログが透明で何も選べなかった。
Vivado2017_3_bug_3_171129.png

解決方法がわかる方は情報をお待ちしています。コメント欄でお知らせください。よろしくお願いいたします。
もしかして、パッケージが何か足りないのかな?

(追記)
その後、Ubuntu を使っていたら、全く反応しなくなって、どうしようもなくなり電源OFF。
再度、電源ONして、Ubuntu を起動し、Vivado を起動して、もう一度、やってみたら、Launch Runs の表示が正常にできました。
Vivado2017_3_bug_4_171129.png

何かUbuntu がおかしくなっていたようです。皆さん、ありがとうございました。自己解決できました。
ダイアログの中が透明になったら、リブートしたほうが良さそうです。。。
  1. 2017年11月29日 05:00 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0
»