JP2007287186A - Risc型cpu,コンパイラ及びマイクロコンピュータ - Google Patents

Risc型cpu,コンパイラ及びマイクロコンピュータ Download PDF

Info

Publication number
JP2007287186A
JP2007287186A JP2007207930A JP2007207930A JP2007287186A JP 2007287186 A JP2007287186 A JP 2007287186A JP 2007207930 A JP2007207930 A JP 2007207930A JP 2007207930 A JP2007207930 A JP 2007207930A JP 2007287186 A JP2007287186 A JP 2007287186A
Authority
JP
Japan
Prior art keywords
instruction
cpu
branch
compiler
program
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
Application number
JP2007207930A
Other languages
English (en)
Inventor
Masahiro Kamiya
政裕 神谷
Yoshinori Tejima
芳徳 手嶋
Hideaki Ishihara
秀昭 石原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2007207930A priority Critical patent/JP2007287186A/ja
Publication of JP2007287186A publication Critical patent/JP2007287186A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】遅延分岐処理を実行するために、オブジェクトプログラム中に不要な命令を出力する必要がないRISC型CPUを提供する。
【解決手段】CPUは、分岐命令における、遅延オプションの設定に応じてプログラム分岐を行なうか否かを決定するので、分岐命令等をデコードした段階で、当該命令については遅延分岐を行なわないことを判別でき、そのようなケースでは、当該分岐命令の次にnop命令を配置する必要はなくなるので、オブジェクトコードサイズを小さくすることが可能となる。
【選択図】図16

Description

