verilog-hdl 講習会de0編(5)...

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

Upload: others

Post on 07-Mar-2020

1 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

1

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

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

Page 2: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

2

•  ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう!

(DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)

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

Page 3: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

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

3

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

Page 4: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

Verilog-HDLを入力

4

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

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

Page 5: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

5

課題: 信号選択回路 (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 を選択する回路

Page 6: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

6

信号選択回路 (2-MUX) の MIL記号による表現

2-MUX x1

x2 y

s

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

y = s x1 v s x2

x1

x2

s

y

SW[0]

SW[1]

SW[2]

LEDG[0]

LEDG[0]

SW[2]

SW[1]

SW[0]

Page 7: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

7

2-MUXのVerilog-HDL記述 (MIL記号図ベース)

Page 8: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

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

8

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

Page 9: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

9

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

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

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

Page 10: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

10

合成の実行

クリック

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

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

Page 11: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

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

11 「Start Test Bench Template Writer」を選択

Page 12: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

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

12

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

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

Page 13: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

テストベンチの読み込み

13

"New"をクリック

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

Page 14: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

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

14

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

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

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

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

Page 15: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

ModelSim(Altera版)の起動

15

クリック

”Library”をクリック

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

Page 16: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

16

テストベンチ記述 赤枠で囲った部分を記述

整数を宣言(テストベンチのみ使える). 整数は32ビットです。つまり、 reg [31:0]i ;と同じ.

iを初期化

for文はテストベンチのみ使えます. ただし, C言語のような i++ は使えません!

コメントアウト

Page 17: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

17

シミュレーション結果の確認

保存して, 「Recompile」を 行った後「Simulation」で シミュレーションを設定. SW[2]~SW[0], LEDG[0]を Waveウインドウに登録して、 10nsシミュレーションを実行 してみよう.

Page 18: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

18

合成の実行

クリック

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

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

Page 19: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

19

FPGAをPCに接続し、 電源を入れます

1. ACアダプタを接続 2. USBケーブルを介して PCとFPGAボードを接続

3. 電源スイッチをオン

Page 20: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

20

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

クリック

Page 21: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

21

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

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

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

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

Page 22: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

22

スライドスイッチSW2 がオフのときは LEDGがSW0と同期して点滅, SW2がオンのときはLEDGがSW1と 同期して点滅するかチェック

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

Page 23: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

23

2-MUX のVerilog-HDL記述 (条件演算子)

以前の記述をコメントアウト 以下を入力

Page 24: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

24

解説 •  Verilog-HDLのコメントアウト

‒ 「//」:一行をコメントアウト ‒ 「/* */」:複数行をコメントアウト C言語と同じです

•  条件演算子

assign 信号名 = ( 条件文) ? Val真 : Val偽; (Val真…真のときに代入される値 Val偽…偽のときに代入される値) ※多ビットの条件、値の代入も可能 assign s[2:0] = (a[1:0] < 2'b10 ) ? 3'b010 : 3'b111;

Page 25: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

25

シミュレーションしてみましょう 同じ結果になったはずです

Page 26: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

26

スライドスイッチSW2 がオフのときは LEDGがSW0と同期して点滅, SW2がオンのときはLEDGがSW1と 同期して点滅するはず

DE0ボードに書込んで動作確認 同じ動作になりましたか?

Page 27: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

27

複雑な条件式の記述 •  条件演算子や論理式

‒ 複雑な条件分岐の記述は困難 ‒ 可読性が悪い

•  If文を使いたい!

assign f = ( c1 == 1'b0) ? ( ( c2 == 1'b0) ? 2'b00 : 2'b01) : ((c2 == 1'b0) ? 2'b10 : 2'b11);

if( c1 == 1'b0) { if( c2 == 1'b0) { f = 2'b00; } else { f = 2'b01; }

} else { if( c2 == 1'b0) { f = 2'b10; } else { f = 2'b11; }

}

Page 28: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

28

Function文の例

以前の記述をコメントアウト

ここを記述

セミコロン

セミコロン不要

Page 29: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

29

解説 •  Function文

‒ 関数のようなもの ‒ モジュール呼び出しと異なり、モジュール内に記述

•  呼び出し: assign = (Function名)(ポート・リスト); •  関数: function (ビット幅)(Function名); (ポート宣言); (関数記述, if文など) 代入は assign 不要. ただし, (Function名)=(値); endfunction

癖がある記述なので、たくさん書いて慣れよう!

C言語の中括弧「 { 」「 } 」は 「begin」「end」になります

変数の順序が一致 しなければならない!

Page 30: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

30

シミュレーションしてみましょう 同じ結果になったはずです

Page 31: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

31

スライドスイッチSW2 がオフのときは LEDGがSW0と同期して点滅, SW2がオンのときはLEDGがSW1と 同期して点滅するはず

DE0ボードに書込んで動作確認 同じ動作になりましたか?

Page 32: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

32

ルック・アップ・ テーブル

(真理値表記述)

ここを記述

以前の記述を コメントアウト (/* */ を使ってみよう)

論理合成 ↓

シミュレーション とFPGAで

動作を確認する

複数の信号は 「{ }」でまとめる

Page 33: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

33

解説 •  Case文:真理値表を記述 Function文に使える ‒ もう一つの使用法は後日します case ( 変数リスト(複数記述してもよい)) (一致する値): (Function名) = (値); endcase

全ての組合せを記述

複数記述するときは「{ }」を使う

Page 34: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

34

まとめ •  複雑な組合せ回路を記述する方法

‒ 論理式: 記述量が少ないが可読性が悪い • 算術演算も記述可能(全加算器を設計しましたよね)

‒ 条件演算子: 単純な条件演算の記述に向く • 複雑な条件演算には向かない

‒ Function文 •  If文:記述量が多いが可読性がよい •  Case文:最も記述量が多いが、設計・可読性に優れる

目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス)

Page 35: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

35

課題1 •  デマルチプレクサを論理式, 条件演算子, If文, case文で記述し、シミュレーションとFPGAで 動作を確認せよ

De-MUX x

s

y[0]

y[1]

s x y[0] y[1] 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1

Page 36: Verilog-HDL 講習会DE0編(5) 組合せ回路記述(続)目的の回路に応じて適切な記述を選択するのが 設計者の仕事(センス) 35 課題1 • デマルチプレクサを論理式,

課題2 •  スライドスイッチ(3ビット)の値を 7セグメントLEDに表示せよ (注意: 7セグメントLEDは負論理、つまり0のとき点灯,1のとき消灯する)

36 OFF, OFF, OFF OFF, OFF, ON ON, ON, ON