verilog-hdl tutorial (4)

38
1 Verilog-HDL 講習会DE0編(4) 組合せ回路記述 12, June, 2013 鹿児島大学 中原 啓貴

Upload: hiroki-nakahara

Post on 10-Aug-2015

71 views

Category:

Education


4 download

TRANSCRIPT

1

Verilog-HDL 講習会DE0編(4) 組合せ回路記述

12, June, 2013 鹿児島大学 中原 啓貴

2

先週の復習:全加算器

x_in y_in

carry in

carry out

sum out

半加算器

x_in y_in carry in sum out

carry out

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

3

nビット加算器 •  全部の加算器を記述していると面倒!

x0

x1

x2

y0

y1

y2

0 s0

s1

s2

s3

x2 x1 x0 +)y2 y1 y0 -------------- s3 s2 s1 s0

4

モジュール •  共通部分を読出し→記述量を減らす ‒ C言語における「関数」のようなもの

x0

x1

x2

y0

y1

y2

0 s0

s1

s2

s3

x2 x1 x0 +)y2 y1 y0 -------------- s3 s2 s1 s0

3ビット加算器モジュール

全加算器モジュール

5

•  ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)

DE0付属のCD-ROM ”Demonstrations”内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_4¥ 内にコピー

DE0_TOP.qpfをダブルクリックしてQuartus IIを起動

6

Pin Plannerを開いてみると ピン配置が終わっている!

Verilog-HDLを入力

7

ダブルクリック Verilog-HDLの テンプレートが 表示されるので コードを入力

コード入力したら保存を忘れずに!

8

入力するVerilog-HDL

9

入力するVerilog-HDL (続き)

10

モジュールの記述方法

(モジュール名) (インスタンス名) ( ポート・リスト );

最後にセミコロン「;」をつける!

モジュール名: full_adder インスタンス名: fadr_inst_1

11

SW[0]

SW[1]

SW[2]

SW[3]

SW[4]

SW[5]

0 LEDG[0]

LEDG[1]

LEDG[2]

LEDG[3]

three_bit_adder

fadr_inst_1

fadr_inst_2

fadr_inst_3

w[0]

w[1]

Verilog-HDLと回路の対応を確認

12

ビット幅指定 •  同じ属性を持った信号をまとめる ‒  記述量の削減 ‒  コードの可読性向上

x[0]

x[1]

x[2]

y[0]

y[1]

y[2]

0 s[0]

s[1]

s[2]

s[3]

x[2] x[1] x[0] +)y[2] y[1] y[0] ---------------------- s[3] s[2] s[1] s[0]

シミュレータの指定 (プロジェクト毎に1回行えばよい)

13

デバイス名(ここではCyclone III)を 右クリックして「Settings...」を選択

14

"EDA Tool Settings"の "Simulation"を選択

"Tool name"で"ModelSim-Altera"を選択

"Format for output netlist"で"Verilog-HDL"を選択

15

合成の実行

クリック

コンピュータ (Quartus II)に I/Oの設定を読み込ませる ために合成を行います。

"Full Compilation was succesful"と 表示されればOK

テストベンチのテンプレート生成

16 「Start Test Bench Template Writer」を選択

テストベンチの読み込み (プロジェクト毎に1回行えばよい)

17

シミュレータ指定と 同じく、Settingsを呼び出し、 "EDA Tool Settings"の "Simulation"を選択

"Compile test bench"にチェックをつけて、 Test Benchesをクリック

テストベンチの読み込み

18

"New"をクリック

"Test bench and simulation files" の File name 内の「...」をクリック

テストベンチを読み込み (デフォルト設定では、プロジェクトを置いている

フォルダ/simulation/modelsim内に 「プロジェクト名.vt」で置いている)

19

テストベンチを選択 (拡張子は「.vt」)

テストベンチ名と トップモジュール名の設定

20

テストベンチ名はプロジェクト名(ここではDE0_TOP)

テストベンチのトップ・モジュール名は テンプレート生成をしていれば 「テストベンチ名」+「_vlg_tst」

”Add”をクリックして プロジェクトに テストベンチを追加

あとは全てOKでよいです。

ModelSim(Altera版)の起動

21

クリック

こんなスプラッシュ ウインドウが起動します...

テストベンチの修正

22

”Library”をクリック

テストベンチ”DE0_TOP_vlg_tst”を 右クリック→Editを選択

23

入力値を指定 (ビット幅)'(基数)値で 複数ビットの定数を 指定できます

always間は コメントアウト

記述が終わったら 保存しましょう

今回記述するテストベンチ

区切り"_"を入れてもよい

24

ビット幅指定の書式 ビット幅の宣言: (属性) [(ビット幅-1):0] (信号名); ビットの指定: (信号名)[(ビットインデックス)] 複数ビットの指定: (信号名)[(インデックス):(インデックス)]

再度コンパイルを行い シミュレーションを初期化します

25

テストベンチ名を右クリックして「Recompile」を選択 再度、右リックして「Simulate」を選択

観測したい信号を Waveウインドウに追加します

26

Verilog-HDLで使っている SW[5]~SW[0]と LEDG[3:0]を追加しましょう

”Objects”ウインドウ で信号を右クリック →「Add Wave」を 選択

シミュレーションの実行

27 "Transcript"ウインドウで run 3nsと入力し、リターンキーを押す

シミュレーション結果がでるが わかりにくい…

表示方法の変更

28

SW[5]~SW[3]を選択し 右クリック→「Combine Signals」 を選択

Result Nameに「x_in」と入力

SW[5:3]が纏められて見やすくなった

同様に他の信号もグループ化

29

SW[2]~SW[0]を 「y_in」に

LEDG[3]~LEDG[0]を 「z_out」に

各信号はドラッグ&ドロップで移動可能

何となく、加算器として 見やすくなった! 例: 001+001=0010

基数を変更する •  2進数では理解しにくい→10進数へ

•  全て10進数にすると一目瞭然!

30

信号を右クリック→「Radix」→「Unsigned」を選択

31

合成の実行

クリック

Quartus IIに戻って 合成しましょう

"Full Compilation was succesful"と 表示されればOK

32

FPGAをPCに接続し、 電源を入れます 1. ACアダプタを接続

2. USBケーブルを介して PCとFPGAボードを接続

3. 電源スイッチをオン

33

Programmer (書き込みツール)の起動

クリック

34

コンフィギュレーションを開始

USB-Blaster, JTAGモード, Programにチェックを確認

確認したら ”Start”を クリック

Progress に "100%(Successful)" と表示されれば成功

動作確認 シミュレーション結果と一致しましたか?

35 スライドスイッチ(SW0~SW5)を 動かして, LEDG0~LEDG3が 3ビット加算器として動作するかチェック

36

課題: 信号選択回路 (2-MUX) s x1 x2 y 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1

2-MUX x1

x2 y

s

選択信号 s が0のときは x1 を選択, s が 1 のときは x2 を選択する回路

37

課題1 •  選択回路(2-MUX)を Verilog-HDLで記述し、 FPGA上で動作させよ ‒ 選択信号, 入力信号はスライドスイッチ ‒ 出力信号は緑LED

2-MUX SW[0]

SW[1] LEDG[0]

SW[2]

38

課題2 •  モジュール記述を用いて4-MUX をVerilog-HDLで記述しなさい ‒  可能ならば, ビット幅指定記述も用いる

•  シミュレーションを行い, 動作すること検証せよ •  DE0ボード上に実装し、動作を確認せよ

2-MUX

2-MUX

2-MUX

SW[0]

SW[1]

SW[2]

SW[3]

SW[4] SW[5]

LEDG[0]