• 検索結果がありません。

moji_deco_top.vhd トップ回路をVHDLで設計する

ドキュメント内 論理回路設計 (ページ 72-88)

0123456789_I_AM_TOKUYA_FUJIOKA.

② moji_deco_top.vhd トップ回路をVHDLで設計する

③ シミュレーションを実行し、正しく機能しているか確認する

可能な人は、テストベンチを作成して、simを実行して下さい

[QuartusⅡ] ⇐ 新規プロジェクトを作成する

④ 端子割り当て後、実機確認

課題2を早く終わった人は、

・テキストの手順の人 → 以下の内容で再設計する

・変更した手順の人

→ 以下の内容の実現していない部分を完了させる

☆ 手順変更&追加課題

1)

全てをVHDLで記述する

・トップレベル回路をVHDL記述し、コンパイル後、実機確認する

2) 全体の表示サイクルを変更する

・表示サイクル:

(現在)

64秒 → 32秒 [5ビット化]

← peripheral_moji.vhd の内部を変更する必要がある

3)

テストベンチを作成して、シミュレーションを実行する(ModelSim環境下)

① 7segLEDデコーダ単体のテストベンチ作成し、

テストベンチの記述方法を習得する

本資料の「テストベンチ」の項を参照

[変更した手順の詳細]

『名前表示』のシミュレーション

1.シミュレーションのための工夫

1)チャタリングの周波数を変更: 50,000 → 100 [図2-69 ]

・シミュレーションではチャタリングは発生しない(削除しても良い)

2)deco出力の周期を変更: 25,000,000 → 50 [図2-70]

・シミュレーション時間を短縮するため ・図中の50は49が良い

← 0~49: 50

・実機用deco周期: 20ns×25,000,000×2

=1s

・Sim用deco周期 : 20ns×50×2=2000ns=2us

2.シミュレーション時の確認内容

1)decoのカウント数に従って、所望の文字列が発生されているか?

2)カウント数が、asciiコードに正しく変換されているか?

3)7segLEDの信号が正しく生成されている?

4)resetが正しく動作しているか?

5)stop信号が正しく動作しているか?

・1回目押下:カウント停止

→(継続) 2回目押下:カウント再開

『名前表示』のテストベンチ記述例

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

entity deco_top_tb is end deco_top_tb;

architecture SIM of deco_top_tb is component deco_top

port(c,r,stop : in std_logic;

LED0,LED1,LED2,LED3 :

out std_logic_vector (7 downto 0));

end component;

signal c, r, stop: std_logic := '1' ; signal LED0,LED1,LED2,LED3 :

std_logic_vector (7 downto 0);

constant STEP: time := 20 ns ;

begin

U0: deco_top port map( c,r,stop,LED0,LED1,LED2,LED3 );

process begin

c <= '1'; wait for STEP/2;

c <= '0'; wait for STEP/2;

end process ;

process begin

wait for STEP*4000 ; stop <= '0';

wait for STEP*100 ; stop <= '1';

wait for STEP*900 ; stop <= '0';

wait for STEP*100 ; stop <= '1';

wait for STEP*1900 ; r <= '0';

wait for STEP*200 ; r <= '1';

wait for STEP*4800 ;

assert false severity failure;

wait;

end process;

end SIM;

configuration cfg_deco_top_tb of deco_top_tb is for SIM

end for;

clock生成

stop生成

reset生成

DUT: deco_top

-

シミュレーション用回路

『名前表示』のシミュレーション結果(1)

全体表示

『名前表示』のシミュレーション結果(2)

リセット付近 (asciiコードは、表2-4参照)

『名前表示』のシミュレーション結果(3)

ストップ付近 (asciiコードは、表2-4参照[一部ミス有])

4.課題3:

『チャタリング防止回路』

- 第3日目 -

図2-105 チャタリング防止回路配線例

チャタリング防止回路

○ 1入力 1入力

× 1入力 複数入力 チャタリング防止回路

手法1&手法2

チャタリング発生

0 1 2 3 4 5 6 7 ・・・

× 0 2 5 7 8 10 14 ・・・

0 2 5 7 8 _ m ・・・

チャタリング現象とサンプリング周波数

[図 2-60]

入力信号 高周波数

1 1 0 1 1 1 1

低周波数

中周波数

チャタリング発生 チャタリング発生

サンプリング 結果(手法1)

サンプリング 結果(手法1)

サンプリング 結果(手法2)

☆ 基本的には、テキストに従って(テキスト: 138 ~ 148頁)、

設計→実機確認を終了させる。

・ 各モジュールをVHDLで設計 → トップ回路の回路図作成

→ (VHDL)シミュレーション → 実機確認 ・HEX0にButton1の入力に合わせて、

文字列“0123456789_I_am_自分の名前”を表示させる

