計算機工学特論A 講義資料第7回

Download Report

Transcript 計算機工学特論A 講義資料第7回

5.3 各種カウンタ
平木
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.3.1 バイナリ・カウンタ
Verilog HDL記述
バイナリ・カウンタとは、クロック
が立ち上がると1ずつカウントし
ていく。
モジュールの作成
入出力信号の設定
リセット信号が1ならば0
リセット信号が0ならば1を足す
シミュレーション結果
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.3.2 アップ/ダウン・カウンタ
Verilog HDL記述
アップ/ダウンカウンタとは、バイナリカ
ウンタを拡張したもの。
down信号が
‘1’:カウント・ダウン 0→15→14・・・1→0・
‘0’:カウント・アップ 0→1→2・・・15→0・・
シミュレーション結果
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.3.3 グレイ・コード・カウンタ
2 進数は 0, 1, 10, 11 と始まり、グレイコードは、0, 1, 11, 10 と始まるようにした
コード。
Yamakoshi-Lab.
2進数
グレイコード
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1101
1100
1110
1111
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.3.3 グレイ・コード・カウンタ
Verilog HDL記述
グレイ・コード・カウンタとは、常に
出力が1bitだけ変化するカウン
タ。
グ
レ
イ
・
コ
ー
ド
生
成
部
Yamakoshi-Lab.
グレイコード生成入力
現在カウンタ値
グレイコード生成入力
次カウンタ値
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
0000
真理値表
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.3.3 グレイ・コード・カウンタ
シミュレーション結果
ひげが発生しない
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.3.4 手抜きグレイ・コード・カウンタ
Verilog HDL記述
バイナリ・コード
バイナリ・カウンタ
グレイ・コード
バイナリ・コード(4ビット2進数)からグレイ・コードへの変換は隣り合った
ビットのEX-ORで生成することができる。そして、このコード変換をバイナ
リ・カウンタの出力に接続する。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
計算機工学特論A
テキスト内容 5.3.5 ~ 5.3.8
山越研 河合 智功
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ジョンソン・カウンタ
clock
1
2
3
4
5
6
7
8
q[0]
0
1
1
1
1
0
0
0
q[1]
0
0
1
1
1
1
0
0
p[2]
0
0
0
1
1
1
1
0
q[3]
0
0
0
0
1
1
1
1
1クロックごとに順次「1」の状態のビットが増加していき、全ビットが「1」になった
後、順次「1」の状態が減っていく動作を行う計数カウンタ。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ジョンソン・カウンタ
各ビットの状態が
「0000」の場合
各ビットの状態が
「1111」の場合
0000
1111
00001
11110
設定ビット数より上位なので無視
13行目と
14行目を
反転した
場合
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ジョンソン・カウンタ
シミュレーション結果
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ループ対策ジョンソン・カウンタ
不正ループ対策あり
ジョンソン・カウンタ
ジョンソン・カウンタ
不正ループ対策
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ループ対策ジョンソン・カウンタ
ループ対策前
1011
q[0] <= ~q[3] | ( q[0] & ~q[2] )
1001
10110
X= ( q[0] &
~q[2] )
10010
一度不正ループになると正常に戻す
のがかなり困難
q[0]
1
1
1011
1001
~q[2]
1
1
X
1
1
q[0] <= ~q[3] | X
ループ対策後
1011
1001
10111
10011
不正ループから本来の動作に復帰し
ている
Yamakoshi-Lab.
~q[3]
1
1
1011
1001
X
1
1
AND
入力1
0
1
0
1
入力2
0
0
1
1
q[0]
1
1
OR
出力
0
0
0
1
入力1
0
1
0
1
入力2
0
0
1
1
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
出力
0
1
1
1
リング・カウンタ
clock
1
2
3
4
5
6
7
8
q[0]
0
1
0
0
0
1
0
0
q[1]
0
0
1
0
0
0
1
0
q[2]
0
0
0
1
0
0
0
1
q[3]
0
0
0
0
1
0
0
0
クロック1周期で出力の1本のみが常に「1」になるカウンタ
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
リング・カウンタ
always文に入る前の「q」と「ff」の
各ビットの状態
q
ff
0000
000
0001
000
0010
001
ff
000
001
010
q[0]
1
0
0
q
0001
0010
0100
NOR
入力1
0
1
0
1
Yamakoshi-Lab.
入力2
0
0
1
1
出力
1
0
0
0
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
リング・カウンタ
シミュレーション結果
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ディバイダ(分周回路)
ディバイダはある周波数のクロック信号から、それよりも低い
周波数のクロック信号を作るときに使用する。
q[0]はクロックに対して1/2の周波数になってい
る。q[1]はクロックに対して1/4の周波数になって
いる。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ディバイダ(分周回路)
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ディバイダ(分周回路)
Wire型変数「q2、q1、q0」を使用
しなくても同じ動作はシミュレーショ
ンできる
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
22. シフト・レジスタ と レジスタ・ファ
イル
12月12日 山越研究室 増山 知
東
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シフト・レジスタとは
レジスタとは 8bit、16bit、32bit ・・・ 等のデータを一時的に記憶するもの。
シフト・レジスタはその記憶しているデータの桁を左右にシフトできるものを
指す。
【シフト・レジスタの分類】
シリアル入力-シリアル出
力
パラレル入力-シリアル出
力
シリアル入力-パラレル出
力
パラレル入力-パラレル出
力
【シフト・レジスタのイメー
ジ】
・
・
・
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シリアル入力-パラレル出力
記述
// 4bit シリアル・パラレル変換
module Seri_Par(ck,res,en,si,q);
input
ck,res,en,si;
output [3:0]
q;
reg
q;
[3:0]
always@(posedge ck) begin
行
シミュレーション結果
クロックの立ち上がりごとに実
if (res)
q <= 4’h0;
4bit 16進数表現で 0 が代入
else if (en) begin
q <= q << 1;
1bit左シフト→q[0]には 0 が代
q[0] <= si;
q[0]に si の値が代入
入
end
end
endmodule
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シリアル入力-パラレル出力 NG編その1
記述
// 4bit シリアル・パラレル変換 NG編1
module Seri_Par(ck,res,en,si,q);
input
ck,res,en,si;
output [3:0]
q;
reg
q;
[3:0]
always@(posedge ck) begin
行
シミュレーション結果
クロックの立ち上がりごとに実
if (res)
q <= 4’h0;
4bit 16進数表現で 0 が代入
else if (en) begin
q[0] <= si;
q[0]に si の値が代入
q <= q << 1;
1bit左シフト→q[0]には 0 が代
入
0が常に入力された状態
end
end
endmodule
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シリアル入力-パラレル出力 NG編その2
記述
// 4bit シリアル・パラレル変換 NG編2
module Seri_Par(ck,res,en,si,q);
input
ck,res,en,si;
output [3:0]
q;
reg
q;
[3:0]
always@(posedge ck) begin
行
シミュレーション結果
クロックの立ち上がりごとに実
if (res)
q = 4’h0;
4bit 16進数表現で 0 が代入
else if (en) begin
q[0] = si;
q = q << 1;
入
q[0]に si の値が代入
1bit左シフト→q[0]には 0 が代
最下位bitを飛び越えてしまっている
end
end
endmodule
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シリアル入力-パラレル出力 シフト演算を用いない方法
記述
シミュレーション結果
// 4bit シリアル・パラレル変換 シフト演算を用いない方法
module Seri_Par(ck,res,en,si,q);
input
ck,res,en,si;
output [3:0]
q;
reg
q;
[3:0]
always@(posedge ck) begin
行
クロックの立ち上がりごとに実
if (res)
q <= 4’h0;
4bit 16進数表現で 0 が代入
else if (en)
q <= {q , si};
4bit + 1bit を 4bit に代入
例
)
5bit の信号を 4bit に代入
end
endmodule
結果、最上位bitが欠落
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
パラレル入力-シリアル出力
記述
// 4bit パラレル・シリアル変換
module Par_Seri(ck,en,ld,pi,so);
input
input
[3:0]
output
reg
シミュレーション結果
ck,en,ld;
pi;
so;
[3:0]
ps;
always@(posedge ck) begin
実行
クロックの立ち上がりごとに
if (ld)
ps <= pi;
else if (en)
ps <= ps << 1;
代入
1bit左シフト→ps[0]には 0 が
出力 so はレジスタ ps の3bit そのもの
end
assign so = ps[3];
endmodule
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
レジスタ・ファイル ・・・ ビット幅を持ったレジスタの集合体
記述
シミュレーション結果
// 8bit × 4 レジスタ・ファイル
module regfile(ck,we,din,inaddr,dout,outaddr);
input
ck,we;
input
[7:0]
din;
input
定可
[1:0]
inaddr, outaddr; 00, 01, 10,11で レジスタの指
output [7:0]
dout;
reg
file [0:3];
[7:0]
クロックの立ち上がりごとに
always@(posedge ck)
実行
if (we)
file (inaddr) <= din;
inaddr で指定し、din に代入
assign dout = file[outaddr];
入
outaddr で指定し、dout に代
endmodule
inaddr ・・・ 00
outaddr ・・・ 00
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
レジスタ・ファイル ・・・ ビット幅を持ったレジスタの集合体
シミュレーション結果A
シミュレーション結果B
シミュレーション結果C
inaddr ・・・ 00
inaddr ・・・ 00
inaddr ・・・ 00 & 01
outaddr ・・・ 00
outaddr ・・・ 01
outaddr ・・・ 00 & 01
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
計算機工学特論A
Vrilog-HDL 23 ステートマシン
山越研究室
修士1年 赤津 実幸
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.6.1 ステートマシンの目的
回路システム
データパス系
演算などのデータ処理が中心
制御系
データパス系に対する制御信号を作成
(リセット、カウンタ、FFのイネーブル信号など)
制御信号は回路仕様に応じて順次ON/OFFされる
ステートマシンとは
Yamakoshi-Lab.
制御信号を作り出すための順序制御回路
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
ステートマシンの具体例 デジタルウォッチ
使用例としてデジタルウォッチ内でどのようにステートマシン
が利用されるか検証する。
SW1:
設定
時刻を変更する
SW2:
モード切り替え
通常モード⇔時刻修正モード
SW3:
けた選択
秒修正⇒時修正⇒分修正
デジタルウォッチのブロック図
表示
表示ブロック
制御ブロック
カウントブロック
sysreset ck SW1~SW3
本例のデジタルウォッチは計時するだけではなく、時刻修正も可能
「通常の状態」と「修正中の状態」を表す「ステート(状態)」の概念が必要
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
具体的なデジタルウォッチのステート(状態)
ストップウォッチの4つの状態
・通常状態
・時修正状態
・分修正状態
・秒修正状態
デジタルウォッチの状態遷移図
各修正モード時のSW1(設定)の動作
通常
秒修正
分修正
時修正
ステート名
NORMAL
SEC
MIN
HOUR
ステートマシン
Yamakoshi-Lab.
SW1動作
なし
秒リセット
+1分
+1時
表示
通常
秒2ケタ点滅
分2ケタ点滅
時2ケタ点滅
状態遷移図を回路に置き換えたもの
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
5.6.2 ステートマシンの構成法
ワン・ホット方式
デコード方式
ワン・ホット方式の利点
・使用するFFの量が多い
・動作スピードは速い
・用途によっては、複数の状態が同時にアクティブにならないためのフェイルセーフ
的な回路が必要
デコード方式の利点
・使用するFFの量が少ない
・状態数が多いと状態デコーダ部分の回路規模が大きくなり、動作速度が遅くなる。
・HDL記述が簡潔で分かりやすい
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
デコード方式ステートマシンの記述例(リスト5.1)
ステートマシン2方式の共通項目
ステート名:
NORMAL(通常)、SEC(秒修正)、HOUR(時修正)、
MIN(分修正)
スイッチ入力: SW1、SW2、SW3(いづれもクロック一周分のパルスとする)
出力:
SW1が押されたときの動作
sec_reset(秒リセット)、hour_inc(+1時)、min_inc(+1分)
モードON/OFFの表示
sec_onoff、hour_onoff、min_onoff
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
リスト5.1の説明1
reg [1:0] cur; //ステートレジスタ
curは現在の状態
reg [1:0] nxt; //ステート生成回路
nxtはアクションによる状態遷移を表す
(組み合わせ回路)
parameter NORMAL = 2’b00,
SEC = 2’b01,
MIN = 2’b10, HOUR = 2’b11
2ビットの状態変数curやnxtにステート情報を伝えるために定義する。
後述のステートデコーダでnxt<=NORMALなどの形で代入を行う。
always@( posedge ck or posedge sysreset ) begin
if ( sysreset )
cur <= NORMAL;
else
cur <= nxt;
end
sysresetは初期化を行っており、強制的に通常モードに戻します。
sysresetが押されていない場合は状態遷移図に従って動作します。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
リスト5.1の説明2
ステート生成回路(ステートデコーダ)
always @( cur or SW1 or SW2 or SW3 ) begin
case( cur )
NORMAL: if (SW2)
nxt <= SEC;
else
nxt <= NORMAL;
SEC:~~~~
HOUR:~~~~
MIN:~~~~
default: nxt <= 2’bxx;
endcase
end
SW2の入力があるとき
クロックとは無関係に
cur(状態を表すレジスタ)
SW1(設定)
SW2(通常⇔修正モード変更)
SW3(秒⇒時⇒分)
の変更に合わせて動作する。
状態NORMALの場合 nxt <= SECで秒修正モードに移行
状態SEC,HOUR,MINの場合 nxt <= NORMALで通常モード
に移行
SW2の入力がないとき
Yamakoshi-Lab.
nxt <=今の状態を代入して状態の変更をしない
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
リスト5.1の説明3
カウント・ブロックに送られる制御信号
どの状態のときにSW1が押されたか、という情報
をカウント・ブロックに送ります
assign sec_reset = ( cur == SEC ) & SW1;
assign min_inc = ( cur == MIN ) & SW1;
assign hour_inc = ( cur == HOUR ) & SW1;
表示ブロックに送られる制御信号
assign sec_onoff = ( cur == SEC );
assign min_onoff = ( cur == MIN );
修正モード時に修正部分を点滅させるために現在どの
修正モードであるかという情報を表示ブロックに送ります
assign hour_onoff = ( cur == HOUR );
追加
※複雑な制御を行う場合下記ような記述をすることがあるそうです。
assign xx_enable = ( ( cur == xxx) | (cur == yyy ) | ( cur == zzz) | ・・・) & yy_enable
おそらく今回のステートマシンには関係ない。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シミュレーションによる検証1
クロック周期100us 10000Hz
モードの変更例
SW3 ON
SW2 ON
NORMAL(通常)
SEC(秒修正)
HOUR(時修
正)
SW2(通常⇔修正モード)で秒修正に移り
SW3(秒⇒時⇒分)により秒修正から時修正に移っていることが分かる
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シミュレーションによる検証2
SW1動作例
SEC(秒修正)リセット
NORMAL(通常)
SEC(秒修正)
秒修正状態のときにSW1(設定)を押したときに秒修正の秒リセットがONになってい
ることが分かる
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-