FC2カウンター (cache) FPGAの部屋 Vivado

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

FPGAの部屋

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

Vivado 2016.2 が出ました

Vivado 2016.2 が出たので、インストールしました。
Vivado_2016_2_160610.png

リリースノートによると、デバイスサポートが増えたくらいのようです。

Vivado HLS 2016.2 もリリースノートの新機能に記述がなかったので、変更点は無いようです。
Vivado_HLS_2016_2_160610.png

たぶん、多少、バグフィックスはされていると思うので、2016.2 を使うことにしようと思います。
  1. 2016年06月10日 04:15 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Z-turn Board のPS設定をサンプル・プロジェクトからコピーする

Z-turn Board のVivado プロジェクトを作ろうと思ったが、PS(Processing System つまり、ARM SoC の設定です) の設定はどうするんだろうと思っていた。ZYBO では、ボード・ファイルをVivado のボード・ファイルのフォルダにコピーしたが、Z-turn Board では、そのようなファイルは見当たらない。そこで、サンプル・プロジェクトのPS設定をエクスポートできて、新しく作るVivado プロジェクトのPS の設定として読み込めないかな?と探ってみた。

Z-turn Board についてくるDVD の 05-ProgrammableLogic_Source\7Z020 に mys-xc7z020-trd.rar があって、これを解凍すると mys-xc7z020-trd フォルダができる。
Vivado_PS_settings_1_160603.png

mys-xc7z020-trd.xpr をダブルクリックして、Vivado を起動した。Vivado 2016.1 が起動するので、IP アップグレードを行って、ブロックデザインを表示したところだ。ZYNQ7 Processing System はたくさん接続されているので、いい具合だ。
processing_system7_0 をダブルクリックして、設定画面を出すことにする。
Vivado_PS_settings_2_160603.png

PS の設定画面が開いたら、Presets -> Save Configuration... を選択した。
Vivado_PS_settings_3_160603.png

Save Current Configuration... ダイアログが開く。
Preset Name と File name に mys-xc7x020_trd と入力して、OKボタンをクリックした。
Vivado_PS_settings_4_160603.png

そうすると、mys-xc7z020-trd フォルダに、mys-xc7x020_trd.tcl ファイルができた。
Vivado_PS_settings_5_160603.png

mys-xc7x020_trd.tcl ファイルを開いてみるとこんな感じだった。
Vivado_PS_settings_6_160603.png

さて、このTCL ファイルを読み込んでみたいということで、test_proj プロジェクトを作成した。
ブロックデザインを作成して、ZYNQ7 Processing System をAdd IP した。
Vivado_PS_settings_7_160603.png

processing_system7_0 をダブルクリックして、設定画面を出した。
Presets -> Apply Configuration... を選択した。
Vivado_PS_settings_8_160603.png

mys-xc7x020_trd.tcl ファイルを指定した。
Vivado_PS_settings_9_160603.png

mys-xc7x020_trd.tcl ファイルの設定がPS設定としてロードされている。
Vivado_PS_settings_10_160603.png

PS 設定画面を終了すると、processing_system7_0 が設定されている。成功だ。
Vivado_PS_settings_11_160603.png

自分でデフォルトのPS 設定として、良かれと思う様に設定した。
Vivado_PS_settings_12_160603.png

そして、PS 設定画面から Presets -> Save Configuration... でファイルとしてセーブした。
ファイル名は、def_z_turn_board_20_ps_settings.tcl で、Preset Name は、default_z-turn_board_20_PS_settings とした。
Vivado_PS_settings_13_160603.png

def_z_turn_board_20_ps_settings.tcl を開いてみた。
Vivado_PS_settings_14_160603.png

これで、def_z_turn_board_20_ps_settings.tcl を使用して、Z-turn Board でPS を使ったVivado プロジェクトを作ることができる様になった。
  1. 2016年06月04日 04:45 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado 2015.4による組み合わせ回路の場合の消費電力解析

