JP2006127469A - 演算装置 - Google Patents
演算装置 Download PDFInfo
- Publication number
- JP2006127469A JP2006127469A JP2005218694A JP2005218694A JP2006127469A JP 2006127469 A JP2006127469 A JP 2006127469A JP 2005218694 A JP2005218694 A JP 2005218694A JP 2005218694 A JP2005218694 A JP 2005218694A JP 2006127469 A JP2006127469 A JP 2006127469A
- Authority
- JP
- Japan
- Prior art keywords
- unit
- bit
- output
- operand
- prediction
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49921—Saturation, i.e. clipping the result to a minimum or maximum value
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/02—Comparing digital values
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/342—Extension of operand address space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/50—Adding; Subtracting
- G06F7/505—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
- G06F7/506—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages
- G06F7/507—Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination with simultaneous carry generation for, or propagation over, two or more stages using selection between two conditionally calculated carry or sum values
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】本発明は、飽和処理を行う演算装置において演算処理と飽和処理とに関係する遅延時間を低減し、処理の高速化を図ることが可能な演算装置を提供する。
【解決手段】本発明に係る解決手段は、第1入力オペランドと第2入力オペランドとの加算又は減算演算を行い演算結果を出力する演算処理部1と、第1入力オペランドと第2入力オペランドに基づいて、演算結果が所定ビット長の表現範囲内か否かを予測し飽和予測信号を出力する飽和予測部2と、飽和予測部からの飽和予測信号において演算結果が所定ビット長の表現範囲内にないと予測される場合に、所定ビット長の表現範囲内の最大値又は最小値を出力結果とし、飽和予測信号において演算結果が所定ビット長の表現範囲内にあると予測される場合に、演算結果を出力結果とすることを選択する選択部4とを備え、飽和予測部は、演算処理部に対して並列に動作される。
【選択図】図1
【解決手段】本発明に係る解決手段は、第1入力オペランドと第2入力オペランドとの加算又は減算演算を行い演算結果を出力する演算処理部1と、第1入力オペランドと第2入力オペランドに基づいて、演算結果が所定ビット長の表現範囲内か否かを予測し飽和予測信号を出力する飽和予測部2と、飽和予測部からの飽和予測信号において演算結果が所定ビット長の表現範囲内にないと予測される場合に、所定ビット長の表現範囲内の最大値又は最小値を出力結果とし、飽和予測信号において演算結果が所定ビット長の表現範囲内にあると予測される場合に、演算結果を出力結果とすることを選択する選択部4とを備え、飽和予測部は、演算処理部に対して並列に動作される。
【選択図】図1
Description
本発明は、演算装置に係る発明であって、特に、飽和処理を行う演算装置に関するものである。
DSP(Digital Signal Processor)等では、出力される機器やデータの種類によって入力したビット長の表現範囲と異なるビット長の表現範囲で出力される場合がある。例えば、DSPでは入力された40ビット長の表現範囲のデータを加減算処理して、16ビット長の表現範囲のデータとして出力する場合がある。40ビット長の表現範囲のデータを16ビット長の表現範囲のデータとして出力する場合、入力されるデータによっては出力データがオーバーフローを起こすことが考えられる。このオーバーフロー対策として、一般に飽和処理が行われる。
具体的に、従来のDSPに用いられる演算装置では、加減算処理の演算結果が16ビット長の表現範囲内にあるか否かについて調査し、この調査結果において演算結果が16ビット長の表現範囲内でない場合に、符号に応じて出力データを16ビット長の表現範囲内の正の最大値又は負の最小値を出力していた。例えば、入力オペランドS0[0:39]、S1[0:39]の加算結果をdtsum[0:39]とする。なお、「[0:39]」の表現は、40ビットのバス表現である。この場合に、演算結果が16ビット長の表現範囲を超えるのは、16ビット長の表現範囲外(符号を表す1ビットを含めた上位25ビット)が全て”0”とならない場合である。つまり、dtsum[0:39]が、dtsum[0]==1’b0で且つdtsum[1:24]!=24’h000000であれば16ビット長の表現範囲を超えていることになる。なお、「==」は両辺が一致する条件演算子を、「!=」は両辺が不一致の条件演算子を、「1’b」は1ビットの2進数表現を、「24’h」は24ビットの16進数表現をそれぞれ表している。また、dtsum[0]は符号を表し、”0”の場合正を”1”の場合負を表している。
そこで、dtsum[0:39]が16ビット長の表現範囲を超えている場合には、飽和処理が行われ、出力されるdtsum[0:39]=40h’0000007FFFと16ビット長の表現範囲の正の最大値となる。また、dtsum[0:39]が、dtsum[0]==1’b1で且つdtsum[1:24]!=24’hFFFFFFであれば負の数であって16ビット長の表現範囲を超えていることになる。そこで、dtsum[0:39]が16ビット長の表現範囲を超えている場合には、飽和処理が行われ、出力されるdtsum[0:39]=40h’FFFFFF8000と16ビット長の表現範囲の最小値となる。
出力されるデータの表現範囲は16ビット長には限られず、例えば32ビット長であっても良い。この32ビット長の表現範囲であっても、上記の場合と同様に、dtsum[0:39]が、dtsum[0]==1’b0で且つdtsum[1:8]!=8’h00であれば32ビット長の表現範囲を超えていることになる。そこで、dtsum[0:39]が32ビット長の表現範囲を超えている場合には、飽和処理が行われ、出力されるdtsum[0:39]=40h’007FFFFFFFと32ビット長の表現範囲の正の最大値となる。また、dtsum[0:39]が、dtsum[0]==1’b1で且つdtsum[1:8]!=8’hFFであれば負の数であって32ビット長の表現範囲を超えていることになる。そこで、dtsum[0:39]が32ビット長の表現範囲を超えている場合には、飽和処理が行われ、出力されるdtsum[0:39]=40h’FF80000000と16ビット長の表現範囲の最小値となる。
特許文献1や特許文献2に示されている従来の演算装置では、上記のアルゴリズムをそのままハードウェアに実装した場合であり、加算処理と飽和処理とが直列実行されている。つまり、40ビットの入力オペランドの加算処理実行後に上位25ビットを調べることで16ビット長の表現範囲内か否かを調査する経路がクリティカルパスとなる。
通常、高速のマイクロプロセッサや汎用DSPの演算装置では、処理を並列に行うためパイプライン処理が行われている。しかし、加算器においては、このパイプライン処理の処理効果が出にくいため、加算器が演算装置のクロックサイクルを決定することになる場合が多い。また、背景技術で説明したように加算処理を直列に接続して飽和処理を行うと、飽和処理分だけクロックサイクルをさらに遅くしてしまう問題があった。
具体的に、飽和処理において25ビットの論理演算を行うと、40ビットの加算処理の20〜50%程度の処理時間を必要とする。そのため、飽和処理を行わない演算装置に比べて、飽和処理を行う演算装置は、1.2〜1.5倍程度の処理時間が必要となる。なお、飽和処理自体をパイプライン処理することも考えられるが、データハザード等が生じるなどの問題点を有しているので、演算装置の飽和処理にパイプライン処理を用いてもシステム性能が低下してしまう問題があった。
そこで、本発明は、飽和処理を行う演算装置において演算処理と飽和処理とに関係する遅延時間を低減し、処理の高速化を図ることが可能な演算装置を提供することを目的とする。
本発明に係る解決手段は、第1入力オペランドと第2入力オペランドとの加算又は減算演算を行い演算結果を出力する演算処理部と、第1入力オペランドと第2入力オペランドに基づいて、演算結果が所定ビット長の表現範囲内か否かを予測し飽和予測信号を出力する飽和予測部と、飽和予測部からの飽和予測信号において演算結果が所定ビット長の表現範囲内にないと予測される場合に、所定ビット長の表現範囲内の最大値又は最小値を出力結果とし、飽和予測信号において演算結果が所定ビット長の表現範囲内にあると予測される場合に、演算結果を出力結果とすることを選択する選択部とを備え、飽和予測部は、演算処理部に対して並列に動作される。
本発明に記載の演算装置は、飽和予測部が演算処理部に対して並列に動作されるので、飽和予測部の処理遅延を低減し、演算装置の高速化が図れる効果がある。
(実施の形態1)
図1に、本実施の形態に係る演算装置のブロック図を示す。図1に示す演算装置では、入力オペランドS0[0:39]、S1[0:39]の加算演算を行い演算結果dtsum[0:39]を出力する演算処理部である加算器1と、入力オペランドS0[0:39]、S1[0:39]とE1HIASAMOD[1:2]から加算器1の演算結果が所定ビット長(例えば16ビット長)の表現範囲内にあるか否かの飽和条件を予測し、飽和予測信号(saten)を出力する飽和予測部2(Saturation Anticipator)とを備えており、演算処理部である加算器1と飽和予測部2は並列に動作するように構成されている。なお、E1HIASAMOD[1:2]は、飽和予測部2を含む飽和処理をエネーブルにするかディセーブルにするかを設定する信号である。
図1に、本実施の形態に係る演算装置のブロック図を示す。図1に示す演算装置では、入力オペランドS0[0:39]、S1[0:39]の加算演算を行い演算結果dtsum[0:39]を出力する演算処理部である加算器1と、入力オペランドS0[0:39]、S1[0:39]とE1HIASAMOD[1:2]から加算器1の演算結果が所定ビット長(例えば16ビット長)の表現範囲内にあるか否かの飽和条件を予測し、飽和予測信号(saten)を出力する飽和予測部2(Saturation Anticipator)とを備えており、演算処理部である加算器1と飽和予測部2は並列に動作するように構成されている。なお、E1HIASAMOD[1:2]は、飽和予測部2を含む飽和処理をエネーブルにするかディセーブルにするかを設定する信号である。
さらに、図1に示す演算装置は、加算器1の演算結果(演算結果の符号を示す部分dtsum[0])とE1HIASAMOD[1:2]とから、所定ビット長の表現範囲の最大値又は最小値を生成する飽和値生成部3(Saturation Values)と、飽和予測部2からの飽和予測信号(saten)に基づいて、加算器1からの演算結果、又は飽和値生成部3で生成された最大値(最小値)を選択し、出力結果(dt[0:39])とする選択部4とを備えている。
次に、図1に示した演算装置の動作について以下に説明する。なお、本実施の形態に係る演算装置も、40ビットの入力オペランドS0[0:39]、S1[0:39]を、16ビット長又は32ビット長の表現範囲で出力する場合を例に説明する。まず、飽和予測部2では、16ビット長の表現範囲内にあるか否かの飽和条件を予測するが、具体的には背景技術で説明した方法と同じである。つまり、飽和予測部2では、加算器1から出力されるdtsum[0:24]の25ビット全てがAll”0”又はAll”1”になるか否かを予測する。
つまり、dtsum[i]が”0”又は”1”であるかを、入力オペランドS0[i:i+1]、S1[i:i+1]から予測する。なお、加算器1では、dtsum[0:24]=S0[0:24]+S1[0:24]+Cinの演算が行われている。ここで、Cinはキャリー入力を表している。本実施の形態に係る飽和予測部2では、例えば演算結果dtsum[0:39]の上位25ビットが”0”となるのを予測したZero予測ビット列E0[0:24]を生成し、当該ビット列の論理積を&E0[0:24]としup24a0と表す。なお、E0[0:24]は、dtsum[0:24]のビットが”0”の場合、対応するビットが”1”となる。
同様に、本実施の形態に係る飽和予測部2では、演算結果dtsum[0:39]の上位25ビットが”1”となるのを予測したOne予測ビット列E1[0:24]を生成し、当該ビット列の論理積を&E1[0:24]としup24a1と表す。なお、E1[0:24]は、dtsum[0:24]のビットが”1”の場合、対応するビットが”1”となる。本実施の形態に係る飽和予測部2では、さらに予測したup24a0とup24a1とから飽和予測ビットであるSat16を求める。上記では、Zero予測ビット列E0[0:24]とOne予測ビット列E1[0:24]とを別々に設けているが、両者を区別せずに飽和予測ビット列としても良い。
次に、Zero予測ビット列E0[0:24]の求め方について説明する。まず、一般的な加算器の論理演算において用いられているPropagate信号(P)、Generate信号(G)、Kill信号(K)を数1のように定義する。
数1において、「^」は二項演算子の排他的論理和を表し、「&」は二項演算子の論理積を表し、「|」は二項演算子の論理和を表し、「〜」は反転の演算子を表している。
まず、dtsum[0:24]の上位2ビットdtsum[0:1]について考えた場合、加算器に入力される入力オペランドS0[0:1]、S1[0:1]の全ての組み合わせをP信号、G信号、K信号で表すと図2の左列のようになる。そして、P信号、G信号、K信号で表された入力オペランドS0[0:1]、S1[0:1]の演算結果dtsum[0:1]が右列の2列に示されている。なお、図2の右列が2列になっているのは、キャリー入力(Cin)の違いによるものである。つまり、Cin=0の場合が右列の1列目に記載され、Cin=1の場合が右列の2列目に記載されている。
図2に示した入力オペランドS0[0:1]、S1[0:1]と演算結果dtsum[0:1]との関係より、入力がKK、GK,PGの場合、キャリー入力の状態にかかわらずいずれのdtsum[0]が”0”となっている。このことから、入力がKK、GK,PGの場合、dtsum[0]が必ず”0”になると予想される。しかし、入力がKP、GP,PPの場合、キャリー入力の状態によってdtsum[0]は”0”となったり”1”なったりと両方を取りうる確率がある。そして、入力がKP、GPの場合には、仮にdtsum[0]が”0”となってもdtsum[1]は必ず”1”となる。そのため、dtsum[0:24]がAll”0”であるか否かについて予測する観点から、dtsum[0]が”0”でないと予測する入力にKP、GPの場合を含めても問題がない。
一方、入力がPPの場合には、仮にdtsum[0]が”0”と予想して、その予想が間違っていたとしてもdtsum[1:24]の予測においてPKとなる入力組み合わせが出現することによるので、Zero予測ビット列E0[i]=0となり、論理積&E0[0:24]=0となる。また、P[0:24]がAll”1”の場合には、E0[24]が正しく求められれば、その結果によりdtsum[0:24]がAll”0”となるのかAll”1”となるのかを決定することができる。以上の観点より、dtsum[0]が”0”であると予測する入力にPPの場合も含めることができる。
上記の内容から、&E0[0:24]=1(dtsum[0:24]がAll”0”)となるのは、入力オペランドがKK、GK,PG,PPの場合である。以下の数2にiビット目のZero予測ビットE0[i]の式を示す。
具体的に、40ビットの演算結果を16ビット長の表現範囲内にあるか否かを予測する処理に数2を適用すると、以下の数3のようになる。
なお、最下位ビットである24ビット目のE0[24]は別途考える必要があるため、数3では0ビット目から23ビット目までのZero予測ビット列E0[0:23]が示されている。なお、E0[24]は数4のように示される。
ここで、Co[25]は25ビット目のキャリー出力を表している。そして、このE0[24]を正しく予測する方法は、現在のところ見つかっておらず、下位からのキャリーを予測する必要がある。すなわち、〜P[24]^Co[25]は、加算器の出力であるdtsum[24]の反転の結果と等しくなる。
同様に、図2に示す関係から入力オペランドがPK,KG,GG,PPの場合にdtsum[0:1]が”11”の並びとなることから、iビット目のOne予測ビットE1[i]及び具体例であるOne予測ビット列E1[0:23]を求めると数5のようになる。
なお、数5に示されているE1[24]を正しく予測する方法は、現在のところ見つかっておらず、下位からのキャリーを予測する必要がある。すなわち、P[24]^Co[25]は、加算器の出力であるdtsum[24]と等しくなる。
以上のように、Zero予測ビット列E0[0:24]とOne予測ビット列E1[0:24]とから16ビット長の表現範囲の飽和予測ビットSat16を求めると、数6のようになる。
上記で述べた方法を用いて、同様に32ビット長の表現範囲の飽和予測ビットSat32を求めると数7のようになる。
次に、E1HIASAMOD[1:2]は、例えば2’b00=「飽和処理をしない」、2’b10=「16ビット長へ飽和処理する」、2’b01=「32ビット長へ飽和処理する」、2’b11=「禁止状態」の信号を飽和予測部2に供給する。この信号のうち2’b10=「16ビット長へ飽和処理する」は演算結果が16ビット長の表現範囲内になるように飽和処理を行うことを指示するエネーブル信号(Sat16en)であり、2’b01=「32ビット長へ飽和処理する」は32ビット長の表現範囲内になるように飽和処理を行うことを指示するエネーブル信号(Sat32en)である。飽和予測部2では、飽和予測ビットSat16、Sat32とエネーブル信号Sat16en,Sat32enとから数8に示すような飽和予測信号(saten)を生成し、選択部4に供給する。
飽和予測信号(saten)が”1”の場合、選択部4は演算結果の符号(dtsum[0])に応じた飽和値を出力結果dt[0:39]として出力する。なお、飽和予測信号(saten)が”0”の場合、選択部4は加算器1の演算結果をそのまま出力結果dt[0:39]として出力する。
以上のように、本実施の形態に係る飽和予測部は、入力オペランドS0[i]と入力オペランドS1[i]に基づいて、飽和予測ビット列E0[i](Zero予測ビット),E1[i](One予測ビット)を生成し、当該飽和予測ビット列の論理積&E0[i],&E1[i]である飽和予測信号(saten)を求めるように構成することで、論理の簡素化が可能となり回路規模を小さくすることができる。また、所定ビット長の表現範囲外の最下位ビットについては加算器1での演算結果を用いるので、予測の困難性を回避することができ正確な予想が可能となる。さらに、本実施の形態に係るアルゴリズムを用いることで、正確に飽和予測を行うことが可能となる。
次に、Zero予測ビットE0[i]を演算する論理回路の構成を図3に、One予測ビットE1[i]を演算する論理回路の構成を図4にそれぞれ示す。まず、図3では、iビット目の入力オペランドS0[i],S1[i]の排他的論理和を演算するXOR回路31と、i+1ビット目の入力オペランドS0[i+1],S1[i+1]の否定論理和を演算するNOR回路32と、XOR回路31の出力とNOR回路32の出力との排他的論理和を演算するXOR回路33とで構成されている。
図4では、iビット目の入力オペランドS0[i],S1[i]の排他的論理和を演算するXOR回路41と、i+1ビット目の入力オペランドS0[i+1],S1[i+1]の論理積を演算するAND回路42と、XOR回路41の出力とAND回路42の出力との排他的論理和を演算するXOR回路43とで構成されている。
図3で示したZero予測ビットE0[i]を演算する回路と図4で示したOne予測ビットE1[i]を演算する回路をアレイ上に並べることで飽和予測部2を構成することができる。例えば、E0[0:23]なら図3に示した論理回路を24個並べ、E1[0:23]なら図4に示した論理回路を24個並べて飽和予測部2構成する。
なお、本実施の形態では、表現範囲を16ビット長又は32ビット長に変更できるように、エネーブル信号Sat16en,Sat32enが供給される。図5に、Sat16enとSat32enを含めた飽和予測部2の構成を示す。
図5では、図3に示す論理回路(以下、E0gen[i](iは任意の整数)ともいう)が24個並べられ、図4に示す論理回路(以下、E1gen[i](iは任意の整数)ともいう)も24個並べられている。なお、図3に示したE0gen[i]では、Zero予測ビットE0[i]を得るために入力オペランドS0[i],S1[i],S0[i+1],S1[i+1]の4つの入力が必要であったが、図5に示すE0gen[i]では、入力オペランドS0[i+1],S1[i+1]からの入力については図示を省略している。図5に示すE1gen[i]も同様である。そして、E0gen[i]の出力は、4ビット毎にAND回路51に入力され、E0gen[0]からE0gen[7]に対応するAND回路51の出力はAND回路52に入力され、E0gen[8]からE0gen[23]に対応するAND回路51の出力はAND回路53に入力される。
同様に、E1gen[i]の出力は、4ビット毎にAND回路54に入力され、E1gen[0]からE1gen[7]に対応するAND回路54の出力はAND回路55に入力され、E1gen[8]からE1gen[23]に対応するAND回路54の出力はAND回路56に入力される。
次に、AND回路52の出力と、加算器で実際に演算された結果であるdtsum[8]とがNAND回路57に入力され、AND回路52,53の出力と、加算器で実際に演算された結果であるdtsum[24]とがNAND回路58に入力される。同様に、AND回路55の出力と、加算器で実際に演算された結果であるdtsum[8]の反転結果とがNAND回路59に入力され、AND回路55,56の出力と、加算器で実際に演算された結果であるdtsum[24]の反転結果とがNAND回路60に入力される。
NAND回路57の出力とNAND回路59の出力とがOR回路61に入力され、OR回路61はSat32を出力する。NAND回路58の出力とNAND回路60の出力とがOR回路63に入力され、OR回路63はSat16を出力する。Sat32は、AND回路62でエネーブル信号であるSat32enとのAND演算が行われ、Sat16は、AND回路64でエネーブル信号であるSat16enとのAND演算が行われる。OR回路65は、AND回路62の出力とAND回路64の出力とのOR演算を行い、飽和予測信号であるsatenを出力する。
以上のように、本実施の形態では、図3及び図4に示すE0gen[i]及びE1gen[i]の論理回路と、図5に示す飽和予測部2の構成を採用するので、加算演算と飽和処理を並列に行うことができ、演算装置の高速化を図ることができる。
なお、本実施の形態では、演算処理部が加算器の場合について説明したが、本発明はこれに限られず演算処理部が減算器であっても良い。また、本実施の形態を含む本発明に係る演算装置は、汎用のDSPはもちろんのことDSPの命令に類似した命令が追加されたマイクロプロセッサや高機能の専用LSI等にも適用することができる。さらに、これらを搭載したSoC(System On a Chip)製品に展開できることは言うまでもない。
(実施の形態2)
実施の形態1で説明したように、図5に示す飽和予測部2では加算器1からの出力であるdtsum[8]及びdtsum[32]を利用する。しかし、加算器1と飽和予測部2とが並列に駆動されていても、加算器1からdtsum[8]及びdtsum[32]の演算結果を得てから飽和予測部2が複数の処理を行う必要があれば、加算器1の演算が終了しても飽和予測部2の処理が終わらないため演算装置全体として処理が遅延することも考えられる。そこで、本実施の形態では、飽和予測部2において加算器1からの演算結果をより後段の処理で利用することにすることで、演算結果を得てから処理が少なくなり演算装置全体として処理を高速化することができる。
実施の形態1で説明したように、図5に示す飽和予測部2では加算器1からの出力であるdtsum[8]及びdtsum[32]を利用する。しかし、加算器1と飽和予測部2とが並列に駆動されていても、加算器1からdtsum[8]及びdtsum[32]の演算結果を得てから飽和予測部2が複数の処理を行う必要があれば、加算器1の演算が終了しても飽和予測部2の処理が終わらないため演算装置全体として処理が遅延することも考えられる。そこで、本実施の形態では、飽和予測部2において加算器1からの演算結果をより後段の処理で利用することにすることで、演算結果を得てから処理が少なくなり演算装置全体として処理を高速化することができる。
具体的に、本実施の形態に係る飽和予測部2の構成図を図6に示す。なお、図6では、図5と同じ構成の部分については、同じ符号を付して説明する。まず、図6では、E0gen[i]が24個並べられ、E1gen[i]も24個並べられている。そして、E0gen[i]の出力は、4ビット毎にAND回路51に入力され、E0gen[0]からE0gen[7]に対応するAND回路51の出力はAND回路52に入力され、E0gen[8]からE0gen[23]に対応するAND回路51の出力はAND回路53に入力される。
同様に、E1gen[i]の出力は、4ビット毎にAND回路54に入力され、E1gen[0]からE1gen[7]に対応するAND回路54の出力はAND回路55に入力され、E1gen[8]からE1gen[23]に対応するAND回路54の出力はAND回路56に入力される。
次に、インバータ66で反転されたAND回路52の出力と、加算器で実際に演算された結果であるdtsum[8]と、エネーブル信号であるSat32enとがAND回路67に入力されている。そして、AND回路52の出力とAND回路53の出力とがNAND回路68に入力され、当該NAND回路68の出力と、加算器で実際に演算された結果であるdtsum[24]と、エネーブル信号であるSat16enとがAND回路69に入力される。同様に、インバータ70で反転されたAND回路55の出力と、加算器で実際に演算された結果であるdtsum[8]の反転結果と、エネーブル信号であるSat32enとがAND回路71に入力されている。そして、AND回路55の出力とAND回路56の出力とがNAND回路72に入力され、当該NAND回路72の出力と、加算器で実際に演算された結果であるdtsum[24]の反転結果と、エネーブル信号であるSat16enとがAND回路73に入力される。
AND回路67の出力と、AND回路69の出力と、AND回路71の出力と、AND回路73の出力とがOR回路74に入力され、当該OR回路74は飽和予測信号であるsatenを出力する。
図6に示す飽和予測部2の構成では、エネーブル信号であるSat16en,Sat32enが入力されてから飽和予測信号であるsatenを出力するまでの間に2段の演算処理が行われている。一方、図5に示す飽和予測部2の構成では、エネーブル信号であるSat16en,Sat32enが入力されてから飽和予測信号であるsatenを出力するまでの間に4段の演算処理が行われている。そのため、図6の飽和予測部2の方が、Sat16en,Sat32enが入力されてからsatenを出力するまでの間の処理を短縮できるので、演算装置全体の高速化が図れる。
以上のように、本実施の形態では、飽和予測部2の構成を図6に示すようにすることで、演算装置の高速化を図ることができる。
(実施の形態3)
本実施の形態に係る飽和予測部2は、実施の形態2で説明した飽和予測部2に対しマルチプレクサを用いた例である。具体的に、本実施の形態に係る飽和予測部2の構成図を図7に示す。なお、図7では、図6と同じ構成の部分については、同じ符号を付して説明する。
本実施の形態に係る飽和予測部2は、実施の形態2で説明した飽和予測部2に対しマルチプレクサを用いた例である。具体的に、本実施の形態に係る飽和予測部2の構成図を図7に示す。なお、図7では、図6と同じ構成の部分については、同じ符号を付して説明する。
まず、図7では、E0gen[i]が24個並べられ、E1gen[i]も24個並べられている。そして、E0gen[i]の出力は、4ビット毎にAND回路51に入力され、E0gen[0]からE0gen[7]に対応するAND回路51の出力はAND回路52に入力され、E0gen[8]からE0gen[23]に対応するAND回路51の出力はAND回路53に入力される。
同様に、E1gen[i]の出力は、4ビット毎にAND回路54に入力され、E1gen[0]からE1gen[7]に対応するAND回路54の出力はAND回路55に入力され、E1gen[8]からE1gen[23]に対応するAND回路54の出力はAND回路56に入力される。
次に、インバータ66で反転されたAND回路52の出力と、エネーブル信号であるSat32enとがAND回路75に入力されている。そして、AND回路52の出力とAND回路53の出力とがNAND回路68に入力され、当該NAND回路68の出力と、エネーブル信号であるSat16enとがAND回路69に入力される。同様に、インバータ70で反転されたAND回路55の出力と、エネーブル信号であるSat32enとがAND回路77に入力されている。そして、AND回路55の出力とAND回路56の出力とがNAND回路72に入力され、当該NAND回路72の出力と、エネーブル信号であるSat16enとがAND回路78に入力される。
AND回路75の出力と、AND回路77の出力と、加算器で実際に演算された結果であるdtsum[8]とが第1マルチプレクサ部79に入力される。同様に、AND回路76の出力と、AND回路78の出力と、加算器で実際に演算された結果であるdtsum[24]とが第2マルチプレクサ部80に入力される。第1マルチプレクサ部79の出力と、第2マルチプレクサ部80の出力とがOR回路81に入力され、当該OR回路81は飽和予測信号であるsatenを出力する。
本実施の形態に係る飽和予測部2は、図6に示した飽和予測部2と同じように、加算器で実際に演算された結果であるdtsum[8],dtsum[24]をできる限り後段で入力するとともに、高速動作が可能なマルチプレクサを利用している。
以上のように、本実施の形態では、飽和予測部2の構成を図7に示すようにすることで、演算装置の高速化を図ることができる。
(実施の形態4)
実施の形態1では、図3で示したZero予測ビットE0[i]演算する回路と図4で示したOne予測ビットE1[i]を演算する回路とを用いて飽和予測部2が構成されていた。しかし、図からも明らかなように、図3や図4の回路は4つの入力が必要となる。例えばZero予測ビットE0[0]を求めるためには、入力オペランドS0[0],S1[0],S0[1],S1[1]の4つの入力が必要となる。そのため、実施の形態1では、Zero予測ビットE0[i]を演算する回路やOne予測ビットE1[i]を演算する回路の入力ファンイン容量が大きくなるとともに回路規模も大きくなることが考えられる。そこで、本実施の形態では、これに代えて図8に示すZero予測ビットE0[i]を演算する回路、図9に示すOne予測ビットE1[i]を演算する回路を用いる。
実施の形態1では、図3で示したZero予測ビットE0[i]演算する回路と図4で示したOne予測ビットE1[i]を演算する回路とを用いて飽和予測部2が構成されていた。しかし、図からも明らかなように、図3や図4の回路は4つの入力が必要となる。例えばZero予測ビットE0[0]を求めるためには、入力オペランドS0[0],S1[0],S0[1],S1[1]の4つの入力が必要となる。そのため、実施の形態1では、Zero予測ビットE0[i]を演算する回路やOne予測ビットE1[i]を演算する回路の入力ファンイン容量が大きくなるとともに回路規模も大きくなることが考えられる。そこで、本実施の形態では、これに代えて図8に示すZero予測ビットE0[i]を演算する回路、図9に示すOne予測ビットE1[i]を演算する回路を用いる。
図8に示すZero予測ビットE0[i]を演算する論理回路は、入力オペランドS0[i],S1[i]が反転入力されるAND回路85及びAND回路86と、AND回路86の出力とAND回路85の反転出力が入力されるOR回路87と、i+1ビット目のKill信号(K[i+1])とOR回路87の出力が入力されるXOR回路88とで構成されている。ここで、AND回路85の出力はiビット目のKill信号(K[i])としても出力されている。また、XOR回路88の出力がZero予測ビットE0[i]となる。
一方、図9に示すOne予測ビットE1[i]を演算する論理回路は、入力オペランドS0[i],S1[i]が入力されるNAND回路91及びAND回路92と、NAND回路91の出力とAND回路92の出力が入力されるNOR回路93と、i+1ビット目のGenerate信号(G[i+1])の反転信号とNOR回路93の出力が入力されるXOR回路94とで構成されている。ここで、NAND回路91の出力はiビット目のGenerate信号(G[i])の反転信号としても出力されている。また、XOR回路94の出力がZero予測ビットE1[i]となる。
図8及び図9からも分かるように、本実施の形態に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路では、入力オペランドS0[i],S1[i]のみ入力され、入力オペランドS0[i+1],S1[i+1]の入力が不要である。
以上のように、本実施の形態に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路を図8及び図9とすることで、入力ファンイン容量を軽減できるとともに回路規模を縮小することも可能になる。
(実施の形態5)
実施の形態4に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路では、入力オペランドS0[i],S1[i]からZero予測ビットE0[i]及びOne予測ビットE1[i]を演算していた。しかし、本実施の形態に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路では、入力オペランドS0[i],S1[i]に代えて、加算器1でのPropagate信号、Generate信号、Kill信号を利用する。
実施の形態4に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路では、入力オペランドS0[i],S1[i]からZero予測ビットE0[i]及びOne予測ビットE1[i]を演算していた。しかし、本実施の形態に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路では、入力オペランドS0[i],S1[i]に代えて、加算器1でのPropagate信号、Generate信号、Kill信号を利用する。
図10に、本実施の形態に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路の構成を示す。図10では、iビット目のPropagate信号(P[i])とi+1ビット目のKill信号(K[i+1])とが入力されるXOR回路101と、iビット目のPropagate信号(P[i])とi+1ビット目のGenerate信号(G[i+1])とが入力されるXOR回路102とを備えている。そして、XOR回路101がZero予測ビットE0[i]を出力し、XOR回路102がOne予測ビットE1[i]を出力する。
以上にように、本実施の形態に係るZero予測ビットE0[i]及びOne予測ビットE1[i]を演算する論理回路を図10のような構成にすることで、回路規模を縮小することができる。
(実施の形態6)
上記の実施の形態で説明した演算装置は様々な応用が可能であるが、本実施の形態ではキャッシュメモリのヒット判定に応用した例を説明する。まず、図11に、キャッシュメモリのヒット判定の機能を有する従来の半導体装置のレイアウト図を示す。図11に示すレイアウト図では、CPUコア110、メモリI/F111、I/O−IF112が設けられ、CPUコア110内にアドレス修飾部113、メモリI/F111内にキャッシュ判定部114が設けられている。
上記の実施の形態で説明した演算装置は様々な応用が可能であるが、本実施の形態ではキャッシュメモリのヒット判定に応用した例を説明する。まず、図11に、キャッシュメモリのヒット判定の機能を有する従来の半導体装置のレイアウト図を示す。図11に示すレイアウト図では、CPUコア110、メモリI/F111、I/O−IF112が設けられ、CPUコア110内にアドレス修飾部113、メモリI/F111内にキャッシュ判定部114が設けられている。
従来の半導体装置は、図11に示すレイアウトから分かるように、アドレス修飾部113で修飾したアドレスをキャッシュ判定部114に送り、キャッシュ判定部114でヒット判定を行い、Hit信号を出力していた。アドレス修飾部113は、通常加算器で構成されるので、アドレス修飾部113及びキャッシュ判定部114のブロック図を図12に示す。また、Hit信号を数式で表すと、数9となる。
ここで、数9に示す「==」の演算子は、左辺と右辺が同じ値の時に”1”を返し、そうでないときに”0”を返すことを意味している。なお、本実施の形態以降では、「==」の演算子を上記の意味で用いるものとする。
図12に示すブロック図では、アドレス修飾部113の前段において、べ一ス値(Base)、減算の場合の前処理などがなされた後のアドレス値(Addr)、キャリー入力(Cin)が作成され、アドレス修飾部113の後段に出力される。なお、べ一ス値(Base)及びアドレス値(Addr)はそれぞれ30ビットであり、数9ではBase[0:29]、Addr[0:29]と表現されている。
アドレス修飾部113の後段には加算器115が設けられており、当該加算器115に入力されたべ一ス値(Base)、アドレス値(Addr)、キャリー入力(Cin)からメモリアドレス(MemA)が演算される。加算器115での演算式は、数9に示されており、30ビットのメモリアドレス(MemA)はMemA[0:29]と表現されている。
加算後のメモリアドレス(MemA)がメモリアクセスのための実アドレスとなるので、これがキャッシュ内に格納されているかどうかを、キャッシュ判定部114で判定する。図12では、キャッシュ判定部114を構成する比較器CMPで、メモリアドレス(MemA)の上位27ビットとアクセスを行う目的アドレス(Tag)とが比較され、当該結果に基づいてHit信号が出力される。数9では、目的アドレス(Tag)がTag[0:26]と表現されている。
以上のように、従来の半導体装置では、図12に示すように加算器115と比較器CMPとは直列に処理されるため、加算器115の結果が出るまで比較器CMPは待機する必要があった。また、加算器115及び比較器CMPは、どちらも遅延時間が大きい。そのため、図12に示すキャッシュメモリのヒット判定では、Hit信号を得るための遅延が大きい問題があった。
そこで、本実施の形態では、数9で示した演算を以下のように変形することで、実施の形態1等で説明したOne予測ビットE1列と対応させることができる。まず、数9の変形例を数10に示す。
次に、数10の補数の式を数11に示す。
数11の両辺から1を引くと数12となる。
数12では、全ての加算器において3つのオペランドを加算しているが、これを2つのオペランドの加算に縮退させると数13となる。
なお、Comp_Est0、Comp_Est1、Sum_Est1、Cary_Est1は、ヒット判定部での演算の中間値である。
数13では、Sum_Est1[0:26]と{Cary_Est1[1:26],Cin’}との加算結果であるComp_Est1[0:26]がAll”1”であるかどうかを求める式である。つまり、Comp_Est1[0:26]は、One予測ビットE1列[0:26]と対応し、Sum_Est1[0:26]と{Cary_Est1[1:26],Cin’}とがそれぞれ入力オペランドS0[i],S1[i](iは任意の整数)と対応するため、実施の形態1等の構成を利用することができ、キャッシュ判定部114を高速化することができる。
数13を適用した場合のアドレス修飾部113の回路構成を図13に示す。なお、図13では、図12と同一の構成要素については同一の符号を付している。図13に示すアドレス修飾部113の前段においても、べ一ス値(Base)、アドレス値(Addr)、キャリー入力(Cin)が作成され、アドレス修飾部113の後段に出力される。
しかし、図13では、図12と異なり、アドレス修飾部113の後段にキャッシュ判定部114に対応するヒット判定部121が設けられている。つまり、図13のアドレス修飾部113の後段には、アドレス計算部120と、ヒット判定部121との2系統が分かれて並列処理できるように構成されている。
アドレス計算部120では、加算器115でべ一ス値(Base)、アドレス値(Addr)、キャリー入力(Cin)を演算し、メモリアドレス(MemA)を出力している。ヒット判定部121では、下位3ビットのAddr[27:29]と下位3ビットのBase[27:29]とが入力され、キャリー情報Cin’が出力される加算器122と、上位27ビットのAddr[0:26]と上位27ビットのBase[0:26]とTag[0:26]とキャリー情報Cin’とが入力され、Comp_Est1[0:26]が出力される演算回路CSAとが設けられている。
さらに、ヒット判定部121には演算回路E1,123が設けられ、Comp_Est1[0:26]が、27’hFFFFFFと同じ値の時にHit信号”1”を返し、そうでないときにHit信号”0”を返すように構成している。
本実施の形態に係るヒット判定部121は、アドレス計算部120と並列処理され、全加算器1段のアレイから構成される演算回路CSAを有するので、キャリー入力(Cin)を伝播させる必要がない。そのため、本実施の形態に係るアドレス修飾部113の後段は、高速にHit信号の出力を行うことができる。したがって、本実施の形態に係るヒット判定部121は、アドレス計算部120と並列動作できるようになっているので、ヒット判定がアドレス計算の加算処理に隠蔽されることとなる。
なお、本実施の形態に係るヒット判定部121では、キャリー情報Cin’を求めるために加算器122を設けている。しかし、キャリー情報Cin’は、数13や図13から分かるように、アドレス計算部120の中間値と同じであることが分かる。そのため、アドレス計算部120の加算器115からキャリー情報Cin’の値を取り出すことができる。図14に、本実施の形態の変形例であるアドレス修飾部113の回路構成を示す。図14の回路構成は、ヒット判定部121に加算器122が設けられていない点以外は、図13の回路構成と同じである。図14に示す演算回路CSAでは、アドレス計算部120の加算器115からキャリー情報Cin’が取り出されている。これにより、本実施の形態の変形例では、ヒット判定部121の回路構成を簡略化することができる。
(実施の形態7)
実施の形態6では、図13に示すようにキャリー情報Cin’が演算回路CSAに入力される構成であった。しかし、キャリー情報Cin’は、数13から分かるようにAddr[27:29]とBase[27:29]とを実際に演算して求められる値であるため、ヒット判定部121とアドレス計算部120との並列処理に行う場合に、キャリー情報Cin’を求める時間が並列処理の遅延時間となる。つまり、キャリー情報Cin’は、キャリー伝播を伴うので信号遅延が大きく、キャリー情報Cin’の通る経路が、実施の形態6で示した回路構成のクリティカルパスとなっていた。
実施の形態6では、図13に示すようにキャリー情報Cin’が演算回路CSAに入力される構成であった。しかし、キャリー情報Cin’は、数13から分かるようにAddr[27:29]とBase[27:29]とを実際に演算して求められる値であるため、ヒット判定部121とアドレス計算部120との並列処理に行う場合に、キャリー情報Cin’を求める時間が並列処理の遅延時間となる。つまり、キャリー情報Cin’は、キャリー伝播を伴うので信号遅延が大きく、キャリー情報Cin’の通る経路が、実施の形態6で示した回路構成のクリティカルパスとなっていた。
そこで、本実施の形態では、キャリー情報Cin’の通る経路がクリティカルパスとならないように、ヒット判定部121においてキャリー情報Cin’が”1”であると仮定したHit信号と、キャリー情報Cin’が”0”であると仮定したHit信号とを2種類用意している。そして、本実施の形態では、アドレス計算部120でのキャリー情報Cin’の演算が既に終わった最終段階で、実際に演算で求めたキャリー情報Cin’をアドレス計算部120から入力して2種類のHit信号のいずれかを選択する構成とした。
本実施の形態での数式を数14に示す。
図15に、数14に対応する本実施の形態に係るアドレス修飾部113の回路構成を示す。図15に示す回路構成は、ヒット判定部121の回路構成が異なる点以外は、基本的に図14に示す回路構成と同じである。そのため、図15では、図14と同じ構成については同一の符号を付している。
まず、演算回路CSAには、上位27ビットのAddr[0:26]と上位27ビットのBase[0:26]とTag[0:26]とが入力される。本実施の形態に係る演算回路CSAでは、キャリー情報Cin’が”0”であると仮定した演算回路E1にComp_Est0[0:26]が、キャリー情報Cin’が”1”であると仮定した演算回路E1にComp_Est1[0:26]が出力される。
さらに、図15に示すヒット判定部121では、演算回路131と演算回路132を設けている。演算回路E1,131は、Comp_Est0[0:26]が、27’hFFFFFFと同じ値の時に”1”を返し、そうでないときに”0”を返すHit0信号を出力し、演算回路E1,132は、Comp_Est1[0:26]が、27’hFFFFFFと同じ値の時に”1”を返し、そうでないときに”0”を返すHit1信号を出力する。
また、図15に示すヒット判定部121では、アドレス計算部120で演算されたキャリー情報Cin’に基づいて、Hit0信号及びHit1信号のいずれか一方を選択する選択回路133が設けられている。選択回路133では、実際に演算で求めたキャリー情報Cin’が”0”の場合は、Hit0信号をHit信号として出力し、実際に演算で求めたキャリー情報Cin’が”1”の場合は、Hit1信号をHit信号として出力する。
以上のように、本実施の形態では、実際に演算で求めたキャリー情報Cin’がヒット判定部121の処理の後段で入力されているので、演算装置の高速化を図ることができる。
(実施の形態8)
本実施の形態は、実施の形態7の変形例であり、図16にその回路構成を示す。図16に示す回路構成は、ヒット判定部121の一部の回路構成が異なる点以外は、基本的に図15に示す回路構成と同じである。そのため、図16では、図15と同じ構成については同一の符号を付している。
本実施の形態は、実施の形態7の変形例であり、図16にその回路構成を示す。図16に示す回路構成は、ヒット判定部121の一部の回路構成が異なる点以外は、基本的に図15に示す回路構成と同じである。そのため、図16では、図15と同じ構成については同一の符号を付している。
図16に示す演算回路CSAでは、数14のComp_Est0[0:26]及びHit0の判定式の両辺に”1”を足した以下の数15の関係を利用している。
数15のComp_Est0[0:26]は、数14のComp_Est1[0:26]と等しい。そのため、図16に示す演算回路CSAでは、図15と異なり、キャリー情報Cin’が”0”であると仮定した演算回路E1の代わりに、キャリー情報Cin’が”1”であると仮定した演算回路E0を設けている。
さらに、図16に示す演算回路E0,131では、図15と異なり、Comp_Est1[0:26]が、27’h0000000と同じ値の時に”1”を返し、そうでないときに”0”を返すHit0信号を出力する構成となっている。なお、演算回路E1,132は、Comp_Est1[0:26]が、27’hFFFFFFと同じ値の時に”1”を返し、そうでないときに”0”を返すHit1信号を出力する。
また、図16に示すヒット判定部121では、アドレス計算部120で演算されたキャリー情報Cin’に基づいて、Hit0信号及びHit1信号のいずれか一方を選択する選択回路133が設けられている。選択回路133では、実際に演算で求めたキャリー情報Cin’が”0”の場合は、Hit0信号をHit信号として出力し、実際に演算で求めたキャリー情報Cin’が”1”の場合は、Hit1信号をHit信号として出力する。
図16に示した回路構成を式で表すと以下の数16のようになる。
以上のように、本実施の形態では、実際に演算で求めたキャリー情報Cin’がヒット判定部121の処理の後段で入力されているので、演算装置の高速化を図ることができる。
(実施の形態9)
実施の形態6乃至実施の形態8に示したアドレス修飾部の演算装置は、仮想メモリシステムのTLB(Trans1ation-lookaside buffer)に特に有効である。TLBは、Virtua1 AddressからPhysical Addressへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュメモリである。
実施の形態6乃至実施の形態8に示したアドレス修飾部の演算装置は、仮想メモリシステムのTLB(Trans1ation-lookaside buffer)に特に有効である。TLBは、Virtua1 AddressからPhysical Addressへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュメモリである。
図17に、TLBの概略図を示す。なお、詳しくは、D.A.Patterson and J.L.Hennessy,“Computer Oranization & Design: The Hardware/Software Interface - Second Edition", Morgan Kaufmann, 1997, p.593, Figure 7.25に記載されている。この図17に示すTLBでは、Virtua1 AddressとTagを比較する構造を有している。そのため、実施の形態6乃至実施の形態8で説明したべ一ス値(Base)、アドレス値(Addr)をVirtual Addressに、目的アドレス(Tag)をTagにそれぞれ対応させることでTLBのHit信号を遅延なく得ることができる。
(実施の形態10)
実施の形態6乃至実施の形態8に示したアドレス修飾部の演算装置は、Fully Associative型キャッシュの場合にも特に有効である。
実施の形態6乃至実施の形態8に示したアドレス修飾部の演算装置は、Fully Associative型キャッシュの場合にも特に有効である。
図18に示すようにキャッシュメモリには、Direct Map型、Set Associative型、Fully Associative型の3種類がある。Direct Map型は、各ブロックのキャッシュの上での位置が一意に決められている方式である。Set Associative型は、ブロックをキャッシュ上のある決められた範囲の中にだけ置く方式である。Fully Associative型は、ブロックをキャッシュ上の任意の位置に置く方式である。 なお、キャッシュメモリの3種類の型については、J.L.Hennessy and D.A.Patterson,“Computer Architecture: A Quantitative Approach - Third Edition", Morgan Kaufmann, 2003, p.398, Figure 5.4に詳しく記載されている。
図18から解るように、Direct Map型やSet Associative型ではメモリ素子の各ブロックから目的アドレス(Tag)を読み出すため、そのアクセスに遅延が生じる。これが充分に小さい場合には、実施の形態6乃至実施の形態8で示した効果が現れるが、逆にこの遅延が大きくてアドレス計算と同等である場合には、このメモリアクセス時間にアドレス計算時間が隠蔽されてしまう。しかし、Fully Associative型の場合には目的アドレス(Tag)がメモリ素子の一意のブロックから常に読み出されるので、メモリアクセスの遅延はなく、常に実施の形態6乃至実施の形態8で示した効果が得られる。
1 加算器、2 飽和予測部、3 飽和値生成部、4 選択部、31,33,41,43,88,101,102 XOR回路、32,93 NOR回路、42,51,52,53,54,55,56,62,64,75,76,77,78,85,86,92 AND回路、57,58,59,60,68,72,91 NAND回路、61,63,65、87 OR回路、66,70 インバータ回路、79 第1マルチプレクサ部、80 第2マルチプレクサ部、94 XNOR回路、110 CPUコア、111 メモリI/F、112 I/O−IF、113 アドレス修飾部、114 キャッシュ判定部、115,122 加算器、120 アドレス計算部、121 ヒット判定部、131,132 演算回路、133 選択回路。
Claims (18)
- 第1入力オペランドと第2入力オペランドとの加算又は減算演算を行い演算結果を出力する演算処理部と、
前記第1入力オペランドと前記第2入力オペランドに基づいて、前記演算結果が所定ビット長の表現範囲内か否かを予測し飽和予測信号を出力する飽和予測部と、
前記飽和予測部からの前記飽和予測信号において前記演算結果が所定ビット長の表現範囲内にないと予測される場合に、所定ビット長の表現範囲内の最大値又は最小値を出力結果とし、前記飽和予測信号において前記演算結果が所定ビット長の表現範囲内にあると予測される場合に、前記演算結果を前記出力結果とすることを選択する選択部とを備え、
前記飽和予測部は、前記演算処理部に対して並列に動作されることを特徴とする演算装置。 - 前記飽和予測部は、前記第1入力オペランドと前記第2入力オペランドに基づいて、所定ビット長の表現範囲外に位置する前記演算結果の個々のビット状態を予測した飽和予測ビット列を生成し、当該飽和予測ビット列の論理積である前記飽和予測信号を求めることを特徴とする請求項1に記載の演算装置。
- 前記飽和予測ビット列は、所定ビット長の表現範囲外に位置する前記演算結果の個々のビット状態が”0”であると予測するZero予測ビット列と、所定ビット長の表現範囲外に位置する前記演算結果の個々のビット状態が”1”であると予測するOne予測ビット列とを有し、
前記飽和予測部は、前記Zero予測ビット列の論理積と前記One予測ビット列の論理積との論理和を演算することで前記飽和予測信号を求めることを特徴とする請求項2に記載の演算装置。 - 前記Zero予測ビット列及び前記One予測ビット列は、それぞれの最下位ビットに前記演算結果を用いることを特徴とする請求項3に記載の演算装置。
- 前記飽和予測部は、前記第1入力オペランドと前記第2入力オペランドとの排他的論理和であるPropagate信号と、前記Propagate信号より1ビット下位の前記第1入力オペランド及び前記第2入力オペランドの論理和を反転させたKill信号との排他的論理和を演算することで前記Zero予測ビット列を求める第1アルゴリズムと、
前記Propagate信号と、前記Propagate信号より1ビット下位の前記第1入力オペランド及び前記第2入力オペランドの論理積であるGenerate信号との排他的論理和を演算することで前記One予測ビット列を求める第2アルゴリズムとを備えることを特徴とする請求項3又は請求項4に記載の演算装置。 - 前記演算装置は、第1ビット長の表現範囲と前記第1ビット長の表現範囲より表現範囲が狭い第2ビット長の表現範囲とを選択でき、
前記飽和予測部は、
前記第1入力オペランド及び前記第2入力オペランドのうち前記第2ビット長の表現範囲外の最下位ビットを除くビットに対して、前記第1アルゴリズムの処理を行い前記Zero予測ビット列を出力するZero予測ビット処理部と、
前記第1入力オペランド及び前記第2入力オペランドのうち前記第2ビット長の表現範囲外の最下位ビットを除くビットに対して、前記第2アルゴリズムの処理を行い前記One予測ビット列を出力するOne予測ビット処理部と、
前記Zero予測ビット処理部の出力のうち前記第1ビット長の表現範囲外の最下位ビットを除くビットの論理積を演算する第1論理演算部と、
前記第1論理演算部で演算したビットを除く前記Zero予測ビット処理部の出力に対して論理積を演算する第2論理演算部と、
前記One予測ビット処理部の出力のうち前記第1ビット長の表現範囲外の最下位ビットを除くビットの論理積を演算する第3論理演算部と、
前記第3論理演算部で演算したビットを除く前記One予測ビット列処理部の出力に対して論理積を演算する第4論理演算部と、
第1論理演算部の出力と、前記第1ビット長の表現範囲外の最下位ビットに対応する前記演算結果との否定論理積を演算する第1最下位ビット演算部と、
第1論理演算部の出力と、第2論理演算部の出力と、前記第2ビット長の表現範囲外の最下位ビットに対応する前記演算結果との否定論理積を演算する第2最下位ビット演算部と、
第3論理演算部の出力と、前記第1ビット長の表現範囲外の最下位ビットに対応する前記演算結果を反転したビットとの否定論理積を演算する第3最下位ビット演算部と、
第3論理演算部の出力と、第4論理演算部の出力と、前記第2ビット長の表現範囲外の最下位ビットに対応する前記演算結果を反転したビットとの否定論理積を演算する第4最下位ビット演算部と、
第1最下位ビット演算部と第3最下位ビット演算部との論理和を、前記第1ビット長の表現範囲に対する第1飽和予測ビットとして求める第1飽和予測ビット演算部と、
第2最下位ビット演算部と第4最下位ビット演算部との論理和を、前記第2ビット長の表現範囲に対する第2飽和予測ビットとして求める第2飽和予測ビット演算部と、
前記第1飽和予測ビットと、前記第1ビット長の表現範囲を選択するか否かを示す第1エネーブル信号との論理積を演算する第1エネーブル信号演算部と、
前記第2飽和予測ビットと、前記第2ビット長の表現範囲を選択するか否かを示す第2エネーブル信号との論理積を演算する第2エネーブル信号演算部と、
前記第1エネーブル信号演算部の出力と、前記第2エネーブル信号演算部の出力との論理和を演算し前記飽和予測信号を出力する第1飽和予測信号出力部とを備えることを特徴とする請求項5記載の演算装置。 - 前記飽和予測部は、
前記第1乃至前記第4最下位ビット演算部、前記第1及び前記第2飽和予測ビット演算部、前記第1及び前記第2エネーブル信号演算部並びに前記第1飽和予測信号出力部に代えて、
前記第1論理演算部の出力を反転する第1インバータと、
前記第1論理演算部の出力と前記第2論理演算部の出力との否定論理積を演算する第1否定論理演算部と、
前記第3論理演算部の出力を反転する第2インバータと、
前記第3論理演算部の出力と前記第4論理演算部の出力との否定論理積を演算する第2否定論理演算部と、
前記第1エネーブル信号と、前記第1インバータの出力と、前記第1ビット長の表現範囲外の最下位ビットに対応する前記演算結果との論理積を演算する第1演算部と、
前記第2エネーブル信号と、前記第1否定論理演算部の出力と、前記第2ビット長の表現範囲外の最下位ビットに対応する前記演算結果との論理積を演算する第2演算部と、
前記エネーブル信号出力部の出力と、前記第2インバータの出力と、前記第1ビット長の表現範囲外の最下位ビットに対応する前記演算結果を反転したビットとの論理積を演算する第3演算部と、
前記第2エネーブル信号と、前記第2否定論理演算部の出力と、前記第2ビット長の表現範囲外の最下位ビットに対応する前記演算結果を反転したビットとの論理積を演算する第4演算部と、
前記第1乃至第4演算部の出力の論理和を演算し前記飽和予測信号を出力する第2飽和予測信号出力部とを備えることを特徴とする請求項6記載の演算装置。 - 前記飽和予測部は、
前記第1乃至前記第4演算部及び前記第2飽和予測信号出力部に代えて、
前記第1エネーブル信号と、前記第1インバータの出力との論理積を演算する第5演算部と、
前記第2エネーブル信号と、前記第1否定論理演算部の出力との論理積を演算する第6演算部と、
前記第1エネーブル信号と、前記第2インバータの出力との論理積を演算する第7演算部と、
前記第2エネーブル信号と、前記第2否定論理演算部の出力との論理積を演算する第8演算部と、
前記第5演算部の出力と、前記第7演算部の出力と、前記第1ビット長の表現範囲外の最下位ビットに対応する前記演算結果とを処理する第1マルチプレクサ部と、
前記第6演算部の出力と、前記第8演算部の出力と、前記第2ビット長の表現範囲外の最下位ビットに対応する前記演算結果とを処理する第2マルチプレクサ部と、
前記第1マルチプレクサ部及び第2マルチプレクサ部の出力の論理和を演算し前記飽和予測信号を出力する第3飽和予測信号出力部とを備えることを特徴とする請求項7記載の演算装置。 - 前記Zero予測ビット処理部は、
前記第1入力オペランド及び前記第2入力オペランドの排他的論理和を演算する第1オペランド演算部と、
前記第1オペランド演算部に入力された前記第1入力オペランド及び前記第2入力オペランドより1ビット下位の前記第1入力オペランド及び前記第2入力オペランドの否定論理和を演算する第2オペランド演算部と、
前記第1オペランド演算部の出力と、前記第2オペランド演算部の出力との排他的論理和を演算する第3オペランド演算部とを備え、
前記One予測ビット処理部は、
前記第1入力オペランド及び前記第2入力オペランドの排他的論理和を演算する第4オペランド演算部と、
前記第1オペランド演算部に入力された前記第1入力オペランド及び前記第2入力オペランドより1ビット下位の前記第1入力オペランド及び前記第2入力オペランドの論理積を演算する第5オペランド演算部と、
前記第4オペランド演算部の出力と、前記第5オペランド演算部の出力との排他的論理和を演算する第6オペランド演算部とを備えることを特徴とする請求項6乃至請求項8のいずれか1つに記載の演算装置。 - 前記Zero予測ビット処理部は、
反転した前記第1入力オペランド及び前記第2入力オペランドの論理積を演算する第7及び第8オペランド演算部と、
前記第7オペランド演算部の反転出力と、前記第8オペランド演算部の出力との論理和を演算する第9オペランド演算部と、
前記第9オペランド演算部の出力と、1ビット下位に対応する前記第7オペランド演算部の出力との排他的論理和を演算する第10オペランド演算部とを備え、
前記One予測ビット処理部は、
前記第1入力オペランド及び前記第2入力オペランドの否定論理積を演算する第11オペランド演算部と、
前記第1入力オペランド及び前記第2入力オペランドの論理積を演算する第12オペランド演算部と、
第11オペランド演算部の出力と、第12オペランド演算部の出力との否定論理和を演算する第13オペランド演算部と、
前記第13オペランド演算部の出力と、1ビット下位に対応する前記第11オペランド演算部の出力との排他的否定論理和を演算する第14オペランド演算部とを備えることを特徴とする請求項6乃至請求項8のいずれか1つに記載の演算装置。 - 前記Zero予測ビット処理部は、前記第1及び前記第2オペランド演算部を設けず、前記第1及び前記第2オペランド演算部の出力に代えて、前記演算処理部において演算されたPropagate信号と、当該前記Propagate信号より1ビット下位の前記演算処理部において演算されたKill信号とを前記第3オペランド演算部に入力し、
前記One予測ビット処理部は、前記第4及び前記第5オペランド演算部を設けず、前記第4及び前記第5オペランド演算部の出力に代えて、前記演算処理部において演算されたPropagate信号と、当該前記Propagate信号より1ビット下位の前記演算処理部において演算されたGenerate信号とを前記第6オペランド演算部に入力することを特徴とする請求項9に記載の演算装置。 - メモリのアドレス修飾部に用いられる演算装置であって、
所定の処理が行われた後のベース値及びアドレス値、第1キャリー情報に基づいて、メモリアドレスを演算するアドレス計算部と、
前記ベース値及び前記アドレス値の所定の下位ビットと前記第1キャリー情報とから演算される第2キャリー情報と、前記ベース値及び前記アドレス値の所定の上位ビットとに基づいて、アクセスを行う目的アドレスと前記メモリアドレスとの一致・不一致を判定し、当該判定結果をHit信号として出力するヒット判定部とを備え、
前記ヒット判定部は、前記アドレス計算部に対して並列に動作されることを特徴とする演算装置。 - 請求項12に記載の演算装置であって、
前記ヒット判定部は、個々のビット状態が全て”1”であるか否かにより前記Hit信号の状態を決定するOne予測ビット列を、前記第2キャリー情報と、前記ベース値及び前記アドレス値の所定の上位ビットと、前記目的アドレスとを演算することで求めることを特徴とする演算装置。 - 請求項13に記載の演算装置であって、
前記アドレス計算部は、前記ベース値及び前記アドレス値の所定の下位ビットと前記第1キャリー情報とを演算した演算結果を、前記第2キャリー情報として前記ヒット判定部に供給することを特徴とする演算装置。 - 請求項14に記載の演算装置であって、
前記ヒット判定部は、前記第2キャリー情報が”0”と仮定した前記One予測ビット列と、前記第2キャリー情報が”1”と仮定した前記One予測ビット列とを演算で予め求めておき、前記アドレス計算部から前記第2キャリー情報が供給された時点で、いずれかの前記One予測ビット列を選択し、前記Hit信号を出力することを特徴とする演算装置。 - 請求項14に記載の演算装置であって、
前記ヒット判定部は、個々のビット状態が全て”0”であるか否かにより前記Hit信号の状態を決定するZero予測ビット列を、前記第2キャリー情報と、前記ベース値及び前記アドレス値の所定の上位ビットと、前記目的アドレスとを演算することでさらに求め、前記アドレス計算部から前記第2キャリー情報が供給された時点で、前記One予測ビット列又は前記Zero予測ビット列のいずれかを選択し、前記Hit信号を出力することを特徴とする演算装置。 - 請求項12乃至請求項15のいずれかに記載の演算装置であって、
仮想メモリシステムのTLBに用いられることを特徴とする演算装置。 - 請求項12乃至請求項15のいずれかに記載の演算装置であって、
Fully Associative型キャッシュに用いられることを特徴とする演算装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005218694A JP2006127469A (ja) | 2004-09-28 | 2005-07-28 | 演算装置 |
US11/231,804 US20060066460A1 (en) | 2004-09-28 | 2005-09-22 | Arithmetic unit |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004281200 | 2004-09-28 | ||
JP2005218694A JP2006127469A (ja) | 2004-09-28 | 2005-07-28 | 演算装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006127469A true JP2006127469A (ja) | 2006-05-18 |
Family
ID=36098395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005218694A Withdrawn JP2006127469A (ja) | 2004-09-28 | 2005-07-28 | 演算装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20060066460A1 (ja) |
JP (1) | JP2006127469A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019194772A (ja) * | 2018-05-01 | 2019-11-07 | 富士通株式会社 | 加減算回路および加減算回路の制御方法 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747074B2 (en) | 2014-02-25 | 2017-08-29 | Kabushiki Kaisha Toshiba | Division circuit and microprocessor |
US10671391B2 (en) * | 2014-02-25 | 2020-06-02 | MIPS Tech, LLC | Modeless instruction execution with 64/32-bit addressing |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0659858A (ja) * | 1992-08-10 | 1994-03-04 | Mitsubishi Electric Corp | 浮動小数点演算装置 |
JP3313002B2 (ja) * | 1994-12-02 | 2002-08-12 | 三菱電機株式会社 | 浮動小数点演算装置 |
-
2005
- 2005-07-28 JP JP2005218694A patent/JP2006127469A/ja not_active Withdrawn
- 2005-09-22 US US11/231,804 patent/US20060066460A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019194772A (ja) * | 2018-05-01 | 2019-11-07 | 富士通株式会社 | 加減算回路および加減算回路の制御方法 |
JP7119543B2 (ja) | 2018-05-01 | 2022-08-17 | 富士通株式会社 | 加減算回路および加減算回路の制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20060066460A1 (en) | 2006-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8832166B2 (en) | Floating point multiplier circuit with optimized rounding calculation | |
US5862065A (en) | Method and circuit for fast generation of zero flag condition code in a microprocessor-based computer | |
JP5573134B2 (ja) | ベクトル型計算機及びベクトル型計算機の命令制御方法 | |
JP2002108606A (ja) | スティッキービット生成回路及び乗算器 | |
JP5883462B2 (ja) | 範囲検出を行うための命令及びロジック | |
US5701504A (en) | Apparatus and method for addition based on Kogge-Stone parallel algorithm | |
WO2006039610A1 (en) | An apparatus and method for address generation using a hybrid adder | |
Hiasat | Efficient RNS scalers for the extended three-moduli set $(2^{n}-1, 2^{n+ p}, 2^{n}+ 1) $ | |
JPH0823811B2 (ja) | 3オペランド演算論理機構におけるオーバーフローを決定する方法及び算術上のオーバーフローを検出する機構 | |
JP2012521047A (ja) | 浮動小数点ユニットにおけるオーバーシフトの高速検出のためのメカニズム | |
JP2006127469A (ja) | 演算装置 | |
US9448767B2 (en) | Three-term predictive adder and/or subtracter | |
US6061707A (en) | Method and apparatus for generating an end-around carry in a floating-point pipeline within a computer system | |
JP6428488B2 (ja) | 加減算器及び加減算器の制御方法 | |
Lutz et al. | The half-adder form and early branch condition resolution | |
KR20080083321A (ko) | 패리티 생성 회로, 계수 회로 및 계수 방법 | |
Lutz et al. | Early zero detection [integrated adder/subtracter/zero-detector] | |
Pineiro et al. | A radix-2 digit-by-digit architecture for cube root | |
US8572154B2 (en) | Reduced-level two's complement arithmetic unit | |
JP3778489B2 (ja) | プロセッサ、演算装置及び演算方法 | |
JP2003202981A (ja) | アドレス範囲チェック回路及び動作方法 | |
JP2001216136A (ja) | 加算回路およびプロセッサ | |
US6820109B2 (en) | System and method for predictive comparator following addition | |
US8473541B2 (en) | M-bit race delay adder and method of operation | |
JPWO2002029546A1 (ja) | 演算器及びそれを用いた電子回路装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080526 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20080526 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090522 |