時間が無い場合は、

手法1 or 2のどちらかを設計する

(モジュール構成)

- chatter:

“手法1”のチャタリング防止回路

prevention_of_chattering_kadai: “手法2”のチャタリング防止回路 - count_ex: Button1の押下回数をカウント

- conversion_ascii:

カウント数をasciiコードに変換

- moji_deco: ascii文字コードを7segLED信号に変換

以上までが、3日目に達成する目標です。

実習の進め方

5.課題4: 『1分時計』

- 第4日目 -

[実現機能] 1/100秒まで表示する1分時計を作る。60秒でトグルする。

(表示例) 12.34 [秒桁に、ドットを表示する]

[ボタン仕様]

Button0(reset):

初期状態に戻る(00.00秒表示に戻る)

[LED表示]

HEX0

: 1/100秒

HEX1

: 1/10秒

HEX2

: 1秒 ← “ドット”を表示させる

HEX3

: 10秒

[モジュール構成]

- dividing: 50MHz(20ns)→100Hz(10ms)への分周回路。

- chatter:

チャタリング防止回路(既設計。手法1、2どちらでも可)

- count10_co:

カウントアップ機能付き10進カウンタ

- count6_co

: カウントアップ機能付き6進カウンタ

- conversion_ascii: asciiコードへ変換(既設計。

簡略化してもよい)

- moji_deco: asciiコードを7segLED信号に変換((既設計。簡略化してもよい)

『1分時計』の開発仕様

『1分時計』のトップ回路図

[入力]

- CLK: 50Mhz(20ns)

- 非同期reset

[出力]

1 2. 3 4

1/100単位 ドットを付ける

60秒で繰り返す

0.01秒の桁

0.1秒の桁

1秒の桁

10秒の桁

ドット表示付き

周期:10ms

count10_co

count10_co

count10_co

count6

conversion_ascii moji_deco

conversion_ascii

conversion_ascii

conversion_ascii

moji_deco

moji_deco?

moji_deco

ドット表示

カウンタ回路とその応用

CLK

Q[2]

D CLK

Q

D CLK

Q

D CLK

Q

Q[1]

Q[0]

+1

Q[0]

Q[1]

Q[2]

Q

CLK CLK周波数: n

周波数: n/2

周波数: n/4

周波数: n/8

⇐ カウント数 分周回路

10進 2進

15 1 1 1 1 14 1 1 1 0 13 1 1 0 1 12 1 1 0 0 11 1 0 1 1 10 1 0 1 0 9 1 0 0 1 8 1 0 0 0 7 0 1 1 1 6 0 1 1 0 5 0 1 0 1 4 0 1 0 0 3 0 0 1 1 2 0 0 1 0 1 0 0 0 1 0 0 0 0 0

n

n

n

n

☆ 基本的には、テキストに従って (テキスト: 149 ~ 166頁) 、 設計→実機確認を終了させる。

・ 各モジュールをVHDLで設計 → トップ回路の回路図作成

(VHDL)シミュレーション → 実機確認

実機動作を優先させる。 ←

本講座のクリア目標

☆ VHDLで全て設計できるようになった人は、

実習の進め方を以下の順序に変更する

こちらの方が好ましい

・ VHDLでModelSim上で設計

→ QuartusⅡで実機確認

(可能であれば) テストベンチを作成し、シミュレーションする

[ModelSim]

⇐ 新規プロジェクトを作成する

分周回路(dividing)をVHDLで設計: 50MHz →

100KHz

へ分周

→ Modelsimでシミュレーション ⇐

テストベンチ or 波形入力

② カウントアップ機能付き10進カウンタ(count10_co)をVHDLで設計

→ Modelsimでシミュレーション

テストベンチ or 波形入力

③ 6進カウンター(count6)をVHDLで設計:

カウントアップ機能は不要

実習の進め方

実習の進め方 (続き)

[ModelSim]

(続き)

トップ回路をVHDLで設計し、全体シミュレーションを実行する

・シミュレーション時間を調整する →

60 ms

必須

- dividingを変更する

: 100Hz(10ms) → 100,000Hz(10μs)に変更

テキストの

152頁(図2-110)を参照のこと

・チャタリング回路を調整する

-

トップ回路からchatterを削除する(コメント行にする)

- chatterを変更する

テキストの125頁(図2-69)を参照のこと

・conversion_ascii、moji_decoは、前のプロジェクトから持ち込む

そのまま使っても、必要な文字だけ(0~9)にスリム化しても良い

[QuartusⅡ]

⇐ 新規プロジェクトを作成する

① Modelsim から全てのソースを持ち込む

② dividing周波数、チャタリング防止回路(chatter)を仕様通りに戻す

ドキュメント内 論理回路設計 (ページ 72-88)

関連したドキュメント