Zynq + Synthesijer 入門 わさらぼ 三好 健文

Similar documents
Microsoft PowerPoint _2.プログラミングの基礎_final

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

インテル(R) Visual Fortran コンパイラ 10.0

ModelSim-Altera - RTL シミュレーションの方法

1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は 多くの J2EE 準拠アプリケーションサーバーについて動作検証がなされています 本報告書は

クラウド内の Java - 動画スクリプト 皆さん こんにちは Steve Perry です 私たちが作成した人事アプリケーションを覚えていますか? 今回は そのアプリケーションをクラウド内で実行しましょう コードは GitHub の

sscapt.jar(ver.2) ソースコードの使い方 説明書 MLTLab ( エムエルティ ラボ ) 2014 年 4 月 21 日

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

デジタル回路入門

Microsoft Word - Android_実習環境

プログラミング入門1

2. インストールの方法 インストールの手順は まずインストーラーをサイトからダウンロードし イールドブック カリキュレーターと Java Web Start をインストールします 次にイールドブック カリキュレーターを起動してサーバー接続し Java のファイルをダウンロードします 以下の手順に従

論文誌用MS-Wordテンプレートファイル

始める スタート > 全てのプログラム > Cypress > PSoC Creator 2.0 > PSoC Creator 2.0 をクリックします プロジェクトを作成する / 開く Start Page の "Create New Project" をクリックし 要求されたプロジェクト情報を入

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

Microsoft Word - XOOPS インストールマニュアルv12.doc

JavaプログラミングⅠ

WebOTXマニュアル

Maser - User Operation Manual

目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール

利用者

再起動した状態になり パスワードを入力すると 図 2 のように DEXCS2011 のアイコ ンがデスクトップ上に表示される 2 端末を準備する メニューバーにある端末の形を左クリック 図 2 デスクトップ メニューバーに端末の形がない場合 図 3 メニューバー アプリケーション アクセサリー 端末

GettingStartedTK2

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は 多くの J2EE 準拠アプリケーションサーバーについて動作検証がなされています 本報告書は

Java言語 第1回

Eclipse 操作方法 (Servlet/JSP 入門補助テキスト)

MF mypresto インストールガイド 目次 新規インストールの手順 (Windows 版 )... 2 MF mypresto の起動 (Windows 版 )... 7 新規インストールの手順 (Mac 版 )... 8 MF mypresto の起動 (Mac 版 ) 新規イン

Welcome-Kit ~STM32L4-Nucleo~

はじめに 1. 概要本書では SuitePRO V3 にて提供している迷惑メールフィルタのバージョンアップ手順について案内しています なお この手順につきましては 迷惑メールフィルタ機能について オンラインマニュアルの内容通りに設定されていることを前提条件とします

Raspberry Pi で WEB カメラを使用 会津大学 RT ミドルウェア講習会 2017 The University of Aizu

機能紹介 : Java ゲートウェイとインターシステムズ製品

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Red Hat OpenShift上でのInterstage Application Serverの動作手順(Java EE 6編)

Red Hat OpenShift上でのInterstage Application Serverの動作手順(Java EE 7編)

Agileイベント・フレームワークとOracle BPELを使用したPLMワークフローの拡張

ch2_android_2pri.indd

演習に必要な

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

目次 USBドライバダウンロードの手順...2 USBドライバインストールの手順...3 インストール結果を確認する...19 USBドライバアンインストール / 再インストールの手順...21 USB ドライバダウンロードの手順 1. SHL21 のダウンロードページからダウンロードしてください

TestDesign for Web

修正履歴 NO バージョ 修正内容 修正日 ン 1 Ver1.0 新規作成 2014/04/13 この文書の情報は 文書を改善するため 事前の通知なく変更されることがあります 最新版は弊社ホームページからご参照ください ( 株 ) の書面による許可のない複

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

第5回 マインクラフト・プログラミング入門

改版履歴 本書の改版履歴は以下のとおりです 日付 改版理由 変更箇所 版数 2014/09/04 初版発行 版 2015/03/30 第 1.1 版に改訂 対象 OS 追加 1.1 版 2015/07/10 第 1.2 版に改訂 対象 OS 追加 1.2 版 2015/09/04 第 1

(Microsoft Word - \214\264\215e B_\217\221\202\253\215\236\202\335\225\224.docx)

スライド 1

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

