verilog-hdl tutorial (3)

38
1 Verilog-HDL 講習会DE0編(3) Verilogの基礎と 論理シミュレーション 12, June, 2013 鹿児島大学 中原 啓貴

Upload: hiroki-nakahara

Post on 10-Aug-2015

86 views

Category:

Education


3 download

TRANSCRIPT

Page 1: Verilog-HDL Tutorial (3)

1

Verilog-HDL 講習会DE0編(3) Verilogの基礎と

論理シミュレーション

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

Page 2: Verilog-HDL Tutorial (3)

2

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

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

Page 3: Verilog-HDL Tutorial (3)

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

3

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

Page 4: Verilog-HDL Tutorial (3)

4

今回は全加算器を設計します

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

SW[0]

SW[1]

SW[2]

LEDG[1]

LEDG[0]

DE0ボードを使うので, スライドスイッチ(SW)と 緑LED(LEDG)に入出力を割当てています

Page 5: Verilog-HDL Tutorial (3)

Verilog-HDLを入力

5

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

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

Page 6: Verilog-HDL Tutorial (3)

6

入力するVerilog-HDL

Page 7: Verilog-HDL Tutorial (3)

7

module モジュール名( ポートリスト ); ポート宣言 レジスタ宣言 ネット宣言 回路記述 •  組合せ回路 •  順序回路 endmodule

ポート・リスト

ポート宣言

ネット宣言

全加算器の 回路記述部

文の終わりはセミコロン「;」

最初に「module」を書く

最後は「endmodule」を書く

Verilog-HDLの基本構造

半加算器の記述例

Page 8: Verilog-HDL Tutorial (3)

8

モジュールとポートの宣言

topmodule_first_verilog

x_in

y_in

carry_in

sum_out

carry_out

モジュール:回路を表現する箱のようなもの ポート:入出力

Page 9: Verilog-HDL Tutorial (3)

9

ネット宣言

x_in y_in

carry in

carry out

sum out

半加算器

ネット:回路の様々な構成要素を接続

w1

w3

w2

Page 10: Verilog-HDL Tutorial (3)

10

assign文

x_in y_in

carry in

carry out

sum out

半加算器

組合せ回路を記述

w1

w3

w2

Page 11: Verilog-HDL Tutorial (3)

11

assign文 (Cont'd)

x_in y_in

carry in

carry out

sum out

半加算器

「~」: NOT 「&」: AND 「^」: EXOR 「~^」: EXNOR 「|」: OR

w1

w3

w2

Page 12: Verilog-HDL Tutorial (3)

12

注意! assign 文には演算の優先度がある! 優先度の変更は「()」を使う

assign f = a & b | c;

assign f = a & (b | c);

a b c

b c a f

f

Page 13: Verilog-HDL Tutorial (3)

今回はテンプレートを使用

13

モジュール名 ポート宣言は既に記述済み

自分のVerilog-HDLを 最初から読んで、 SW, LEDGの宣言を 探してみよう

Page 14: Verilog-HDL Tutorial (3)

論理シミュレーション (RTLシミュレーション)

•  テストベンチを記述必要がある!

14

SW[0] SW[1]

SW[2]

LEDG[1]

LEDG[0]

半加算器

w1

w3

w2

テストベンチ(要は更に外側にシミュレーション用の 仮想モジュールをかぶせる)

Page 15: Verilog-HDL Tutorial (3)

シミュレータのパス指定 (インストール後に1回行えばよい)

15

デフォルトのインストール先にパスを指定 C:¥altera¥13.0¥modelsim_ase¥win32aloem

"Options"を選択

"EDA Tool Options" を選択

"ModelSim-Altera" のパスを修正

Page 16: Verilog-HDL Tutorial (3)

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

16

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

Page 17: Verilog-HDL Tutorial (3)

17

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

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

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

Page 18: Verilog-HDL Tutorial (3)

18

合成の実行

クリック

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

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

Page 19: Verilog-HDL Tutorial (3)

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

19 「Start Test Bench Template Writer」を選択

Page 20: Verilog-HDL Tutorial (3)

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

20

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

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

Page 21: Verilog-HDL Tutorial (3)

テストベンチの読み込み

21

"New"をクリック

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

Page 22: Verilog-HDL Tutorial (3)

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

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

22

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

Page 23: Verilog-HDL Tutorial (3)

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

23

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

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

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

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

Page 24: Verilog-HDL Tutorial (3)

ModelSim(Altera版)の起動

24

クリック

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

Page 25: Verilog-HDL Tutorial (3)

25 Linarayタブをクリック

"rtl_work"を展開

テストベンチ名を 右クリックして 「Edit」を選択し、 テストベンチを修正します

Page 26: Verilog-HDL Tutorial (3)

修正内容

26

initial~begin間に SWの値を記述。

always~endを コメントアウト (「/*」と「 */」で挟む)

Page 27: Verilog-HDL Tutorial (3)

27

修正したら保存ボタンをクリック

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

Page 28: Verilog-HDL Tutorial (3)

シミュレーション波形の追加

28

”Objects”ウインドウで "SW"を展開する

[2],[1],[0]を選択し、 右クリック→「Add Wave」をクリック

"Wave"ウインドウに 波形名が追加される

Page 29: Verilog-HDL Tutorial (3)

LEDG[1],[0]も追加しましょう

29

Page 30: Verilog-HDL Tutorial (3)

シミュレーションの実行

30 ”run 3ns”と入力し、リターンキーを押す

シミュレーション結果が 波形で表示される!

Page 31: Verilog-HDL Tutorial (3)

31

テストベンチは外部へ接続しないので ポート宣言は不要

テスト入力信号宣言(reg 宣言)

テスト出力信号宣言(wire 宣言)

ユーザが記述した モジュール

テスト入力信号初期値

100単位時間遅らせる命令 精度 1ps, 単位時間: 1ns

テストベンチの最初に定義済み

ここにテストベンチを書く

テストベンチの 記述例

(テンプレートと 比較してみよう!)

Page 32: Verilog-HDL Tutorial (3)

【余談】Verilog-HDLコードの修正 シミュレーションで不具合が見つかったとき

32

修正したいHDLを右クリック→「Edit」で 開いて修正する 再度右クリックして「Recompile」 Transcript(さっき「run 3ns」と入力したところ) で「restart」→「run **ns」とシミュレーションを 再実行するとよい

Page 33: Verilog-HDL Tutorial (3)

33

合成の実行

クリック

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

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

Page 34: Verilog-HDL Tutorial (3)

34

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

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

3. 電源スイッチをオン

Page 35: Verilog-HDL Tutorial (3)

35

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

クリック

Page 36: Verilog-HDL Tutorial (3)

36

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

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

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

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

Page 37: Verilog-HDL Tutorial (3)

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

37

スライドスイッチ(SW0,SW1,SW2)を 動かして, LEDG0, LEDG1が 半加算器として動作するかチェック

Page 38: Verilog-HDL Tutorial (3)

38

課題 •  1. 全加算器をFPGAボード上に実現しなさい ‒  LED, スライドスイッチは適切に選択

•  2. 次の回路をシミュレーションする. また, FPGAボード上に実現し, 動作を確認する. この回路は何か?