2006/10/31 ©2006, Masaharu Imai 1
第4章 カウンタ
大阪大学 大学院情報科学研究科
今井 正治
[email protected]://www-ise1.ist.osaka-u.ac.jp/~imai/
2006/10/31 ©2006, Masaharu Imai 2
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 3
カウンタとは?パルスの個数の計測
基本は Tフリップ・フロップ
カウンタの応用ディジタル値の計測
周期的な信号の分周
タイマー
カウンタの機能の分類アップ・カウンタ(Up Counter)/ダウン・カウンタ(Down Counter)非同期式(Asynchronous)カウンタ/同期式(Synchronous)カウンタ
2006/10/31 ©2006, Masaharu Imai 4
Tフリップ・フロップ(TFF)
入力パルスが入るたびに出力が反転
CLR T Q’
‘0’ ー ‘0’
‘1’ QCLR
T Q
TFF
2006/10/31 ©2006, Masaharu Imai 5
DFFによるTFFの実現
D Q
DFFCK QCLR
T_in
Q_out
clear
2006/10/31 ©2006, Masaharu Imai 6
JKFFによるTFFの実現
J Q
CK
JKFF
QCLR
K
Q_outT_in
clear
‘1’
‘1’
J Q
CK
JKFF
QCLR
K
Q_outT_in
clear
2006/10/31 ©2006, Masaharu Imai 7
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
非同期式カウンタ
同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 8
TFFを用いた非同期式カウンタの実装
Ripple Carry Counter
T
CLR
Q
Q2 Q3
T
TFF
T
CLR
Q
Q1
T
CLR
Q
Q0
T
CLR
Q
CLR
TFFTFFTFF
2006/10/31 ©2006, Masaharu Imai 9
JKFFを用いた非同期式カウンタの実装
J
K
CKQ
Q
J
K
CKQ
Q
‘1’ ‘1’Q0
J
K
CKQ
Q
‘1’Q1
J
K
CKQ
Q
‘1’Q2 Q3
T
CLRCLR CLR CLRCLR
2006/10/31 ©2006, Masaharu Imai 10
非同期式カウンタの動作
T
Q0
Q1
Q2
Q3
2006/10/31 ©2006, Masaharu Imai 11
非同期式カウンタでの遅延
T
Q0
Q1
Q2
Q3
2006/10/31 ©2006, Masaharu Imai 12
非同期式カウンタの問題点
段数が多い場合に,遅延時間が長くなる
出力に期待しない遷移が現れる
出力をデコードして使用する場合には,ハザードの原因になり得る
例
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
⇒
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
⇒
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
⇒
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
⇒
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
=
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
1
0
0
0
0
0
0
0
0
1
0
0
0
1
1
0
0
1
1
1
Q
Q
Q
Q
3
2
1
0
2006/10/31 ©2006, Masaharu Imai 13
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
非同期式カウンタ
同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 14
同期式カウンタ
後段になるほど,ANDゲートの入力数が増える
J
K
CKQ
Q
J
K
CKQ
Q
‘1’
Q1
J
K
CKQ
Q
Q2
J
K
CKQ
Q
Q3 Q4
T
2006/10/31 ©2006, Masaharu Imai 15
リップル・キャリー型同期式カウンタ
ゲートの入力線数は一定
J
K
CKQ
Q
J
K
CKQ
Q
‘1’
Q1
J
K
CKQ
Q
Q2
J
K
CKQ
Q
Q3 Q4
T
2006/10/31 ©2006, Masaharu Imai 16
同期式カウンタと非同期式カウンタの比較
非同期式カウンタ 同期式カウンタ
特徴
回路構成は簡単
クロック(カウント信号)の変化はFFのスイッチング遅延時間の
限界まで早くできる
カウント値が安定するのに必要な時間が長い
出力にハザードが発生する
回路構成は少し複雑
クロックはキャリーの伝播遅延時間とFFのスイッチング遅延時間で決まる(非同期式より遅い)
カウント値が安定するのに必要な時間が短い
出力にハザードが発生しない
用途
低速の回路
高い周波数のクロックの分周回路
通常のディジタル回路
2006/10/31 ©2006, Masaharu Imai 17
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ非同期式ダウン・カウンタ
同期式ダウン・カウンタ
アップ・ダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 18
アップ・カウンタのエンティティ記述
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity up_counter_16 isport (
clock: in std_logic;clr_b: in std_logic;q_out: out std_logic_vector ( 3 downto 0 ) );
end entity up_counter_16;
2006/10/31 ©2006, Masaharu Imai 19
アップ・カウンタのビヘイビア記述
architecture behavior of up_counter_16 isbegin
process( clock, clr_b ) variable reg: std_logic_vector ( 3 downto 0 );
beginif ( clr_b = '0' ) then
reg := "0000"; elsif ( clock'event and clock = '1' ) then
reg := reg + 1;end if;q_out <= reg;
end process;end architecture behavior;
2006/10/31 ©2006, Masaharu Imai 20
非同期式アップカウンタの基本構成
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ ‘1’Q0
J
K
CK
Q
Q
‘1’Q1
J
K
CK
Q
Q
‘1’Q2 Q3
T
2006/10/31 ©2006, Masaharu Imai 21
非同期式アップ・カウンタの動作
T
Q0
Q1
Q2
Q3
2006/10/31 ©2006, Masaharu Imai 22
ダウン・カウンタのエンティティ記述
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity dn_counter_16 isport (
clock: in std_logic;clr_b: in std_logic;q_out: out std_logic_vector ( 3 downto 0 ) );
end entity dn_counter_16;
2006/10/31 ©2006, Masaharu Imai 23
ダウン・カウンタのビヘイビア記述
architecture behavior of dn_counter_16 isbegin
process( clock, clr_b ) variable reg: std_logic_vector ( 3 downto 0 );
beginif ( clr_b = '0' ) then
reg := "0000"; elsif ( clock'event and clock = '1' ) then
reg := reg - 1;end if;q_out <= reg;
end process;end architecture behavior;
2006/10/31 ©2006, Masaharu Imai 24
非同期式ダウン・カウンタの構成方法
方法1: FFの出力信号の変換
内部状態の「1の補数」を出力
方法2: FFへの逆位相入力
Qを次段のクロック信号に加える
方法3: FFの動作モードの変更
立上りエッジトリガFFを利用
2006/10/31 ©2006, Masaharu Imai 25
1の補数
10進数バイナリコード
1の補数 10進数バイナリコード
1の補数
1000 0111
0110
0101
0100
0011
0010
0001
0000
1001
1010
1011
1100
1101
1110
1111
8
9
10
11
12
13
14
15
0 0000 1111
1 0001 1110
2 0010 1101
3 0011 1100
4 0100 1011
5 0101 1010
6 0110 1001
7 0111 1000
2006/10/31 ©2006, Masaharu Imai 26
1の補数を用いた非同期式
ダウン・カウンタの実現
内部状態の「1の補数」を出力
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ ‘1’
Q0
J
K
CK
Q
Q
‘1’
Q1
J
K
CK
Q
Q
‘1’
Q2 Q3
T
2006/10/31 ©2006, Masaharu Imai 27
‘1’ ‘0’ ‘1’ ‘0’
‘1’ ‘0’
‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’
‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’‘1’ ‘0’ ‘1’ ‘0’
1の補数を用いた非同期式
ダウン・カウンタの動作
T
Q0
Q1
Q2
Q3
Q0
Q1
Q2
Q3
2006/10/31 ©2006, Masaharu Imai 28
逆位相入力を用いた非同期式ダウン・カウンタの実現
クロックに逆位相の入力を与える
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ ‘1’0Q
TJ
K
CK
Q
Q
‘1’1Q
J
K
CK
Q
Q
‘1’2Q Q3
2006/10/31 ©2006, Masaharu Imai 29
‘0’
‘0’
‘0’
‘0’
‘1’ ‘0’ ‘1’ ‘0’
‘1’ ‘0’
‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’
‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’‘1’ ‘0’ ‘1’ ‘0’
逆位相入力を用いた非同期式ダウン・カウンタの動作
T
Q0
Q1
Q2
Q3
Q0
Q1
Q2
Q3
2006/10/31 ©2006, Masaharu Imai 30
動作モードの変更による非同期式ダウン・カウンタの実現
立上りエッジトリガのFFの利用
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ Q0
J
K
CK
Q
Q
Q1
J
K
CK
Q
Q
Q2 Q3
T
2006/10/31 ©2006, Masaharu Imai 31
‘0’
‘0’
‘0’
‘0’
‘1’ ‘0’ ‘1’ ‘0’
‘1’ ‘0’
‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’
‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’ ‘1’ ‘0’‘1’ ‘0’ ‘1’ ‘0’
動作モードの変更による非同期式ダウン・カウンタの動作
T
Q0
Q1
Q2
Q3
Q0
Q1
Q2
Q3
2006/10/31 ©2006, Masaharu Imai 32
非同期式カウンタの分類
エッジトリガ2段目以降の入
力の位相出力Q 出力Q
立下り 正相 アップ ダウン
立下り 逆相 ダウン アップ
立上り 正相 ダウン アップ
立上り 逆相 アップ ダウン
2006/10/31 ©2006, Masaharu Imai 33
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ非同期式ダウン・カウンタ
同期式ダウン・カウンタ
アップ・ダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 34
同期式ダウン・カウンタの状態推移
現在の状態 次の状態 現在の状態 次の状態
Q3 Q2 Q1 Q0 Q2 Q1 Q0 Q2 Q1 Q0 Q2 Q1 Q0Q3 Q3 Q3
1 1 1 11 1
100001
110000
1100001
1110000
1 1 1 00 1
010101
011001
0101010
1001100
00000001
00000000
1 1 1 00 0
011001
1101010
01010 1
1001100
11111110
11111111
2006/10/31 ©2006, Masaharu Imai 35
FFの状態を変化させる条件Q0 Q1
10
11
01
00
Q0 10110100
Q2Q3
1111
1111
1111
1111
Q0 Q1
10
11
01
00
Q1 10110100
Q2Q3
0011
0011
0011
0011
Q0 Q1
10
11
01
00
Q2 10110100
Q2Q3
0001
0001
0001
0001
Q0 Q1
10
11
01
00
Q3 10110100
Q2Q3
0000
0000
0001
0001
2006/10/31 ©2006, Masaharu Imai 36
同期式ダウン・カウンタの構成
J
K
CKQ
Q
J
K
CKQ
Q
‘1’
Q0
J
K
CKQ
Q
Q1
J
K
CKQ
Q
Q2 Q3
T
2006/10/31 ©2006, Masaharu Imai 37
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ非同期式ダウン・カウンタ
同期式ダウン・カウンタ
アップ・ダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 38
アップダウン・カウンタのエンティティ記述
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity updn_counter_16 isport (
clock: in std_logic;clr_b: in std_logic;u_db: in std_logic;q_out: out std_logic_vector ( 3 downto 0 ) );
end entity updn_counter_16;
2006/10/31 ©2006, Masaharu Imai 39
アップダウン・カウンタのビヘイビア記述(1)architecture behavior of updn_counter_16 isbegin
process( clock, clr_b ) variable reg: std_logic_vector ( 3 downto 0 );
beginif ( clr_b = '0' ) then
reg := "0000"; elsif ( clock'event and clock = '1' ) then
if ( u_db = '1' ) then -- upreg := reg + 1;
elsif ( u_db = '0' ) then – downreg := reg - 1;
2006/10/31 ©2006, Masaharu Imai 40
アップダウン・カウンタのビヘイビア記述(2)else
reg := "XXXX";end if;
end if;q_out <= reg;
end process;end architecture behavior;
2006/10/31 ©2006, Masaharu Imai 41
アップ・ダウン・カウンタ
実現の方針1段目: 必ず反転
2段目: カウント・アップ/カウント・ダウンを指示する信号の値によって,Q0 またはQ0 のいずれかを選択し
て反転信号とする。
3段目以降:カウント・アップ/カウント・ダウンを指示する信号の値によって,前段の出力(Qi またはQi )の
いずれかを選択する。その値と前段の反転信号との論理積をその段の反転信号とする。
2006/10/31 ©2006, Masaharu Imai 42
同期式アップダウン・カウンタの構成
J PR Q
CK
K CLR Q
preset
clear
up/dw
clock
J PR Q
CK
K CLR Q
J PR Q
CK
K CLR Q
J PR Q
CK
K CLR Q
‘1’
2006/10/31 ©2006, Masaharu Imai 43
マルチプレクサのエンティティ記述
library ieee;use ieee.std_logic_1164.all;
entity mux_2 isport(
s_in: in std_logic;d_in0: in std_logic;d_in1: in std_logic;d_out: out std_logic );
end entity mux_2;
d_in0d_in1
d_out
s_in
2006/10/31 ©2006, Masaharu Imai 44
マルチプレクサのビヘイビア記述
architecture behavior of mux_2 isbegin
process( s_in, d_in0, d_in1 ) variable d_nxt: std_logic;
beginif s_in = '0' then
d_nxt := d_in0;elsif s_in = '1' then
d_nxt := d_in1;else
d_nxt := 'X';end if;d_out <= d_nxt after Tpd;
end process;end architecture behavior;
2006/10/31 ©2006, Masaharu Imai 45
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
非同期式 N進カウンタ
同期式 N進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 46
N進カウンタの設計
強制リセット法所定の値(N)に達したとき,強制的にリセットをかけて初期値(0)に戻す
「ヒゲ」が発生する
カウンタ値修正法所定の値の一つ手前の値(N -1)に達したとき,次のクロックが初段のFFに入るのを止め,そのクロックの立下りでリセットをかけて初期値(0)に戻す
2006/10/31 ©2006, Masaharu Imai 47
強制リセット法を用いた10進カウンタ
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ Q0
J
K
CK
Q
Q
Q1
J
K
CK
Q
Q
Q2 Q3
T
CLRCLR CLR CLR
clear
2006/10/31 ©2006, Masaharu Imai 48
強制リセット法の問題点
リセット信号の幅が狭いと誤動作する例: リセットがかかる場合Q1=‘1’であるが,リセットがかかるために, Q1は‘1’から‘0’に変化する。その結果,FF2のクロック入力が立下り,リセットされたQ2の値が‘1’に反転してしまう。その時点では, Q3はすでにリセットされているため,リセット信号はもとに戻っている。
対策リセットが確実に行われるようにするため,リセット信号のパルスの幅を広げる。(単安定バイブレータなどを用いる)
2006/10/31 ©2006, Masaharu Imai 49
強制リセット法を用いた10進カウンタの改善
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ Q0
J
K
CK
Q
Q
Q1
J
K
CK
Q
Q
Q2 Q3
T
CLRCLR CLR CLR
clearMM
2006/10/31 ©2006, Masaharu Imai 50
カウンタ値修正法
所定の値から 0 に戻るときの各FFの状態の変
化パターン1 ⇒ 0 の場合
0 ⇒ 0 の場合
例: 10進カウンタ
Q3 と Q0 : 1 ⇒ 0Q2 と Q1 : 0 ⇒ 0
カウント値 Q3 Q2 Q1 Q0
9 (N – 1) 1 0 0 1
0 0 0 0 0
2006/10/31 ©2006, Masaharu Imai 51
FFiの状態変化が 1 ⇒ 0 の場合
場合1-a: FFiへの入力が 1 ⇒ 0 の場合FFi への入力の変化にともなって, FFiの値が変化する
よって,FFi への入力は修正する必要がない
場合1-b: FFiへの入力が 0 ⇒ 0 の場合FFi への入力を修正する必要がある
状態N-1のときに1の値をとる全てのFFの出力およびクロックのANDと前段の出力のORをFFiのクロックに入力する
2006/10/31 ©2006, Masaharu Imai 52
FFiの状態変化が 0 ⇒ 0 の場合
場合2-a: FFiへの入力が 1 ⇒ 0 の場合FFi への入力の変化にともなって, FFiの値が変化してしまうので,FFi への入力を修正する
カウンタの値がN -1のときに0となる信号をFFiのJ入力端子に入力する( FFiより上位のFFについて,出力が1となるFFの出力のNANDでよい)
場合2-b: FFiへの入力が 0 ⇒ 0 の場合FFi への入力を修正する必要がない
2006/10/31 ©2006, Masaharu Imai 53
例題でのカウンタ値の修正
カウント値 Q3 Q2 Q1 Q0
9 (N – 1) 1 0 0 1
0 0 0 0 0
カウンタ値の修正方法
(1-b) 不要(2-b) (2-a) 不要(1-a)
2006/10/31 ©2006, Masaharu Imai 54
カウンタ値修正法を用いた非同期式10進カウンタ
J
K
CK
Q
Q
J
K
CK
Q
Q
‘1’ ‘1’0Q
J
K
CK
Q
Q
‘1’1Q
J
K
CK
Q
Q
‘1’Q2 Q3
T
CLRCLR CLR CLRclear
2006/10/31 ©2006, Masaharu Imai 55
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
非同期式 N進カウンタ
同期式 N進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 56
例: 同期式5進カウンタの設計
同期式5進カウンタの状態遷移表
現在の状態 次の状態
Q2 Q1 Q0 Q2 Q1 Q0
0 0 0 0 0 0 1
1 0 0 1 0 1 0
2 0 1 0 0 1 1
3 0 1 1 1 0 0
4 1 0 0 0 0 0
状態
カウント値 S0
S1
S2S3
S4
2006/10/31 ©2006, Masaharu Imai 57
同期式5進カウンタのカルノー図
Q0
Q0 0 1
00 1 0
01 1 0
11 - -
10 0 -
Q2Q1
-010--11
0101Q2Q1
1000
10Q1
Q1
-010--11
1001Q2Q1
0000
10Q2
Q2
01
02122
QQQQQQQ
++=′ 01011 QQQQQ +=′ 02120 QQQQQ +=′
2006/10/31 ©2006, Masaharu Imai 58
同期式5進カウンタの回路図D
CKQ
QC
DCK
Q
QC
DCK
Q
QC
Q0
Q1
Q2
clearT
01
02122
QQQQQQQ
++=′
01011 QQQQQ +=′
02120 QQQQQ +=′
2006/10/31 ©2006, Masaharu Imai 59
同期式5進と寄生3進カウンタ
現在の状態 次の状態
Q2 Q1 Q0 Q2 Q1 Q0
0 0 0 0 0 0 11 0 0 1 0 1 02 0 1 0 0 1 1
6 1 1 0 1 1 17 1 1 1 1 0 1
3 0 1 1 1 0 04 1 0 0 0 0 05 1 0 1 1 1 0
状態
カウント値
S0
S1
S2S3
S4
S5
S6S7
M1
M2
M1
M2
2006/10/31 ©2006, Masaharu Imai 60
より安全な同期式5進カウンタ(1)
現在の状態 次の状態
Q2 Q1 Q0 Q2 Q1 Q0
0 0 0 0 0 0 11 0 0 1 0 1 02 0 1 0 0 1 1
6 1 1 0 1 1 17 1 1 1 0 0 0
3 0 1 1 1 0 04 1 0 0 0 0 05 1 0 1 1 1 0
状態
カウント値
S0
S1
S2S3
S4
S5
S6S7
M1
M2
2006/10/31 ©2006, Masaharu Imai 61
より安全な同期式5進カウンタ(1)のカルノー図
Q0
Q0 0 100 1 001 1 011 1 010 0 0
Q2Q1
101001110101
Q2Q1
100010Q1
Q0
101001111001
Q2Q1
000010Q2
Q0
012
012
0122
QQQQQQQQQQ
+
+
=′ 01011 QQQQQ +=′ 01020 QQQQQ +=′
2006/10/31 ©2006, Masaharu Imai 62
より安全な同期式5進カウンタ(1)の回路図
DCK
Q
QC
DCK
Q
QC
DCK
Q
QC
Q0
Q1
Q2
clearT
012
012
0122
QQQQQQQQQQ
+
+
=′
01011 QQQQQ +=′
01020 QQQQQ +=′
2006/10/31 ©2006, Masaharu Imai 63
より安全な同期式5進カウンタ (2)
現在の状態 次の状態
Q2 Q1 Q0 Q2 Q1 Q0
0 0 0 0 0 0 11 0 0 1 0 1 02 0 1 0 0 1 1
6 1 1 0 0 0 07 1 1 1 0 0 0
3 0 1 1 1 0 04 1 0 0 0 0 05 1 0 1 0 0 0
状態
カウント値
S0
S1
S2S3
S4
S5
S6S7
M1
M2
2006/10/31 ©2006, Masaharu Imai 64
より安全な同期式5進カウンタ(2)のカルノー図
Q0
Q0 0 100 1 001 1 011 0 010 0 0
Q2Q1
001000110101
Q2Q1
100010Q1
Q0
001000111001
Q2Q1
000010Q2
Q0
0122 QQQQ =′
012
0121
QQQ
QQQQ
+
=′ 020 QQQ =′
2006/10/31 ©2006, Masaharu Imai 65
より安全な同期式5進カウンタ(2)の回路図
DCK
Q
QC
DCK
Q
QC
DCK
Q
QC
Q0
Q1
Q2
clearT
0122 QQQQ =′
012
0121
QQQ
QQQQ
+
=′
020 QQQ =′
2006/10/31 ©2006, Masaharu Imai 66
非同期リセットと同期リセット
フリップ・フロップは,非同期リセットを行うものと同期リセットを行うものの2種類に分類される。
非同期リセットを行うFFでは,リセット信号がアクティブになった場合にすぐさまFFの状態がリセットされる。
同期リセットを行うFFでは,リセット信号がアクティブになったとしてもすぐにはFFの状態がリセットされない。FFの状態がリセットされるのは,リセット信号がアクティブになった直後のクロックの立上り(または立下り)である。
2006/10/31 ©2006, Masaharu Imai 67
非同期リセットと同期リセット
clock
reset
非同期リセット
同期リセット
2006/10/31 ©2006, Masaharu Imai 68
強制リセット法による同期式カウンタの実現
同期式N進カウンタは強制リセット法でも実現で
きる。
同期リセット型のFFを用いる場合
カウント値がN-1になった時にリセットを行えばよい。
非同期リセット型のFFを用いる場合
カウント値がNになった場合にリセットを行えばよい。
2006/10/31 ©2006, Masaharu Imai 69
例:非同期リセット型のFFを用いた同期式10進カウンタ
非同期リセット型の同期式16進カウンタを用いて,次のようにして同期式10進カウンタを実装で
きる。Q3=‘1’ and Q1=‘1’の場合にリセットすればよい。 Q3 Q2 Q1 Q0CK
CL
2006/10/31 ©2006, Masaharu Imai 70
例: 同期リセット型のFFを用いた同期式10進カウンタ
同期リセット型の同期式16進カウンタを用いて,次のようにして同期式10進カウンタを実装できる。
Q3=‘1’ and Q0=‘1’の場合にリセットすればよい。
Q3 Q2 Q1 Q0CK
CL
2006/10/31 ©2006, Masaharu Imai 71
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタリング・カウンタ
ジョンソン・カウンタ
グレイコード・カウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 72
リング・カウンタ
状態遷移図 状態割り当てOne-hot Codeシフトレジスタによって実現可能
S1
S2
S3
S4
S5
S6
状態 Q0 Q1 Q2 Q3 Q4 Q5
S0 0 0 0 0 0 0S1 1 0 0 0 0 0S2 0 1 0 0 0 0S3 0 0 1 0 0 0S4 0 0 0 1 0 0S5 0 0 0 0 1 0S6 0 0 0 0 0 1
S0
2006/10/31 ©2006, Masaharu Imai 73
リング・カウンタのエンティティ記述
library ieee;use ieee.std_logic_1164.all;
entity ring_cnt_6 isgeneric(
nbit: natural := 6 );port (
clock: in std_logic;clear: in std_logic;q_out: out std_logic_vector( nbit-1 downto 0 ) );
end entity ring_cnt_6;
2006/10/31 ©2006, Masaharu Imai 74
リング・カウンタのアーキテクチャ記述(1)architecture behavior of ring_cnt_6 isbegin
process( clock, clear )constant zero: std_logic_vector( nbit-1 downto 0 )
:= ( others => '0' );variable s_reg: std_logic_vector( nbit-1 downto 0 );variable carry: std_logic;
beginif clear = '1' then
s_reg := ( others => '0' );
2006/10/31 ©2006, Masaharu Imai 75
リング・カウンタのアーキテクチャ記述(2)elsif falling_edge( clock ) then
if s_reg = zero thens_reg( 0 ) := '1';
elsecarry := s_reg( nbit-1 );for i in nbit-1 downto 1 loop
s_reg( i ) := s_reg( i - 1 );end loop;s_reg( 0 ) := carry;
end if;end if;q_out <= s_reg;
end process;end architecture n_behavior;
2006/10/31 ©2006, Masaharu Imai 76
リングカウンタの動作
Q0
Q1
Q2
clock
clear
Q3
Q4
Q5
2006/10/31 ©2006, Masaharu Imai 77
リング・カウンタの構成方法
D
CK
Q
QCLR
D
CK
Q
QCLR
D
CK
Q
QCLR
D
CK
Q
QCLR
D
CK
Q
QCLR
D
CK
Q
QCLR
Q0 Q1 Q2 Q3 Q4 Q5
CLKCLR
2006/10/31 ©2006, Masaharu Imai 78
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタリング・カウンタ
ジョンソン・カウンタ
グレイコード・カウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 79
ジョンソン・カウンタ
状態遷移図 状態割り当て
S0S1
S2
S3S4
S5
状態 Q0 Q1 Q2 Q3
S0 0 0 0 0
0
0
0
1
1
1
1
S1 1 0 0
S2 1 1 0
S3 1 1 1
S4 1 1 1
S5 0 1 1
S6 0 0 1
S7 0 0 0
特徴:
・回路が簡単なので、高速動作が可能。
・隣接する状態コード間のハミング距離が1なので,ハザードが起きない。
S6
S7
2006/10/31 ©2006, Masaharu Imai 80
ジョンソン・カウンタの構成方法
D
CK
Q
QCLR
D
CK
Q
QCLR
D
CK
Q
QCLR
Q0 Q1 Q2
D
CK
Q
QCLR
Q3
CLOCKCLR
2006/10/31 ©2006, Masaharu Imai 81
ジョンソン・カウンタのエンティティ記述
library ieee;use ieee.std_logic_1164.all;
entity jhonson_counter isgeneric(
nbit: natural := 4 );port (
clock: in std_logic;clr_b: in std_logic;q_out: out std_logic_vector ( 3 downto 0 ) );
end entity jhonson_counter;
2006/10/31 ©2006, Masaharu Imai 82
ジョンソン・カウンタのアーキテクチャ記述(1)architecture behavior of jhonson_counter isbegin
process ( clock, clr_b )variable reg: std_logic_vector ( nbit-1 downto 0 );variable carry: std_logic;begin
if ( clr_b = '0' ) thenreg := ( others => '0' );
2006/10/31 ©2006, Masaharu Imai 83
ジョンソン・カウンタのアーキテクチャ記述(2)elsif ( clock'event and clock = '1' ) then
carry := not ( reg( nbit-1 ) );for i in nbit-1 downto 1 loop
reg( i ) := reg ( i - 1 );end loop;reg( 0 ) := carry;
end if;q_out <= reg;
end process;end architecture behavior;
2006/10/31 ©2006, Masaharu Imai 84
ジョンソン・カウンタの動作
Q0
Q1
Q2
clock
clear
Q3
2006/10/31 ©2006, Masaharu Imai 85
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタリング・カウンタ
ジョンソン・カウンタ
グレイコード・カウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 86
グレイコード(Gray Code)
10進数バイナリ
コード
グレイ
コード10進数
バイナリ
コード
グレイ
コード
1000 1100
1101
1111
1110
1010
1011
1001
1000
1001
1010
1011
1100
1101
1110
1111
8
9
10
11
12
13
14
15
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
2006/10/31 ©2006, Masaharu Imai 87
グレイコード・カウンタの構成方法
DFF
D0D1D2
D3
CKCLR
Q0Q1Q2
Q3
Grayto
Binary
clock
clear
NextState
Function
2006/10/31 ©2006, Masaharu Imai 88
カウンタの比較
種類 周期 特徴
バイナリ・カウンタ 2N 基本のカウンタ
リング・カウンタ N 高々1ビットが ’1’
ジョンソン・カウンタ 2N ハザードなし
グレイ・コード・カウンタ 2N ハザードなし
2006/10/31 ©2006, Masaharu Imai 89
講義内容
カウンタとは何か?非同期式カウンタと同期式カウンタ
アップダウン・カウンタ
N 進カウンタ
その他のカウンタ
まとめ
2006/10/31 ©2006, Masaharu Imai 90
まとめ (1)カウンタは、ディジタル値の計測、周期的な信号の分周、タイマーの実装などに用いられる
カウンターには、アップ・カウンタ、ダウン・カウンタ、アップダウン・カウンタの3種類がある
カウンタの実装方法には、同期式と非同期式の2種類がある
カウンタの実装方法のバリエーションとして、リング・カウンタ、ジョンソン・カウンタ、グレイコード・カウンタなどがある
2006/10/31 ©2006, Masaharu Imai 91
まとめ (2)ダウン・カウンタの実現方法には、1の補数を出力する方法、トグル信号の位相を変更する方法、FFの動作モードを変更する方法がある
非同期式N進カウンタの実現方法には、強制リセット法、およびカウンタ値修正法がある
同期式N進カウンタは、ステートマシンとして設計する
N進カウンタの設計では、予定していない状態に陥らないための工夫が必要である(冗長な状態の除去、リセット)