JP2007317231A - Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 - Google Patents
Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 Download PDFInfo
- Publication number
- JP2007317231A JP2007317231A JP2007207931A JP2007207931A JP2007317231A JP 2007317231 A JP2007317231 A JP 2007317231A JP 2007207931 A JP2007207931 A JP 2007207931A JP 2007207931 A JP2007207931 A JP 2007207931A JP 2007317231 A JP2007317231 A JP 2007317231A
- Authority
- JP
- Japan
- Prior art keywords
- cpu
- instruction
- arithmetic unit
- auxiliary arithmetic
- compiler
- 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.)
- Pending
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
【課題】補助演算装置を使用して演算を実行させる場合に、構成を極力簡単にして割り込みを禁止することができるRISC型CPUを提供する。
【解決手段】CPUは、補助演算装置だけがデコード可能となる専用命令[cmov]を備え、その専用命令をデコードしている期間は割り込みの受付が禁止される。従って、CPUにその他の周辺回路などのデバイスが接続されている場合でも、補助演算装置がその他のデバイスによってアクセスされてしまうことを防止できる。
【選択図】図22
【解決手段】CPUは、補助演算装置だけがデコード可能となる専用命令[cmov]を備え、その専用命令をデコードしている期間は割り込みの受付が禁止される。従って、CPUにその他の周辺回路などのデバイスが接続されている場合でも、補助演算装置がその他のデバイスによってアクセスされてしまうことを防止できる。
【選択図】図22
Description
本発明は、RISC型CPU,そのCPUによって実行されるオブジェクトプログラムを生成するためのコンパイラ、前記CPUと補助演算装置とを備えてなるマイクロコンピュータ、及びそのマイクロコンピュータに搭載される補助演算装置に関する。
(1)現在、プログラム開発は、例えばC,C++などの高級言語によってソースプログラムを記述することで行い、そのソースプログラムをコンパイラによってコンパイルすることでCPUが実行可能な形式のオブジェクトプログラムを生成することが一般的である。
ところで、CPUは、割り込みが発生した場合に割り込み処理を実行する。ここで、図27(a)には、割り込み処理のシーケンスを示し、図27(b)には。割り込み処理プログラムのオブジェクトコードの一例をニモニックで示す。
ところで、CPUは、割り込みが発生した場合に割り込み処理を実行する。ここで、図27(a)には、割り込み処理のシーケンスを示し、図27(b)には。割り込み処理プログラムのオブジェクトコードの一例をニモニックで示す。
即ち、割り込み処理は、先ず、使用するスタック領域を確保し(ステップA1)、確保したスタック領域にレジスタのデータや戻りアドレスを退避させてから(ステップA2)、割り込みの種類に応じた処理を実行する(ステップA3)。そして、スタック領域に退避させたデータをレジスタに復帰させると(ステップA4)、ステップA1で確保したスタック領域を開放する(ステップA5,[add.b #36,sp])。それから、戻りアドレスをプログラムカウンタにセットすることで割り込み処理から通常の処理に復帰する(ステップA6,[rt13])。
(2)RISC(Reduced Instruction Set Computer)型のCPUでは、プログラムの分岐命令を遅延処理付きの命令(遅延分岐命令)として備えているものが多い。即ち、RISC型CPU特有のパイプライン処理において分岐命令が実行されると、パイプライン処理に「空き」が発生して効率が低下してしまう。そこで、遅延分岐命令は、パイプラインの「空き」の部分に別の命令の処理を割り当てることで、分岐命令の実行と並行して他の命令も実行できるようにするものである(図28(a)参照)。
(3)RISC型CPUでは、パイプライン処理による効率化を図るため命令数が少なくなっている。そのため、乗算,除算,剰余算などの演算を行なう場合には、補助演算装置(コプロセッサ)を用いる場合がある。しかしながら、補助演算装置を使用する場合、CPUとの間を専用バスで接続することになると配線量が増大してしまう。配線量の増加を抑制するためには、ROM,RAMなどのその他の周辺回路と共通に接続される汎用バスによって両者の間を接続する構成もある。
尚、これらの従来技術は、何れも、例えば特許文献1に記載されているものである。
特開平10−289120号公報
尚、これらの従来技術は、何れも、例えば特許文献1に記載されているものである。
ところが、CPUと補助演算装置とを汎用バスで接続した場合には、プログラムのバグ等によっては意図しないアクセスが発生することもあり、デバッグ作業が困難となってしまうおそれがある。
また、CPUが補助演算装置に演算を行なわせている途中で割り込みが発生すると、実行中の演算を途中で破棄して割り込み発生前の状態から演算を再度やり直したり、或いは、演算途中の状態を保持するか、または演算中は割り込みを禁止するような機構をCPU側に用意する必要がある。
これらの内、最も簡単に実現できるものは、割り込みを禁止する機構である。しかし、その場合でも以下のような問題がある。例えば、ソフトウエア(ユーザプログラム)により、補助演算装置による演算を開始させる前に、割り込み禁止命令を実行させ、演算終了後に割り込みを許可する命令を実行させることが考えられるが、その分だけ命令数が増加するので、プログラムメモリの容量が増大してしまう。
また、補助演算装置側から、演算開始から演算終了までの期間においてCPUに割り込みを禁止させるために、割り込み禁止信号を出力することも考えられるが、そのための専用信号線が1本余分に必要となってしまう。加えて、一方では、CPUが割り込み禁止状態にされると割り込み処理ができなくなるため、リアルタイム処理性が低下するという問題もある。
本発明は上記事情に鑑みてなされたものであり、その目的は、補助演算装置を使用して演算を実行させる場合に、構成を極力簡単にして割り込みを禁止することができるRISC型CPU及びコンパイラ、それらを備えてなるマイクロコンピュータ、並びにそのマイクロコンピュータに搭載される補助演算装置を提供することにある。
請求項1記載のRISC型CPUによれば、補助演算装置にアクセスするための命令を、その補助演算装置だけがデコード可能となる専用命令を備える。そして、その専用命令をデコード若しくは実行している期間は割り込みの受付が禁止される。従って、CPUに、その他の周辺回路などのデバイスが接続されている場合でも、補助演算装置が、その他のデバイスによってアクセスされてしまうことを防止できる。また、命令デコーダによるデコード結果に基づいて、CPUのハードウエアが自動的に割り込み受付を禁止するので、ユーザが割り込み制御に関与する必要がなく、補助演算装置側より割り込み禁止信号を出力する必要もない。従って、CPUが補助演算装置にアクセスする場合に、より簡単に割り込み受付を禁止させることができる。
請求項2記載のコンパイラによれば、オブジェクトコードにおける演算処理を補助演算装置に実行させるか、或いは、ライブラリによって行なわせるかを、ユーザの設定に応じてソースファイル単位で選択可能であるから、ユーザは、演算速度の要請に応じて最適な実行形態を選択することができる。
請求項3記載のコンパイラによれば、補助演算装置に実行させるオブジェクトコードを生成する際に、当該補助演算装置に対するアクセス命令が連続するように配置し、CPUが補助演算装置より演算結果を取得するまでの期間は割り込み処理が発生しないようにコンパイル処理する。従って、CPUは、補助演算装置を用いた演算処理を連続的に実行することができる。
請求項4記載のマイクロコンピュータによれば、請求項1記載のRISC型CPUと補助演算装置とを備えて構成される。従って、補助演算装置が、その他のデバイスによってアクセスされてしまうことがなく、且つ、補助演算装置にアクセスする場合に、簡単に割り込み受付を禁止させることが可能なCPUが搭載されたマイクロコンピュータを構成することができる。
請求項5記載のマイクロコンピュータによれば、RISC型CPUと補助演算装置とは汎用バスによって接続される。そして、CPUは、専用命令をデコードすると補助演算装置に対して専用命令信号を出力し、補助演算装置は、専用命令信号が出力されている場合に、CPUによって与えられた演算命令をデコードする。
斯様に構成すれば、CPUと補助演算装置とが汎用バスで接続されている場合でも、補助演算装置は、専用命令信号が与えられている場合にだけ演算命令をデコードするので、その他のデバイスによって不用意にアクセスが行われることを確実に排除することができる。
請求項6記載のマイクロコンピュータによれば、補助演算装置は、演算実行中にRISC型CPUによるアクセスが発生すると、CPUが行なっている処理を一時停止させるための停止信号を出力する。そして、CPUは、前記停止信号が出力されている期間はパイプライン処理を停止する。
即ち、上述したように、請求項1記載のRISC型CPUは、補助演算装置にアクセスするための命令をデコード若しくは実行している期間は割り込みの受付が禁止される。そして、その後アクセス時に割り込みが発生しても、補助演算装置が演算の実行を開始すれば停止信号を出力するのでCPUのパイプライン処理が一時停止する。従って、CPUがその期間に割り込みを受け付けたとしても、その処理の実行は補助演算装置の演算が終了するまで待機状態となるので、所望の演算結果を得ることができる。
請求項7記載のマイクロコンピュータによれば、請求項2又は3記載のコンパイラによって生成されたオブジェクトプログラムが記憶されるプログラムメモリを備えるので、CPUは、そのオブジェクトプログラムを実行して高速に処理を行なうことができる。
(第1実施例)
以下、本発明の第1実施例について図1乃至図8を参照して説明する。図6は、プログラム変換装置の構成を示す図である。プログラム変換装置たるパーソナルコンピュータ(パソコン,若しくはワークステーション)1には、コンパイラ2がインストールされている。具体的には、パソコン1の本体1aに内蔵されているハードディスク等の記憶装置(記憶手段)にコンパイラ2のプログラムファイルが記憶されている。
以下、本発明の第1実施例について図1乃至図8を参照して説明する。図6は、プログラム変換装置の構成を示す図である。プログラム変換装置たるパーソナルコンピュータ(パソコン,若しくはワークステーション)1には、コンパイラ2がインストールされている。具体的には、パソコン1の本体1aに内蔵されているハードディスク等の記憶装置(記憶手段)にコンパイラ2のプログラムファイルが記憶されている。
本体1a内蔵の記憶装置には、図7に示すように、ユーザが例えばC言語などの高級言語によって記述したソースコードファイル3も記憶されている。そして、ユーザは、コンパイラ2のプログラムをパソコン1上で起動することで、ソースコードファイル3からオブジェクトコードファイル4を変換生成させる。コンパイラ2は、ソースコードファイル3に記述されているC言語のソースコードを読み出してその内容を解釈すると、CPU等が固有の命令によって対応する処理を最も効率的に実行できるようなオブジェクトコードを生成するようにコンパイルを行う。
パソコン1の本体1aにはROMライタ5が接続されており、両者は、例えばRS−232C等のシリアル通信プロトコルによって通信が可能となっている。コンパイラ2よって生成されたオブジェクトコードファイル4はROMライタ5に転送されると、ROMライタ5にセットされたマイクロコンピュータ(マイコン)6に内蔵されているROM7(プログラムメモリ,図8参照)にバイナリデータのプログラム100として書き込まれるようになっている。
図8は、ワンチップマイコン6の電気的構成を示す機能ブロック図である。マイコン6は、RISC型のCPU8を中心として構成されている。そのCPU8は、EEPROMやフラッシュROMなどからなるROM7と、バス制御部10,並びに第1アドレスバス11及び第1データバス12を介して接続されている。また、バス制御部10からは、第2アドレスバス13及び第2データバス14が分岐しており、それらのバス13,14には、補助演算装置15,RAM16,タイマやA/D変換などその他の周辺回路17が接続されている。
CPU8の内部には、演算等を行うための演算部(ALU(Arithmetic Logical Unit) )18,演算部18が演算等を行う場合に使用される複数のレジスタが配置されているレジスタ部19,及びレジスタ部19等にロード/ストア等の制御を行うための制御部20などが配置されている。
図1は、コンパイラ2によるコンパイル処理の内容を、本実施例にかかる部分のみ示すフローチャートである。コンパイラ2は、ソースコードファイル3中における割り込み処理部分において、スタック領域を使用しているか否かを判定する(ステップS1)。そして、スタック領域を使用していれば(「有り」)復帰命令[rtm3]のオペランド部に、スタック開放サイズに応じた指定値を4の倍数で設定する(ステップS3)。
一方、ステップS1で、割り込み処理部分においてスタック領域を使用していない場合は(「無し」)復帰命令[rtm3]のオペランド部に「0」を設定する(ステップS2)。
一方、ステップS1で、割り込み処理部分においてスタック領域を使用していない場合は(「無し」)復帰命令[rtm3]のオペランド部に「0」を設定する(ステップS2)。
図2は図27相当図であり、(a)は、コンパイラ2によってコンパイルされたプログラム100における通常割り込み処理のフローチャート、(b)は、そのプログラム100のニモニック表現である。図2(a)に示すフローチャートでは、図27(a)のフローチャートにおけるステップA5が省略されており、ステップA6に代えて、「割り込み復帰(スタック開放)」のステップA7が配置されている。
そして、図2(b)においてステップA7の処理に対応する命令は、
rt13 #36 ・・・(1)
である(m=1)。即ち、従来は、
ステップA5 : add.b #36,sp ・・・(2)
でスタック領域を開放し、
ステップA6 : rt13 ・・・(3)
で割り込み復帰(及び戻りアドレス分のスタック開放)を行なっていたが、本実施例では、上記(1)の1行の命令によってそれらを同時に行うようにコーディングされている。
rt13 #36 ・・・(1)
である(m=1)。即ち、従来は、
ステップA5 : add.b #36,sp ・・・(2)
でスタック領域を開放し、
ステップA6 : rt13 ・・・(3)
で割り込み復帰(及び戻りアドレス分のスタック開放)を行なっていたが、本実施例では、上記(1)の1行の命令によってそれらを同時に行うようにコーディングされている。
ここで、図3には、(1)の復帰命令21のビット構成を示す。復帰命令[rtm3]は、7ビットの命令部22,1ビットの割り込み種別選択部(m)23、2ビットのフラグ復帰選択部24、6ビットのオペランド部25によって構成されている。(1)で表現される復帰命令のオペランドは[#36]であるが、機械語レベルでは、オペランド部には、即値36を4で除した[9]がセットされるようになっている。
図4には、(1)の復帰命令(ステップA7)をCPU8が実行する場合のパイプライン処理を示す。尚、パイプラインには5つのステージがあり、各ステージは以下のように設定されている。
IF:インストラクションフェッチ
DEC:デコード
EXE:命令実行
MEM:メモリ(外部デバイス)アクセス
WB:ライトバック(レジスタ書込み)
IF:インストラクションフェッチ
DEC:デコード
EXE:命令実行
MEM:メモリ(外部デバイス)アクセス
WB:ライトバック(レジスタ書込み)
パイプライン[1]では、[rt13]のDECにおいてスタックポインタSPの値が読み込まれ、EXEで次のMEMにおけるアクセスアドレスadrが(4)式で計算される。
adr=sp+(オペランド*4) ・・・(4)
次のMEMでは、スタック上の戻りアドレスと状態フラグがリードされ、WBにおいて、戻りアドレスをプログラムカウンタPCに、状態フラグがステータスレジスタPSRにセットされる。そして、パイプライン[2]のEXEにおいて、スタック領域の開放が一括して行なわれる。即ち、スタックポインタSPを(5)式のようにセットする。
sp=sp+(オペランド*4)+4 ・・・(5)
adr=sp+(オペランド*4) ・・・(4)
次のMEMでは、スタック上の戻りアドレスと状態フラグがリードされ、WBにおいて、戻りアドレスをプログラムカウンタPCに、状態フラグがステータスレジスタPSRにセットされる。そして、パイプライン[2]のEXEにおいて、スタック領域の開放が一括して行なわれる。即ち、スタックポインタSPを(5)式のようにセットする。
sp=sp+(オペランド*4)+4 ・・・(5)
ここで、図5には、従来のコンパイル処理によるオブジェクトプログラムに基づいて復帰命令が実行される場合のパイプライン処理を示す。従来は、パイプライン[1]で[add.b #36,sp]が実行され、EXEにおいて割り込み処理で確保されたスタック領域の開放が(6)式で行なわれる。
sp=sp+(オペランド*4) ・・・(6)
そして、パイプライン[2]で[rt13]が実行され、パイプライン[3]のEXEにおいて、戻りアドレス及び状態フラグの退避に使用された領域が(7)式の実行により開放される。
sp=sp+4 ・・・(7)
即ち、従来のプログラムによる復帰処理では、スタック領域の開放処理を(6),(7)の2段階で行なっていた。これに対して、本実施例の方式によれば、(6),(7)の処理を(5)で一括して行なうことが可能となり、復帰処理に要する時間が短縮されている。
sp=sp+(オペランド*4) ・・・(6)
そして、パイプライン[2]で[rt13]が実行され、パイプライン[3]のEXEにおいて、戻りアドレス及び状態フラグの退避に使用された領域が(7)式の実行により開放される。
sp=sp+4 ・・・(7)
即ち、従来のプログラムによる復帰処理では、スタック領域の開放処理を(6),(7)の2段階で行なっていた。これに対して、本実施例の方式によれば、(6),(7)の処理を(5)で一括して行なうことが可能となり、復帰処理に要する時間が短縮されている。
以上のように本実施例によれば、CPU8が備える復帰命令[rtm3]によれば、スタック領域の開放サイズが復帰命令のオペランドにて指定可能であるから、従来は2段階で行なっていた開放処理を1段階で実行することができる。従って、割り込み処理からの復帰に要する時間を短縮することが可能となる。
そして、コンパイラ2は、割り込み処理から復帰する際にスタック領域を開放する必要がある場合、その開放サイズを復帰命令[rtm3]のオペランドにて指定するようにオブジェクトコードファイル4を生成するので、CPU8が実行可能なプログラム100を生成することができる。加えて、そのオブジェクトコードファイル4のサイズを小さくすることができる。
また、マイコン6は、コンパイラ2によって生成されたオブジェクトプログラムが記憶されるROM7を備えるので、CPU8は、そのオブジェクトプログラムを実行して高速に処理を行なうことができる。
また、マイコン6は、コンパイラ2によって生成されたオブジェクトプログラムが記憶されるROM7を備えるので、CPU8は、そのオブジェクトプログラムを実行して高速に処理を行なうことができる。
(第2実施例)
図9乃至図12は本発明の第2実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図9は、コンパイラ2によるコンパイル処理の内容を、第2実施例にかかる部分のみ示すフローチャートである。
図9乃至図12は本発明の第2実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図9は、コンパイラ2によるコンパイル処理の内容を、第2実施例にかかる部分のみ示すフローチャートである。
第2実施例では、ユーザが、ソースコードファイル3中で割り込み処理のプログラムを記述する場合、それが、例外割り込み処理であるか、通常割り込み処理であるかをコンパイラ2に判別させるための記述を行なうようにする。ここで、例外割り込みとは、何らかのエラーが発生した場合にCPU8の内部で発生する割り込みであり、通常割り込みは、それ以外の優先順位が低い割り込みである。CPU8では、例外割り込み処理中に通常割り込みが発生してもマスクされるように構成されている。
図10(a)に示す例外割り込み処理は、アドレスアクセスエラーが発行された場合の処理であり、そのプログラムの冒頭において、
#pragma interrupt(mon=0)
と記述されている。この内、最後の(mon=0)が例外割り込み処理を示す記述である。一方、図11(a)に示す通常割り込み処理は、タイマ割り込み処理であり、そのプログラムの冒頭において、
#pragma interrupt(mon=1)
と記述されている。この内、最後の(mon=1)が通常割り込み処理を示す記述である。
#pragma interrupt(mon=0)
と記述されている。この内、最後の(mon=0)が例外割り込み処理を示す記述である。一方、図11(a)に示す通常割り込み処理は、タイマ割り込み処理であり、そのプログラムの冒頭において、
#pragma interrupt(mon=1)
と記述されている。この内、最後の(mon=1)が通常割り込み処理を示す記述である。
ここで、図12には、CPU8の内部レジスタであるシステムレジスタ26のビット構成を示す。システムレジスタ26のビット1は、モニター中フラグMONとなっている。このフラグMONは、CPU8がユーザプログラムの実行中である場合は「0」にリセットされており、例外割り込み処理中である場合は、CPU8のハードウエアによって「1」にセットされる。
フラグMONが「1」にセットされた場合、CPU8は、他の例外割り込み,通常割り込みの受付を禁止するようになっている。そして、従来のユーザプログラムでは、例外割り込み処理の実行が完了した場合は、フラグMONを「0」にリセットするように記述する必要があった。
フラグMONが「1」にセットされた場合、CPU8は、他の例外割り込み,通常割り込みの受付を禁止するようになっている。そして、従来のユーザプログラムでは、例外割り込み処理の実行が完了した場合は、フラグMONを「0」にリセットするように記述する必要があった。
そこで、第2実施例では、フラグMONを「0」にリセットする処理に代えて、例外割り込み処理の冒頭に(mon=0)を記述するように設定している。即ち、(mon=0,1)の記述によって、コンパイラ2は、その割り込み処理が例外割り込み,通常割り込みの何れに対応するものかを判別可能となっている。
図9において、コンパイラ2は、ソースコードファイル3における割り込み処理プログラムの冒頭の記述が(mon=0)か、(mon=1)かを判定する(ステップS4)。(mon=0)であれば、例外割り込み処理であるから(ステップS5)、それに応じて復帰命令[rt03]を生成する(ステップS6)。 一方、ステップS4において、冒頭の記述が(mon=1)であれば、通常割り込み処理であるから(ステップS7)、それに応じて復帰命令[rt13]を生成する(ステップS8)。
その結果、コンパイルされたオブジェクトコードファイル4は、図10(b),図11(b)に示すように生成される。そして、CPU8は、復帰命令が[rt03]である場合は、フラグMONを「0」にリセットする処理をハードウエアで実行する。復帰命令が[rt13]である場合は、第1実施例と同様の復帰処理を行なう。
その結果、コンパイルされたオブジェクトコードファイル4は、図10(b),図11(b)に示すように生成される。そして、CPU8は、復帰命令が[rt03]である場合は、フラグMONを「0」にリセットする処理をハードウエアで実行する。復帰命令が[rt13]である場合は、第1実施例と同様の復帰処理を行なう。
以上のように第2実施例によれば、CPU8が有する例外割り込み処理,通常割り込み処理から復帰するための復帰命令を異なるものに設定し、復帰命令が例外割り込み処理[rt03]である場合は、システムレジスタ26のフラグMONを「0」にリセットする処理をハードウエアで実行する。従って、ユーザは、ソースコードファイル3中でフラグMONを「0」にリセットするための処理を記述する必要がなくなり、ユーザプログラム側の負担を軽減することが可能となる。
また、コンパイラ2は、ソースコードファイル3中の(mon=0,1)の記述によって割り込み処理が、例外割り込み,通常割り込みの何れに対応するものかを判別し、夫々の割り込み処理からの復帰命令を異なるオブジェクトコード[rt03],[rt13]として生成する。従って、CPU8が異なる復帰命令を実行し分けることが可能なオブジェクトプログラムを生成することができる。そして、ユーザは、割り込み処理のプログラムを簡略化することが可能となる。
(第3実施例)
図13乃至図16は本発明の第3実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図15は、第3実施例のコンパイラ2によって生成される遅延分岐命令のビット構成を示すものである。CPU8の遅延分岐命令は、(a),(b),(c)の3タイプがある。
図13乃至図16は本発明の第3実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図15は、第3実施例のコンパイラ2によって生成される遅延分岐命令のビット構成を示すものである。CPU8の遅延分岐命令は、(a),(b),(c)の3タイプがある。
図15(a)は1ワード(16ビット)の遅延分岐命令31であり、7ビットの命令部32と、1ビットの遅延処理選択部33と、8ビットのアドレス部34とで構成されている。図15(b)は2ワードの遅延分岐命令35であり、7ビットの命令部36と、1ビットの遅延処理選択部37と、24ビットのアドレス部38とで構成されている。図15(c)は1ワードの遅延分岐命令39であり、8ビットの命令部40と、2ビットの遅延処理選択部41と、2ビットのフラグ復帰選択部42と、4ビットのアドレス部43とで構成されている。
第3実施例では、これらの遅延分岐命令31,35,39に、遅延処理選択部33,37,41が設けられていることが特徴である。CPU8は、この遅延処理選択部のビットの状態に応じて遅延分岐の流れを制御するように構成されている。
第3実施例では、これらの遅延分岐命令31,35,39に、遅延処理選択部33,37,41が設けられていることが特徴である。CPU8は、この遅延処理選択部のビットの状態に応じて遅延分岐の流れを制御するように構成されている。
図13は、コンパイラ2によるコンパイル処理の内容を、第3実施例にかかる部分のみ示すフローチャートであり、ソースコードファイル3中における分岐命令のコンパイル処理に関するものである。コンパイラ2は、オブジェクトとして生成しようとする命令が分岐命令であるか否かを判断し(ステップS11)、分岐命令で無ければ(「NO」)処理を終了する。一方、分岐命令である場合は(「YES」)、その分岐命令について遅延処理可能なワード数を判定する(ステップS12)。そのワード数が「0」であれば、処理を終了する。
前記ワード数が「1」であれば、コンパイラ2は、当該分岐命令の直前の命令が1ワード命令であるか否かを判定し(ステップS13)、1ワード命令であれば(「YES」)、その直前の命令が、プログラムの流れで遅延処理が可能か否かを判定する(ステップS14)。遅延処理が可能である場合(「YES」)、直前の命令と分岐命令とを入れ替えると共に、分岐命令の遅延オプション(遅延分岐オプション)として遅延処理選択部33,37の何れかに「1」を設定する(ステップS15)。
即ち、CPU8は、例えば、遅延分岐命令31をデコードした場合に遅延オプション「1」が設定されていると、その次には遅延処理可能な1ワード命令が配置されていることを判定する。この場合、オブジェクトコードファイル4中における命令の配置は、図14(a)に示すようになる。
即ち、CPU8は、例えば、遅延分岐命令31をデコードした場合に遅延オプション「1」が設定されていると、その次には遅延処理可能な1ワード命令が配置されていることを判定する。この場合、オブジェクトコードファイル4中における命令の配置は、図14(a)に示すようになる。
一方、直前の命令が1ワード命令でない場合、または、直前の命令が遅延処理不能であり、ステップS13,S14の何れかにおいてコンパイラ2が「NO」と判断すると、分岐命令の遅延オプションとして遅延処理選択部33等に「0」を設定する(ステップS16)。そして、CPU8は、デコードした場合に遅延オプション「0」が設定されていると、その次には遅延処理可能な命令が配置されていないことを判定する。この場合、オブジェクトコードファイル4中における命令の配置は、図14(b)に示すようになる。また、この場合の処理において分岐命令の次にnop命令を配置しないことが、第3実施例が従来技術と異なる大きな特徴の1つである。
また、ステップS12において、遅延処理可能なワード数が「2」であった場合、コンパイラ2は、当該分岐命令の直前の命令が2ワード命令であるか否かを判定し(ステップS17)、2ワード命令であれば(「YES」)ステップS14と同様に、その直前の命令が、プログラムの流れで遅延処理が可能か否かを判定する(ステップS18)。遅延処理が可能である場合(「YES」)、直前の命令と分岐命令とを入れ替えると共に、分岐命令の遅延オプションとして遅延処理選択部41に「2」を設定する(ステップS19)。
即ち、CPU8は、遅延分岐命令39をデコードした場合に遅延オプション「2」が設定されていると、その次には遅延処理可能な2ワード命令が配置されていることを判定する。この場合、オブジェクトコードファイル4中における命令の配置は、図14(c)に示すようになる。
一方、直前の命令が遅延処理不能であり、ステップS18においてコンパイラ2が「NO」と判断すると、分岐命令の遅延オプションとして遅延処理選択部41に「0」を設定する(ステップS20)。
一方、直前の命令が遅延処理不能であり、ステップS18においてコンパイラ2が「NO」と判断すると、分岐命令の遅延オプションとして遅延処理選択部41に「0」を設定する(ステップS20)。
また、直前の命令が2ワード命令でなく、ステップS17においてコンパイラ2が「NO」と判断すると、ステップS21に移行する。ステップS21〜S23,S27の処理は、基本的にステップS13〜S16の処理と同様であるが、遅延オプション1,0が設定されるのは遅延処理選択部41である。
更に、コンパイラ2は、ステップS23を実行すると、再度ステップS21,S22と同様の判定を行なう(ステップS24,S25)。そして、何れも「YES」と判定すると、ステップS19と同様の処理を行なう(ステップS26)。また、何れも「NO」と判定すると処理を終了する。
更に、コンパイラ2は、ステップS23を実行すると、再度ステップS21,S22と同様の判定を行なう(ステップS24,S25)。そして、何れも「YES」と判定すると、ステップS19と同様の処理を行なう(ステップS26)。また、何れも「NO」と判定すると処理を終了する。
図16は、各分岐命令31,35,39について遅延オプション0〜2が設定された場合におけるCPU8のパイプライン処理状態を示すものである。(a)は、1ワード分岐命令31または39について遅延オプション=0が設定された場合であり、遅延スロットは使用されず、パイプライン[2]は、IFで停止する。(b)は、1ワード分岐命令31または39について遅延オプション=1が設定された場合であり、遅延スロットが使用されて、パイプライン[2]は、分岐命令31または39の次に配置された1ワード命令を実行する。
(c)は、1ワード分岐命令39について遅延オプション=2が設定された場合であり、遅延スロットが使用されて、パイプライン[2],[3]は、分岐命令39の次に配置された2ワード命令、若しくは2つの1ワード命令を実行する。(d)は、2ワード分岐命令35について遅延オプション=0が設定された場合であり、遅延スロットは使用されず、パイプライン[3]は停止する。(e)は、2ワード分岐命令35について遅延オプション=1が設定された場合であり、遅延スロットが使用されて、パイプライン[3]は、分岐命令35の次に配置された1ワード命令を実行する。
以上のように第3実施例によれば、CPU8は、分岐命令31,35,39における、遅延オプションの設定に応じてプログラム分岐を行なうか否かを決定するので、分岐命令31等をデコードした段階で、当該命令については遅延分岐を行なわないことを判別できる。従って、そのようなケースでは、当該分岐命令の次にnop命令を配置する必要はなくなるので、オブジェクトコードサイズを小さくすることが可能となる。
また、コンパイラ2は、分岐命令よりも前に記述されている命令が当該分岐命令の遅延スロットにて実行可能か否かを判定し、その実行可否に応じて遅延分岐オプションを設定すると共に、実行可能である場合は実行可能な命令を当該分岐命令の次に配置するので、CPU8が上記のように遅延分岐処理を実行可能なオブジェクトプログラムを生成することができる。
(第4実施例)
図17乃至図23は本発明の第4実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図17は、補助演算装置15の内部構成を示す機能ブロック図である。レジスタ部51は、第2データバス(汎用バス)14上に出力されるデータを、必要に応じてマルチプレクサ52を介して取り込むようになっている。レジスタ部51は、図18に示す複数のデータレジスタC0〜C29の集合として構成されている。これらのデータレジスタC0〜C29は、使用される組み合わせに応じて行なわれる演算の種類が決定されている。
図17乃至図23は本発明の第4実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分についてのみ説明する。図17は、補助演算装置15の内部構成を示す機能ブロック図である。レジスタ部51は、第2データバス(汎用バス)14上に出力されるデータを、必要に応じてマルチプレクサ52を介して取り込むようになっている。レジスタ部51は、図18に示す複数のデータレジスタC0〜C29の集合として構成されている。これらのデータレジスタC0〜C29は、使用される組み合わせに応じて行なわれる演算の種類が決定されている。
そして、命令デコーダ53は、CPU8によって第2アドレスバス(汎用バス)13に出力されるアドレス(即ち、補助演算装置15の内部レジスタを指定するアドレス)をデコードすることで、CPU8により指定された演算命令をデコードするようになっている。そして、そのデコード結果に応じて、レジスタ制御ユニット54に制御指令を出力し、レジスタ部51を制御する。また、命令デコーダ53は、演算部55の制御を行うシーケンサ56にも制御指令を出力するようになっている。
演算部55は、レジスタ部51を介して与えられるデータについて演算を行なうようになっており、その演算結果は、マルチプレクサ52を介してレジスタ部51にフィードバックされる。また、レジスタ部51からの出力データは、第2データバス14に対しても出力可能となっている。
また、命令デコーダ53は、CPU8によって専用命令信号COPが与えられている場合にのみ、デコード動作を行うように構成されている。また、シーケンサ56は、演算部55が演算実行中の状態でCPU8によるアクセスが行われた場合に、ウェイト信号CWTをCPU8に対して出力するようになっている。
また、命令デコーダ53は、CPU8によって専用命令信号COPが与えられている場合にのみ、デコード動作を行うように構成されている。また、シーケンサ56は、演算部55が演算実行中の状態でCPU8によるアクセスが行われた場合に、ウェイト信号CWTをCPU8に対して出力するようになっている。
図19は、CPU8が備えている補助演算装置15に対する転送命令57のビット構成を示すものである。転送命令57は、6ビットの命令部58と、4ビットの第1オペランド部59と、6ビットの第2オペランド部60とで構成されている。そして、CPU8は、この転送命令57をデコードした場合は(即ち、パイプラインのステージDECにおいて)、割り込み処理の受付を禁止するように構成されている。
また、図20は、CPU8の内部構成を概略的に示すものである。CPU8は、制御部20、演算部18、レジスタ部19、信号出力部61で構成されている。制御部20の内部には、デコーダ62と割り込み制御部63とが配置されている。デコーダ62は、命令のデコード結果に応じて信号出力部61と割り込み制御部63を制御するようになっている。また、デコーダ62は、補助演算装置15によってウェイト信号CWTが出力されると、パイプライン処理を一時停止させるように構成されている。そして、信号出力部61は、補助演算装置15に専用命令信号COPを出力する。
次に、第4実施例の作用について図21乃至図23をも参照して説明する。図21は、制御部20のデコーダ62が行うデコード処理の内容を、第4実施例に係る部分だけ示すフローチャートである。デコーダ62は、デコード結果が補助演算装置15への転送命令か否かを判断し(ステップS31)、当該転送命令である場合は(「YES」) 割り込み制御部63に割り込み禁止信号を出力する(ステップS32)。また、パイプラインのステージがMEMに移行すると、信号出力部61によって専用命令信号COPを出力させる(ステップS33)。
図22は、CPU8が補助演算装置15を用いた演算を行う場合に、コンパイラ2によって生成されたオブジェクトコードの一例である。[cmov]が、補助演算装置15に演算を行わせる場合に使用する専用命令である。即ち、[1]CPU8のレジスタr1のデータを補助演算装置15のレジスタC0に転送し、[2]レジスタr2のデータをレジスタC8に転送する。この場合の演算は符号付き8ビット乗算であり、その演算結果は、レジスタC0に格納される(図18参照)。従って、[3]レジスタC0の内容をレジスタr1に読み出す。
図23は、図22のオブジェクトコードを実行する場合におけるパイプライン処理と、各信号の出力状態を示すものである。(a)に示すパイプライン[1]〜[3]は、図22のコードに対応している。パイプライン[1]のステージがMEMに移行すると、信号出力部61は専用命令信号COPを出力する。そして、CPU8においては、ステージDECがパイプライン[1]〜[3]まで連続するようになり、デコーダ62によって割り込み受付が禁止される。
また、上記割り込み禁止期間が終了するとパイプライン[2]の外部アクセスMEMが行われ、その転送が終了すると補助演算装置15は乗算を開始する。そして、CPU8は、パイプライン[3]のステージEXEの次に、レジスタC0の内容をレジスタr1に読み出すためのステージMEMに移行するが、補助演算装置15のシーケンサ56は、命令デコーダ53を介してそのアクセスを認識する。
この時、補助演算装置15は未だ演算を終了していないので、シーケンサ56は、CPU8に対してウェイト信号CWTをアクティブにする。すると、パイプライン[3]のステージはMEMに留まり一時停止状態となる。そして、補助演算装置15が演算を終了すると、ウェイト信号CWTはインアクティブとなり、パイプライン[3]のステージMEMが実行されて演算結果が読み出される。尚、CPU8に対する割り込みはパイプライン[3]のステージEXEから受付可能となるが、そのパイプライン[3]の処理が完了するまで割り込み処理は実行されない。
以上のように第4実施例によれば、CPU8は、補助演算装置15だけがデコード可能となる専用命令[cmov]を備える。そして、その専用命令をデコードしている期間は割り込みの受付が禁止される。従って、CPU8に、その他の周辺回路などのデバイスが接続されている場合でも、補助演算装置15が、その他のデバイスによってアクセスされてしまうことを防止できる。
また、デコーダ62によるデコード結果に基づいて、CPU8の割り込み制御部63が自動的に割り込み受付を禁止するので、ユーザが割り込み制御に関与する必要がなく、補助演算装置15側より割り込み禁止信号を出力する必要もない。従って、CPU8が補助演算装置15にアクセスする場合に、より簡単に割り込み受付を禁止させることができる。
また、デコーダ62によるデコード結果に基づいて、CPU8の割り込み制御部63が自動的に割り込み受付を禁止するので、ユーザが割り込み制御に関与する必要がなく、補助演算装置15側より割り込み禁止信号を出力する必要もない。従って、CPU8が補助演算装置15にアクセスする場合に、より簡単に割り込み受付を禁止させることができる。
そして、コンパイラ2は、補助演算装置15に実行させるオブジェクトコードを生成する際に、補助演算装置15に対するアクセス命令が連続するように配置し、CPU8が補助演算装置15より演算結果を取得するまでの期間は割り込み処理が発生しないようにコンパイル処理する。従って、CPU8は、補助演算装置15を用いた演算処理を連続的に実行することができる。
また、マイコン6は、CPU8と補助演算装置15とを汎用バス13,14を介して接続して構成した。そして、CPU8は、専用命令をデコードすると補助演算装置15に対して専用命令信号COPを出力し、補助演算装置15は、専用命令信号が出力されている場合に、CPU8によって与えられた演算命令をデコードする。従って、補助演算装置15は、その他のデバイスによって不用意にアクセスが行われることを確実に排除することができる。
また、補助演算装置15は、演算実行中にCPU8によるアクセスが発生すると、CPU8が行なっている処理を一時停止させるためのウェイト信号CWTを出力し、CPU8は、ウェイト信号CWTが出力されている期間はパイプライン処理を停止する。従って、CPU8の割り込み処理の受付は、補助演算装置15の演算が終了するまで禁止され続けるようになる。
(第5実施例)
図24乃至図26は、本発明の第5実施例を示すものである。図24は、コンパイラ2の第5実施例にかかる部分の処理内容を示すフローチャートである。第5実施例では、コンパイラ2は、コンパイル処理を行なう場合のユーザの設定に応じて、演算を第4実施例のように補助演算装置15を用いて行わせるか、或いは、図26に示すように、ROM7Aの内部に用意されたライブラリ64を使用して行なわせるかを選択することができるようになっている。
図24乃至図26は、本発明の第5実施例を示すものである。図24は、コンパイラ2の第5実施例にかかる部分の処理内容を示すフローチャートである。第5実施例では、コンパイラ2は、コンパイル処理を行なう場合のユーザの設定に応じて、演算を第4実施例のように補助演算装置15を用いて行わせるか、或いは、図26に示すように、ROM7Aの内部に用意されたライブラリ64を使用して行なわせるかを選択することができるようになっている。
図24は、乗算処理(例えば、a=b*c)を行う場合の例である。コンパイラ2は、乗算処理に対するユーザの指定を判定する(ステップS41)。ライブラリ64が指定された場合、コンパイラ2は、変数bの値をCPU8の汎用レジスタr4に転送するコードを生成し(ステップS42)、続いて、変数cの値を汎用レジスタr5に転送するコードを生成する(ステップS43)それから、ライブラリ64を呼び出すコードを生成する(ステップS44)。
図25は、上述のようにして生成されたオブジェクトコードである。CPU8によってライブラリ64が呼び出されると、ライブラリ64によって乗算処理(a=b*c)が実行され、積aは、汎用レジスタr1にセットされる。従って、続くステップS45では、汎用レジスタr1の値を変数aに転送するようにコード生成する。
図25は、上述のようにして生成されたオブジェクトコードである。CPU8によってライブラリ64が呼び出されると、ライブラリ64によって乗算処理(a=b*c)が実行され、積aは、汎用レジスタr1にセットされる。従って、続くステップS45では、汎用レジスタr1の値を変数aに転送するようにコード生成する。
一方、ユーザによって補助演算装置15を使用することが指定されると、第4実施例で図22に示したコードを生成するためのコンパイル処理がステップS46〜S51で行なわれる。即ち、変数bの値をCPU8の任意の汎用レジスタrxに転送するコードを生成し(ステップS46)、続いて、変数cの値を任意の汎用レジスタryに転送するコードを生成する(ステップS47)。それから、汎用レジスタrxの内容を、補助演算装置15のレジスタc0に転送するコードを生成し(ステップS48)、汎用レジスタryの内容を、レジスタc8に転送するコードを生成する(ステップS49)。そして、補助演算装置15のレジスタc0の内容を、任意の汎用レジスタrzに転送するコードを生成する(ステップS50)。最後に、汎用レジスタrzの内容を変数aに転送するようにコード生成する(ステップS51)。
以上のように第5実施例によれば、コンパイラ2は、オブジェクトコードにおける演算処理を補助演算装置15に実行させるか、或いは、ライブラリ64によって行なわせるかを、ユーザの設定に応じてソースコードファイル3単位で選択可能であるから、ユーザは、演算を高速に処理したい場合は補助演算装置15を選択し、高速に処理する要請がない場合は、ライブラリ64を選択するようにコンパイル処理させることが可能となる。
本発明は上記し且つ図面に記載した実施例にのみ限定されるものではなく、以下のような変形または拡張が可能である。
第2実施例において、通常割り込み処理で例外割り込み処理とは異なる独自の処理を行なう場合も、復帰命令の相違に応じてCPU8が実行するように構成しても良い。
第4実施例において、CPUが割り込みの受付を禁止する期間は、CPUの構成によってはパイプラインのステージEXEであっても良い。
第2実施例において、通常割り込み処理で例外割り込み処理とは異なる独自の処理を行なう場合も、復帰命令の相違に応じてCPU8が実行するように構成しても良い。
第4実施例において、CPUが割り込みの受付を禁止する期間は、CPUの構成によってはパイプラインのステージEXEであっても良い。
1はパーソナルコンピュータ、2はコンパイラ、3はソースコードファイル、4はオブジェクトコードファイル、6はマイクロコンピュータ、7,7AはROM(プログラムメモリ)、8はRISC型CPU、13は第2アドレスバス(汎用バス)、14は第2データバス(汎用バス)、15は補助演算装置、64はライブラリ、100はプログラムを示す。
Claims (8)
- 補助演算装置にアクセスするための命令を、当該補助演算装置だけがデコード可能となる専用命令として備え、前記専用命令をデコード若しくは実行している期間は割り込みの受付が禁止されるように構成されていることを特徴とするRISC型CPU。
- 請求項1記載のRISC型CPUによって実行されるオブジェクトコードを生成するためのコンパイラにおいて、
前記オブジェクトコードにおける演算処理を、前記補助演算装置に実行させるか、或いは、ライブラリによって行なわせるかを、ユーザの設定に応じてソースファイル単位で選択可能であることを特徴とするコンパイラ。 - 前記補助演算装置に実行させるオブジェクトコードを生成する際に、当該補助演算装置に対するアクセス命令が連続するように配置することで、前記CPUが当該補助演算装置より演算結果を取得するまでの期間は割り込みの受付が禁止されるようにコンパイル処理することを特徴とする請求項2記載のコンパイラ。
- 請求項1記載のRISC型CPUと、
このCPUとバスを介して接続される補助演算装置とを備えて構成されることを特徴とするマイクロコンピュータ。 - 前記RISC型CPUと、補助演算装置とは、汎用バスを介して接続されており、
前記CPUは、前記専用命令をデコードすると、当該補助演算装置に対して専用命令信号を出力するように構成され、
前記補助演算装置は、前記専用命令信号が出力されている場合に、前記CPUによって与えられた演算命令をデコードするように構成されていることを特徴とする請求項4記載のマイクロコンピュータ。 - 前記補助演算装置は、演算実行中に前記RISC型CPUによるアクセスが発生すると、前記CPUが行なっている処理を一時停止させるための停止信号を出力し、
前記CPUは、前記停止信号が出力されている期間はパイプライン処理を停止させるように構成されていることを特徴とする請求項4または5記載のマイクロコンピュータ。 - 請求項2又は3記載のコンパイラによって生成されたオブジェクトプログラムが記憶されるプログラムメモリを備えたことを特徴とする請求4乃至6の何れかに記載のマイクロコンピュータ。
- 請求項4乃至7の何れかに記載のマイクロコンピュータに搭載されることを特徴とする補助演算装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007207931A JP2007317231A (ja) | 2007-08-09 | 2007-08-09 | Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007207931A JP2007317231A (ja) | 2007-08-09 | 2007-08-09 | Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002374527A Division JP2004206389A (ja) | 2002-12-25 | 2002-12-25 | Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007317231A true JP2007317231A (ja) | 2007-12-06 |
Family
ID=38850969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007207931A Pending JP2007317231A (ja) | 2007-08-09 | 2007-08-09 | Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007317231A (ja) |
-
2007
- 2007-08-09 JP JP2007207931A patent/JP2007317231A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0996057B1 (en) | Data processor with an instruction unit having a cache and a ROM | |
US9652241B2 (en) | Data processing apparatus with instruction encodings to enable near and far memory access modes | |
JP2834837B2 (ja) | プログラマブルコントローラ | |
JP3499252B2 (ja) | コンパイル装置及びデータ処理装置 | |
JPH03129433A (ja) | 並列処理装置および並列処理方法 | |
CN101965554A (zh) | 选择性地提交已执行指令的结果的系统和方法 | |
JPH0561692A (ja) | マイクロプロセツサの割込み制御装置 | |
JP2004054585A (ja) | データ処理装置 | |
JPH0810428B2 (ja) | データ処理装置 | |
US20080104370A1 (en) | RISC type of CPU and compiler to produce object program executed by the same | |
JPH1021074A (ja) | 割り込み制御方式、プロセッサ及び計算機システム | |
JPH0215331A (ja) | データ処理装置 | |
JPS645330B2 (ja) | ||
JP2007287186A (ja) | Risc型cpu,コンパイラ及びマイクロコンピュータ | |
JP4800582B2 (ja) | 演算処理装置 | |
JP2007317231A (ja) | Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置 | |
JP2007317230A (ja) | Risc型cpu,コンパイラ及びマイクロコンピュータ | |
JPH02105937A (ja) | データ処理装置 | |
EP0573071A2 (en) | A microprocessor | |
JP2002157115A (ja) | データ処理装置 | |
US20050216708A1 (en) | Processor for performing context switching, a method for performing context switching, a computer program for perform context switching | |
JP2636821B2 (ja) | 並列処理装置 | |
JP7276755B2 (ja) | 処理速度整合回路およびマイクロプロセッサ | |
JP2003196085A (ja) | 情報処理装置 | |
JP2005353105A (ja) | データ処理装置及びマイクロコンピュータ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080108 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080513 |