JP2010092412A - 比較方法および比較器 - Google Patents
比較方法および比較器 Download PDFInfo
- Publication number
- JP2010092412A JP2010092412A JP2008264019A JP2008264019A JP2010092412A JP 2010092412 A JP2010092412 A JP 2010092412A JP 2008264019 A JP2008264019 A JP 2008264019A JP 2008264019 A JP2008264019 A JP 2008264019A JP 2010092412 A JP2010092412 A JP 2010092412A
- Authority
- JP
- Japan
- Prior art keywords
- value
- counter
- register
- output
- determined
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Analogue/Digital Conversion (AREA)
Abstract
【課題】比較結果を得るために乗算器を使用せず、小さな回路規模で比較処理を行うことができるようにする。
【解決手段】a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法である。「b・c−a・d+y」として、yを初期値0とし、「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返す。該繰り返しの結果、「a=0」となったとき、「b≠0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、前記繰り返しの結果、「b=0」となったとき、「a≠0」を満たす間、「a←a−1」と「y←y−d」を繰り返す。「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する。
【選択図】図1
【解決手段】a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法である。「b・c−a・d+y」として、yを初期値0とし、「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返す。該繰り返しの結果、「a=0」となったとき、「b≠0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、前記繰り返しの結果、「b=0」となったとき、「a≠0」を満たす間、「a←a−1」と「y←y−d」を繰り返す。「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する。
【選択図】図1
Description
本発明は、正の整数の値を比較する比較方法および比較器に関するものである。
正の整数の値a,b,c,dに関して、「b/a」と「d/c」の大小関係を求める問題を考える。これは、「b・c」と「a・d」の大小関係を求めることと等価であり、よって「b・c−a・d」を求めて、それが正、負、0のいずれであるかを判定すれば良い。これに対応した従来の典型的な比較器の構成を図8に示す。51は数値データbの入力端子、52は数値データcの入力端子、53は数値データaの入力端子、54は数値データdの入力端子、55,56は乗算器、57は減算器、58は減算器57の減算結果の正、負又は0を判定する符号判定器、59は比較結果を出力する出力端子である。
乗算器55の入力は、数値データbの入力端子51と数値データcの入力端子52に接続される。乗算器56の入力は、数値データaの入力端子53と数値データdの入力端子54に接続される。減算器57の入力は、乗算器55の出力と乗算器56の出力に接続される。符号判定器58の入力は減算器57の出力に接続される。比較結果の出力端子59は、符号判定器58の出力に接続される。
動作を税明する。入力端子51〜54から数値データb,c,a,dが入力されると、乗算器55は「b・c」を出力し、乗算器56は「a・d」を出力する。減算器57は「b・c−a・d」を出力する。符号判定器58は「b・c−a・d」の正、負又は0を判定する。この判定結果により「b・c」と「a・d」の大小関係が分かる。
しかしながら、上記のような比較器の構成では、加算器57等と比較して回路規模の大きな乗算器55,56を必要とし、コストを増加させる。本発明はこのような問題点を解消し、比較結果を得るために乗算器を使用せず、小さな回路規模で比較処理を行うことができるようにした比較方法および比較器を提供することを目的とする。
上記目的を達成するために、請求項1にかかる発明の比較方法は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法であって、「b・c−a・d+y」として、yを初期値0とし、「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返し、該繰り返しの結果、「a=0」となったとき、「b≠0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、前記繰り返しの結果、「b=0」となったとき、「a≠0」を満たす間、「a←a−1」と「y←y−d」を繰り返し、
「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する、ことを特徴とする。
請求項2にかかる発明の比較方法は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法であって、
「b・c−a・d+y」として、yを初期値0とし、「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返し、該繰り返しの結果、「a=0」となったとき、「b≠0」且つ「y≦0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、前記繰り返しの結果、「b=0」となったとき、「a≠0」且つ「y≧0」を満たす間、「a←a−1」と「y←y−d」を繰り返し、「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定し、または「a=0」且つ「y>0」となったとき、「b・c>a・d」と判定し、または「b=0」且つ「y<0」となったとき、「b・c<a・d」と判定する、ことを特徴とする。
請求項3にかかる発明の比較器は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較器であって、初期値としてy=0の値を格納するyレジスタと、前記aの値がロードされ「y>−c」ならば前記aの値を1づつカウントダウンするaカウンタと、前記bの値がロードされ「y<d」ならば前記bの値を1づつカウントダウントするbカウンタと、前記dの値を符号反転する2の補数回路と、該2の補数回路から出力する−dの値と前記cの値の一方を選択するセレクタと、「y>−c」で且つ前記セレクタから出力する値が−dのときこれと前記yレジスタから出力するyの値を加算し、「y<d」で且つ前記セレクタから出力する値がcのときこれと前記yレジスタから出力するyの値を加算する加算器と、前記aカウンタ、前記bカウンタ、前記セレクタおよび前記yレジスタを制御する制御回路とを備え、前記制御回路は、前記aカウンタの値が0になったときは、前記bカウンタの値が0でない間、前記bカウンタのダウンカウントと前記yレジスタへのcの加算を繰り返し、前記bカウンタの値が0になったときは、前記aカウンタの値が0でない間、前記aカウンタのダウンカウントと前記yレジスタへの−dの加算を繰り返し、前記aカウンタの値と前記bカウンタの値が0になったとき、前記yレジスタの値が、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する、ことを特徴とする。
請求項4にかかる発明の比較器は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較器であって、初期値としてy=0の値を格納するyレジスタと、前記aの値がロードされ「y>−c」ならば前記aの値を1づつカウントダウンするaカウンタと、前記bの値がロードされ「y<d」ならば前記bの値を1づつカウントダウントするbカウンタと、前記dの値を符号反転する2の補数回路と、該2の補数回路から出力する−dの値と前記cの値の一方を選択するセレクタと、「y>−c」で且つ前記セレクタから出力する値が−dのときこれと前記yレジスタから出力するyの値を加算し、「y<d」で且つ前記セレクタから出力する値がcのときこれと前記yレジスタから出力するyの値を加算する加算器と、前記aカウンタ、前記bカウンタ、前記セレクタおよび前記yレジスタを制御する制御回路とを備え、前記制御回路は、前記aカウンタの値が0になったとき、前記bカウンタの値が0でなく且つ前記yレジスタの値が0以下の間、前記bカウンタのダウンカウントと前記yレジスタへのcの加算を繰り返し、前記bカウンタの値が0になったとき、前記aカウンタの値が0でなく且つ前記yレジスタの値が0以上の間、前記aカウンタのダウンカウントと前記yレジスタへの−dの加算を繰り返し、前記aカウンタの値と前記bカウンタの値が0になったとき、前記yレジスタの値が、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定し、または「a=0」且つ「y>0」となったとき、「b・c>a・d」と判定し、または「b=0」且つ「y<0」となったとき、「b・c<a・d」と判定する、ことを特徴とする。
「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する、ことを特徴とする。
請求項2にかかる発明の比較方法は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法であって、
「b・c−a・d+y」として、yを初期値0とし、「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返し、該繰り返しの結果、「a=0」となったとき、「b≠0」且つ「y≦0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、前記繰り返しの結果、「b=0」となったとき、「a≠0」且つ「y≧0」を満たす間、「a←a−1」と「y←y−d」を繰り返し、「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定し、または「a=0」且つ「y>0」となったとき、「b・c>a・d」と判定し、または「b=0」且つ「y<0」となったとき、「b・c<a・d」と判定する、ことを特徴とする。
請求項3にかかる発明の比較器は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較器であって、初期値としてy=0の値を格納するyレジスタと、前記aの値がロードされ「y>−c」ならば前記aの値を1づつカウントダウンするaカウンタと、前記bの値がロードされ「y<d」ならば前記bの値を1づつカウントダウントするbカウンタと、前記dの値を符号反転する2の補数回路と、該2の補数回路から出力する−dの値と前記cの値の一方を選択するセレクタと、「y>−c」で且つ前記セレクタから出力する値が−dのときこれと前記yレジスタから出力するyの値を加算し、「y<d」で且つ前記セレクタから出力する値がcのときこれと前記yレジスタから出力するyの値を加算する加算器と、前記aカウンタ、前記bカウンタ、前記セレクタおよび前記yレジスタを制御する制御回路とを備え、前記制御回路は、前記aカウンタの値が0になったときは、前記bカウンタの値が0でない間、前記bカウンタのダウンカウントと前記yレジスタへのcの加算を繰り返し、前記bカウンタの値が0になったときは、前記aカウンタの値が0でない間、前記aカウンタのダウンカウントと前記yレジスタへの−dの加算を繰り返し、前記aカウンタの値と前記bカウンタの値が0になったとき、前記yレジスタの値が、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する、ことを特徴とする。
請求項4にかかる発明の比較器は、a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較器であって、初期値としてy=0の値を格納するyレジスタと、前記aの値がロードされ「y>−c」ならば前記aの値を1づつカウントダウンするaカウンタと、前記bの値がロードされ「y<d」ならば前記bの値を1づつカウントダウントするbカウンタと、前記dの値を符号反転する2の補数回路と、該2の補数回路から出力する−dの値と前記cの値の一方を選択するセレクタと、「y>−c」で且つ前記セレクタから出力する値が−dのときこれと前記yレジスタから出力するyの値を加算し、「y<d」で且つ前記セレクタから出力する値がcのときこれと前記yレジスタから出力するyの値を加算する加算器と、前記aカウンタ、前記bカウンタ、前記セレクタおよび前記yレジスタを制御する制御回路とを備え、前記制御回路は、前記aカウンタの値が0になったとき、前記bカウンタの値が0でなく且つ前記yレジスタの値が0以下の間、前記bカウンタのダウンカウントと前記yレジスタへのcの加算を繰り返し、前記bカウンタの値が0になったとき、前記aカウンタの値が0でなく且つ前記yレジスタの値が0以上の間、前記aカウンタのダウンカウントと前記yレジスタへの−dの加算を繰り返し、前記aカウンタの値と前記bカウンタの値が0になったとき、前記yレジスタの値が、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定し、または「a=0」且つ「y>0」となったとき、「b・c>a・d」と判定し、または「b=0」且つ「y<0」となったとき、「b・c<a・d」と判定する、ことを特徴とする。
本発明によれば、乗算器を使用することなく、小さな回路規模で比較処理を行うことができ、コストを低減できる利点がある。
まず、本発明の比較処理の原理を説明する。a,b,c,dを正の整数とするとき、本発明でも、「b/a」と「d/c」の大小関係の比較を、「b・c−a・d」の符号を求めることで行うが、まずΔを式1で定義する。ここで、yは作業用変数であり初期値は0である。
Δ=b・c−a・d+y (1)
Δに関して、恒等式2が成り立つ
Δ=(b−1)・c−a・d+(y+c)
=b・c−(a−1)・d+(y−d) (2)
よって、a,b,yに対して、新たにa’,b’,y’を式3のように定義した場合、式4が成り立つ。
Δ=b’・c−a’・d+y’ (4)
Δ=b・c−a・d+y (1)
Δに関して、恒等式2が成り立つ
Δ=(b−1)・c−a・d+(y+c)
=b・c−(a−1)・d+(y−d) (2)
よって、a,b,yに対して、新たにa’,b’,y’を式3のように定義した場合、式4が成り立つ。
Δ=b’・c−a’・d+y’ (4)
この性質を利用して、次の繰り返し処理1を行う。
繰り返し処理1:「a≠0」且つ「b≠0」を満たす間、処理a、処理bを繰り返す。
処理a:「y<d」ならば、「b←b−1」、「y←y+c」
処理b:「y>−c」ならば、「a←a−1」、「y←y−d」
繰り返し処理1:「a≠0」且つ「b≠0」を満たす間、処理a、処理bを繰り返す。
処理a:「y<d」ならば、「b←b−1」、「y←y+c」
処理b:「y>−c」ならば、「a←a−1」、「y←y−d」
「y<d」の論理式と「y>−c」の論理式は、必ず1つ以上が真となる。「y<d」の論理式と「y>−c」の論理式のいずれもが真になる場合は、どちらの処理を行ってもよい。繰り返し処理1が終了した時、「a=0」又は「b=0」となっている。次に「a=0」ならば繰り返し処理2を、「b=0」ならば繰り返し理3を行う。
繰り返し処理2:「b≠0」を満たす間、「b←b−1」、「y←y+c」を繰り返す。
繰り返し処理3:「a≠0」を満たす間、「a←a−1」、「y←y−d」を繰り返す。
繰り返し処理2、又は繰り返し処理3が終了した時、「a=0」且つ「b=0」となっている。すなわち式5が成り立つ。
Δ=0・c−0・d+y=y (5)
繰り返し処理3:「a≠0」を満たす間、「a←a−1」、「y←y−d」を繰り返す。
繰り返し処理2、又は繰り返し処理3が終了した時、「a=0」且つ「b=0」となっている。すなわち式5が成り立つ。
Δ=0・c−0・d+y=y (5)
なお、処理4で必要なのは、yの正、負又は0だけである。繰り返し処理2の中でyは単調増加なので、「y>0」となったならば、それ以降はyの符号が反転することはない。同様に、繰り返し処理3の中でyは単調減少なので、「y<0」となったならば、それ以降はyの符号が反転することはない。
よって、繰り返し処理2、繰り返し処理3は、次の繰り返し処理2’、繰り返し処理3’のように変更してもよい。この繰り返し処理2’、繰り返し処理3’を用いた場合、繰り返し条件が若干複雑になるが、繰り返しの平均回数は滅少する。
繰り返し処理2’:「b≠0」且つ「y≦0」を満たす間、「b←b−1」、「y←y+c」を繰り返す。
繰り返し処理3’:「a≠0」且つ「y≧0」を満たす間、「a←a−1」、「y←y−d」を繰り返す。
繰り返し処理2’:「b≠0」且つ「y≦0」を満たす間、「b←b−1」、「y←y+c」を繰り返す。
繰り返し処理3’:「a≠0」且つ「y≧0」を満たす間、「a←a−1」、「y←y−d」を繰り返す。
以上の計算を整理したフローチャートを図4に示す。このフローチャート中の「条件1」の一例を図5に、「条件2」の一例を図6に示す。図5,図6中の||は論理和演算子、&&は論理積演算子、==は等価演算子、!=は非等価演算子、!は否定演算子である。「条件2」は優先順位の等しい条件式が複数あるため、論理式は幾通りかで書くことができる。図5,図6の内のどの論理式を選択しても、正しい結果が得られる。
図7にa=5、b=3、c=7、d=4とした場合の処理過程を示す。図7(a)は条件2の条件式が、「b != 0 && (a == 0 || y < d)」、又は「a == 0 || (b != 0 && y < d)」のとき、図7(b)は条件2の条件式が、「b != 0 && (a == 0 || !(y > -c))」、又は「a == 0 || (b != 0 && !(y > -c))」の場合である。図7(a)、(b)では用いる条件式によって変数の変移は異なるが、最終結果は同じである。ここでは、最終的に「y=1」となっているので、「b・c>a・d」、つまり、「b/a>d/c」であることが判定される。
<第1の実施例>
図1は本発明の第1の実施例の比較器の構成を示す図である。1は数値データcの入力端子、2は数値データdの入力端子、3は数値データaの入力端子、4は数値データbの入力端子、5は2の補数回路、6はセレクタ、7は加算器、8はyレジスタ、9は制御回路、10はaカウンタ、11はbカウンタ、12はstart制御信号の入力端子、13はvalid制御信号の出力端子、14は比較結果outの出力端子である。
図1は本発明の第1の実施例の比較器の構成を示す図である。1は数値データcの入力端子、2は数値データdの入力端子、3は数値データaの入力端子、4は数値データbの入力端子、5は2の補数回路、6はセレクタ、7は加算器、8はyレジスタ、9は制御回路、10はaカウンタ、11はbカウンタ、12はstart制御信号の入力端子、13はvalid制御信号の出力端子、14は比較結果outの出力端子である。
2の補数回路5の入力端子は数値データdの入力端子2に接続される。セレクタ7の2個の入力端子6は数値データcの入力端子1と2の補数回路5の出力端子に接続される。加算器7の2個の入力端子はyレジスタ8の出力端子とセレクタ6の出力端子に接続される。yレジスタ8の入力端子は加算器7の出力端子に接続される。aカウンタ10の入力端子は数値データaの入力端子3に接続される。bカウンタ11の入力端子は数値データbの入力端子4に接続される。加算器7の出力端子とyレジスタ8の出力端子は制御回路9の入力端子に接続される。セレクタ6の制御端子とyレジスタ8の制御端子は御御回路9の出力端子に接続される。start制御信号の入力端子12は制御回路9の入力端子に接続される。valid制御信号の出力端子13は制御回路9の出力端子に接続される。比較結果outの出力端子14は制御回路9の出力端子に接続される。
次に、図1の構成において、図4のフローチャートの処理を実行する方法を説明する。start制御信号の入力端子12がactiveになった時、制御回路9はvalid制御信号の出力端子13にnon-activeを出力し、比較結果outの出力端子14の信号が無効であることを示す。また、aカウンタ10に数値データaを、bカウンタ11に数値データbをそれぞれロードし、yレジスタ8のyをy=0に初期化して、処理を開始する(ステップS1)。
次に、ステップS2において、条件1の判定を行う。条件1が真のときはステップS4に移行し、偽のときはステップS3に移行する。ステップS4では、条件2の判定を行い、条件2が真のときはステップS5に移行し、偽のときはステップS6に移行する。
「y<d」の計算は、入力端子2の数値データdの値を2の補数回路5で符号を反転して、セレクタ6で2の補数回路5の出力−dを選択し、セレクタ6の出力−dとyレジスタ8の出力yを加算器7で加算「y−d」し、加算器7の出力「y−d」の符号を制御回路9で判定することにより実行する。
また、「y>−c」の計算は、セレクタ6で入力端子1の数値データcを選択し、セレクタ6の出力とyレジスタ8の出力yを加算器7で加算「y+c」し、加算器6の出力「y+c」の符号を制御回路9で判定することにより実行する。
ステップS4で「y<d」が真と判定されたときは、ステップS5で「b←b−1」の計算と、「y←y+c」の計算を行う。「b←b−1」の計算は、bカウンタ11の値を1づつカウントダウンすることで実行する。また、「y←y+c」の計算は、セレクタ6で入力端子1の数値データcを選択し、セレクタ6の出力cとyレジスタ8の出力yを加算器7で加算して「y+c」とし、加算器7の出力をyレジスタ8に格納することにより実行する。
ステップS4が「y>−c」が真と判定されたときは、ステップS6で「a←a−1」と、「y←y−d」の計算を行う。「a←a−1」の計算は、aカウンタ10の値を1づつカウントダウンすることで実行する。また、「y←y−d」の計算は、入力端子2の数値データdを2の補数回路5で符号反転し、セレクタ6で2の補数回路5の出力−dを選択し、セレクタ6の出力−dとyレジスタ07の出力yを加算器06で加算して「y−d」とし、加算器7の出力をyレジスタ8に格納することにより実行する。
以上の計算により、ステップS2が偽(False)となったとき、このときのyレジスタ8の出力yの符号を制御回路9で判定することにより、比較の最終判定を実行する(ステップS3)。「y>0」であれば「b・c>a・d」、「y=0」であれば「b・c=a・d」、「y<0」であれば「b・c>a・d」の比較結果となる。
処理が完了すると、制御回路9は比較結果outの出力端子13に比較結果を出力する。このとき、valid制御信号の出力端子13にactiveを出力して、現在の出力端子13の比較結果outが有効であることを示す。
<第2の実施例>
図2は本発明の第2の実施例の比較器の構成を示す図である。21は数値データaの入力端子、22は数値データbの入力端子、23は数値データcの入力端子、24は数値データdの入力端子、25は比較結果の出力端子、26はstart制御信号の入力端子、27はvalid制御信号の出力端子、28はレジスタファイル、29はALU(Arithmetic logic Unit)、30は制御回路である。
図2は本発明の第2の実施例の比較器の構成を示す図である。21は数値データaの入力端子、22は数値データbの入力端子、23は数値データcの入力端子、24は数値データdの入力端子、25は比較結果の出力端子、26はstart制御信号の入力端子、27はvalid制御信号の出力端子、28はレジスタファイル、29はALU(Arithmetic logic Unit)、30は制御回路である。
数値データa〜dの入力端子21〜24、比較結果の出力端子25、start制御信号の入力端子26、valid制御信号の出力端子27は、制御回路30に接続される。レジスタファイル28の入力端子はALU29の出力端子に接続される。レジスタファイル28の制御端子は制御回路30の制御端子に接続される。ALU29の入力端子はレジスタファイル28の出力に接続される。ALU29の制御端子は制御回路30の制御端子に接続される。
次に、図2の構成において、図4のフローチャートの処理を実行する方法を説明する。start制御信号の入力端子25がactiveになった時、制御回路29はvalid制御信号の出力端子26にnon-activeを出力し、比較結果outの出力端子14の信号が無効であることを示す。また、レジスタファイル28に数値データa,b,c,dをロードし、数値データyを「y=0」に初期化して処理を開始する。
「y<d」の論理式の計算は、レジスタファイル28から数値データd,yを出力し、ALU29で演算することにより実行する。
「y>−c」の論理式の計算は、レジスタファイル28から数値データc,yを出力し、ALU29で演算することにより実行する。
「a←a−1」の計算は、レジスタファイル27から数値データaを出力し、ALU28で演算し、その結果をレジスタファイル27に格納することにより実行する。
「b←b−1」の計算は、レジスタファイル28から数値データbを出力し、ALU29で演算し、その結果をyレジスタファィル28に格納することにより実行する。
「y←y+c」の計算は、レジスタファイル28から数値データy,cを出力し、ALU29で演算し、その結果をレジスタファイル28に格納することにより実行する。
「y←y−d」の計算は、レジスタファイル28から数値データy,dを出力し、ALU29で演算し、その結果をレジスタファイル29に格納することにより実行する。
yの正、負又は0の判定は、レジスタファイル28から数値データyを出力し、そのyの符号をALU29で判定することにより実行する。
処理が完了すると、制御回路30は比較結果outの出力端子25に比較結果を出力する。このとき、valid制御信号の出力端子27にactiveを出力して、現在の出力端子25の比較結果outが有効であることを示す。
<第3の実施例>
図3は本発明の第3の実施例の比較器の構成を示す図である。41はCPU、42はプログラムメモリ、43はデータメモリ、44はバスである。CPU41、プログラムメモリ42、データメモリ43は、バス44に接続される。プログラムメモリ42に図4のフローチャートを実行するプログラムを格納する。
図3は本発明の第3の実施例の比較器の構成を示す図である。41はCPU、42はプログラムメモリ、43はデータメモリ、44はバスである。CPU41、プログラムメモリ42、データメモリ43は、バス44に接続される。プログラムメモリ42に図4のフローチャートを実行するプログラムを格納する。
図3の構成において、図4のフローチャートの処理を実行する方法を説明する。まず、数値データa,b,c,dをデータメモリ43にロードし、処理を開始する。
CPU41の動作は、プログラムメモリ42に格納された図4のフローチャートのプログラムによって制御する。
計算に必要な数値データは、データメモリ43から読み出し、バス44を経由してCPU41に伝送する。CPU41による演算結果は、バス44を経由してデータメモリ43に書き出す。
処理が完了すると、比較結果をバス44を経由してデータメモリ43に書き出す。
1:数値データcの入力端子、2:数値データdの入力端子、3:数値データaの入力端子、4:数値データbの入力端子、5:2の補数回路、6:セレクタ、7:加算器、8:yレジスタ、9:制御回路、10:aカウンタ、11:bカウンタ、13:start制御信号の入力端子、14:valid制御信号の出力端子、15:比較結果の出力端子
21:数値データaの入力端子、22:数値データbの入力端子、23:数値データcの入力端子、24:数値データdの入力端子、25:比較結果の出力端子、26:start制御信号の入力端子、27:valid制御信号の出力端子、28:レジスタファイル、29:ALU、30:制御回路
41:CPU、42:プログラムメモリ、43:データメモリ、44:バス
51:数値データbの入力端子、52:数値データcの入力端子、53:数値データaの入力端子、54:数値データdの入力端子、55,56:乗算器、57:減算器、58:符号判定器、59:比較結果の出力端子
21:数値データaの入力端子、22:数値データbの入力端子、23:数値データcの入力端子、24:数値データdの入力端子、25:比較結果の出力端子、26:start制御信号の入力端子、27:valid制御信号の出力端子、28:レジスタファイル、29:ALU、30:制御回路
41:CPU、42:プログラムメモリ、43:データメモリ、44:バス
51:数値データbの入力端子、52:数値データcの入力端子、53:数値データaの入力端子、54:数値データdの入力端子、55,56:乗算器、57:減算器、58:符号判定器、59:比較結果の出力端子
Claims (4)
- a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法であって、
「b・c−a・d+y」として、yを初期値0とし、
「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返し、
該繰り返しの結果、「a=0」となったとき、「b≠0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、
前記繰り返しの結果、「b=0」となったとき、「a≠0」を満たす間、「a←a−1」と「y←y−d」を繰り返し、
「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する、
ことを特徴とする比較方法。 - a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較方法であって、
「b・c−a・d+y」として、yを初期値0とし、
「y<d」ならば「b←b−1」と「y←y+c」を繰り返し、「y>−c」ならば「a←a−1」と「y←y−d」を繰り返し、
該繰り返しの結果、「a=0」となったとき、「b≠0」且つ「y≦0」を満たす間、「b←b−1」と「y←y+c」を繰り返し、
前記繰り返しの結果、「b=0」となったとき、「a≠0」且つ「y≧0」を満たす間、「a←a−1」と「y←y−d」を繰り返し、
「a=0」且つ「b=0」となったとき、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定し、または「a=0」且つ「y>0」となったとき、「b・c>a・d」と判定し、または「b=0」且つ「y<0」となったとき、「b・c<a・d」と判定する、
ことを特徴とする比較方法。 - a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較器であって、
初期値としてy=0の値を格納するyレジスタと、前記aの値がロードされ「y>−c」ならば前記aの値を1づつカウントダウンするaカウンタと、前記bの値がロードされ「y<d」ならば前記bの値を1づつカウントダウントするbカウンタと、前記dの値を符号反転する2の補数回路と、該2の補数回路から出力する−dの値と前記cの値の一方を選択するセレクタと、「y>−c」で且つ前記セレクタから出力する値が−dのときこれと前記yレジスタから出力するyの値を加算し、「y<d」で且つ前記セレクタから出力する値がcのときこれと前記yレジスタから出力するyの値を加算する加算器と、前記aカウンタ、前記bカウンタ、前記セレクタおよび前記yレジスタを制御する制御回路とを備え、前記制御回路は、
前記aカウンタの値が0になったときは、前記bカウンタの値が0でない間、前記bカウンタのダウンカウントと前記yレジスタへのcの加算を繰り返し、
前記bカウンタの値が0になったときは、前記aカウンタの値が0でない間、前記aカウンタのダウンカウントと前記yレジスタへの−dの加算を繰り返し、
前記aカウンタの値と前記bカウンタの値が0になったとき、前記yレジスタの値が、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定する、
ことを特徴とする比較器。 - a,b,c,dを正の整数とし、「b/a」と「d/c」の大小関係を「b・c−a・d」の値の符号から判定する比較器であって、
初期値としてy=0の値を格納するyレジスタと、前記aの値がロードされ「y>−c」ならば前記aの値を1づつカウントダウンするaカウンタと、前記bの値がロードされ「y<d」ならば前記bの値を1づつカウントダウントするbカウンタと、前記dの値を符号反転する2の補数回路と、該2の補数回路から出力する−dの値と前記cの値の一方を選択するセレクタと、「y>−c」で且つ前記セレクタから出力する値が−dのときこれと前記yレジスタから出力するyの値を加算し、「y<d」で且つ前記セレクタから出力する値がcのときこれと前記yレジスタから出力するyの値を加算する加算器と、前記aカウンタ、前記bカウンタ、前記セレクタおよび前記yレジスタを制御する制御回路とを備え、前記制御回路は、
前記aカウンタの値が0になったとき、前記bカウンタの値が0でなく且つ前記yレジスタの値が0以下の間、前記bカウンタのダウンカウントと前記yレジスタへのcの加算を繰り返し、
前記bカウンタの値が0になったとき、前記aカウンタの値が0でなく且つ前記yレジスタの値が0以上の間、前記aカウンタのダウンカウントと前記yレジスタへの−dの加算を繰り返し、
前記aカウンタの値と前記bカウンタの値が0になったとき、前記yレジスタの値が、「y>0」であれば「b・c>a・d」と判定し、「y=0」であれば「b・c=a・d」と判定し、「y<0」であれば「b・c<a・d」と判定し、または「a=0」且つ「y>0」となったとき、「b・c>a・d」と判定し、または「b=0」且つ「y<0」となったとき、「b・c<a・d」と判定する、
ことを特徴とする比較器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008264019A JP2010092412A (ja) | 2008-10-10 | 2008-10-10 | 比較方法および比較器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008264019A JP2010092412A (ja) | 2008-10-10 | 2008-10-10 | 比較方法および比較器 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010092412A true JP2010092412A (ja) | 2010-04-22 |
Family
ID=42255036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008264019A Withdrawn JP2010092412A (ja) | 2008-10-10 | 2008-10-10 | 比較方法および比較器 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010092412A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103853524A (zh) * | 2012-11-30 | 2014-06-11 | 安凯(广州)微电子技术有限公司 | 一种乘法器装置和实现乘法运算的方法 |
-
2008
- 2008-10-10 JP JP2008264019A patent/JP2010092412A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103853524A (zh) * | 2012-11-30 | 2014-06-11 | 安凯(广州)微电子技术有限公司 | 一种乘法器装置和实现乘法运算的方法 |
CN103853524B (zh) * | 2012-11-30 | 2017-02-08 | 安凯(广州)微电子技术有限公司 | 一种乘法器装置和实现乘法运算的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108139885B (zh) | 浮点数舍入 | |
JP2018139134A (ja) | 命令に応じた丸め処理の実行 | |
TW201030607A (en) | Instruction and logic for performing range detection | |
JP2008083795A (ja) | ビットフィールド操作回路 | |
JP4757328B2 (ja) | 逆正接演算装置及び逆正接演算プログラム | |
CN116466910A (zh) | 一种基于浮点数的查表方法、装置、电子设备及存储介质 | |
CN111399803B (zh) | 除法运算方法、装置、存储介质及电子设备 | |
WO1999066423A1 (fr) | Dispositif pour calcul de donnees | |
JP2010092412A (ja) | 比較方法および比較器 | |
JP2010238011A (ja) | ベクトル乗算処理装置および方法ならびにプログラム | |
JP6567213B2 (ja) | デジタル演算処理回路 | |
JP2020160704A (ja) | 整数除算装置およびモータ制御装置 | |
JP4997812B2 (ja) | 計算装置及び計算プログラム | |
JP4159565B2 (ja) | ベクトル積和演算回路 | |
JP2010102431A (ja) | 浮動小数点数演算回路と浮動小数点演算方法及びサーボ制御装置 | |
KR20180103885A (ko) | 나눗셈 연산을 처리하는 방법, 장치 및 기록매체 | |
JP5896756B2 (ja) | 演算装置及びプログラム | |
CN117134917B (zh) | 一种用于椭圆曲线加密的快速模运算方法和装置 | |
JP5305392B2 (ja) | Iqデータの二乗和ルート計算手段 | |
JP2013246772A (ja) | 逆正接演算回路および逆正接演算方法 | |
WO2023100372A1 (ja) | データ処理装置、データ処理方法、及びデータ処理プログラム | |
JP2008158855A (ja) | 相関演算器及び相関演算方法 | |
JP2664750B2 (ja) | 演算装置及び演算処理方法 | |
US20120102081A1 (en) | Low-latency arc-tangent calculation structure and calculation method thereof | |
KR20170133787A (ko) | 3으로 나누는 이진 연산 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20120110 |