日医特定健康診査システム ORCA PROJECT Linux 対応版インストールマニュアル (Version 対応 ) Ubuntu Trusty 用 版 2017 年 2 月 23 日 Copyright (C) Japan Medical

Microsoft Word - Lab110131b.doc

Java Bridgeを利用した他言語によるデータロード&プロットデモ

PCI-Express ハード IP を使用した DMA の実現 for Cyclone V GT FPGA 開発キット(ソフトウェア編)

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

VPN ユーザを管理し、RV016、RV042、RV042G および RV082 VPN ルータの速い VPN を設定して下さい

ConsoleDA Agent For Serverインストールガイド

発環境を準備しよう2 章開Eclipseをインストールしようそれでは Eclipseをセットアップしましょう Eclipseは Eclipse Foundationのサイトからダウンロードできます ダウンロードのページを開くと いく

Java講座

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

2 / 26 平成 26 年 4 月 11 日 ( 金 ) 午後 1 時 9 分 Visual C Express の使用法 ( 東海大学理学部物理学科 ) 無償で利用できる開発環境 (Windows XP 以降 ) Visual Studio 2010 Express

C#の基本

Report Template

Windows XPでの手動USBドライバインストール方法

Nios II 簡易チュートリアル

Microsoft PowerPoint - 集積回路工学_ ppt[読み取り専用]

Microsoft Word - Mac版 Eclipseの導入と設定.docx

WebOTXマニュアル

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

adviceシリーズスタートアップガイド(Cortex-M3編)

Nios II Flash Programmer ユーザ・ガイド

情報更新日 :2012/5/20 サンプルソースの文字化けについて [ トラブル事例 ] Eclipse に ダウンロードしたソースコードをインポートすると文字化けが起きる ( 関連箇所 : 0-1 はじめに ) [ 回答 ] 本書でその利用を前提としております Tech Fun Eclipse は

実行形式の作成と構成管理 2012 年 7 月 8 日 海谷治彦 1

PowerPoint Presentation

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

Mental ray for Maya インストール手順 1 Mental ray plug-in のインストール 1.1 下記リンクの NVIDIA mental ray の製品ページにて必要事項を記入し 必要なバージョンのチェックボックスを入れてから 今すぐダウンロード をクリックすると 記載し

第1章 ビジュアルプログラミング入門

NEC Express5800 シリーズ COBOL Media V1 セットアップカード SL438730B01-2

7th CodeGear Developer Camp

スマートにプログラミング Android 入門編第 2 版 SDK4/2.3 対応 よくあるご質問 (FAQ) ここでは 読者の皆様から寄せられた質問の中で 比較的多く見受けられたトラブル事例とその解決策を集め掲載致しました お困りの際の解決のヒントとしてご利用下さい なお スマートにプログラミング

SystemDirector Developer's Studio(V3.2) 適用ガイド

Microsoft PowerPoint - Tutorial_2_upd.ppt

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

環境セットアップ

Maple 18 ネットワーク版インストール手順

これらの情報は 外部に登録 / 保存されることはございません 5 インターネット接続の画面が表示されます 次へ > ボタンをクリックしてください 管理者様へ御使用時に設定された内容を本説明文に加筆ください 特に指定不要で利用可能であった場合は チェックボックスを オフ していただきますようご案内くだ

NGSハンズオン講習会

Oracle Business Intelligence Standard Edition One のインストール

Microsoft Word - CombB-Ex

