• 検索結果がありません。

MicroBlazeのチュートリアル

N/A
N/A
Protected

Academic year: 2021

シェア "MicroBlazeのチュートリアル"

Copied!
86
0
0

読み込み中.... (全文を見る)

全文

(1)

1

Xilinx社 Spartan 3E Starter Kit を使った

Micro Blazeのチュートリアル

九州工業大学

笹尾研究室

(2)

はじめに

• 本ドキュメントは

Xilinx Spartan3E Starter Kit と

Embedded Development Kit(以降EDK)を用いたMicro

Blaze のチュートリアルとなっています

• 環境

– ISE 8.2i Foundation

– EDK 8.2i

– Spartan 3E Starter Kit

• 事前に必要なこと

– 上記の環境をインストール済み

(USBのドライバもインストール済み)

– Verilog, Cの習得 (VHDLも習得しておくことが望ましい)

(3)

3

ドキュメントの内容

• 簡単なMicro Blaze の設計

– EDKの使い方の習得

• 既存IPの追加

– LEDをCでコントロール – IPの追加法を習得

• ユーザIPの追加

– クロックカウンターを追加 – Import/Create IPの使い方を習得

• ソフトウェアとハードウェアの比較

– FIRフィルタを設計し, ハード・ソフト混在システムを設計 – ハードとソフトの速度を計測

(4)

簡単なMicro Blaze の設計(1)

• ここでは簡単なMicro Blazeを設計し, EDKの使い方を覚えます • をダブルクリックしてEDKを起動してください

• プロジェクトを作成し, Micro Blaze の設定を行います

(5)

5

簡単なMicro Blaze の設計(2)

• プロジェクトを置く場所とプロジェクト名を指定します

Project fileに直接入力するか, Browseで指定してください

– プロジェクトディレクトリ: C:¥XilinxEDK – プロジェクト名: system.xmp

(6)

簡単なMicro Blaze の設計(3)

• 右図のウィンドウが起動しますので

I would like to create a new design に チェックをつけて, Nextをクリックしてください

(7)

7

簡単なMicro Blaze の設計(4)

• ターゲットを指定します

– Board vendor: Xilinx

– Board name: Spartan-3E Starter Board

– Board revision: C

(8)

簡単なMicro Blaze の設計(5)

• 次にFPGAとプロセッサを指定します

StarterKitはFPGAとプロセッサが決まっているのでここでは

何もおこないません. そのままNextをクリックしてください

(9)

9

簡単なMicro Blaze の設計(6)

• ここからはMicro Blazeの設定を行います – メインメモリがデフォルトでは 8KByteと少ないので, 32KBtyeに 増やしておきます – その他は変更しません – 設定が終わったらNextを クリックしてください

(10)

簡単なMicro Blaze の設計(7)

• ここからはMicroBlazeに組み込む 構成要素(IP)を設定します • RS232_DTE, LEDs_8Bitのチェックを 外してください (後で追加します) • RS232_DCEのチェックは残してください • 設定が終わったらNextをクリックしてください

(11)

11

簡単なMicro Blaze の設計(8)

• 以下のチェックを外します

– FLASH_16Mx8, SPI_FLASH, DDR_SDRAM_16Mx16, Ethernet_MAC

(12)

簡単なMicro Blaze の設計(9)

• 内部IPの追加ウィンドウが開きます

• そのままNextをクリックしてください

(13)

13

簡単なMicro Blaze の設計(10)

• ソフトウェアの設定を行います

• そのままNextをクリックしてください

– 一応サンプルアプリケーションは残しておくことをお勧めします (初めて作成したプロジェクトは一度合成を行う必要があり、 何かアプリケーションを置いておかないと合成が上手くいかないか ら!?)

(14)

簡単なMicro Blaze の設計(11)

• 初期化プログラムをどこに置くか聞いてきますので

Nextを押します(Peripheral Testも同様に)

(15)

15

簡単なMicro Blaze の設計(12)

• システムの設計は完了です

• そのままGenerateをクリックしてください(図1)

• 次にFinishをクリックしてください(図2)

