【論理回路】比較器の設計

比較器とは

ある2つの数値A,Bを比較し、どちらが大きいか判定する演算器です。

判定方法はシンプルです。人間の目で10進数の数値を大小比較するときに考えることを2進数に落とし込むだけです。

もし、A=33,B=4ならば、どちらが大きいかは明白です。A=33です。

どのように判断されましたでしょうか?Bは1桁で、Aは2桁と、そもそもAの方が桁数が多いと答える方が多そうです。

この考え方を論理回路でも用います。

A=33を2進数にすると、[100001]です。B=4を2進数にすると、[100]です。

2進数も、桁数の多いAが大きいことが一目で分かりました。

もし同じ桁数の場合は、1桁目から数字を比較していきます。この動作内容を次章で示します。

比較器の演算内容

Nbitの数値 A=[aNaN1a1],B=[bNbN1b1]の比較を考えます。

前章で示した指針通り、a1,b1の比較をまず行います。変数(i=1,2,\ldots,N\)を用いて一般化し、\とし、A,Bを構成するビットのうち、iビット目の比較結果を下記のフラグで表します。

比較結果とフラグ
  • ai>biのとき、f1=1f1=aibi
  • ai=biのとき、f2=1f2=f1f3
  • ai<biのとき、f3=1f3=aibi

iビット目までのAとBの大小関係の比較結果を、A>B、A=B、A<Bの順にf1,i,f2,i,f3,iとします。

それぞれの成立条件は、下記のように考えることができます。

iビット目までのAとBの大小関係の比較方法
  • f1,i=1
    i bit目のAとBの数値がAの方が大きい または
    i bit目の数値はAとB等しいが、i-1bit目までのAとBの数値がAの方が大きい
    f1,i=f1+f2f1,i1
  • f2,i=1
    i bit目のAとBの数値が等しい かつ i-1 bit目までのAとBの数値も等しい
    f2,i=f2+f2f2,i1
  • f3,i=1
    i bit目のAとBの数値がBの方が大きい または
    i bit目の数値はAとB等しいが、i-1bit目までのAとBの数値がBの方が大きい
    f3,i=f3+f2f3,i1

上記が全てです。これが分かれば後は論理式の通り回路を組むだけです。

比較器の回路設計

(1)f0=aibi=ai(ai+bi)=aiaibif2=f2=f1f3=f1+f3f3=aibi=bi(ai+bi)=biaibi

を利用して、下記の比較器を設計できます。

一般化しているためiでの記載ですが、実際はi=1 Nまで上記の回路を繋げていくことで設計できます。

なお、比較する数値の桁が一致しない場合は、桁が足りない側のbitに0を入れます。

例)A=33の2進数[100001]に対し、B=4を[000100]とします。

大きい方の数値を出力する論理回路設計

前節までは、二つの数値A,Bを比較した結果を3つのフラグで表しました。

問題によっては、フラグだけでなく大きい方の数値を出力すること。なる追加条件があります。

本節では、この実現方法を考えていきます。

まず、前節で算出したフラグが役立ちそうです。f1=1ならばAを、f3=1ならばBを出力すれば良いです。

これをAND、ORで実現すると、以下のような回路で表すことができます。

ちょっとトリッキーですが、以下の考え方で設計しました。

f1=1のときはaiのbitを出力、f3=1|)\(biのbitを出力すればよい。

AND回路を採用すれば、フラグ0が成立している側の数値に関しては出力に影響しないです。フラグ=1が成立している側の数値の対応するbitが1の場合、ANDが成立するため、この先のORで出力する。

これをi=1からNに関して繰り返し行っていけば良いです。

最後に

大きい方の数値を出力する回路設計は、教科書では見たことなく、本サイトオリジナルの設計です。2進数ならば問題無い認識ですが、誤りがある場合はご教授お願いいたします。

他、もっと良い設計方法があればご教授下さると幸いです。

参考文献

ディジタル情報回路 (第2版):清水 賢資 (著) P116,117

タイトルとURLをコピーしました