21
1 Verilog-HDL 講習会DE0編(6) 順序回路記述(1) ~カウンタを例題として~ 12, June, 2013 鹿児島大学 中原 啓貴

Verilog-HDL Tutorial (6)

Embed Size (px)

Citation preview

1

Verilog-HDL 講習会DE0編(6) 順序回路記述(1)

~カウンタを例題として~

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

2

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

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

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

3

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

Verilog-HDLを入力

4

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

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

5

いよいよ順序回路編です •  ほぼ全ての実用的な回路は順序回路です •  順序回路の記述法をマスターすることが、FPGAを使いこなせるかどうかのポイント

•  頑張って理解しましょう! ‒ とはいえ、言語ですから 「たくさん書いて慣れろ」

6

順序回路とは? •  組合せ回路の出力:現在の入力 •  順序回路の出力: ‒ 現在の入力+現在の状態 (現在の状態=過去の入力)

•  つまり、順序回路は現在と過去の 入力に応じて出力する回路といえる •  過去の入力を記憶  状態を記憶

•  状態を記憶する記述!?

組合せ 回路

組合せ 回路

記憶 素子

外部 入力

外部 出力

外部 入力

外部 出力

状態 出力

状態 入力

組合せ回路

順序回路

7

例題:4ビットカウンタ •  クロックに同期するカウンタ

4ビット 加算器

4ビット レジスタ

クロック

0010 0001 0000

リセット信号

8

カウンタの記述

9

解説 4ビット 加算器

4ビット レジスタ

レジスタ宣言 レジスタを宣言します

クロック信号の 立ち上がり

リセット信号の 立ち下がり or

(または) に always@ 以下の 処理が行われる

10

解説(続き) always@( クロック信号 or リセット信号) begin

if( クロック信号 )begin (レジスタ初期化); end else begin (順序回路の処理); end

end

always@() は定型文で記述

レジスタに代入するときは 「 <= 」を使う!(ノンブロッキング代入)

左辺はレジスタ値にする

11

リセット信号 初期化を記述

クロックを記述

シミュレーションで動作を確認

12

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

リセットがかかるまで 値が決まらないので 出力は不定

リセット中は 初期値が出る

リセット後は クロックの立ち上がりで カウントする

LEDG[3:0]を COUNT_VALUEに纏めた

13

FPGAボード上に実装してみる

全部点灯する??

14

原因の考察 •  基準クロック 50MHz に同期 •  LEDの点滅が早すぎる!

4ビット 加算器

4ビット レジスタ

クロック (50MHz)

考えてみよう: 50MHz のとき 点滅の間隔は ____[nsec]である.

リセット信号

15

タイミングを調整 タイミング調整用の値を 保持するレジスタ宣言

レジスタ初期化

50MHz カウントしたら LEDを1つインクリメント

16

FPGAに再度書き込み

LEDがゆっくり カウント アップすると 成功

17

右から左に流れるLED •  以下の動作をする回路を記述せよ ‒ ただし、LEDが切替るのは1秒間隔とする

4ビット レジスタ

クロック (50MHz)

どこを書き換えればよいか? リセット信号

18

答え •  初期値を与え左シフタを記述するだけ!

加算はコメントアウト

左シフタ

初期値を変更

19

FPGA上に実現

LEDが右から左へ 点灯すると成功

20

課題1 ただしLEDの点灯間隔は全て1秒とする 1.  LEDを点滅させよ 2.  スライドスイッチがOFF: ダウンカウンタ スライドスイッチがON: アップカウンタ となる回路を作成せよ

3.  スライドスイッチがOFF: LEDが右→左 スライドスイッチがON: LEDが左→右 となる回路を作成せよ

21

課題2 ただしLEDの点灯間隔は全て1秒とする 1.  7セグメントLEDがカウントアップする回路を作成し, DE0ボード上に実現せよ. ただし, 0から7までのカウントでよい.

2.  1.で作った回路を スライドスイッチがOFF: ダウンカウンタ スライドスイッチがON: アップカウンタ となるように改造せよ