39
Yamakoshi-Lab. Yamakoshi-Lab. -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma Univer sity Japan- 5.3 各各各各各各 各各

5.3  各種カウンタ

  • Upload
    quincy

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

5.3  各種カウンタ. 平木. 5.3.1  バイナリ・カウンタ. Verilog HDL 記述. バイナリ・カウンタとは、クロックが立ち上がると 1 ずつカウントしていく。. モジュールの作成. 入出力信号の設定. リセット信号が 1 ならば 0. リセット信号が 0 ならば 1 を足す. シミュレーション結果. 5.3.2  アップ / ダウン・カウンタ. Verilog HDL 記述. アップ / ダウンカウンタとは、バイナリカウンタを拡張したもの。 down 信号が. ‘1’ :カウント・ダウン  0→15→14 ・・・ 1→0 ・. - PowerPoint PPT Presentation

Citation preview

Page 1: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.3  各種カウンタ

平木

Page 2: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.3.1  バイナリ・カウンタ

Verilog HDL 記述

シミュレーション結果

モジュールの作成

リセット信号が 1 ならば 0

リセット信号が 0 ならば 1 を足す

入出力信号の設定

バイナリ・カウンタとは、クロックが立ち上がると 1 ずつカウントしていく。

Page 3: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.3.2  アップ / ダウン・カウンタ

Verilog HDL 記述

シミュレーション結果

アップ / ダウンカウンタとは、バイナリカウンタを拡張したもの。

down 信号が

‘0’ :カウント・アップ  0→1→2 ・・・ 15→0 ・・

‘1’ :カウント・ダウン  0→15→14 ・・・ 1→0 ・

Page 4: 5.3  各種カウンタ

Yamakoshi-Lab.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 と始まるようにしたコード。

2 進数 グレイコード0000000100100011010001010110011110001001101010111101110011101111

0000000100110010011001110101010011001101111111101010101110011000

Page 5: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.3.3  グレイ・コード・カウンタ

Verilog HDL 記述 グレイ・コード・カウンタとは、常に出力が 1bit だけ変化するカウンタ。

グレイコード生成入力

現在カウンタ値

グレイコード生成入力

次カウンタ値

0000000100110010011001110101010011001101111111101010101110011000

0001001100100110011101010100110011011111111010101011100110000000

グレイ・コー

ド生成部

真理値表

Page 6: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.3.3  グレイ・コード・カウンタ

シミュレーション結果

ひげが発生しない

Page 7: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.3.4  手抜きグレイ・コード・カウンタ

バイナリ・コードバイナリ・コード

グレイ・コードグレイ・コード

バイナリ・コード( 4 ビット 2 進数)からグレイ・コードへの変換は隣り合ったビットの EX-OR で生成することができる。そして、このコード変換をバイナリ・カウンタの出力に接続する。

Verilog HDL 記述

バイナリ・カウンタ

Page 8: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

計算機工学特論A

テキスト内容 5.3.5 ~ 5.3.8 山越研 河合 智

Page 9: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ジョンソン・カウンタ

clock q[0] q[1] p[2] q[3]1 0 0 0 02 1 0 0 03 1 1 0 04 1 1 1 05 1 1 1 16 0 1 1 17 0 0 1 18 0 0 0 1

1 クロックごとに順次「1」の状態のビットが増加していき、全ビットが「1」になった後、順次「1」の状態が減っていく動作を行う計数カウンタ。

Page 10: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ジョンソン・カウンタ

13 行目と 14 行目を反転した場合

0000 1111

00001

11110

設定ビット数より上位なので無視

各ビットの状態が「 0000 」の場合

各ビットの状態が「 1111 」の場合

Page 11: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ジョンソン・カウンタ

シミュレーション結果

Page 12: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ループ対策ジョンソン・カウンタ

不正ループ対策

ジョンソン・カウンタ

不正ループ対策あり

ジョンソン・カウンタ

Page 13: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ループ対策ジョンソン・カウンタ

q[0] <= ~q[3] | ( q[0] & ~q[2] )

X= ( q[0] & ~q[2] ) q[0] ~q[2] X

1011 1 1 11001 1 1 1

q[0] <= ~q[3] | X ~q[3] X q[0]

1011 1 1 11001 1 1 1

入力1 入力2 出力0 0 01 0 00 1 01 1 1

入力1 入力2 出力0 0 01 0 10 1 11 1 1

AND OR

1011

ループ対策前

