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

電卓の設計

ドキュメント内 卒 業 研 究 報 告 (ページ 30-34)

4.1電卓に必要な回路の設計

4.1.1  8桁のBCD入力を2進数で保存する回路の設計

10キーからの 8桁の入力を 2 進数で保存するには、以前の保存されている 値を10倍してから次の入力を足してやればよい。

本研究で設計する電卓は 8 桁表示とした。保存用のレジスタは入力される値

が0〜99999999なので、2 から27ビ

ットにする。

67108864 2

99999999

134217728 26

27 = > > =

以上から、2進数保存のために必要な回路(REGA)は

・ 10キーからの入力をBCDに変換する回路(DEC_TO_BIN)

・ 27ビットの保存用レジスタ(REG_A)

・ 保存されている値を10倍するための乗算回路(CNV_MUL)

・ 10倍された値にBCDを加算するための加算回路(cnv_adder)

・ 演算後の 10 キー再入力時に、加算回路の出力から変換回路の出力へ切り替 えるためのセレクタ(INPUT_SEL)

の5個の回路が必要になる。

2進数で保存する回路のブロック図を図4.1に示す。

1 0 進 数 → 2 進 数 変 換 回 路 (D E C ̲T O ̲B IN )

2 7 ビ ッ ト レ ジ ス タ (R E G ̲A ) 1 0 倍 用

乗 算 回 路 (C N V ̲M U L )

加 算 回 路 (c n v ̲a d d e r )

セ レ ク タ (IN P U T ̲S E L )

R E G A

1 0 キ ー 入 力

2 進 出 力

      図4.1  2進数で保存する回路のブロック図

4.1.2同期化回路の設計

10キーからの入力は手で入力を行うの場合、非同期入力を同期入力にする回

路(syncro)が必要になる。例えば、キーの入力をそのままシフトレジスタの

入力とすると、1 回の入力でクロックの遷移回の入力が入ってしまう。そこで、

図4.2にある回路を入力に挿入する。動作は図のようになり、スイッチからの1 回の入力に対して1クロック分の出力波形が生成される。

Dフリップ フロップ

Q0 Dフリップ Q1 Q2

フロップ

Dフリップ キー入力 フロップ

クロック リセット

出力

クロック

入力

Q0

Q1

Q2

出力

      図4.2 同期化回路

4.1.3 結果格納用レジスタの設計(REG_B)

 入力されるビット数が27ビットなので、演算結果がマイナスになることを考 慮し、符号ビット分の 1 ビットを付け加える。さらに、オーバーフローの検出 のためにもう1ビット付け加え、29ビットで設計する。

4.1.4 演算出力切り替え用セレクタの設計(ASMD_SEL)  各演算回路からの出力を REG_B へ入力するためのセレクタだが、切り替え のタイミングが演算開始前になった場合、REG_Bの値が演算回路にロードされ る前に、切り替えた演算回路からの出力の値に変化してしまうため、切り替え は演算開始と同時か、それ以降にしなければならない。

4.1.5 状態遷移機械の設計(STATE)

 電卓はただ演算をするだけでは実現できない。累算ができるようにするには 以前に何のキーが押されたかを記憶し、それにしたがって状態を決定しなけれ ばならない。

 電卓の状態は3状態あり、10キー入力状態(DECIMAL)、演算入力状態(OPE)、 オーバーフロー状態(HALT)がある。各入力と状態によって7セグメントLED への出力が決まる。入力、出力、状態の関係は表4.1のようになる。

      表4.1 入出力と状態の関係

入力 LEDへの出力 状態

10キー REG_A DECIMAL

演算キー REG_B OPE

オーバーフロー オーバーフロー用LED HALT  

 

各状態間の遷移は、10キーの入力回数を数えるためのカウンタをCOUNT、

演算回路への演算開始出力をASMD_SEL、演算結果の選択用セレクタの切り替

え信号を ASMD_SELECET、LED への出力切り替え用セレクタの切り替え信

号をSEL、どの演算キーが入力されたかを保存するためのレジスタをCALとし た状態遷移図を、図4.3に示す。

 演算開始出力は同期化回路を通して出力し、演算結果選択用セレクタの切り 替え信号は、Dフリップフロップを3つ通して遅延を調整して出力する。

10キー入力 DECIMAL

SEL = 1

停止 HALT SEL = 0

演算 OPE SEL = 0 REG̲A <= 0

REG̲B <= 0 COUNT <= 0 ASMD <= 00 ASMD̲SEL <= 0001

REG̲B <= REG̲B*REG̲A + : CAL <= 00 - : CAL <= 01

×: CAL <= 10

÷: CAL <= 11

= : CAL <= 00  BR <= '1' REG̲B <= 0

COUNT <= 0

REG̲A <= REG̲A×10 + DECI COUNT<=COUNT + 1

演算結果が オーバーフロー

+,-,×,÷

C,CE

10キー

+,-,×,÷,=

10キー

C,CE

REG̲ B< -99999999 or REG̲B > 99999999

BR = '0' : REG̲A <= DECI COUNT <= 1 ASMD̲SELECT<="0000"

BR = '1' : REG̲A <= DECI COUNT <= 1

       ASMD̲SELECT<="0000"  B̲RST <= '1'

+ : CAL <= 00 - : CAL <= 01

×: CAL <= 10

÷: CAL <= 11

図4.3 電卓の状態遷移図

4.1.6 電卓のブロック図  電卓のブロック図を図4.4に示す。

10進→2進変換回路

(DEC̲TO̲BIN)

27ビットレジスタ

(REG̲A)

×10 乗算回路

(CNV̲MUL)

加算回路

(cnv̲adder)

演算回路

(ADD、SUB、

MUL、DIV)

29ビットレジスタ

(REG̲B)

セレクタ

(ASMD̲SEL)

セレクタ

(lastsel)

2の補数 出力回路

(2hosu)

非同期→同期変換回路

(syncro)

状態遷移機械

(state)

2進→BCD変換回路

(bintobcd)

7セグメントデコーダ回路

(7SEG̲DEC)

電卓(calc)

7セグメントLED出力

(7LED)

符号出力

(SIGN)

10キー入力

(DECIMAL)

演算キー入力

(PLUS、MINUS、KAKERU、

WARU、EQUAL、C、CE)

オーバーフロー出力

(OVF)

エラー出力

(ERROR̲OUT)

リセット

(RESET)

クロック

(CLK)

セレクタ

(INPUT̲SEL)

ドキュメント内 卒 業 研 究 報 告 (ページ 30-34)

関連したドキュメント