(16)

簡単なMicro Blaze の設計(13)

• 次に何をするのか聞いてきますので, Start using Platform

Studio をチェックしてOKをクリックしてください

(17)

17

簡単なMicro Blaze の設計(14)

• Platform Studioが起動します(図1) • この時点で C:¥XilinxEDK フォルダ(図2)を見るとわかるのですが、 まだMicroBlazeのHDLファイルとCのテンプレート・ヘッダが生成されて いません. この時点で設計を行うと上手くいきません!! 図1:Platform Studio 図2:C:¥XilinxEDK

(18)

簡単なMicro Blaze の設計(15)

• まず、Micro BlazeのHDLファイルを生成し

HDLの合成を行います (ISEのSynthesis ->

Implementationを行うのと同じ)

– Hardware -> Generate Bitstream をクリックしてください

– Done!が表示された後, C:¥XilinxEDKを見るとHDLファイルが 生成されていることが確認できます

(19)

19

簡単なMicro Blaze の設計(16)

• 次にソフトウェアのライブラリとヘッダを生成します

(C:¥XilinxEDK¥microblaze_0に格納される)

– Software -> Build All User Applications をクリックしてください – ビルド後、ソフトウェアのサイズが表示されます – C:¥XilinxEDK¥microblaze_0 にライブラリが生成されます (注意)ソフトウェアをビルドするときは microblaze_0フォルダ、及び直下のディレクトリの ファイルを閉じてください (ビルド時にファイルを削除・追加するので、フォルダや ファイルを開いていると操作できなくてビルドが終わらない) プログラムのサイズ ヘッダーフォルダ

(20)

簡単なMicro Blaze の設計(17)

• ソフトウェアプロジェクトを作成しましょう

– まず、TestApp_Memoryを起動させないようにします

– TestApp_Memoryを右クリックして Mark to Initialize BRAMsの チェックを外してください (図1)

– 次に, Add Software Application Projectをダブルクリックし、Project Name に TutorialProject と入力してOKをクリックします(図2)

(21)

21

簡単なMicro Blaze の設計(18)

• 追加したプロジェクトを起動するように設定します

– TutorialProject を右クリックして, Mark to Initialize BRAMsにチェックをつ けてください(図1)

• 次にソースファイルをプロジェクト上に作成します

– Sources を右クリックして Add New File… を選択してください(図2)

– ウィンドウが開きます. tutorial.c と入力してOKをクリックしてください(図3)

図1: Mark to Initialize BRAMs

図2:Add New File… を選択

(22)

簡単なMicro Blaze の設計(19)

Sources に tutorial.c が追加されます

– C:¥XilinxEDK¥tutorial.c をダブルクリックするとエディタが起動する ので, 以下のプログラムを入力して保存 してください Xilinx 専用のライブラリ. printfでは メモリ量が多すぎる! 改行は¥r¥n

(23)

23

簡単なMicro Blaze の設計(20)

• プロジェクトをBuild して, Bitstreamを生成します

– Software -> Build All User Applications (図1)

– Device Configuration -> Update Bitstream (図2) 以上の順で操作を行ってください

(24)

簡単なMicro Blaze の設計(21)

• ボードとPCを接続してください

• ターミナルソフトを起動して(ここではTeraTerm Pro

http://hp.vector.co.jp/authors/VA002416/

を使用)ください

– 9600bps, データ長8ビット, パリティなし, ストップビット1ビット 電源を接続 RS232C をPCに接続 USBをPCに接続 ジャンパピンをJTAGに設定 (真ん中を残して上下を外す)

..

..

(25)

25

簡単なMicro Blaze の設計(22)

TeraTermでは…

Serial のPort をStarter Kit の DCEに 接続しているPortにあわせる

(デバイスマネージャを見るとよい) Setup -> Serial Port … を選択し 上記のように設定

(26)

簡単なMicro Blaze の設計(10)

FPGAに書き込みます

– Device Configuration -> Download Bitstream を選択してください – ターミナルに表示されます!

プログラムの停止 (FPGAをクリア)

(27)

27

ここまでのまとめ

