FC2カウンター FPGAの部屋

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

FPGAの部屋

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

カーブ、直線用白線間走行用畳み込みニューラルネットワーク1(データ)

白線追従走行用畳み込みニューラルネットワーク・システムの製作7(白線間を走行)”で、ミニ・ロボットカーが直線の白線を走行することができた。

次はカーブを曲がれるようにしたい。そこで、曲がってい角度が 23 度のカーブと 48 度のカーブを用意して、曲がれるかどうかを試してみた。(注:カーブを曲がる学習はまだしていません。直線を走る学習のみです)
23 度のカーブは曲がれる時もあるようだ。


カーブの種類によって、カーブの位置のよるミニ・ロボットカーのカメラから見た画像とその位置を示しておくことにする。

48 度のカーブ
ミニ・ロボットカーの位置、ミニ・ロボットカーから見た画像
curve_tracing_cnn_0_171122.jpgbmp_file0_171122.jpg

curve_tracing_cnn_1_171122.jpgbmp_file1_171122.jpg

curve_tracing_cnn_2_171122.jpgbmp_file2_171122.jpg

curve_tracing_cnn_3_171122.jpgbmp_file3_171122.jpg

curve_tracing_cnn_4_171122.jpgbmp_file4_171122.jpg

curve_tracing_cnn_5_171122.jpgbmp_file5_171122.jpg

curve_tracing_cnn_6_171122.jpgbmp_file6_171122.jpg

curve_tracing_cnn_7_171122.jpgbmp_file7_171122.jpg


23 度のカーブ
ミニ・ロボットカーの位置、ミニ・ロボットカーから見た画像
curve_tracing_cnn_8_171122.jpgbmp_file8_171122.jpg

curve_tracing_cnn_9_171122.jpgbmp_file9_171122.jpg

curve_tracing_cnn_10_171122.jpgbmp_file10_171122.jpg

curve_tracing_cnn_11_171122.jpgbmp_file11_171122.jpg

curve_tracing_cnn_12_171122.jpgbmp_file12_171122.jpg

curve_tracing_cnn_13_171122.jpgbmp_file13_171122.jpg

curve_tracing_cnn_14_171122.jpgbmp_file14_171122.jpg

curve_tracing_cnn_15_171122.jpgbmp_file15_171122.jpg

  1. 2017年11月22日 05:36 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

intel HLS コンパイラを試してみる11(mm_slave その1)

intel HLS コンパイラを試してみる10(examples\tutorials\interfaces\mm_master_testbench_operators その2)”の続き。

前回は、examples\tutorials\interfaces\mm_master_testbench_operators をやってみたが、今回は、mm_slave をやってみることにする。
mm_slave にはpart_1_basic_component.cpp、part_2_slave_component.cpp、part_3_slave_register_arguments.cpp、part_4_slave_mem_args.cpp の4つのC++ ソースファイルがある。
READMEに説明が書いてある。README の説明に従ってやってみることにする。

part_1_basic_component.cpp はintel HLS の通常の Start , busy, done などがある intel HLS のデフォルトのインターフェースになる気がする。
component void swp_int_end() の動作としては、32ビット幅のデータの8ビットごとの入れ替えで、エンディアンを変換する関数のようだ。

