altera cycloneii評価ボードの チュートリアル資料 · pdf file2...
TRANSCRIPT
1
Altera CycloneII評価ボードの チュートリアル
九州工業大学
笹尾研究室
中原
啓貴
2
本ドキュメントの構成
1. QuartusII version 6.0の使用法
2. Altera DE2ボードの各パーツについて
3. Altera NiosIIの使用法
4. NiosIIと各パーツを用いたシステムの設計 事例
3
QuartusII version 6.0の使用法
4
QuartusII version 6.0の使用法
• Altera FPGAの設計フロー
• QuartusII の使用法
– デモンストレーションの合成と書き込み
– 加算器の設計
– シミュレーションツールの使用法
5
Altera FPGAの設計フロー
Verilog (VHDL)ファイル
ネットリスト
ビットストリーム(コンフィギュレーションデータ)
verilog をRTL部品に合成します. 次に, RTLをFPGA上に配置・配線を行い, ネットリストを生成します.
ネットリストから, FPGAに転送するデータ(ビットストリーム)を生成します.
FPGAにコンフィギュレーションデータを送ります.
シミュレーション
設計した回路が仕様通りに動作するかチェックを行います.
6
DE2ボードのデモを動作させる(1)• デモを動作させます
• CD-ROMの中の ¥DE2¥DE2_demonstrations¥DE2_Default
をフォルダごと適当な場所(C:¥など)にコピーしてください
• QuartusIIのアイコンをダブルクリックしてQuartusIIを起動します
QuartusIIのアイコン
7
QuartusIIを起動した直後は…ファイルの操作・各コマンドの指示を行うアイコン
設計デザインの各モジュールを表示
実行中のプロセスを表示
エラーや警告などのログを表示
Verilog ファイルや
各ツールを表示する部分
8
DE2ボードのデモを動作させる(2)• QuartusIIは各設計をプロジェクト毎に管理します
– 各プロジェクト毎にフォルダを作るといいでしょう
(同一フォルダに複数のプロジェクトがあると, エラーを引き起こす可能性がある)• サンプルデザインのプロジェクトを読み込みます
– File -> Open Projectをクリックしてください(図1)– 先ほどコピーしたフォルダの中にあるDE2_Default.qpfを開いてください(図2)
図1:プロジェクトを開く図2:DE2_Default.qpfを開く
9
DE2ボードのデモを動作させる(3)設計対象のFPGA(ボード上のFPGAと同じはず)
トップモジュールクリック
'+'をクリックすることで下位層モジュールを
見ることができます
アイコンをクリックすることで各種のコマンドを実行しますコンパイル(RTL合成+配置配線+コンフィギュレーションデータ作成)を行う.RTL合成のみ行う. 機能設計時は配置配線を行う必要がないので,こちらのコマンドを行うとよい.タイミング解析を行う. タイミング制約を決定するときに使う.シミュレーションを行う. ただしセッティングが必要.レポートを表示
プログラマ(書き込みツール)を起動する
10
DE2ボードのデモを動作させる(4)• コンフィギュレーションデータを作成します
– コンパイルアイコン
をクリックしてください
が表示されれば成功です!
現在実行中のプロセスAnalysis & Synthesis: RTLを合成Fitter:Assemble:Timing Analyzer: タイミング解析
配置配線
11
DE2ボードのデモを動作させる(5)• FPGAにコンフィギュレーションデータを転送します
– ボードに各線を接続してください
– 初めて書き込みを行う場合は, 各線を接続する前にByte Blasterを インストールしてください
– ボードの電源スイッチをオンにしてください
(LEDや7SEGがピカピカするはず…)
付属のACアダプタ
USB(パソコンに接続)
スピーカの端子(変な音がでるので音量は小さめに!)VGAケーブル
電源スイッチ
12
Byte Blasterのインストール• DE2評価ボードは Byte Blaster 経由でPCから
書き込み(コンフィギュレーション)データを受け取ります
• Byte Blasterをインストールする必要があります
• 評価ボードの電源を入れ, USBケーブルを接続してください– USBのデバイスインストールのウィンドウが開くので,
C:¥altera¥quartus60¥drivers¥usb-blaster にある
usbblst.inf を指定してください
(Quartus を
C:¥altera にインストールした場合)
13
DE2ボードのデモを動作させる(6)• FPGAにコンフィギュレーションデータを転送します
• Programmerを起動してください– メニューから起動(右図)– アイコン
をクリックして起動
14
DE2ボードのデモを動作させる(7)No Hardwareの場合Hardware Setup..をクリック
USB-Blasterを選択してClose
となればOK!Programにチェック, その他のチェックは外す
全てが終わったら,を押して
FPGAに書き込みを行って
ください
15
ここまでのまとめ
• DE2ボードのデモンストレーションを行って
合成(コンパイル)→書き込み(コンフィギュレーション)までを 行いました
課題:• デモンストレーションフォルダにあるデモを
色々動作させてみましょう
(各フォルダには簡単な説明を記述したREADME.txtがある.)
16
加算器の設計(1)• 簡単な加算器を設計し, ボードで動かします
• 仕様– 8bit加算器 (8bit + 8bit = 9bit)– 入力はディップスイッチ8個×2
– 入力と出力を7セグメントに表示
– 組合せ回路を verilog で記述
17
加算器の設計(2)• QuartusIIを起動してください
• 今回はプロジェクトを新規に作ります– File -> New Project Wizard をクリックしてください
– New Project Wizard Introduction が出ますので, Nextをクリックしてください
File -> New Project Wizard New Project Wizard Introduction
18
加算器の設計(3)• プロジェクトを置くディレクトリを設定します
– 適当なディレクトリを指定してください
– What is the name of this project? でプロジェクト名を指定します
– What is the name of the top-level design dentity ...でトップモジュールの名前を指定します
– すべて終わったら Next が有効になるのでクリックしてください
プロジェクトを置くディレクトリ
トップモジュール名
プロジェクト名
19
加算器の設計(4)• 次に既存の verilog (VHDL) File を読み込むか聞かれます
• もし, 読み込む場合はファイルを指定して取り込んでください
(この作業は後からでもできます)• 今回は新たに設計するので, Nextをクリックしてください
20
加算器の設計(5)• ターゲットデバイスを指定します
• 今回のボードのFPGAは(Altera CycloneII EP2C35F672C6)• ターゲットデバイスを指定したら, Nextをクリックしてください
デバイス名はパッケージに書かれていることが多い
Family (Cyclone,Stratixなど)を指定
FPGAのリスト
ターゲットデバイスの条件(ピン数,パッケージ等)を指定指定するとFPGAのリストが
絞られる
21
加算器の設計(6)• 他のベンダーのツールを指定します (図1)• 後に確認のウィザードが出ますので (図2)
Finishをクリックしてください
図1:他のベンダーのツールを指定 図2:確認ウィザード
22
加算器の設計(7)• では, 加算器の verilog を記述しましょう
• ファイル新規作成アイコン
をクリックし, Verilog HDL File を選択してOKをクリックしてください
1.
2.
3.
23
加算器の設計(8)• エディタが現れますので, 加算器を記述してください
• 記述が終わりましたら, 保存します– デフォルトは先ほど指定したTopModule名ですが、ここでは敢えて
ファイル名とモジュール名を変更します!(よい子はそのまま・・ね)
1. verilogを記述
2. 保存
アイコンをクリック
3. ファイル名を指定
(トップモジュール名になってるはず)
24
加算器の設計(9)• コンパイル
を行ってください
• 正しいverilogが記述されトップモジュールの指定が正しく
行われていた場合, Full Compilation Successful が表示されます
• 今回はトップモジュール名が違うので・・・!
• というわけで、トップモジュールを指定し直しましょう– Entity下のデバイス名を右クリック->Setting をクリックしてください
25
加算器の設計(10)• Setting ウィンドウで設定をやり直します
– コンパイルオプションを指定したり, 先ほどの設定をすべて行える
1. Generalをクリック
2. Top-level entityのファイル選択をクリック
3. リストから
トップモジュール名を指定し, OK をクリック
26
加算器の設計(11)• Full Compilation Successful が表示されましたか?
• 次にピン配置を行います– Assignments -> Assignment Editor をクリックしてください
27
加算器の設計(12)• Assigment Editor が起動するのでピン配置を行います
– To の下をダブルクリックすると
が現れるので,
クリックして
Node Finder を選択してください
28
加算器の設計(13)• FilterでPins: unassigned を指定し, Listをクリックします
• ピン配置を行いたいNodeを指定し
をクリックしてください
• 右のSelected NodesにコピーされるのでOKをクリックしてください1. Filter を設定 2. Listを表示
3. ピン配置を行いたいNode を選択
4. ピン配置を行いたいNode をコピー
5. OK で
AssignmentEditor に転送
29
加算器の設計(14)• To の部分にNode Finderで選択したNodeが表示されます
• Assignment Name でLocation を選択してください
• CD-ROMの¥DE2¥DE2_lab_exercisesにピン名を記述したDE2_pin_assignment.csv があります– Value の部分に選択したNode に割り当てたいピン名を入力してください
1. ピンを割り当てたいNodeが表示される
2. Locationを指定
3. ピン名を入力
ピン名を記述したファイル
面倒くさいわ
30
加算器の設計(15)• ピンを1本づつ割り当てていると時間がかかるので…
まとめて設定しましょう!– Assignments -> Import Assignments をクリックしてください(図1)– File name で先ほどのDE2_pin_assignment.csvを読み込んで
OKをクリックしてください(図2)
図1:Import Assignments図2:ファイル名の設定と読み込み
ここをクリックしてDE2_pin_assignment.csvを指定
31
加算器の設計(16)• Verilog で記述した端子名とピン名が一致していれば
ピン名を個別に割り当てる必要はありません!(これは便利♪)– そうでなければ個別に配置していきましょう・・・
ピン名が表示される
32
加算器の設計(17)• 再度コンパイル
を行ってください
• 後は"DE2ボードのデモを動作させる"で説明した
FPGAへの書き込み
を行えば・・・
1 0 0 1 0 1 0 1 1 1 0 0 0 0 1 0
33
ここまでのまとめ
• プロジェクトの作成から書き込み(コンフィギュレーション)まで を行いました
– 初期設定・ピン配置を新たに行いました
– 8bit 加算器の設計を行いました
課題:• 加算器の記述を書き換えていろいろな加算器を
作ってみましょう!– PUSHボタンで入力を増減させて, 他のPUSHボタンで演算という
電卓もどきをつくるのもいいでしょうね(順序回路の記述が必要)
34
シミュレーションツールの使用法(1)• 設計した回路が仕様通り動くのか検証が必要です
• バグを発見するためにもシミュレーションが必要
• シミュレータの使い方を覚えましょう!
• 余裕があればModelSim Altera も覚えるとよい– 高度な検証が可能 (複雑なテストベンチをverilogで記述できる, テス
トデータをファイル経由で扱える)– シミュレーションが高速
– NiosIIの標準シミュレータ
– Xilinx FPGAのシミュレータとしても仕様可
– Alteraでも期間限定試用バージョンがでた!?
35
シミュレーションツールの使用法(2)• シミュレータツールを起動します
– Processing -> Simulator Tool を起動してください
36
シミュレーションツールの使用法(3)• シミュレータツールが起動します
– 行いたいシミュレーションを選択してください
Functional: 機能(論理)シミュレーション遅延のシミュレーションを行わないので高速.まず、このシミュレーションを行って論理記述の誤りを検証するとよい
Timing: タイミング(遅延)シミュレーション遅延を含めたシミュレーションを行う.ハザード(レースやメタステーブルなど)を検証することができる.
Timing using Fast Timing Model:Timingを高速に行えるが、正確さに欠ける?(あまり使わないのでよくわかりません・・)
(注) Functional シミュレーションを行う場合は, シミュレーションの度に"Generate Functional Simulation Netlist" をクリックして仮ネットリストを作ってください!
37
シミュレーションツールの使用法(4)• 初めてシミュレーションを行う場合, シミュレーション入力波形
を作成します
• をクリックしてください
シミュレーション波形表示部
各種時刻の表示
入出力Nodeの表示
各動作のアイコン
38
シミュレーションツールの使用法(5)• まず, 入出力Nodeを入力します
– Nameの空いてる部分をダブルクリックすると, 下図のウィンドウが表示されます
– Node Finder でシミュレーションで扱いたい入出力ノードを選択しましょう
(Filterを変えることで様々なNodeを選択できる)
1. 空いている部分を
ダブルクリック
2. Node Finderをクリック
39
シミュレーションツールの使用法(6)• 入力Nodeに波形を割り当てます
– 波形を割り当てたい部分を選択してください
Node全てを選択したい場合
Nodeの一部だけを選択したい場合
Node名をクリック
選択したい部分をドラッグ
で選択部分を拡大・縮小できます
40
シミュレーションツールの使用法(7)• 入力Nodeに波形を割り当てます
– 選択部分を右クリックしてValueを選び, 割当てたい値を入力してください
Forcing Low: 論理値0を割当てForcing High: 論理値1を割当てInvert : 選択範囲の論理値を反転するCount Value: 指定した間隔でカウントした値を割当て. カウント値はBinaryとGrayを選択可
Clock: クロックを割り当てる. 周期を指定.Arbitrary Value: 指定した区間に任意の値を割り当てる.
Random Value: 指定した区間にランダムな値を割り当てる.
41
シミュレーションツールの使用法(8)• 先ほどの加算器にCount Valueを割り当てたのですが...
桁が大きすぎて二進数表示では見えません.• 表示を変えてみましょう
– 波形の上で右クリック
-> Properties をクリックしてください
Radix(基数)をHexadecimal に変更
16進数表示にすると見えました!
42
シミュレーションツールの使用法(8)• 入力した波形を保存し, シミュレータウィンドウを選択します
• さきほどの波形ファイルを読み込み を押せば
シミュレーションが開始されます
波形ファイルの読み込み
シミュレーション期間の設定End simulation at: を指定すると
決められた時間までシミュレーションを行う
43
シミュレーションツールの使用法(9)• シミュレーションが成功すると"Simulation Successful"が
表示されます– をクリックしてください. シミュレーション結果を見ることができます
44
ここまでのまとめ
• シミュレーションツールを使いました
• 波形の割当て方, 様々なシミュレーションを行いました
• 課題:– 順序回路のシミュレーションを行い, FunctionalとTimingシミュレー
ションの違いを確認してみましょう. ハザードがある場合はそれを直してください.
– ModelSim を使ってみましょう. 使い勝手, シミュレーション速度, 能力を確認してみましょう.
45
Altera DE2ボードの 各パーツについて
46
Altera DE2ボードの各パーツについて
• LED• 7Segment Display• Push Switch• Dip Switch• SRAM• LCD• VGA Controller• Audio Codec Chip• SD Card
47
LED• 赤と緑の二種類があります
• 正論理(Hでオン, Lでオフ)
48
7Segment Display• 7bit入力 (小数点の部分は未使用)• 負論理(Hでオフ, Lでオン)• CD-ROM¥DE2¥DE2_Default内のSEG7_LUT.vを参考に
するとよいでしょう– 4bitの16進数を入力して, 7bitにデコードする回路
x 未使用
49
Push Switch と Dip Switch• Push Switch (4個)
– 負論理(押されるとL, 押されてないときH)
– チャタリング対策が必要!?
• Dip Switch (18個)– 正論理(バーが上にあるとH, バーが下にあるとL)
PUSH!
50
SRAM• 容量は512KByte (18入力16出力)• 50MHzで動作可
• 非同期動作(クロック不要)
SRAM_DQ: SRAMのデータ信号線
16
18SRAM_ADDR: SRAMのアドレス信号線
SRAM_UB_N: 上位バイト(8bit)データのマスク(H: 上位8byteを無効, L: 有効)SRAM_LB_N: 下位バイト(8bit)データのマスク(H: 下位8byteを無効, L: 有効)SRAM_CE_N: SRAMチップセレクタ
(負論理)
SRAM_WE_N: 書き込みイネーブル (負論理)(L: 書き込み, H:読み込み)
SRAM_OE_N: 出力イネーブル (負論理)
51
SRAM読み出し回路の記述例
読み出しアドレス
読み出しデータ
CLOCK
SRAM_ADDR
SRAM_WE_NH
SRAM_OE_N
SRAM_CE_N L
SRAM_DQ
初期設定:CE_N, LB_N, UB_NをLWE_NをH
初のクロック:アドレスをセットOE_NをLにする
次のクロック:データを読み出し
SRAM_LB_NSRAM_UB_N
assign SRAM_DQ = ( SRAM_WE_N == 1'b0) ? WDATA : 16'hzzzz;inout のverilog 記述
52
SRAM書き込み回路の記述例
書き込みアドレス
書き込みデータ
CLOCK
SRAM_ADDR
SRAM_WE_N
HSRAM_OE_N
SRAM_CE_N L
WDATA
初期設定:CE_N, LB_N, UB_NをLOE_NをH
初のクロック:アドレスをセットWE_NをHにする
次のクロック:WE_NをLにしてデータ書き込み
SRAM_LB_NSRAM_UB_N
assign SRAM_DQ = ( SRAM_WE_N == 1'b0) ? WDATA : 16'hzzzz;inout のverilog 記述
53
LCD• 16 x 2 キャラクター表示
• 256種類の文字を表示可能 (デフォルトのデータはASCIIコードと同じ!)• 初期化が必要
LCD_RW: 読み書きイネーブル信号(H: LCDから読み込み,L: LCDへ書き込み)
LCD_EN: イネーブル信号LCD_RS: レジスタ選択信号(L: 命令,H: データ)LCD_DATA[7:0]: データ信号LCD_ON: LCDオン信号(Hでオン)LCD_BLON: バックライト信号(Hでオン)
54
LCD書き込み回路の設計例
L:命令/ H:データ
書き込みデータ
CLOCK
LCD_R/W
LCD_DATA[7:0]
LCD_RS
LCD_EN
LCDは応答速度が遅いので数μsec かけて転送すると
安定して動作しました
LCDには各命令毎に
応答速度が決まっています(数msecオーダの場合も!)
55
LCDのアドレス
• 7ビットを使用
(LCD_DATA[7]はドント・ケア)• DDRAMに表示データを格納する
(DDRAMを書き換えれば表示を変えることができる)
56
代表的な命令
Cursor or Display Shiftカーソルの移動(S)とディスプレイの
シフト(R)を行う
0 0 0 0 0 1 S R * * 39μs
Display ON/OFF Controlディスプレイ(D)とカーソルのON/OFFを設定
(C:カーソル,B:点滅するかどうか)0 0 0 0 0 0 1 D C B 39μs
Clear Displayディスプレイをクリアする(DDRAMをクリア)
0 0 0 0 0 0 0 0 0 1 1.53 ms
Entry Mode Setカーソル(I)とシフト(S)の設定
0 0 0 0 0 0 0 1 I H 39μs
Set DDRAM AddressDDRAMのアドレス(A)を設定
0 0 1 A A A A A A A 39μs
Write Data to RAMDDRAMにデータ(D)を書き込む
1 0 D D D D D D D D 43μs
LCD_DATA[7:0]LCD_RWLCD_RS
57
LCDの初期化RS R/W D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 1 1 1 0 0 0
RS R/W D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 1 1 0 0
RS R/W D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 0 0 1
RS R/W D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 1 1 0
RS R/W D7 D6 D5 D4 D3 D2 D1 D00 0 1 0 0 0 0 0 0 0
3 8
0 C
0 1
0 6
8 0
カーソルとディスプレイシフトを行う
ディスプレイをONにする
ディスプレイをクリア
入力モードをセット(カーソルは使わない)
DDRAMアドレスを00にセット
58
VGA Controller• 640x480を描画 (RGBの各色成分は10ビット)• バッファメモリを使用
(M4Kで実現)
• VGA DACチップは25.2MHzで動作 (PLLを使用)
VGA_CLK: VGA DACチップのクロック(25.2MHz)VGA_BLANK: ブランク(空白)信号(H:描画 L:空白)VGA_HS:垂直同期信号VGA_VS:水平同期信号VGA_SYNC: 同期信号(常にLでよい!?)
VGA_R:赤成分信号
VGA_G:緑成分信号
VGA_B:青成分信号
10
10
10
59
画面データと同期信号
Display Time(BLANK = H)
Blanking Time (BLANK = L)
*数字は25.2MHzクロックのカウント数
HS
VS 96 48 640 1648
011
322
80052
5
60
VGAコントローラの設計例
61
バッファメモリの構成
X: 640 (=80 x 8)
Y:4
80 (=
60 x
8)
FPGA内部のM4Kをバッファメモリとして使用メモリ量節約のため, 80x60ドットの画像を拡大して表示色成分は2bitに圧縮(64色に圧縮)
80
60
色データ(6bit)アドレス(13bit)
1111111111111
0000000000000
0000000000010
0000000000011
0000000000100
メモリのアドレス
= { Y[8:3], X[9:3]}
62
Audio Codec Chip• 18.2MHzで動作(PLLを使用)• 48khz~8000hzのサンプリングレートに対応
• データ幅は16ビット/ステレオ
• LINE INやMIC INを増幅してデジタル化することもできる
• 今回はDAC のみ使用
– データはシリアル通信で転送
AUD_ADCLRCK:左右のイネーブル信号入力(今回は未使用)AUD_ADCDAT:データ信号入力(シリアル)AUD_DACLRCK:左右のイネーブル信号出力
(H:右データ
L:左データ)
AUD_DACDAT:データ信号出力(シリアル)AUD_XCK: Codec Chip用クロック(18.2MHz)AUD_BCLK: データストリームクロック
63
Audio Codec Chipのタイミングチャート
• DAC(48khz/16bit/stereo)として使用する場合– FPGAからデータを送って音を出力
15 14 13 0 15 14 0 15
AUD_DACLRCK
AUD_BCLK
AUD_DACDAT
1/f = 1/48000
right data = 16bit left data = 16bit
right
left
1/f = 1/48000
16bitに量子化
16bit 2の補数表現
64
Audio Playerの設計例
• 神の声ジェネレータ○×*Σ◎〒
μ!!
48KHz x 16bit x stereo では
データ量が大!
1.2KHz x 8bit x monoのデータを展開する
○×*Σ◎〒
μ!!
65
サンプリングとデータの変換• 12000hz x 4 = 48000hz なので, 4回同じ波形を出力
• 8bitのデータは16bitに拡張
• monoデータを左右両方に送って擬似stereoにする
1/12000 1/48000
8bit16bit
12000hz8bitmono
48000hz16bitstereo
66
タイミングチャート
AUD_DACLRCK
AUD_BCLK
AUD_DACDAT
1/f = 1/480001/f = 1/12000
同じデータストリームを8回送信する
8bit データを16bitに変換16bit_data = { 2'b00, 8bit_data, 6'b000000}
ダウンスケーリング誤差によるピークの変動が激しいため2bit 0を詰めました
67
SD Card• 高10MHz前後で動作 (バラツキのためこの数値は曖昧)• SPIモードとSD Cardモードがある
• 4本の信号線でデータをやりとりする(SPIモード)• カードの初期化が必要
• データの読み書きはブロック単位(1ブロック=512Byte)
SD_DAT:SDカードからのデータ信号線SD_DAT3:SDカード選択信号SD_CMD:送信コマンド信号線SD_CLK: SDカードへのクロック
68
SDカードとMMCカード• SDカードはMMCカードの上位互換(SDカードコネクタには
MMCカードも挿入可)• どちらもSPIモードに切り替えることができる
(同じプロトコルでアクセスできる)
(SDモード/SPIモード) (MMCモード/SPIモード)
69
信号の接続
SD_CMD
SD_DAT3
SD_CLK
SD_DAT
70
SDカードのコマンドとレスポンス• コマンド長は6Byte(5Byte:コマンド, 1Byte:CRC)• N_CR:コマンド応答時間
• レスポンスの読み出し: DOを読み取って"0"を読み取る
71
代表的なコマンド
72
シングルブロックの読み出し
73
SDカードの初期化の手順1ms待つ
DI→Hにして74clock送信
CS→LにしてCMD0を送る(CMD0を受け取ったときにCSがLであれば
SPIモードに移行). CRCは0x95に設定
0x00を受け取ればCMD0は成功.次にCMD1を送る.(SDカードはACMD41の
ほうがよい?)
レスポンスが…0x01
0x00
初期化完了
74
WAV File Playerの設計例
12000hz/8bit/monoデータをSDカードに保存
Audio Codecコントローラは先ほどの回路を流用
FPGAにバッファメモリと
シーケンサを実装
75
Altera NiosIIのチュートリアル
76
Altera NiosIIのチュートリアル
• NiosIIを組込んだシステムの設計フロー
• NiosII を動かしてみよう
– SOPC Builderの使用法
– NiosII IDEの使用法
• Nios II を拡張してみよう
• Model Simを用いたNiosIIのシミュレーション
77
Nios II を組込んだシステムの設計フロー
Nios II
Memory
DCTCore
JTAGTimerI/O
システム設計
ハードウェア設計
ソフトウェア設計
SOPC Builder を使って
システムを構成します
Quartus II を使って
システムのハードウェアを設計します
Nios II IDE を使って
設計したハードウェアで動かすソフトウェアを設計します
78
Nios II を動かしてみよう(1) • まずプロジェクトを作成します
– 適当なディレクトリを作成し、プロジェクトを作成してください
– ターゲットデバイス:EP2C35F672C6
• 次にSOPC Builderを使ってNiosII を生成します– Tools -> SOPC Builder をクリックしてください
79
Nios II を動かしてみよう(2) • システム名を聞かれますので、好きな名前を入力してください
– ここではNiosII_Coreとしておきます
– Target HDL はverilogにチェックをつけてください
– 全て終われば OK をクリックしてください
80
Nios II を動かしてみよう(3) • SOPC Builderが起動します
– 以下の設定を確認してくださいClock を設定します'clk', 'External', '50.0'になってるか確認してください
ターゲットボードを指定します今回は'Unspecified Board',Device Familyは'Cyclone II'にします
81
Nios II を動かしてみよう(4) • Nios II をシステムに追加します
– Avalon Components -> Nios II Processor をダブルクリックしてください
– Nios II/e にチェックをつけて
Finish をクリックしてください
1. Nios II Procesorをダブルクリック
2. Nios II/e にチェックをつける
82
Nios II を動かしてみよう(5) • Nios II がシステムに追加されました.• 次にデバッグ用にJTAG-UART を追加します
– Communication -> JTAG UART をダブルクリックしてください
– ウィンドウが開きますので, Finishをクリックしてください
1. JTAG UART をダブルクリック
83
Nios II を動かしてみよう(6) • メモリをシステムに追加します
– Memory -> On-Chip Memory をダブルクリックしてください
– Total Memory Size に"16"を入力してFinishをクリックしてください
1. On-Chip Memory をダブルクリック
2. Total Memory Sizeを"16"Kbyteにする
84
Nios II を動かしてみよう(7) • I/Oポートをシステムに追加します
– Other -> PIO (Parallel I/O) をダブルクリックしてください
– 何も変えずにFinishをクリックしてください
1. PIO をダブルクリック
85
Nios II を動かしてみよう(8) • PIOの名前を変えてみましょう
– pio_0を右クリックし, Renameを選択してください(図1)– "LEDG"と入力してください(図2)
図1: Renameを選択
図2: LEDGと入力
86
Nios II を動かしてみよう(9) • Base Addressを設定します
• 組み込みシステムは各機器にレジスタを割り当てて
直接レジスタを読み書きすることで各機器をコントロールします
• SOPC Builder はこれらのアドレスを
Base Addressを使って管理します
• Base Addresはコンポーネントを追加するたびに
自動で設定することができます– System ->
Auto-Assign Base Addressesをクリックしてください
87
Nios II を動かしてみよう(10) • Baseアドレスが更新されます
• この作業はコンポーネントを追加・削除するたびに
必ず行ってください!
88
Nios II を動かしてみよう(11) • System Generation タブをクリックします
• Simulation にチェックが入っているのを確認し, Generate をクリックしてください
1. System Generation タブをクリック
2. ModelSim のプロジェクトを生成する
チェックが入っているか確認
3. Generate をクリック
89
Nios II を動かしてみよう(12) • ExitをクリックしQuatrusIIに戻ります
• ここからは生成したVerilog をQuartus II で合成し
FPGAのダウンロードデータを生成します
• 評価版はNios IIのverilogを直接読み書きできないので
回路図エディタから設計します– File -> New をクリックし, Block Diagram/Schematic File を選択し
てください
90
Nios II を動かしてみよう(13) – 回路図エディタをダブルクリックしてください
– シンボルウィンドウが開くので
Libraries -> Project -> NiosII_Coreを
選択し
OKを押します(NiosII_Coreは先ほど指定したシステム名です)
1. 回路図エディタをダブルクリック
2. Libraries->Project->NiosII_Coreを選択
3. シンボル図が現れる
4. OKをクリック
91
Nios II を動かしてみよう(14) • Nios II を適当な場所に配置し, 入力ピンを接続します
– 空き部分をダブルクリックし, Symbol ウィンドウを開きます
– Libraries->c:/altera/quartus60/..->primitives->pin->inputを選択し
てください
1. ダブルクリック
2. pin -> inputを選択
92
Nios II を動かしてみよう(15) • clk の線にピンの端がつながるように配置してください
• 同様に入力ピンをreset_nに接続します– ピンを選択して, Copy -> Paste で貼り付けることもできます
93
Nios II を動かしてみよう(16) • 出力にもoutputピンを接続してください
• ピンの名前と信号線幅を設定します– pin_name (clkに接続しているピン)を右クリックし,
Propertiesを選択します(図1)– Pin PropertiesウィンドウのPin nameに"CLOCK_50"を入力します(図2)
図1:Propertiesを選択 図2: ピンの名前を設定
94
Nios II を動かしてみよう(17) • 同様にKEY[0](reset_nへ), LEDG[7..0](outputへ)
を設定します
• 回路図エディタでは複数ビット幅を[n..0]で指定します
(verilog では [n:0]signalで指定していました)
KEY[0]に設定
LEDG[7..0]に設定
95
Nios II を動かしてみよう(18) • 回路図を保存し, コンパイルを行います
(おそらくトップモジュールとして認識するため, デフォルトの
保存名がトップモジュール名.bdfになるはず)• コンパイル終わったらピンをFPGAに割り当ててください
(加算機の設計で説明した方法で)• ピン配置が終わったら, もう一度コンパイルを行ってください.
コンパイルが成功すれば, QuartusIIを使ったハードウェアの
設計は終わりです!
• 次は NiosII IDEを使ってソフトウェアを設計していきましょう
96
Nios II を動かしてみよう(19) • Nios II IDE を起動します
– work space の場所を確認してくるので
OK を選択します
– work space とはプロジェクトやライブラリを置くディレクトリのことです
• 初めにプロジェクトを作成します– File -> New -> Project を選択します
97
Nios II を動かしてみよう(20)
1. C/C++ Applicationを選択してください
2. プロジェクト名を設定します(ここでは"sample_project"とします)
3. 先ほど設計したシステムを読み込みます
4. "Hello World Small"を選択
Browse をクリックして先ほどQuartus II 上で設計した
プロジェクトのフォルダ内の**.ptfを指定
5. Finish をクリック
98
Nios II を動かしてみよう(21)• まず, ビルドを行ってシステムライブラリを構築します
1. 右クリック
-> Build project を選択してください
99
Nios II を動かしてみよう(22)• 以下のように
hello_world_small.c を変更してください
100
Nios II を動かしてみよう(23)• 入力が終わりましたら, コードを保存
してください
• そしてもう一度ビルドを行ってください– やりかたはさきほどと同じです
• ビルドが完了したら左にあるC/C++ Project タブ内の
system.h をダブルクリックしてください
101
Nios II を動かしてみよう(24)• system.h の中身が真ん中のエディタ部に表示されます
• PIO_0_BASE はSOPC Builder で設定したLEDにアクセス
するためのアドレスです
• system.h をインクルードすることでこれらの変数にアクセス できます
102
Nios II を動かしてみよう(25)• では実際に FPGA 上で動作させてみましょう
• まず, Nios II を含むコンフィギュレーションデータをFPGAに 転送しなければなりません
– Tools -> Quartus II Programmer を選択してください
– Programmer が起動しますので Add File.. で
**.sofを選択し,Program にチェックをつけてから
Start をクリックします
1.
2.
3.
4.
103
Nios II を動かしてみよう(23)• あとはソフトウェアをFPGAに転送すればおしまいです!
– プロジェクト名を右クリック
-> Run As -> Nios II Hardware を選択し
てください
104
Nios II を動かしてみよう(23)• もしエラーが出る場合はJTAGの設定が行われていないかも
しれません– Run -> Run.. をクリックしてください
– Runウィンドウが起動しますのでUSB-Blasterが選択されているか
確認し, Runボタンをクリックしてください
105
ここまでのまとめ
• SOPC Builder, Quartus II, Nios II IDEを使ってNios IIを設 計し, 簡単なプログラムを動作させました
• ブロック図エディタを使ってシステムを設計しました
• 課題:– プログラムを改造してLEDをいろいろ点滅させてみましょう
106
Nios II を拡張してみよう(1)• LEDだけでは面白くないので7SEGを使ってみます
• Quartus II を起動し, さきほど設計したプロジェクトを開き
SOPC Builder を起動してください
Quartus II を起動 SOPC Builder を起動
107
Nios II を拡張してみよう(2)• 左のコンポーネントリストから以下のものを追加してください
– PIO: output, 32bit -> SEVEN_SEGMENT にRename– PIO: input, 18bit -> DPSW に Rename
• 追加し, Renameが終わったら, ベースアドレスを更新します– System -> Auto-Assign Base Addressesを選択してください
• System Generation タブをクリックし, Generate をクリックし てください. SOPC Builder での作業はおしまいです.
108
Nios II を拡張してみよう(3)• QuatrusII に戻り, NiosII の回路図を右クリックして
Update Symbol or Block を選択してください
109
Nios II を拡張してみよう(4)• Nios II が更新されます. 新しいポート名がさきほどSOPC
Builder で設定したポート名になっているか確認してください
• ポートの接続を行ってください. ただし, SEVEN_SEGMENTの接続だけは行わないでください.
110
Nios II を拡張してみよう(5)• 加算機の設計でも述べましたが、7SEGは4bitの数値データを
入力して7ビットのSegmentデータに変換する回路が必要です
• "加算機の設計"で使用した
7segmentのデータに変換する verilog を現在のプロジェクトにコピーしてください
– CD-ROM¥DE2¥DE2_demonstrations¥DE2_Default にある
SEG7_LUT.v, SEG_LUT.v をコピーしてもよい
• 次にこれらのファイルをプロジェクトに取り込みます– Entity を右クリック
-> Settings ->Files -> Add All を選択してください
111
Nios II を拡張してみよう(6)• verilog ファイルを開き, 回路図に変換します
– ファイルを開くアイコン
をクリックし, SEG7_LUT_8.vを開いてください
• SEG7_LUT_8.v がエディタに現れている状態で– File -> Create/Update -> Create Symbol Files for Current File を選
択してください
112
Nios II を拡張してみよう(7)• 再びNios IIを設計している回路図を開きます
• 空きスペースをダブルクリックすると・・
Project 内に先ほどの verilog の回路図が追加されている!
113
Nios II を拡張してみよう(8)• このモジュールをNios IIに接続し, ピンを接続してください
– 出力ピン名を7SEGと同じ名前にするとピン割当てが不要になる!
• verilog を書き直した場合, 該当するブロックを右クリックし
Update Symbol or Block を選択すれば更新できます
114
Nios II を拡張してみよう(9)• 再度コンパイルを行ってください
• 次はソフトウェアの設計します
• Nios II IDE を起動してください
• 新規プロジェクトを作成します– プロジェクト名: SEGMENT– CPU: さきほど設計したディレクトリにある***.ptfを選択
– テンプレート: hello world small
• プロジェクトを作成したら、ビルドを行ってください
115
Nios II を拡張してみよう(9)• 以下のプログラムを入力して動作させてみましょう
– 動作:Programmer でNios IIをFPGAに転送、Run を行う
116
ここまでのまとめ
• Nios II にverilog で設計した回路を組込み動作させました
• 入出力を扱ってみました
• 課題:– プログラムを改造して7SEGの表示をいろいろ変えてみましょう
117
おわりに
• 本ドキュメントに対する質問・要望、およびバ グを見つけたら
nakahara at aries01.cse.kyutech.ac.jpまで連絡をください