Verilog-HDL 講習会DE0編(3) Verilogの基礎と 論理シミュレーション

Preview:

Citation preview

1

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

論理シミュレーション

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

2

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

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

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

3

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

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)に入出力を割当てています

Verilog-HDLを入力

5

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

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

6

入力するVerilog-HDL

7

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

ポート・リスト

ポート宣言

ネット宣言

全加算器の 回路記述部

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

最初に「module」を書く

最後は「endmodule」を書く

Verilog-HDLの基本構造

半加算器の記述例

8

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

topmodule_first_verilog

x_in

y_in

carry_in

sum_out

carry_out

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

9

ネット宣言

x_in y_in

carry in

carry out

sum out

半加算器

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

w1

w3

w2

10

assign文

x_in y_in

carry in

carry out

sum out

半加算器

組合せ回路を記述

w1

w3

w2

11

assign文 (Cont'd)

x_in y_in

carry in

carry out

sum out

半加算器

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

w1

w3

w2

12

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

assign f = a & b | c;

assign f = a & (b | c);

a b c

b c a f

f

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

13

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

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

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

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

14

SW[0] SW[1]

SW[2]

LEDG[1]

LEDG[0]

半加算器

w1

w3

w2

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

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

15

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

"Options"を選択

"EDA Tool Options" を選択

"ModelSim-Altera" のパスを修正

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

16

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

17

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

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

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

18

合成の実行

クリック

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

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

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

19 「Start Test Bench Template Writer」を選択

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

20

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

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

テストベンチの読み込み

21

"New"をクリック

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

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

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

22

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

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

23

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

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

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

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

ModelSim(Altera版)の起動

24

クリック

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

25 Linarayタブをクリック

"rtl_work"を展開

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

修正内容

26

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

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

27

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

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

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

28

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

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

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

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

29

シミュレーションの実行

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

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

31

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

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

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

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

テスト入力信号初期値

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

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

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

テストベンチの 記述例

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

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

32

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

33

合成の実行

クリック

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

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

34

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

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

3. 電源スイッチをオン

35

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

クリック

36

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

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

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

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

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

37

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

38

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

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

Recommended