1001

一度不正ループになると正常に戻すのがかなり困難

1001010110

1011

ループ対策後

1001

不正ループから本来の動作に復帰している

1001110111

Page 14: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

リング・カウンタ

clock q[0] q[1] q[2] q[3]1 0 0 0 02 1 0 0 03 0 1 0 04 0 0 1 05 0 0 0 16 1 0 0 07 0 1 0 08 0 0 1 0

クロック 1 周期で出力の 1 本のみが常に「1」になるカウンタ

Page 15: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

000

リング・カウンタ

入力1 2入力 出力0 0 11 0 00 1 01 1 0

0000001

0001 0010000

NOR

q

ff

000

001

010

ff

q[0]

1 00

0001 0010 0100q

always 文に入る前の「q」と「ff」の各ビットの状態

Page 16: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

リング・カウンタ

シミュレーション結果

Page 17: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ディバイダ(分周回路)

q[0] はクロックに対して 1/2 の周波数になっている。 q[1] はクロックに対して 1/4 の周波

数になっている。

ディバイダはある周波数のクロック信号から、それよりも低い周波数のクロック信号を作るときに使用する。

Page 18: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ディバイダ(分周回路)

Page 19: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ディバイダ(分周回路)

Wire 型変数「q2、q1、q0」を使用しなくても同じ動作はシミュレーションできる

Page 20: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

22.  シフト・レジスタ と レジスタ・ファイル

12 月 12 日 山越研究室 増山 知東

Page 21: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

レジスタとは 8bit 、 16bit 、 32bit ・・・ 等のデータを一時的に記憶するもの。

シフト・レジスタはその記憶しているデータの桁を左右にシフトできるものを指す。

シフト・レジスタとは

【シフト・レジスタの分類】

シリアル入力-シリアル出力

パラレル入力-シリアル出力

シリアル入力-パラレル出力

パラレル入力-パラレル出力

【シフト・レジスタのイメージ】

Page 22: 5.3  各種カウンタ

Yamakoshi-Lab.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 [3:0] q;

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

記述

シミュレーション結果

Page 23: 5.3  各種カウンタ

Yamakoshi-Lab.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 [3:0] q;

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 が代入

end

end

endmodule

記述

シミュレーション結果

0 が常に入力された状態

Page 24: 5.3  各種カウンタ

Yamakoshi-Lab.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 [3:0] q;

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 が代入

end

end

endmodule

記述

シミュレーション結果

最下位 bit を飛び越えてしまっている

Page 25: 5.3  各種カウンタ

Yamakoshi-Lab.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 [3:0] q;

always @ (posedge ck) begin   クロックの立ち上がりごとに実行

if (res)

q <= 4’h0;          4bit 16 進数表現で 0 が代入

else if (en)

q <= {q , si}; 4bit + 1bit を 4bit に代入

end

endmodule

シリアル入力-パラレル出力 シフト演算を用いない方法

記述シミュレーション結果

例)

結果、最上位 bit が欠落

5bit の信号を 4bit に代入

Page 26: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

パラレル入力-シリアル出力

// 4bit パラレル・シリアル変換

module Par_Seri(ck,en,ld,pi,so);

input ck,en,ld;

input [3:0] pi;

output so;

reg [3:0] ps;

always @ (posedge ck) begin    クロックの立ち上がりごとに実行

if (ld)

ps <= pi;

else if (en)

ps <= ps << 1;         1bit 左シフト→ ps[0]には 0 が代入

end

assign so = ps[3];

endmodule

記述

シミュレーション結果

出力 so はレジスタ ps の 3bit そのもの

Page 27: 5.3  各種カウンタ

Yamakoshi-Lab.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 [7:0] file [0:3];

always @ (posedge ck)    クロックの立ち上がりごとに実行

if (we)

file (inaddr) <= din; inaddr で指定し、 din に代入

assign dout = file[outaddr];      outaddr で指定し、 dout に代入

endmodule

記述 シミュレーション結果

inaddr ・・・ 00

outaddr ・・・ 00

Page 28: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

レジスタ・ファイル ・・・ ビット幅を持ったレジスタの集合体

シミュレーション結果 B

inaddr ・・・ 00

outaddr ・・・ 01

inaddr ・・・ 00 & 01

outaddr ・・・ 00 & 01

シミュレーション結果 C

シミュレーション結果A

inaddr ・・・ 00

outaddr ・・・ 00

Page 29: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