組み合わせ回路をVivado 2015.4でインプリメントすると消費電力解析でとんでもない値が出てしまう。それを解消する方法を探っていく。

まずは、”Vivado hls勉強会1(基礎編)”で使用しているVivado HLS 2015.4 の掛け算IPの multi_apuint プロジェクトをVivado 2015.4 の multi_ex1 プロジェクトにインポートして実機で確認するのだが、インプリメントした時にPower が 6.6W も消費する計算になって赤くなってしまう。これを解消したいと思った。実際は、スライドスイッチで入力を入れて、掛け算出力をLEDに表示するので、消費電力は多くなるわけがないはずだ。

2016/02/28 追記: 、”Vivado hls勉強会1(基礎編)”を書き換えてしまったので、以前の multi_bd_wrapper.xdc を貼っておきます)

# multi_bd_wrapper.xdc
# 2015/07/02 by marsee
#

##Switches
##IO_L19N_T3_VREF_35 sw0
set_property PACKAGE_PIN G15 [get_ports {In0_1[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0_1[0]}]

##IO_L24P_T3_34 sw1
set_property PACKAGE_PIN P15 [get_ports {In0_1[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0_1[1]}]

##IO_L4N_T0_34 sw2
set_property PACKAGE_PIN W13 [get_ports {In0[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0[0]}]

##IO_L9P_T1_DQS_34 sw3
set_property PACKAGE_PIN T16 [get_ports {In0[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {In0[1]}]

##LEDs
##IO_L23P_T3_35 Dout[0]
set_property PACKAGE_PIN M14 [get_ports {Dout[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[0]}]

##IO_L23N_T3_35 Dout[1]
set_property PACKAGE_PIN M15 [get_ports {Dout[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[1]}]

##IO_0_35 Dout[2]
set_property PACKAGE_PIN G14 [get_ports {Dout[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[2]}]

##IO_L3N_T0_DQS_AD1N_35 Dout[3]
set_property PACKAGE_PIN D18 [get_ports {Dout[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout[3]}]


まずは、multi_apuint (ここでは、multi_apuint2 になっている)のVivado HLS 2015.4 プロジェクトを見ていこう。
Power_Analysis_1_160228.png

multi_apuint.cpp を示す。

// multi_apuint.cpp

#include <ap_int.h>

void multi_apuint(ap_uint<8> multi_in0, ap_uint<8> multi_in1,
        ap_uint<16> *multi_out){
#pragma HLS INTERFACE ap_ctrl_none port=return
#pragma HLS INTERFACE ap_none port=multi_out
#pragma HLS INTERFACE ap_none port=multi_in1
#pragma HLS INTERFACE ap_none port=multi_in0
    *multi_out = multi_in0 * multi_in1;
}


HDLへ合成した時の multi_apuint.v を示す。

// ==============================================================
// RTL generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC
// Version: 2015.4
// Copyright (C) 2015 Xilinx Inc. All rights reserved.
// 
// ===========================================================

`timescale 1 ns / 1 ps 

(* CORE_GENERATION_INFO="multi_apuint,hls_ip_2015_4,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=1,HLS_INPUT_PART=xc7z010clg400-1,HLS_INPUT_CLOCK=10.000000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=6.380000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=1,HLS_SYN_FF=0,HLS_SYN_LUT=0}" *)

module multi_apuint (
        multi_in0_V,
        multi_in1_V,
        multi_out_V
);

parameter    ap_true = 1'b1;
parameter    ap_const_logic_1 = 1'b1;
parameter    ap_const_logic_0 = 1'b0;

input  [7:0] multi_in0_V;
input  [7:0] multi_in1_V;
output  [15:0] multi_out_V;

wire   [7:0] r_V_fu_53_p0;
wire   [7:0] r_V_fu_53_p1;
wire   [15:0] r_V_fu_53_p00;
wire   [15:0] r_V_fu_53_p10;


assign multi_out_V = (r_V_fu_53_p0 * r_V_fu_53_p1);

assign r_V_fu_53_p0 = r_V_fu_53_p00;

assign r_V_fu_53_p00 = multi_in1_V;

assign r_V_fu_53_p1 = r_V_fu_53_p10;

assign r_V_fu_53_p10 = multi_in0_V;

endmodule //multi_apuint


これを掛け算IPとして追加した Vivado 2015.4 の multi_ex1 プロジェクトを示す。
Power_Analysis_2_160228.png

インプリメントした時のProject Summary を示す。
Power_Analysis_3_160228.png

Power が 6.616W になっていてむちゃくちゃな値になっている。

Implementation -> Open Implemented Design -> Report Power をクリックして消費電力解析を行った。
Power_Analysis_4_160228.png

その結果、Dout の消費電力が凄いことになっている。また、Signal Rate が大変高くなっている。人間が手で入力するので、限りなく静的だと思うのだが。。。([Signal Rate] (信号レート)参照

参考URL
AR# 62437 2014.3 Vivado 消費電力 - 「set_switching_activity -signal_rate」はグリッチ消費電力解析に影響するか
Vivado Design Suite ユーザー ガイド 消費電力解析および最適化 UG907 (v2015.3) 2015 年 9 月 30 日


それを解消するために制約ファイル(XDC)に制約を追加することにした。
制約は、set_switching_activity で、これについての情報は、”Vivado Design Suite Tcl コマンド リファレンス ガイド UG835 (v2015.4) 2015 年 11 月 18 日”の第3章 : Tcl コマンド リスト (アルファベット順 )、1,320ページの”set_switching_activity”に詳しく書いてある。
検討して以下の制約を追加することにした。

set_switching_activity -signal_rate 1 -static_probability .99 [get_ports]


すべてのポートの signal_rate を 1 に、スタティック確率値を 0.99 にした。
これで、もう一度インプリメントしてみると、消費電力解析は正常と思える値になった。
Power_Analysis_5_160228.png

もう一度、Implementation -> Open Implemented Design -> Report Power をクリックして消費電力解析を行った。
Power_Analysis_6_160228.png

問題が無くなった。
最初からこういう結果を出してくれれば問題なかったと思うのだが。。。クロックが無いと -signal_rate のデフォルト値は 0.0 と書いてあるのだが、このデフォルト値が効かなくなって、最大値になるような感じだね?なぜだろうか?バグなのかな?
  1. 2016年02月28日 07:24 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:2

Digilent社のボード・ファイルのインストール

ZYBO のPS (Processing System) の定義ファイル ZYBO_zynq_def.xml が、いつの間にかDigilent 社からダウンロードすることができなくなってしまった。これでは、新しくZYBO をやる方が困るので、やり方を探ってみることにした。

調べてみると、ボード・ファイル (Board Files) というファイルをDigilent 社からダウンロードすることができて、Vivado の所定のフォルダに入れておけば、プロジェクトを作製するときのBoard の選択肢として表示することができるようになるようだ。

やり方は、”Vivado Version 2015.1 and Later Board File Installation”に詳しく載っているが、自分でもやってみよう。

Vivado 2015.4 では、Xilinx\Vivado\2015.4\data\boards\board_files にボード定義ファイルがあるようだ。
Digilent_Boards_Files_1_160111.png

Digilent 社のボード用の定義ファイルは、https://github.com/Digilent/vivado-boards/archive/master.zip にあるのでダウンロードした。
Digilent_Boards_Files_2_160111.png

その中身はと見ると、Arty, BASYS3, GENESYS2, NEXYS_VIDEO, NEXYS4, NEXYS4_DDR, ZYBO のボード・ファイルが入ってた。
Digilent_Boards_Files_3_160111.png

Xilinx\Vivado\2015.4\data\boards\board_files にDigilent 社のボード用の定義ファイルをコピーした。
Digilent_Boards_Files_4_160111.png

コピー後にVivado を立ち上げて、新規プロジェクトを作製すると、コピーしたボードを選択することができた。
ZYBO を選択した。
Digilent_Boards_Files_5_160111.png

プロジェクトが作製されると、Board がZYBO に設定されている。
Digilent_Boards_Files_6_160111.png

問題は、ブロックデザインを作製した時、Processing_system_7 をAdd IP した時にZYBO 用の設定がされているか?だ。それを確かめてみる。

ブロックデザインを作製し、Processing_system_7 をAdd IP した。ダブルクリックして、設定を確認した所、設定がされていない。
Digilent_Boards_Files_7_160111.png

Run Block Automation をクリックする。
Digilent_Boards_Files_8_160111.png

Run Block Automation ダイアログで、FIXED_IO と DDR の配線を接続する。
Digilent_Boards_Files_9_160111.png

そうすると、PS のI/O Peripherals にチェックが付いて、ZYBO の設定が行われた。
Digilent_Boards_Files_10_160111.png

これで問題なく、PS にZYBO 用の設定を行うことができた。
  1. 2016年01月12日 03:58 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado のSDKのハードウェア・プラットフォームによる動作不良

SDK (Software Development Kit) を使用したVivado のプロセッサ・ベースのFPGA回路で、いろいろと検証して動かないはず無いんだけど、動かない時があります。分かってはいたのですが、相当、悩んでしまったので、その時の対処を書いておきます。

Vivado のIPI (IP Integrator) で回路を大幅に変更した時に、論理合成、インプリメント、ビットストリームの生成を行って、ハードウェアをエクスポートし、SDKを起動した時にハードウェア・プラットフォームが新しく出来てしまう場合があります。
下の図で言うと、ZYBO_0_wapper_hw_platform_0 と ZYBO_0_wapper_hw_platform_1 の2つのハードウェア・プラットフォームがあります。
SDK_hw_platform_1_160105.png

これは、最初に作られたのは ZYBO_0_wapper_hw_platform_0 だったんですが、途中でハードウェアを変更した後で、ZYBO_0_wapper_hw_platform_1 が新たに作製されました。

そこで問題になるのは、古いZYBO_0_wapper_hw_platform_0 で作製したApplication Project です。
Application Project は作成する時にHardware Platform を指定して作製します。つまりハードウェア・プラットフォームを元に生成されます。(たぶん。。。)
SDK_hw_platform_2_160105.png

よって、古いハードウェア・プラットフォームで生成されたApplication Project は新しいハードウェア・プラットフォームには対応できない場合があります。たぶん、IPのアドレス・マップが変更された場合は正常に動作することができません。
間違いを無くすためにも、新しいハードウェア・プラットフォームができていたら、既存のApplication Project と古いハードウェア・プラットフォームをすべて消去しておくのが安全だと思います。古いApplication Project のソフトウェアを動かすことがある場合は気をつけて、そのままにしておかなくては、ならないでしょうけれども。。。

Application Project の消去の仕方ですが、まずはApplication Project (BSPごと)消去する前に、ソースコードも消去してしまうので、必ず C や C++ のソースコードを ???.sdk フォルダにコピーしておきましょう。
ここでは、ZYBO_0_152.sdk -> cam_disp -> src フォルダにある cam_disp_axis.c ソースコードを ZYBO_0_152.sdk フォルダにコピー&ペーストしておきます。
SDK_hw_platform_5_160105.png

SDK_hw_platform_6_160105.png

cam_disp フォルダとcam_disp_bsp フォルダを消去します。
消去するフォルダを選択して右クリックし、右クリックメニューからDelete を選択します。
SDK_hw_platform_3_160105.png

Delete Resoures ダイアログが表示されます。
Delete project contents on disk (cannot be undone) のチェックボックスにチェックを入れて、OKボタンをクリックします。
SDK_hw_platform_4_160105.png

すると、cam_disp フォルダとcam_disp_bsp フォルダが完全に消去されます。
後は、Application Project を生成する手順で、新しい方のハードウェア・プラットフォームを指定して、再度生成します。

古いハードウェア・プラットフォームも消去しておきましょう。ハードウェア・プラットフォームはどれかのファイルを保存しておく必要はありません。
  1. 2016年01月05日 05:00 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado のIP Integrator のちょっとしたTips

・VivadoのIP Integrator のブロックデザインのMark Debugを一挙に外す方法
Mark Debug でVivado Analyzerで見た後で、1本1本ちまちまとUnmark Debug 設定していますか?私もそうしていたんですが、ぱっと思いついてやってみたらうまく行きました。

その方法は、というと、Ctrl + A ですべて選択した後で、Unmark Debug を選択するとすべて消えました。


・VivadoのIP Integrator のブロックデザインでクロック配線などの多数に供給される配線の1本だけを削除する方法
今まで、IPのピンへの配線を繋ぎ変えようとして配線を消去すると、その配線ネットが全て消えちゃってました。これはクロック配線を繋ぎ変えようとした時に、他への配線が全て消えてしまって、とっても痛いです。そこで、そのIPの配線だけを削除する方法です。

IPのピンを選択して、右クリックし、右クリックメニューからDisconnect Pin を選択すると、そのIPの配線だけを消すことができます。
IPI_disconnect_pin_151226.png
  1. 2015年12月26日 07:25 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

Vivado HL WebPACK 2015.4 で Vivado Analyzer や Vivado Serial IO Analyzer が使えるようになりました

無料で使用できるVivado HL WebPACK 2015.4 で Vivado Analyzer や Vivado Serial IO Analyzer が使えるようになっているようです。

今までのVivado WebPACK では、Vivado Analyzer や Vivado Serial IO Analyzer は使えなかったのですが、Vivado HLS と共に、 Vivado Analyzer や Vivado Serial IO Analyzer が使えるようになったようです。Vivado HL WebPACK 2015.4 は使用できるデバイスは限られますが、使えるデバイスでは、System Generator for DSP 以外の機能を使えるようになったようです。

今まで初心者の方に、Xilinx と Altera のどちらのFPGA を使ったほうが良いですか?と聞かれると無料でFPGA 内蔵のロジック・アナライザが使えないので、Altera にしたら?と答えていました。今度からは、Vivado HLS という C, C++ からHDL に合成できるVivado HLS も無料で使えるので、Xilinx にしたほうが良いと答えようと思います。

趣味で使う方や、仕事に使うので家で勉強したいという方に無料のVivado HL WebPACK 2015.4 をお勧めします。

初めてFPGA を触る方にどのFPGA ボードをお勧めするか?なんですが、Digilent 社のArty 、BASYS3、ZYBO が秋月電子で購入できるので、この辺りはいかがでしょうか?

少し高価ですが、650MHz のデュアルARM CortexA9 が載っているZYBO はLinux も十分に動作して、UbuntuもOpenCV も動きますし、とても良いです。Vivado HLS でソフトをハードにオフロードすることも慣れればできるでしょう。ですが、ソフトとハードを協調して動作させようとするとAXIバスの知識が必要などのハードルもあります。初心者で、初めて動作させようとすると、どうして良いか分からないということになることもあるでしょう?
今だったら、Digilent 社のサイトからは、$132 で購入できます。但し、Shipping に費用がかかります。どの位かかるのか?はよく分かりません。

FPGA初めて見たいとか自分ですべてオリジナルでCPU作りたいとか、安いほうが良い、ハード単体で使いたいということだとArty かな?と思います。それにLAN ポートが付いています。

BASYS3 は、Arty 同様ですが、LAN ポートが無く、VGA と7セグメントLED が付いています。スイッチもたくさんあって、教育用途に向いているのかな?と思います。

Digilent Documentation にそれらのボードのマニュアルやリファレンス・プロジェクトなどがありますので、参考にされると良いと思います。
  1. 2015年12月22日 05:14 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0
»