component void swp_int_end (int* x,
                            int N ) {


Intel_HLS_94_171121.png

part_2_slave_component.cpp は、 Avalon-MMスレーブインタフェースとして実装されるようだ。(hls_avalon_slave_component)

hls_avalon_slave_component
component void swp_int_end (int* x, 
                            int N ) {


Intel_HLS_95_171121.png

part_3_slave_register_arguments.cpp は、コンポーネントの引数をコンポーネントのAvalon-MMスレーブインタフェースのメモリマップに追加しているそうだ。コンポーネントの引数のそれぞれがスレーブレジスタとして指定されているということだ。(hls_avalon_slave_register_argument)

hls_avalon_slave_component
component void swp_int_end (hls_avalon_slave_register_argument int* x,
                            hls_avalon_slave_register_argument int N ) {


Intel_HLS_96_171121.png

part_4_slave_mem_args.cpp は、ポインタ(Avalon MM-Master)インタフェースを、M20Kを使用した整数配列を格納するスレーブ・メモリに置き換えるそうだ。x のみ hls_avalon_slave_memory_argument() が使用されている。x はAvalon-MM マスタ・インターフェースになるのかもしれない?

hls_avalon_slave_component
component void swp_int_end (hls_avalon_slave_memory_argument(BUFFER_SIZE*sizeof(int)) int* x,
                            hls_avalon_slave_register_argument int N) {


Intel_HLS_97_171121.png

build.bat を示す。14行目をArria10 からCyclone Vに変更した。
Intel_HLS_98_171121.png

build.bat を起動した。
Intel_HLS_99_171121.png

part_1_basic_component.cpp、part_2_slave_component.cpp、part_3_slave_register_arguments.cpp、part_4_slave_mem_args.cpp の4つともPASSED になった。

F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_slaves フォルダの内容を示す。
Intel_HLS_100_171121.png

F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_slaves\part_1_basic_component.prj\components\swp_int_end フォルダのswp_int_end_inst.v の内容の一部を示す。

swp_int_end swp_int_end_inst (
  // Interface: clock (clock end)
  .clock               ( ), // 1-bit clk input
  // Interface: reset (reset end)
  .resetn              ( ), // 1-bit reset_n input
  // Interface: call (conduit sink)
  .start               ( ), // 1-bit valid input
  .busy                ( ), // 1-bit stall output
  // Interface: return (conduit source)
  .done                ( ), // 1-bit valid output
  .stall               ( ), // 1-bit stall input
  // Interface: x (conduit sink)
  .x                   ( ), // 64-bit data input
  // Interface: N (conduit sink)
  .N                   ( ), // 32-bit data input
  // Interface: avmm_0_rw (avalon start)
  .avmm_0_rw_address   ( ), // 64-bit address output
  .avmm_0_rw_byteenable( ), // 8-bit byteenable output
  .avmm_0_rw_read      ( ), // 1-bit read output
  .avmm_0_rw_readdata  ( ), // 64-bit readdata input
  .avmm_0_rw_write     ( ), // 1-bit write output
  .avmm_0_rw_writedata ( )  // 64-bit writedata output
);


Start などのブロックレベルの信号とメモリ・インターフェースがある。

F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_slaves\part_2_slave_component.prj\components\swp_int_end フォルダのswp_int_end_inst.v の内容の一部を示す。

swp_int_end swp_int_end_inst (
  // Interface: clock (clock end)
  .clock               ( ), // 1-bit clk input
  // Interface: reset (reset end)
  .resetn              ( ), // 1-bit reset_n input
  // Interface: irq (interrupt end)
  .done_irq            ( ), // 1-bit irq output
  // Interface: x (conduit sink)
  .x                   ( ), // 64-bit data input
  // Interface: N (conduit sink)
  .N                   ( ), // 32-bit data input
  // Interface: avmm_0_rw (avalon start)
  .avmm_0_rw_address   ( ), // 64-bit address output
  .avmm_0_rw_byteenable( ), // 8-bit byteenable output
  .avmm_0_rw_read      ( ), // 1-bit read output
  .avmm_0_rw_readdata  ( ), // 64-bit readdata input
  .avmm_0_rw_write     ( ), // 1-bit write output
  .avmm_0_rw_writedata ( ), // 64-bit writedata output
  // Interface: avs_cra (avalon end)
  .avs_cra_read        ( ), // 1-bit read input
  .avs_cra_write       ( ), // 1-bit write input
  .avs_cra_address     ( ), // 2-bit address input
  .avs_cra_writedata   ( ), // 64-bit writedata input
  .avs_cra_byteenable  ( ), // 8-bit byteenable input
  .avs_cra_readdata    ( )  // 64-bit readdata output
);


start, busy, done, stall などの信号が消えて、avs_cra_.... のAvalon Slave の信号が増えた。

F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_slaves\part_3_slave_register_arguments.prj\components\swp_int_end フォルダのswp_int_end_inst.v の内容の一部を示す。

swp_int_end swp_int_end_inst (
  // Interface: clock (clock end)
  .clock               ( ), // 1-bit clk input
  // Interface: reset (reset end)
  .resetn              ( ), // 1-bit reset_n input
  // Interface: irq (interrupt end)
  .done_irq            ( ), // 1-bit irq output
  // Interface: avmm_0_rw (avalon start)
  .avmm_0_rw_address   ( ), // 64-bit address output
  .avmm_0_rw_byteenable( ), // 8-bit byteenable output
  .avmm_0_rw_read      ( ), // 1-bit read output
  .avmm_0_rw_readdata  ( ), // 64-bit readdata input
  .avmm_0_rw_write     ( ), // 1-bit write output
  .avmm_0_rw_writedata ( ), // 64-bit writedata output
  // Interface: avs_cra (avalon end)
  .avs_cra_read        ( ), // 1-bit read input
  .avs_cra_write       ( ), // 1-bit write input
  .avs_cra_address     ( ), // 3-bit address input
  .avs_cra_writedata   ( ), // 64-bit writedata input
  .avs_cra_byteenable  ( ), // 8-bit byteenable input
  .avs_cra_readdata    ( )  // 64-bit readdata output
);


part_2_slave_component.prj とひかくすると、x と N が消えて、.avs_cra_address が 2 bit から 3 bit になった。つまり、x と N もレジスタにマップされたようだ。

F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_slaves\part_4_slave_mem_args.prj\components\swp_int_end フォルダのswp_int_end_inst.v の内容の一部を示す。

swp_int_end swp_int_end_inst (
  // Interface: clock (clock end)
  .clock             ( ), // 1-bit clk input
  // Interface: reset (reset end)
  .resetn            ( ), // 1-bit reset_n input
  // Interface: irq (interrupt end)
  .done_irq          ( ), // 1-bit irq output
  // Interface: avs_cra (avalon end)
  .avs_cra_read      ( ), // 1-bit read input
  .avs_cra_write     ( ), // 1-bit write input
  .avs_cra_address   ( ), // 3-bit address input
  .avs_cra_writedata ( ), // 64-bit writedata input
  .avs_cra_byteenable( ), // 8-bit byteenable input
  .avs_cra_readdata  ( ), // 64-bit readdata output
  // Interface: avs_x (avalon end)
  .avs_x_read        ( ), // 1-bit read input
  .avs_x_write       ( ), // 1-bit write input
  .avs_x_address     ( ), // 12-bit address input
  .avs_x_writedata   ( ), // 32-bit writedata input
  .avs_x_byteenable  ( ), // 4-bit byteenable input
  .avs_x_readdata    ( )  // 32-bit readdata output
);


part_3_slave_register_arguments.prj と比較すると、avmm_0_rw_.... のAvalon MM-Master インターフェースが avs_x_..... のAvalon-MM slave インターフェースに置き換えられている。
  1. 2017年11月21日 05:25 |
  2. intel HLS
  3. | トラックバック:0
  4. | コメント:0

FPGAの部屋のまとめサイトの更新(2017年11月20日)

FPGAの部屋のまとめサイトを更新しました。
reVISION,xfOpenCVintel HLSUltraZed EGZYBO Z7 を追加して、その他のカテゴリーの記事を更新しました。
  1. 2017年11月20日 05:23 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

intel HLS コンパイラを試してみる10(examples\tutorials\interfaces\mm_master_testbench_operators その2)

intel HLS コンパイラを試してみる9(examples\tutorials\interfaces\mm_master_testbench_operators)”の続き。

前回は、Avalon MM インターフェースのチュートリアルをやってみて、ModelSim で波形を観測した。今回は、レポートとQuartus Prime を動かしてコンパイルしてみた。

まずは、レポートを貼っておく。

Summary
Intel_HLS_85_171119.png

Loops analysis
Intel_HLS_86_171119.png

Area analysis of system
Intel_HLS_87_171119.png

Area analysis of source
Intel_HLS_88_171119.png

Component Viewer
Intel_HLS_89_171119.png

Component memory viewer
Intel_HLS_90_171119.png

Verification statistics Latency は min = 24, max = 89, avg = 68 だった。
Intel_HLS_91_171119.png

Quartus Prime 17.1 を立ち上げた。
F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_master_testbench_operators\operators.prj\quartus の quartus_compile.qpf を読み込んだ。
コンパイルを実行した。
Intel_HLS_92_171119.png

Entity の quartus_compile の下の、add_x をダブルクリックして開くと、IP のシンボルを見ることができた。
Intel_HLS_93_171119.png
  1. 2017年11月19日 04:51 |
  2. intel HLS
  3. | トラックバック:0
  4. | コメント:0

intel HLS コンパイラを試してみる9(examples\tutorials\interfaces\mm_master_testbench_operators)

今回は、F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_master_testbench_operators を試してみることにした。まだ、Avalon MM インターフェースはやっていないので、やってみることにした。

Avalon MM インターフェースについては、”Avalon® Interface Specifications MNL-AVABUSREF 2017.05.08”を参照のこと。

build.bat を書き換えた。

set "DEVICE=Arria10"

から

set "DEVICE=CycloneV"

に書き換えた。
次に、i++ のオプション -ghdl を追加した。こうするとシミュレーション結果の波形 vsim.wlf が出力される。
Intel_HLS_78_171118.png

ハードウェア化するソースコードは、F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_master_testbench_operators\operators.cpp から引用する。

component void add_x(mm_src_t &src, mm_dst_t &dst, unsigned int x) {
*dst = *src + x;
}


src と dst はAvalon MM インターフェースになっていて、x は最初は 0x10 が入っている。

build default コマンドを実行した。
Intel_HLS_79_171118.png

operators.prj フォルダができた。
Intel_HLS_84_171118.png

その中はお馴染みのcomponents、quartus、reports、verification フォルダができていた。

F:\intelFPGA_lite\17.1\hls\examples\tutorials\interfaces\mm_master_testbench_operators\operators.prj\verification フォルダのvsim.wlf ファイルをModelSim で開いた。
Intel_HLS_80_171118.png

Avalon MM インターフェースのRead は rw_address で指定したアドレスが rw_read が 1 の時に有効になるようだ。それが上の図のピンクの四角で囲った領域だ。
Intel_HLS_81_171118.png

Read データが来るのは、その後で、 rw_readdatavalid が 1 になったときのようだ。 1 になったときにrw_readdata にデータが出力されている。
Intel_HLS_82_171118.png

Avalon MM インターフェースのWrite は rw_address にアドレスを出力して、rw_write を 1 にすると同時に、rw_writedata にデータを与えれば良いようだ。
Intel_HLS_83_171118.png

Read データと Write を見比べてみると、Read データに0x10 を加算した値が Write データになっているのが分かる。
  1. 2017年11月18日 05:48 |
  2. intel HLS
  3. | トラックバック:0
  4. | コメント:0

UltraZed-EG Starter Kit のチュートリアル3

UltraZed-EG Starter Kit のチュートリアル2”の続き。

前回はSDKでアプリケーションソフトを作成してHello World をUltraZed-EG Starter Kit で動作させた。今回は、チュートリアルの続きやってみよう。

PS User LED を点滅させるのをやってみた。
PS User LED は、UltraZed™ I/O Carrier Card Version 1.0 の 7 ページによるとUltraZed-EG Starter Kit のPS のMIO[31] に接続されている。つまり、PS 側なので、ソフトウェアだけで動作するということになる。

まずは、SDKでFile メニューからNew -> Application Project を選択した。

New Project ダイアログが開いた。Project Name にPS_User_LED を入力し、Board Support Package は、Use existing のラジオボタンをクリックして、standalone_bsp_0 を選択した。(といっても1つしかBSPを作っていないので、一択だった)
UltraZed-EG_StKit_tut_47_171114.png

Next -> ボタンをクリックして、Empty Application を選択し、Finish ボタンをクリックした。
UltraZed-EG_StKit_tut_48_171114.png

PS_User_LED プロジェクトが生成された。

UltraZed_EG_SK_Tutorial_2016_4_v1.zip\ultrazed_eg_starter_kit フォルダにPS_User_LED を点滅させるソフトウェアの ps_user_led.c がある。
UltraZed-EG_StKit_tut_49_171114.png

SDK の PS_User_LED プロジェクトの src フォルダ内にドラック&ドロップした。
すると、File Operation ダイアログが開く。デフォルトで Copy files のラジオボタンがチェックされているので、そのままOKボタンをクリックした。
UltraZed-EG_StKit_tut_50_171114.png

ps_user_led.c がコンパイルされて、PS_User_LED.elf が生成された。
UltraZed-EG_StKit_tut_51_171114.png

SDK のPS_User_LED プロジェクトを右クリックし、右クリックメニューからRun As -> Launch on Hardware (System Debugger) を選択して、PS_User_LED.elf を実行した。

UltraZed-EG Starter Kit のPS_User_LEDが点滅した。赤く光っているLED がPS_User_LED だ。
UltraZed-EG_StKit_tut_62_171114.jpg

ギガビット・インサーポートのテスト

ギガビット・インサーポートのテストを行った。
SDK のFile メニューからNew -> Application Project を選択して、表示されたNew Project ダイアログで、Project Name にEth_Test を、Board Support Package のCreate New ラジオボタンをクリックして、Eth_Test _bsp を入力した。
Next -> ボタンをクリックした。
UltraZed-EG_StKit_tut_52_171114.png

Templates のAvailable Templates で、IwIP Echo Server をクリックし、Finish ボタンをクリックした。
UltraZed-EG_StKit_tut_53_171114.png

Eth_Test と Eth_Test_bsp プロジェクトが生成された。
UltraZed-EG_StKit_tut_54_171114.png

SDK のEth_Test プロジェクトを右クリックし、右クリックメニューからRun As -> Launch on Hardware (System Debugger) を選択して、Eth_Test.elf を実行した。
stdout に IwIP TCP echo sever の表示が出た。
UltraZed-EG_StKit_tut_55_171114.png

SDK のFile メニューからNew -> Application Project を選択して、表示されたNew Project ダイアログで、Project Name にPeriph_Test を、Board Support Package のUse existing ラジオボタンをクリックして、standalone_bsp_0 を選択した。
Next -> ボタンをクリックした。
UltraZed-EG_StKit_tut_56_171114.png

Templates のAvailable Templates で、Peripheral_Tests をクリックし、Finish ボタンをクリックした。
UltraZed-EG_StKit_tut_57_171114.png

Pheriph_Test プロジェクトが生成された。
UltraZed-EG_StKit_tut_58_171114.png

まずはFPGA をコンフィギュレーションするために、SDKのXilinx メニューからProgram FPGA を選択した。

Program FPGA ダイアログが表示された。Program ボタンをクリックした。
UltraZed-EG_StKit_tut_59_171114.png

SDK のPeriph_Test プロジェクトを右クリックし、右クリックメニューからRun As -> Launch on Hardware (System Debugger) を選択して、Periph_Test.elf を実行した。

stdout に結果が出力された。
UltraZed-EG_StKit_tut_60_171114.png

1つFail になった。
  1. 2017年11月17日 05:32 |
  2. UltraZed-EG
  3. | トラックバック:0
  4. | コメント:0

Windows 10 Fall Creators Update をかけるとVivado 2017.3 が起動しない

今朝、Windows のUpdate があって、Vivado 2017.3 が動かなくなった。
今回のアップデートは、Windows 10 Fall Creators Update がかかってしまい、Vivado 2017.3 が起動しなかった。
これはなひたふさんのツィートで知ったのだが、Windows 10 Fall Creators Update をかけてしまうと、Vivado 2017.3 が起動しないということだ。
解決策はツィートにあるように、”AR# 69908 2017.3 - Windows 10 Fall Creators Update で Vivado が起動しない”を参照のこと。
AR#69908 を引用しておく。

1.(Vivado インストール ディレクトリ)\2017.3\bin\unwrapped\win64.o に移動する。
2.vivado.exe を vivado.exe.backup に名前を変更してバックアップをとる。
3.vivado-vg.exe をコピーして同じフォルダーに貼り付ける。
4.vivado-vg - Copy.exe を vivado.exe に名前を変更する。

  1. 2017年11月16日 14:40 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0
»