計算機工学特論AVrilog-HDL 23 ステートマシン

山越研究室修士1年 赤津 実幸

Page 30: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.6.1 ステートマシンの目的

回路システム

データパス系

制御系

演算などのデータ処理が中心

データパス系に対する制御信号を作成

(リセット、カウンタ、FFのイネーブル信号など)

制御信号は回路仕様に応じて順次ON /OFFされる

ステートマシンとは

制御信号を作り出すための順序制御回路

Page 31: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

ステートマシンの具体例 デジタルウォッチ

SW1: 設定 時刻を変更する

SW2: モード切り替え 通常モード⇔時刻修正モード

SW3: けた選択 秒修正⇒時修正⇒分修正

使用例としてデジタルウォッチ内でどのようにステートマシンが利用されるか検証する。

表示ブロック

制御ブロック

カウントブロック

デジタルウォッチのブロック図

sysreset ck SW1~SW3

表示

本例のデジタルウォッチは計時するだけではなく、時刻修正も可能

「通常の状態」と「修正中の状態」を表す「ステート(状態)」の概念が必要

Page 32: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

具体的なデジタルウォッチのステート(状態)

デジタルウォッチの状態遷移図

ステート名 SW1動作 表示通常 NORMAL なし 通常秒修正 SEC 秒リセット 秒2ケタ点滅分修正 MIN 1+ 分 分2ケタ点滅時修正 HOUR 1+ 時 時2ケタ点滅

ストップウォッチの4つの状態

・通常状態

・時修正状態

・分修正状態

・秒修正状態

各修正モード時のSW1(設定)の動作

ステートマシン状態遷移図を回路に置き換えたもの

Page 33: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

5.6.2  ステートマシンの構成法

ワン・ホット方式 デコード方式

・使用するFFの量が少ない・状態数が多いと状態デコーダ部分の回路 規模が大きくなり、動作速度が遅くなる。・HDL記述が簡潔で分かりやすい

デコード方式の利点

・使用するFFの量が多い・動作スピードは速い・用途によっては、複数の状態が同時にアクティブにならないためのフェイルセーフ  的な回路が必要

ワン・ホット方式の利点

Page 34: 5.3  各種カウンタ

Yamakoshi-Lab.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

Page 35: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

リスト 5.1 の説明 1

reg [1:0] cur; // ステートレジスタ

reg [1:0] nxt; // ステート生成回路

  (組み合わせ回路)

cur は現在の状態

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 ) beginif ( sysreset )

cur <= NORMAL;else

cur <= nxt;end

sysreset は初期化を行っており、強制的に通常モードに戻します。

sysreset が押されていない場合は状態遷移図に従って動作します。

Page 36: 5.3  各種カウンタ

Yamakoshi-Lab.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; endcaseend

ステート生成回路(ステートデコーダ) クロックとは無関係に

cur (状態を表すレジスタ)

SW1 (設定)

SW2 (通常⇔修正モード変更)

SW3 (秒⇒時⇒分)

の変更に合わせて動作する。

SW2 の入力があるとき 状態 NORMAL の場合 nxt <= SEC で秒修正モードに移行

状態 SEC,HOUR,MIN の場合 nxt <= NORMAL で通常モード に移行

SW2 の入力がないとき nxt <=今の状態を代入して状態の変更をしない

Page 37: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

リスト 5.1 の説明 3

カウント・ブロックに送られる制御信号

assign sec_reset = ( cur == SEC ) & SW1;

assign min_inc = ( cur == MIN ) & SW1;

assign hour_inc = ( cur == HOUR ) & SW1;

どの状態のときに 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

※複雑な制御を行う場合下記ような記述をすることがあるそうです。

おそらく今回のステートマシンには関係ない。

追加

Page 38: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

シミュレーションによる検証 1

モードの変更例

NORMAL(通常) SEC(秒修正) HOUR (時修正)

SW2 ON

SW3 ON

SW2(通常⇔修正モード ) で秒修正に移り

SW3(秒⇒時⇒分 ) により秒修正から時修正に移っていることが分かる

クロック周期 100us 10000Hz

Page 39: 5.3  各種カウンタ

Yamakoshi-Lab.Yamakoshi-Lab.      -Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-

シミュレーションによる検証 2

SW1動作例

NORMAL(通常) SEC(秒修正)

SEC (秒修正)リセット

秒修正状態のときに SW1 (設定)を押したときに秒修正の秒リセットがONになっていることが分かる