EDKの使い方を習得しました

– プロジェクトの作成法 – 初期設定の方法 – ソフトウェアプロジェクトの作成法 – 簡単なプログラムの実行方法

• 課題:

– tutorial.c をいろいろ改造して、ターミナルに表示させてみましょう

(28)

既存IPの追加(1)

• ここでは、前回設計したシステムに既存のIPを接続し、

ソフトウェアでコントロールする方法を習得します

– Starter Kit の LEDを接続してみましょう

(29)

29

既存IPの追加(2)

EDK を起動します

• コピーした

C:¥XilinxEDK_LED¥system.xmpを開きます

– 最初のプロジェクトウィンドウでは Cancel を選択

– メインウィンドウが起動するので File -> Open Project… を選択し, C:¥XilinxEDK_LED にある system.xmpを開いてください

(30)

既存IPの追加(3)

• ボードのLEDとMicro Blazeを接続する I/O IPをシステムに追加します – IP Catalog タブをクリックし, General Purpose IO にある opb_gpio をダブ

ルクリックしてください(図1)

– 確認ダイアログがでるのでYesを選択します(図2) – 右のIPリストに opb_gpio_0 が追加されました(図3)

図1: opb_gpioを選択

(31)

31

既存IPの追加(4)

• 追加したIPをバス(OPB)に接続します

– FiltersのBus Interface にチェックを入れ,

Bus Connection にある opb_gpio_0 の No Connection をクリック してください

– プルダウンメニューの中から mb_opb を選択します

opb_gpio_0をクリックして

LED_8bitにリネームしてください

IPがバスに接続されると 緑色で塗りつぶされる

(32)

既存IPの追加(5)

• 次にポートの接続を設定します(バスに接続した個々の信号

線を設定すると思えばよい)

– FiltersのPortsをチェックし, LED_8bitにある GPIO_d_outのNetを クリックして, プルダウンメニューから LED_8bit_GPIO_d_outを選択 してください (選択はメニューを選んで、どこか他の部分をクリックす ると行われることに注意!)

(33)

33

既存IPの追加(6)

• 次にI/Oの方向とビット幅を

設定します

LED_8bitを右クリックし, Configure IPを選択してください Common では Enable Channel2のチェックを外す GPIO Data Bus Width を 8に設定

Channel 1 では

Channel 1 is Bi-directional: FALSE

Channel 1 is Input Only: FALSE

(34)

既存IPの追加(7)

• さらにこのIPのポートを外部に接続します

– LED_8bitのGPIO_d_out のNetをクリックし, Make Externalを選択 してください

– External Ports に LED_8bit_GPIO_d_out_pinが接続されます! – 幅(Range)は[0:7]になっています

(35)

35

既存IPの追加(8)

I/O ポートにソフトウェアからアクセスするアドレスを設定します

– Filters の Addresses をチェックし, LED_8bit (SizeがU以外の部分)を Lockします (Lock にチェックをつける)

– LED_8bit の Size (Uの部分) をクリックし, プルダウンメニューから64Kを 選択します – 仮のアドレスが設定されるので, をクリックしてアドレスを 割り当てます Lock をクリックして 既存のIPのアドレスを 変更しないようにする 64Kを選択 仮のアドレスが 表示されたら クリック 仮のアドレス

(36)

既存IPの追加(9)

Clean Netlist を行い, Update Bitstream を行って

ハードウェアとソフトウェアを一度に更新します

(37)

37

既存IPの追加(10)

C:¥XilinxEDK_LED¥microblaze_0¥include内にある

xparameters.h を開いてみてください

– LED_8BITのアドレス定義が追加されています! このアドレスに 値を書けばLEDを コントロールできます

(38)

既存IPの追加(11)

• 次にFPGAピンをLEDに接続します

– Projectタブを選択し, UCF File をダブルクリックします – ピン配置ファイル(**.ucf) に以下の内容を記述します

– ピン名はさきほどのExternal Ports名を指定, ピンの位置はデータシート (Spartan3E Starter Kit Board User Guide を参考に)

(39)

39