Getting Start mdc (Mail Destination Confirm) Getting Start mdc (Mail Destination Confirm) Rev /11/3 目次 Getting Start mdc (Mail Destination Con

Symantec AntiVirus の設定

OpenVPN接続マニュアル

TortoiseSVN の基礎勉強 〜TortoiseSVN によるバージョン管理を使う〜

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

CR-USB 仕様書 株式会社測商技研 JS カード用データ転送用カードリーダー CR-USB 仕様書 取扱説明書 2012 年 07 月 31 日版 株式会社測商技研 1. 概要 本器は当社製自動観測装置で記録した JS カードデータ

Prog2_9th

appli_HPhi_install

Microsoft PowerPoint - guidance.ppt

Transcription:

Zynq + Synthesijer 入門 わさらぼ 三好 健文 2015.3.16

この資料について この資料はZynqとSynthesijerを組み合わせたシステム設計の とっかかりにしてもらことを目的にしています ターゲットボードは ZedboardおよびZyboです Linuxでの実行を想定しています Windowsではコマンドを多少読み違える必要があります Java8が必要です 例題および流れは 杉本様 作の Zynq + Vivado HLS入門 慶應義塾大学 天野研究室 杉本 成 http://www.slideshare.net/narusugimoto/zynq-vivado-hls にならっています 2

この入門でのゴール DDR3のある領域(src)を別の領域(dst)にコピーする PS AXI-GP (2) ARM (4) PL AXIHP_MEMCPY AXI-HP DDR Ctrl. (1) (3) DDR3 (1) ARM上のソフトウェアである領域にデータを書く (2) PL上のハードウェアの動作をキック (3) ある領域のデータを別の領域にコピー (4) 終わったことをPSに通知 3

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 4

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 5

Synthesijer関連リソースの準備 作業の概要 Synthesijer用のディレクトリ(例 $HOME/synthesijer)を作成 Synthesijer*1のページからjar lib applicationsをダウンロード lib applicationsを展開 jarにsynthesijerという環境変数をセット libの展開ディレクトリにsynthesijer_libをセット applicationsの展開ディレクトリにsyntehsijer_appをセット 作業用ディレクトリ($HOME/synthesijer/work)を作って移動 *1 https://sourceforge.net/projects/synthesijer/files/synthesijer-2.0/ 6

Synthesijer関連リソースの準備 作業の例 % mkdir $HOME/synthesijer % cd $HOME/synthesijer % wget https://sourceforge.net/projects/synthesijer/files/synthesijer-2.0/ synthesijer-20150315.jar % wget https://sourceforge.net/projects/synthesijer/files/synthesijer-2.0/ synthesijer_lib_20150315.zip % wget https://sourceforge.net/projects/synthesijer/files/synthesijer-2.0/ synthesijer-applications_20150315.zip % export SYNTHESIJER=$HOME/synthesijer/synthesijer-20150315.jar % unzip synthesijer_lib_20150315.zip % export SYNTHESIJER_LIB=$HOME/synthesijer/synthesijer_lib_20150315 % unzip synthesijer-applications_20150315.zip % export SYNTHESIJER_APP=$HOME/synthesijer/synthesijer-applications_20150315 % mkdir $HOME/synthesijer/work % cd $HOME/synthesijer/work 7

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 8

PL上のハードウェアの設計 作業の概要 Javaコードを記述 SynthesijerでJavaコードをコンパイル IPパッケージの作成(必要なソースをディレクトリにコピー) $SYNTHESIJER_APP/hdl/vhdl/axi_lite_slave_32.vhd $SYNTHESIJER_LIB/vhdl/dualportram.vhd $SYNTHESIJER_APP/hdl/vhdl/simple_axi_memiface_32.vhd synthesijer_lib_axi_simpleaximemiface32rtltest.vhd AXIHP_MEMCPY.vhd 9

Javaのコードを記述 AXHP_MEMCPY.java を書く import synthesijer.lib.axi.*; import synthesijer.rt.*; class AXIHP_MEMCPY{ private final AXILiteSlave32RTL s0 = new AXILiteSlave32RTL(); private final SimpleAXIMemIface32RTLTest m0 = new SimpleAXIMemIface32RTLTest(); private void run(){ int src_addr = s0.data[1]; int dest_addr = s0.data[2]; for(int i = 0; i < 256; i++){ int d = m0.read_data(src_addr + (i<<2)); m0.write_data(dest_addr + (i<<2), d); } } } @auto public void main(){ s0.data[0] = 0x00000000; while(s0.data[0] == 0x00000000) ; // wait for kick from PS run(); s0.data[0] = 0x00000000; // to notify DONE to PS } 10

SynthesijerでJavaコードをコンパイル AXIHP_MEMCPYをSynthsijerでコンパイル % java -cp $SYNTHESIJER:$SYNTHESIJER_APP/bin:. synthesijer.main \ --ip-exact=axihp_memcpy \ AXIHP_MEMCPY.java \ $SYNTHESIJER_APP/src/synthesijer/lib/axi/AXILiteSlave32RTL.java \ $SYNTHESIJER_APP/src/synthesijer/lib/axi/SimpleAXIMemIface32RTL.java \ $SYNTHESIJER_APP/src/synthesijer/lib/axi/SimpleAXIMemIface32RTLTest.java SchdulerBoard init: AXIHP_MEMCPY SchdulerBoard init: synthesijer.lib.axi.simpleaximemiface32rtltest Compile: AXIHP_MEMCPY コンパイル Info: enters into >>> メッセージ Output VHDL: AXIHP_MEMCPY.vhd Output VHDL: synthesijer_lib_axi_simpleaximemiface32rtltest.vhd % ls AXIHP_MEMCPY.vhd 作成されたHDLコードを確認 AXIHP_MEMCPY.vhd % ls AXIHP_MEMCPY_v1_0/ component.xml src xgui IPパッケージ用のテンプレートディレクトリ 11

IPパッケージの作成 必要なソースコードをIPパッケージ用ディレクトリにコピー % grep src AXIHP_MEMCPY_v1_0/component.xml <spirit:name>src/axi_lite_slave_32.vhd</spirit:name> <spirit:name>src/dualportram.vhd</spirit:name> <spirit:name>src/synthesijer_lib_axi_simpleaximemiface32rtltest.vhd</sp...必要な ファイル <spirit:name>src/simple_axi_memiface_32.vhd</spirit:name> <spirit:name>src/axihp_memcpy.vhd</spirit:name> <spirit:name>src/axi_lite_slave_32.vhd</spirit:name> <spirit:name>src/dualportram.vhd</spirit:name> <spirit:name>src/synthesijer_lib_axi_simpleaximemiface32rtltest.vhd</sp... <spirit:name>src/simple_axi_memiface_32.vhd</spirit:name> <spirit:name>src/axihp_memcpy.vhd</spirit:name> % % cp $SYNTHESIJER_APP/hdl/vhdl/axi_lite_slave_32.vhd AXIHP_MEMCPY_v1_0/src % cp $SYNTHESIJER_LIB/vhdl/dualportram.vhd AXIHP_MEMCPY_v1_0/src % cp synthesijer_lib_axi_simpleaximemiface32rtltest.vhd AXIHP_MEMCPY_v1_0/src % cp $SYNTHESIJER_APP/hdl/vhdl/simple_axi_memiface_32.vhd AXIHP_MEMCPY_v1_0/src % cp AXIHP_MEMCPY.vhd AXIHP_MEMCPY_v1_0/src/ % ls AXIHP_MEMCPY_v1_0/src AXIHP_MEMCPY.vhd 必要な dualportram.vhd synthesijer_lib_axi_simpleaximemiface32rtltest.vhd ファイルが axi_lite_slave_32.vhd コピーできた simple_axi_memiface_32.vhd 12

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 13

Vivadoでの合成 作業の概要 Vivadoのプロジェクト作成 Processing System (PS) の追加とパラメタ設定 AXIHP_MEMCPYモジュールの追加 HDLラッパーの生成と修正 合成 14

プロジェクト作成 PSの追加 設定 基本的には Zynq + Vivado HLS入門 慶應義塾大学 天野研究室 杉本 成 http://www.slideshare.net/narusugimoto/zynq-vivado-hls の p.58(vivado Projectの作成 1/9 ) p.83(vivado PS入出力ポート生成3/3 )を参照 ただし 次のような手順で設定 プロジェクトは$HOME/synthesijer/workの下にproject_1として作成 Zedboardの場合: Zyboの場合: プリセットを最初に読んでUART1以外を削除 ZYBO_zynq_def.xmlをimortしてUART1以外を削除 HP0の幅を32bitに変更(PSの設定5/7 割り込みはなし(PSの設定6/7 相当) 相当はスキップ) 15

AXIHP_MEMCPYモジュールの追加 作業の概要 IPコア参照リポジトリの追加 コアのインスタンシエーション ポートの処理 AXIポートの接続(自動接続に任せる) AXIHP_MEMCPYの雑多なポートの処理 axi_inter_memconのaclk/aresetnの処理 pheripheral_aresetnを外部に引き出す 16

AXIHP_MEMCPYモジュールの追加(1) IPコア参照リポジトリの追加 (2) Add Repository...をクリック (4) AXIHPMEM_CPY_v1_0が 見えたらOK [OK]で終了 (1) 設定ダイアログを開く (3) 作成したAXIHPMEM_CPY_v1_0 を選択 追加できた!! 17

AXIHP_MEMCPYモジュールの追加(2) コアのインスタンシエーション (2) AXIHP_MEMCPYを選ぶ(Search:を使うと楽に選択できる) (3) AXIHP_MEMCPYのインスタンスを 追加できた (1) コアの追加ダイアログをクリック 18

AXIHP_MEMCPYモジュールの追加(3.1) ポートの処理(AXIポートの自動接続) (1) Run Connection Automation を 選択 (2) All automation の チェックボックスを選択して [OK] 19

AXIHP_MEMCPYモジュールの追加(3.2) ポートの処理(AXIポートの処理が完了したところ) 次のスライドではここの処理を行う ズームインすると作業しやすい 次の次のスライドで ここの処理を行う 次の次の次のスライドで ここの処理を行う 20

AXIHP_MEMCPYモジュールの追加(3.3) ポートの処理(AXIHP_MEMCPYのその他のポートの処理) resetと.._forbid_..は GUIではなくラーッパーモジュールで代入したいので 外部ポートとして出力 それぞれ (1) ポートをクリック (2) Ctrl-T または 右クリックして Make External をする (1) clkをm_axi_gpi0_aclkなどの ワイヤと接続*1 マウスでポートを選択 マウスカーソルが鉛筆状になった状態で接続元から接続先まで ドラッグ&ドロップするとよい 21 *1

AXIHP_MEMCPYモジュールの追加(3.4) ポートの処理(axi_inter_memconのACLKとARESETNの処理) ACLKをS00_ACLKに ARESETNをS00_ARESETNに 接続する 22

AXIHP_MEMCPYモジュールの追加(3.5) ポートの処理(peripheral_aresetnを外部に引き出す) 注: この信号は 本当にFPGAの チップ外に引き出したいわけではなく ラッパーモジュールで扱うために 引き出す (1) peripheral_aresetnを選択 (2) 右クリックでメニューを開いて Create Portを選択して生成 (ダイアログはOKでよい) 23

AXIHP_MEMCPYモジュールの追加(3.6) ポートの処理(検証) (1) Validate Designを選択 /AXIHP_MEMCPY_0/class_s0_0000_axiと /AXIHP_MEMCPY_0/class_m0_0002_class_obj_0000_axiの クロックに関する警告がでる...のは現状想定の範囲内なのでOK 24

HDLラッパーの生成と修正 作業の概要 Project SettingでTarget LanguageがVerilogなことを確認 VHDLの方が好きな人はVHDLでも良い この資料ではVerilogで話を進める Sourcesタブのdesign_1.bdからラッパーを生成 resetとforbid信号の取り扱いを修正 ボードデザイン(GUIでの設計)では都合上ポートを作成したがチップ外部に 引き出したいわけではない resetには~pheripheral_aresetnを接続.._forbid_.. には 1'b0を与える この信号1'b1を与えるとAXIアクセスを強制禁止できる 今回は禁止*しない*ので即値で1'b0を指定 25

HDLラッパーの生成と修正(1) HDLラッパーの生成 (1.2) (1.3) (1.1) (1) design_1.bdで右クリックして Create HDL Wrapper...を選択 (3) HDLラッパー (desgin_1_wrapper.v)が生成される (2) Copy generated の方を選択する 26

HDLラッパーの生成と修正(2) HDLラッパーの修正 変更前 変更後 削除 メモ GUIで生成した外部ポートはラッパーモジュールでは 直接FPGA外部へ引き出されるポートになる 今回はデザイン内部で利用したいだけなので FPGAの外には出さない 特にコンマの扱いに注意 27

HDLラッパーの生成と修正(3) HDLラッパーの修正 変更前 変更後 削除 メモ GUIで生成した外部ポートはラッパーモジュールでは 直接FPGA外部へ引き出されるポートになる 今回はデザイン内部で利用したいだけなので FPGAの外には出さない 28

HDLラッパーの生成と修正(4) HDLラッパーの修正 - Javaで書いたモジュールにperipheral_resetの極性を反転したものを与える - forbid信号には1'b0(forbidしない 常にAXIアクセスを有効にするの意)を設定 変更前 変更後 変更箇所 29

合成 Flow NavigatorのGenerate Bitstreamをクリックして合成 途中AXIHP_MEMCPYのclkについて警告がでる 今回のケースではOKで続行 30

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 31

ARM上のソフトウェア開発のための準備 作業の概要 ハードウェアプロジェクトのエクスポートとSDKの起動 BSPの生成 アプリケーションプロジェクトの生成 Cソースファイルの生成 32

エクスポートとSDKの起動(1) ハードウェアプロジェクトのエクスポート Include bitstreamのチェックボックスの チェックを入れて [OK] File Export Export Hardware を選択 33

エクスポートとSDKの起動(2) SDKの起動 そのままで[OK] File Launch SDK を選択 34

BSPの生成 Cソースファイルの作成 Zynq + Vivado HLS入門 慶應義塾大学 天野研究室 杉本 成 http://www.slideshare.net/narusugimoto/zynq-vivado-hls の p.117(sdk Board Support Packageの生成1/4 ) p.127(sdk Fileの生成3/3 )を参照 35

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 36

ARM上のソースコードの記述 ソフトウェアの概要は Zynq + Vivado HLS入門 慶應義塾大学 天野研究室 杉本 成 http://www.slideshare.net/narusugimoto/zynq-vivado-hls の p.128(sdk HLSコア制御アプリケーション雛形) p.136(sdk axihp_memcpyソフトウェア )を参照 レジスタ構成が若干違う 最終的なソースコードは次の通り 37

ARM上のソースコードの記述 #include "xil_printf.h" int main() { Xil_DCacheDisable(); int i, mismatch = 0; volatile unsigned int src_data[256], dst_data[256]; for(i = 0; i < 256; i++) src_data[i] = i; unsigned int *baseaddr = (unsigned int*)0x43c00000; xil_printf("\r\n"); baseaddr[1] = (unsigned int)src_data; Synthesijerで作ったコアへの baseaddr[2] = (unsigned int)dst_data; パラメタ渡しと制御の開始 baseaddr[0] = 0xFFFFFFFF; xil_printf("memcpy start, src=%08x dest=%08x\n\r", src_data, dst_data); while(baseaddr[0]!= 0) ; xil_printf("memcpy done\n\r"); for(i = 0; i < 256; i++){ xil_printf("src_data[%d] = %d, ", i, src_data[i]); xil_printf("dst_data[%d] = %d\n\r", i, dst_data[i]); if(src_data[i]!= dst_data[i]) mismatch = 1; } (mismatch==0)? xil_printf("memcpy success!\n\r") : xil_printf("memcpy fail\n\r"); return 0; } 38

作業の手順 Synthesijer関連 リソースの準備 PL上のハードウェアの設計(Javaコードの記述とコンパイル) Vivadoでの合成 ARM上のソフトウェア開発のための準備 ARM上のソフトウェアの記述 ソフトウェアのコンパイルと実行 39

ソフトウェアのコンパイルと実行 ソフトウェアのコンパイルと実行の概要は Zynq + Vivado HLS入門 慶應義塾大学 天野研究室 杉本 成 http://www.slideshare.net/narusugimoto/zynq-vivado-hls の p.137(sdk ソフトウェアのコンパイル 1/2) p.145(sdk 実行結果 )を参照 bitstreamのパスはデフォルトで選択されるものを使用 cuがなければscreenでもok Zedboardなら: screen /dev/ttyacm0 115200 Zyboなら: screen /dev/ttyusb1 115200 40

結果を確認 41

今回のデザインへのエクスキューズ SimpleAXIMemIface32RTLTestは32bitのアクセスのた びに毎回AXIイベントを発行しています より高速な転送 のためには バースト転送をする必要があるでしょう(次頁 参照) 割り込みについてについては 特に考えられていませ ん うまく扱えるようにしたいものです BDに対する CLK, RESETでのCritical Warningは気持ち が悪いのでなんとかしないといけません 42

Javaのコードを記述 AXHP_MEMCPY2.java を書く(バースト版) import synthesijer.lib.axi.*; import synthesijer.rt.*; public class AXIHP_MEMCPY2{ private final AXILiteSlave32RTL s0 = new AXILiteSlave32RTL(); private final AXIMemIface32RTLTest m0 = new AXIMemIface32RTLTest(); private void run(){ int src_addr = s0.data[1]; int dest_addr = s0.data[2]; m0.fetch(src_addr, 256); m0.flush(dest_addr, 256); } } Javaで1ワードずつコピーする わけではないので高速 @auto public void main(){ s0.data[0] = 0x00000000; while(s0.data[0] == 0x00000000) ; // wait for kick from PS run(); s0.data[0] = 0x00000000; // to notify DONE to PS } 43

補足1: CentOSのJava8のインストール たとえば http://qiita.com/hajimeni/items/67d9e9b0d169bf68d1c9 を参考にするなどしてインストールしてください 44