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
↑