既存IPの追加(12)

Clean Netlist を行い, Update Bitstream を行って

ハードウェアとソフトウェアを一度に更新します

– なぜかこの手順(更新→.ucfを後から編集→更新)で行わないと エラーがでる…

(40)

既存IPの追加(13)

• ソフトウェアを設計します

– 前回のTutorialProject は使用しないので, 右クリックして Mark to Initialize BRAMs のチェックを外しておきます

– Add Software Application Project をダブルクリックし, プロジェクト LED_Ctrl を追加してください

(41)

41

既存IPの追加(14)

• Project: LED_Ctrl を右クリックし Mark to Initialize BRAMsをチェックします

• Sources を右クリックし, Add Net File.. から led_ctrl.c を入力し, 以下のプログラムを入力してください

I/Oポートを読み書きする関数を 集めたヘッダ

I/Oポートに値を書き込む関数

(42)

既存IPの追加(15)

• プログラムの入力が終わったら保存しFPGAに書き込みます

– Device Configuration -> Download Bitstream を選択してください (Build Project や Update Bitstream を同時に行ってくれる)

(43)

43

ここまでのまとめ

EDKにあらかじめ用意されているIPを追加しました

• 課題:

– このシステムはあらかじめ, Dip SwitchとPush Button が接続され、 設定も済んでいる

– gpio_l.h には関数XGpio_mReadReg(BaseAddress, RegOffset)が 用意されており, ベースアドレスをこれらのスイッチのアドレスに設定すれば ボードのスイッチを操作できる

– スイッチからLEDを操作できるようにプログラムを改造せよ (ソースコードだけ改造すればできる)

(44)

ユーザIPの追加 (1)

• ここではユーザが独自に設計したオリジナルのハードウェア

をMicro Blazeに接続し, 動かしてみます

• なお、追加するにあたって

– ユーザが設計したハードは正しく動作する(ハードを設計しながら Micro Blazeを設計してるととても非効率!) – ユーザのハードはVerilogで記述されている ことを前提に説明を行っていきます Micro Blaze clock counter FPGA 今回はこの部分を設計 OPBバス clk cnter clock

(45)

45

ユーザIPの追加 (2)

C:¥XilinxEDK_CCNT フォルダを作成し, 前回設計した

C:¥XilinxEDK_LED フォルダの中身をコピーしてください

EDK を起動し, Cancel を選んでください

File -> Open Project でさきほどコピーした

(46)

ユーザIPの追加 (3)

• ユーザIPを追加します

– Hardware -> Create or Import Peripheral… を選択してください

(47)

47

ユーザIPの追加 (4)

• 次に新規に作成するか, 既存のIPを読み込むか聞いてきます

– 今回は新規に作成するので Create templates for a new peripheral にチェックをつけて Next をクリックしてください

(48)

ユーザIPの追加 (5)

• 作成したIPを格納する場所を指定します

– デフォルトはプロジェクトの pcores フォルダに作成されます – 今回はデフォルトで指定されている場所に格納します

(49)

49

ユーザIPの追加 (6)

• ユーザIPの名前とバージョンを指定します

– Name に sys_clk_cnt_ip と入力し, Next をクリックしてください – 今回はバージョンの設定をデフォルトの 1.00.aにします

(50)

ユーザIPの追加 (7)

• 作成したIPを接続するバスを指定します

(51)

51

ユーザIPの追加 (8)

• バスとユーザIP間のインタフェースを設定します

– S/W reset and MIR, User logic interrupt support のチェックを外します

(52)

ユーザIPの追加 (9)

• ユーザIPのレジスタを設定します

– Number of software accessible registers: 1

(53)

53

ユーザIPの追加 (10)

• バスとIP間の制御信号の設定を行います

– 今回はデフォルトで用意されている信号を使用するので Next を クリックしてください

(54)

ユーザIPの追加 (11)

• シミュレーションのファイルを出力するか設定します

– シミュレーションには ModelSim-SE, 又は ModelSim-PEが必要です – 今回は手元にないので、チェックをはずし Next をクリックします

(55)

55