本発明は、RISC型CPU,そのCPUによって実行されるオブジェクトプログラムを生成するためのコンパイラ,前記CPUを備えてなるマイクロコンピュータに関する。
に関する。
(1)現在、プログラム開発は、例えばC,C++などの高級言語によってソースプログラムを記述することで行い、そのソースプログラムをコンパイラによってコンパイルすることでCPUが実行可能な形式のオブジェクトプログラムを生成することが一般的である。
ところで、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号公報
しかしながら、分岐命令と並行して実行可能な命令には、命令の種類(例えば、分岐命令)やプログラムにおける処理手順などから一定の制限がある。そして、コンパイラによるコンパイル処理では、遅延分岐命令をコンパイルする際には並行して実行するための命令を必ず出力しなければならない。その場合、並行して実行可能な命令が存在しなければ、図28(b)に示すように、何も処理しない命令であるnop(No OPeration)命令を出力するようになっている。従って、オブジェクトプログラム中には、本来不要であるnop命令がコードとして出力されることになり、プログラムメモリの容量を増加させていた。
本発明は上記事情に鑑みてなされたものであり、その目的は、遅延分岐処理を実行するために、オブジェクトプログラム中に不要な命令を出力する必要がないRISC型CPU、また、オブジェクトプログラム中に不要な命令を出力しないコンパイラ,及び前記CPUを備えてなるマイクロコンピュータを提供することにある。
請求項1記載のRISC型CPUによれば、分岐命令における、遅延分岐オプションの設定に応じてプログラム分岐を行なうか否かを決定する。斯様に構成すれば、CPUは、分岐命令をデコードした段階で、当該命令については遅延分岐を行なわないことを判別できる。従って、そのようなケースでは、当該分岐命令の次にnop命令を配置する必要はなくなるので、オブジェクトコードサイズを小さくすることが可能となる。
請求項2記載のコンパイラによれば、分岐命令よりも前に記述されている命令が当該分岐命令の遅延スロットにて実行可能か否かを判定し、その実行可否に応じて遅延分岐オプションを設定すると共に、実行可能である場合は実行可能な命令を当該分岐命令の次に配置する。従って、請求項1記載のRISC型CPUが実行可能なオブジェクトプログラムを生成することができる。
請求項3記載のマイクロコンピュータによれば、請求項1記載のRISC型CPUと、請求項2記載のコンパイラによって生成されたオブジェクトプログラムが記憶されるプログラムメモリとを備える。
(第1実施例)
以下、本発明の第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)。
図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行の命令によってそれらを同時に行うようにコーディングされている。
ここで、図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:ライトバック(レジスタ書込み)
パイプライン[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)
ここで、図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)で一括して行なうことが可能となり、復帰処理に要する時間が短縮されている。
以上のように本実施例によれば、CPU8が備える復帰命令[rtm3]によれば、スタック領域の開放サイズが復帰命令のオペランドにて指定可能であるから、従来は2段階で行なっていた開放処理を1段階で実行することができる。従って、割り込み処理からの復帰に要する時間を短縮することが可能となる。
そして、コンパイラ2は、割り込み処理から復帰する際にスタック領域を開放する必要がある場合、その開放サイズを復帰命令[rtm3]のオペランドにて指定するようにオブジェクトコードファイル4を生成するので、CPU8が実行可能なプログラム100を生成することができる。加えて、そのオブジェクトコードファイル4のサイズを小さくすることができる。
また、マイコン6は、コンパイラ2によって生成されたオブジェクトプログラムが記憶されるROM7を備えるので、CPU8は、そのオブジェクトプログラムを実行して高速に処理を行なうことができる。
(第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)が通常割り込み処理を示す記述である。
ここで、図12には、CPU8の内部レジスタであるシステムレジスタ26のビット構成を示す。システムレジスタ26のビット1は、モニター中フラグMONとなっている。このフラグMONは、CPU8がユーザプログラムの実行中である場合は「0」にリセットされており、例外割り込み処理中である場合は、CPU8のハードウエアによって「1」にセットされる。
フラグ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実施例と同様の復帰処理を行なう。
以上のように第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タイプがある。
図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は、この遅延処理選択部のビットの状態に応じて遅延分岐の流れを制御するように構成されている。
図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)に示すようになる。
一方、直前の命令が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)。
また、直前の命令が2ワード命令でなく、ステップS17においてコンパイラ2が「NO」と判断すると、ステップS21に移行する。ステップS21〜S23,S27の処理は、基本的にステップS13〜S16の処理と同様であるが、遅延オプション1,0が設定されるのは遅延処理選択部41である。
更に、コンパイラ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は、使用される組み合わせに応じて行なわれる演算の種類が決定されている。
そして、命令デコーダ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に対して出力するようになっている。
図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にアクセスする場合に、より簡単に割り込み受付を禁止させることができる。
そして、コンパイラ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は、乗算処理(例えば、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に転送するようにコード生成する。
一方、ユーザによって補助演算装置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であっても良い。
本発明の第1実施例であり、コンパイラによるコンパイル処理の内容を、本実施例にかかる部分のみ示すフローチャート (a)はコンパイラによってコンパイルされたプログラムにおける通常割り込み処理のフローチャート、(b)はそのプログラムをニモニック表現で示す図 割り込み復帰命令のビット構成を示す図 割り込み復帰命令をCPUが実行する場合のパイプライン処理を示す図 従来のコンパイル処理によるオブジェクトプログラムに基づいて復帰命令が実行される場合のパイプライン処理を示す図 プログラム変換装置の構成を示す図 コンパイラによるコンパイル処理を概念的示す図 ワンチップマイコンの電気的構成を示す機能ブロック図 本発明の第2実施例であり、コンパイラによるコンパイル処理の内容を、第2実施例にかかる部分のみ示すフローチャート (a)は、例外割り込み処理のソースコードプログラム、(b)はそのオブジェクトコードプログラムを示す図 通常割り込み処理に関する図10相当図 CPUの内部レジスタであるシステムレジスタのビット構成を示す図 本発明の第3実施例であり、コンパイラによるコンパイル処理の内容を、第3実施例にかかる部分のみ示すフローチャート 図13の処理結果例を示す図 コンパイラによって生成される3タイプの遅延分岐命令のビット構成を示す図 各分岐命令について遅延オプション0〜2が設定された場合におけるCPUのパイプライン処理状態を示す図 本発明の第4実施例であり、補助演算装置の内部構成を示す機能ブロック図 補助演算装置によって実行される演算の種類と、その種類に応じたレジスタ設定の対応を示す図 CPUが備えている補助演算装置に対する転送命令のビット構成を示す図 CPUの内部構成を概略的に示す機能ブロック図 CPUの制御部におけるデコーダが行うデコード処理の内容を、第4実施例に係る部分だけ示すフローチャート CPUが補助演算装置を用いた演算を行う場合に、コンパイラによって生成されたオブジェクトコードの一例を示す図 図22のオブジェクトコードを実行する場合におけるパイプライン処理と、各信号の出力状態を示す図 本発明の第5実施例であり、コンパイラの第5実施例にかかる部分の処理内容を示すフローチャート 図24の処理によって生成されたオブジェクトコードを示す図 図8相当図 従来技術を示す図2相当図 図14相当図
符号の説明
1はパーソナルコンピュータ、2はコンパイラ、3はソースコードファイル、4はオブジェクトコードファイル、6はマイクロコンピュータ、7,7AはROM(プログラムメモリ)、8はRISC型CPU、13は第2アドレスバス(汎用バス)、14は第2データバス(汎用バス)、15は補助演算装置、64はライブラリ、100はプログラムを示す。

Claims (3)

  1. その次に記述されている命令を実行するか否かを判別するための遅延分岐オプションを有する分岐命令を有し、前記遅延分岐オプションの設定に応じてプログラム分岐を行なうか否かを決定するように構成されていることを特徴とするRISC型CPU。
  2. ソースプログラムにおいて、分岐命令よりも前に記述されている命令が当該分岐命令の遅延スロットにて実行可能か否かを判定し、
    実行可能である場合は「遅延処理あり」を示す遅延分岐オプションを当該分岐命令中に設定すると共に実行可能な命令を当該分岐命令の次に配置し、
    実行不能である場合は「遅延処理なし」を示す遅延分岐オプションを当該分岐命令中に設定するように請求項1記載のRISC型CPUによって実行されるオブジェクトコードを生成することを特徴とするコンパイラ。
  3. 請求項1記載のRISC型CPUと、
    請求項2記載のコンパイラによって生成されたオブジェクトプログラムが記憶されるプログラムメモリとを備えたことを特徴とするマイクロコンピュータ。
JP2007207930A 2007-08-09 2007-08-09 Risc型cpu,コンパイラ及びマイクロコンピュータ Pending JP2007287186A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007207930A JP2007287186A (ja) 2007-08-09 2007-08-09 Risc型cpu,コンパイラ及びマイクロコンピュータ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007207930A JP2007287186A (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
JP2007287186A true JP2007287186A (ja) 2007-11-01

Family

ID=38758835

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007207930A Pending JP2007287186A (ja) 2007-08-09 2007-08-09 Risc型cpu,コンパイラ及びマイクロコンピュータ

Country Status (1)

Country Link
JP (1) JP2007287186A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2529114A (en) * 2014-02-12 2016-02-10 Imagination Tech Ltd Processors with support for compact branch instructions & methods
JP2020137878A (ja) * 2019-02-28 2020-09-03 株式会社ソフイア 遊技機
JP2020192213A (ja) * 2019-05-30 2020-12-03 株式会社ソフイア 遊技機

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04127237A (ja) * 1990-09-18 1992-04-28 Nec Corp 遅延分岐命令の制御方式
JPH06131180A (ja) * 1992-10-15 1994-05-13 Oki Electric Ind Co Ltd 命令処理方式および命令処理装置
JPH07248923A (ja) * 1994-03-11 1995-09-26 Toshiba Corp コンパイラ
JPH08339299A (ja) * 1995-04-12 1996-12-24 Matsushita Electric Ind Co Ltd パイプライン・プロセッサ
JPH1049370A (ja) * 1996-08-01 1998-02-20 Mitsubishi Electric Corp 遅延命令を有するマイクロプロセッサ

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04127237A (ja) * 1990-09-18 1992-04-28 Nec Corp 遅延分岐命令の制御方式
JPH06131180A (ja) * 1992-10-15 1994-05-13 Oki Electric Ind Co Ltd 命令処理方式および命令処理装置
JPH07248923A (ja) * 1994-03-11 1995-09-26 Toshiba Corp コンパイラ
JPH08339299A (ja) * 1995-04-12 1996-12-24 Matsushita Electric Ind Co Ltd パイプライン・プロセッサ
JPH1049370A (ja) * 1996-08-01 1998-02-20 Mitsubishi Electric Corp 遅延命令を有するマイクロプロセッサ

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2529114A (en) * 2014-02-12 2016-02-10 Imagination Tech Ltd Processors with support for compact branch instructions & methods
GB2529114B (en) * 2014-02-12 2016-08-03 Imagination Tech Ltd Processors with support for compact branch instructions & methods
GB2538401A (en) * 2014-02-12 2016-11-16 Imagination Tech Ltd Processors with support for compact branch instructions & methods
GB2538401B (en) * 2014-02-12 2017-04-19 Imagination Tech Ltd Compilation targeting multiple processor architectures some of which support generating exceptions for forbidden instructions in branch delay slots
JP2020137878A (ja) * 2019-02-28 2020-09-03 株式会社ソフイア 遊技機
JP2020192213A (ja) * 2019-05-30 2020-12-03 株式会社ソフイア 遊技機

Similar Documents

Publication Publication Date Title
EP0996057B1 (en) Data processor with an instruction unit having a cache and a ROM
KR100208889B1 (ko) 병렬처리장치 및 병렬처리방법
US9652241B2 (en) Data processing apparatus with instruction encodings to enable near and far memory access modes
JP2834837B2 (ja) プログラマブルコントローラ
JP3745039B2 (ja) 遅延命令を有するマイクロプロセッサ
JPH09212358A (ja) データ処理装置及びマイクロプロセッサ
JP2004054585A (ja) データ処理装置
JPH0810428B2 (ja) データ処理装置
JPS62197830A (ja) デ−タ処理システム
US20080104370A1 (en) RISC type of CPU and compiler to produce object program executed by the same
JPH0215331A (ja) データ処理装置
JP2006313561A (ja) データ処理装置
JPS645330B2 (ja)
JP2007287186A (ja) Risc型cpu,コンパイラ及びマイクロコンピュータ
JP2007317230A (ja) Risc型cpu,コンパイラ及びマイクロコンピュータ
JP2007317231A (ja) Risc型cpu,コンパイラ,マイクロコンピュータ及び補助演算装置
JPH02105937A (ja) データ処理装置
EP0573071A2 (en) A microprocessor
JP2636821B2 (ja) 並列処理装置
JP2522048B2 (ja) マイクロプロセッサ及びそれを使用したデ―タ処理装置
JP2005353105A (ja) データ処理装置及びマイクロコンピュータ
JP2785820B2 (ja) 並列処理装置
JP2001297002A (ja) データ処理装置
JP2927281B2 (ja) 並列処理装置
JP4702004B2 (ja) マイクロコンピュータ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070809

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100204

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100413

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100524

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100629

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101026