ユーザIPの追加 (12)

• ユーザIPの記述言語と合成フローを指定します

– Generate stub ’user_logic’ template in Verilog instead of VHDL, Generate template driver files to help you implement software interface にチェックをつけます

– Generate ISE and XST project files to help you implement the peripheral using XST flow のチェックを外します

– チェックをつけると確認ダイアログがでますが, そのままOKをクリックしてください – 設定がおわると User Logic の色が変わります. Next をクリックしてください

(56)

ユーザIPの追加 (13)

(57)

57

ユーザIPの追加 (14)

pcores フォルダ内に新しいフォルダが作成されます

• ここからは直接ファイルを編集します

IPコア名 IPコアの設定ファイルを置くフォルダ

User Logic と IFのHDLファイルを

置くフォルダ User Logic (verilog)

(58)

ユーザIPの追加 (15)

• C:¥XilinxEDK_CCNT¥pcores¥sys_clk_cnt_ip_v1_00_a¥data にある sys_clk_cnt_ip_v2_1_0.mpd を編集します

– sys_clk_in と cnt_num を追加し, 設定を加えます

(59)

59

ユーザIPの追加 (16)

• C:¥XilinxEDK_CCNT¥pcores¥sys_clk_cnt_ip_v1_00_a¥data¥hdl¥vhdl にある sys_clk_cnt_ip.vhd を編集します entity に信号を追加 component に信号を追加

(60)

ユーザIPの追加 (17)

(61)

61

ユーザIPの追加 (18)

• C:¥XilinxEDK_CCNT¥pcores¥sys_clk_cnt_ip_v1_00_a¥hdl¥verilog にある user_logic.v を編集します

(62)

ユーザIPの追加 (19)

(63)

63

ユーザIPの追加 (20)

• 次にプロジェクトにユーザIPを追加します

– Hardware -> Create or Import Peripheral… を選択します

(64)

ユーザIPの追加 (21)

Peripheral Flow ウィンドウになります

(65)

65

ユーザIPの追加 (22)

Repository or Project ウィンドウになります

(66)

ユーザIPの追加 (23)

• さきほど設定したユーザIPを指定します

– Name : sys_clk_cnt_ip (プルダウンメニューから選択できる)

– Use version にチェックをつけてください

(67)

67

ユーザIPの追加 (24)

• ソースファイルの種類を設定します

(68)

ユーザIPの追加 (25)

HDLソースファイルの設定を行います

1 使用する言語を Mixed に設定

2 C:¥XilinxEDK_CCNT¥pcores¥sys_clk_cnt_ip_v1_00_a¥data¥sys_clk_cnt_ip_v2_1_0.pao を読み込むように設定

(69)

69

ユーザIPの追加 (26)

• HDLの解析を行います(さきほど編集したファイルにエラーがないか確認 を行う. user_logic.v のチェックは行ってくれないことに注意!)

(70)

ユーザIPの追加 (27)

• 編集したファイルにエラーがなければこのウィンドウが表示されます – OPB Slave にチェックをつけて Next をクリックしてください

(71)

71

ユーザIPの追加 (28)

Port の追加, Parameterの設定は共にデフォルトの値を

使用するので, Next をクリックしてください

(72)

ユーザIPの追加 (29)

• 割り込み信号の設定を行います

– 今回は割り込みを使わないので, Select and configure interrupt の チェックを外し, Next をクリックしてください

(73)

73

ユーザIPの追加 (30)

• パラメータとポートの属性を設定します

(74)

ユーザIPの追加 (31)

• これでIPを追加する作業は終了です

(75)

75

ユーザIPの追加 (32)

• ユーザIPを読み込みます

– EDKに切り替えて, IP Catalog タブをクリックしてください

– Project Repository にさきほど設定したIPが追加されているので、 ダブルクリックしてください. 確認ダイアログがでるのでYesをクリック してください

(76)

ユーザIPの追加 (33)

• 同様にopb_gpio を追加し, clk_cnt_ioにリネームします

• 次に追加したIPのHDL合成を行います

(77)

77

ユーザIPの追加 (34)

• 追加したIPをバスに接続します

– Filters の BusInterface をチェックしてください

– Bus Connection をクリックし, mb_opb を選択してください

mb_opbに接続されると 塗りつぶされる

(78)

ユーザIPの追加 (35)

• Port を接続します – Filters の Ports にチェックを付けて、赤枠で囲った部分を 設定してください sys_clk_in を外部のクロックに接続 cnt_num を io に接続

(79)

79

ユーザIPの追加 (36)

• IO Port を設定します

– clk_cnt_io を右クリックし, Configure IP… を選択してください

– Channel1 を指定し

• Bi-directional : FALSE

(80)

ユーザIPの追加 (37)

Base Address を設定します

– Filters の Addresses にチェックをつけ, Size を64Kに設定してください – 次に追加したIP以外の Lock にチェックをつけ, をクリックします

1. Size を64Kに設定 2. 追加したIP以外のLockに

チェックをつける 3. アドレスを割り振る

(81)

81

ユーザIPの追加 (38)

• システムを更新し, 追加したIPのソフトウェアライブラリとヘッダを作成します – Device Configuration -> Updata Bitstream を選択してください

– C:¥XilinxEDK_CCNT¥microblaze_0¥include 内に

sys_clk_cnt_ip.h が作成され, xparameters.h に作成したIPのアドレスが 追加されます

(82)

ユーザIPの追加 (39)

• 新たにソフトウェアプロジェクト system_clk_cnt を作成します

– Mark to Initialize BRAMs チェックをつけて下さい

– Sources を右クリックし Add New File… を選んで system_clk_cnt.c を作成してください • その他のプロジェクトは Mark to Initialize BRAMs チェックを外します

system_clk_cnt を作成し ソースファイルを作成する

クロック数を計測

(83)

83

ユーザIPの追加 (40)

• ターミナルソフトを起動してください

• ビルドを行い, FPGAにデータを転送します

– Device Configuration -> Download Bitstream を選択してください

システムクロックは50MHz(20ns周期)なので 20 をかけると時間[ns]がわかる

最初のループと次のループ数は10倍違っている 約10倍くらいの速度差が確認できた

(84)

ここまでのまとめ

• ユーザが独自に設計したIPを追加し、

ソフトウェアでコントロールしてみました

• クロックカウンタを設計し, 実時間を計測できるようになりました

• 課題:

– さまざまなプログラムを動作させ、実行時間を計測してみましょう – ハードとソフトで実現し、両方の手法を速度(動作時間)と面積(ハード ウェアリソース)で比較してみましょう

(85)

85

ソフトウェアとハードウェアの比較

• FIRフィルタの設計 – FIR ディレクトリ以下を参照してください – 仕様: • タップ数は11 • 対照型フィルタとして設計 • 係数は適当に設定 (本当に動かすならきちんと設定しないといけません) • ハードウェアは50MHz 以上で動作するように適時レジスタを追加して設計 Σ レジスタ 定数乗算器 + + + + + Σ input input

(86)

演算時間の比較

• ハード+ソフトで約10倍高速化を実現

参照

関連したドキュメント

LicenseManager, JobCenter MG/SV および JobCenter CL/Win のインストール方法を 説明します。次の手順に従って作業を行ってください。.. …

不明点がある場合は、「質問」機能を使って買い手へ確認してください。

 □ 同意する       □ 同意しない (該当箇所に☑ をしてください).  □ 同意する       □ 同意しない

問題集については P28 をご参照ください。 (P28 以外は発行されておりませんので、ご了承く ださい。)

• AF/AE ロック機能を使って、同じ距離の他の被写体にピントを 合わせてから、構図を変えてください(→ 43 ページ)。. •

*Windows 10 を実行しているデバイスの場合、 Windows 10 Home 、Pro 、または Enterprise をご利用ください。S

① Google Chromeを開き,画面右上の「Google Chromeの設定」ボタンから,「その他のツール」→ 「閲覧履歴を消去」の順に選択してください。.

 模擬授業では, 「防災と市民」をテーマにして,防災カードゲームを使用し