JP3853309B2 - マイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置 - Google Patents
マイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置 Download PDFInfo
- Publication number
- JP3853309B2 JP3853309B2 JP2003200893A JP2003200893A JP3853309B2 JP 3853309 B2 JP3853309 B2 JP 3853309B2 JP 2003200893 A JP2003200893 A JP 2003200893A JP 2003200893 A JP2003200893 A JP 2003200893A JP 3853309 B2 JP3853309 B2 JP 3853309B2
- Authority
- JP
- Japan
- Prior art keywords
- address
- instruction
- code
- information
- contents
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
主に高級言語で書かれたプログラムを実行するマイクロプロセッサおよびコンパイル装置であって、特にスタックを用いて処理を行なうマイクロプロセッサと該マイクロプロセッサで実行されるプログラムのためのコンパイル装置に関する。
【0002】
【従来の技術】
高級言語でプログラムを設計する際、サブルーチンへの引数・戻り値がスタックでやり取りされ、また、C言語でのローカル変数はスタック上に領域が確保されて演算が行なわれる。そのため、ローカル変数での演算は、RAM(Random Access Memory)のアドレス演算とそのリード、格納アドレス演算とそのライトが発生し複雑である。また、外部RAMのアクセス速度が遅い場合には、その速度が全体の処理速度に影響する。サブルーチンの実行処理を高速化するために、サブルーチン呼出し・復帰に関するスタック操作を並列化して、よって高速化する方法が提供されている(たとえば、特許文献1参照)。
【0003】
【特許文献1】
特開平11−242595号公報
【0004】
【発明が解決しようとする課題】
上述の文献で提案された方法は高速化を図るように構成されるが、実際に使用するスタックは外部メモリとして接続されているから、外部メモリへのアクセスが一般的に低速であることに鑑みると、外部メモリへのアクセスが頻繁となる処理内容であった場合には実行処理を高速にすることが困難である。この文献ではスタック上のデータへのアクセス、演算には言及されていない。
【0005】
それゆえにこの発明の目的は、データを高速にアクセスできるマイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置を提供することである。
【0006】
【課題を解決するための手段】
この発明のある局面に従うマイクロプロセッサは、アドレス信号に基づいてアクセスされる情報を記憶する内部メモリと、指令に基づき内部メモリの情報を用いた演算を含む各種演算を行なう演算部と、与えられる命令コードをデコードしデコード結果に基づき演算の指令を含む各部を制御するための制御情報を出力する命令解読部と、与えられるアドレス情報を入力して解読しアドレス信号を出力するアドレスデコード部とを備える。
【0007】
アドレス情報は上位アドレス情報と下位アドレス情報を含み、アドレスデコード部による、下位アドレス情報を入力してからアドレス信号を導出するまでの遅延は、上位アドレス情報を入力してからアドレス信号を導出するまでの遅延よりも短い。
【0008】
したがって、内部メモリの下位アドレス情報に基づいて参照される部分領域のアクセスは上位アドレス情報に基づいて参照される部分領域のアクセスよりも速く行なわれるので、下位アドレスが変化した場合に内部メモリの高速アクセスが可能となる。また、内部メモリの下位アドレス情報に基づいて参照される部分領域のアクセスを高速化できる。例えばレジスタファイルを用いて演算する従来手法に比較して大量データを高速アクセスできる。
【0009】
好ましくは、アドレスデコード部は、アドレス情報のうちの上位アドレス情報をデコードして上位デコード信号を出力する上位デコーダと、アドレス情報のうちの下位アドレス情報をデコードして下位デコード信号を出力する下位デコーダと、上位デコード信号と下位デコード信号を入力してアドレス信号を生成し出力する生成デコーダとを有する。
【0010】
したがって、アドレスデコード部に上位デコーダと下位デコーダとを別個に設けて、さらに生成デコーダを設けることにより、下位アドレス情報を入力してからアドレス信号を導出するまでの遅延を、上位アドレス情報を入力してからアドレス信号を導出するまでの遅延よりも短くしている。
【0011】
好ましくは下位アドレスのビット長は上位アドレスのビット長よりも短い。したがって、下位デコーダを簡単に構成できるとともに、デコードのための処理段数を少なくできる。
【0012】
上述のマイクロプロセッサは好ましくは上位アドレス情報を生成するアドレス生成部をさらに備えて、アドレス生成部は、上位アドレス情報を格納するアドレスレジスタと、アドレスレジスタに格納される上位アドレス情報を、命令解読部の制御情報に基づき更新するアドレス更新部とを有し、下位アドレス情報は、命令解読部が出力する制御情報に含まれる。
【0013】
したがってアドレスレジスタの上位アドレス情報を更新することにより、内部メモリの下位アドレス情報に基づいてアクセスされる領域を、すなわち高速アクセス可能なスタック領域を、内部メモリにおいて可変に設定できる。
【0014】
好ましくは上述の更新は上位アドレス情報が示すアドレスのインクリメントまたはデクリメントである。
【0015】
好ましくは命令解読部から出力された下位アドレス情報により内部メモリへのアクセスは1サイクルで行なわれる。
【0016】
上述のマイクロプロセッサは、命令解読部に与える命令コードを逐次指定する情報を保持するプログラムカウンタをさらに備えて、命令解読部に与えられた命令コードが他の処理ルーチンに分岐することを指令する命令コードであるとき、制御情報により、プログラムカウンタに保持される情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新する。
【0017】
したがって、他の処理ルーチンへの分岐時には、1命令コードを実行することにより、プログラムカウンタに保持される情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新するという一連の処理を実行できる。
【0018】
好ましくは上述のプログラムカウンタに保持される情報の内部メモリへの退避と、プログラムカウンタの値の指定値への変更と、アドレスレジスタの内容更新とは、並列に行なわれる。したがって、他の処理ルーチンへの分岐を速やかに処理できる。
【0019】
好ましくは、処理において命令解読部に例外要因の信号が入力されたとき、この処理から予め準備された例外要因処理ルーチンに分岐するために、制御情報により、アドレスレジスタの内容およびプログララムカウンタの内容は退避されて、かつアドレスレジスタの内容は所定の固定値に変更される。
【0020】
したがって1命令コードにより、アドレスレジスタの内容およびプログララムカウンタの内容を退避して、かつアドレスレジスタの内容を所定の固定値に変更できるから、速やかに例外要因処理ルーチンに分岐できる。
【0021】
好ましくは命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、制御情報によりプログラムカウンタの内容を予め退避していた内容に復元する。
【0022】
好ましくは命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、制御情報によりアドレスレジスタの内容と前記プログラムカウンタの内容とを復元する。
【0023】
したがって1命令コードによりアドレスレジスタの内容とプログラムカウンタの内容とを復元できるから、分岐先の処理ルーチンから元の処理に速やかに復帰できる。
【0024】
好ましくは、内部メモリは独立した3つのポートを有し、3つのポートのうちの1つ目のポートのためのアドレス信号に基づいて内部メモリから情報を読出し、3つのポートのうちの2つ目のポートのためのアドレス信号に基づいて内部メモリから情報を読出し、これら読出された情報を演算部に与えて、その演算結果を、3つのポートのうちの3つ目のポートのためのアドレス信号に基づいて内部メモリに格納する動作を1サイクルで行なう。
【0025】
したがって内部メモリを参照しながらの演算処理を高速に実行できる。
好ましくは命令コードは、3つのポートのためのアドレス情報それぞれの下位アドレス情報を含む。
【0026】
好ましくは命令コードは定数情報を含み、命令解読部は、定数情報を、内部メモリから読出された情報を演算部に与えるためのバスに送出する。したがってバスは内部メモリを参照した情報と定数情報との演算部への供給に共用できて装置構成を簡単化できる。また定数情報を命令解読部から直接に演算部に与えることができて、定数情報を用いた演算を速く実行できる。
【0027】
好ましくは処理中に例外要因の発生に応じて例外処理ルーチンに分岐するとき、アドレスレジスタの内容を退避して固定値に更新し、待ち時間のためのサイクルを実行し、プログラムカウンタの値を退避させるために内部メモリに格納する。
【0028】
このように処理中に例外要因の発生するとアドレスレジスタの内容は退避されて固定値に更新される。もし分岐先の例外処理ルーチンの最初に内部メモリを参照する命令が実行される場合でも、分岐時には待ち時間のためのサイクルが実行されているから、アドレスレジスタが変更されて、変更後の内容に基づきアドレス解読部がアドレス信号を生成するのに要する時間は、待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【0029】
好ましくは、例外処理ルーチンから分岐前の元の処理に復帰するとき、アドレスレジスタを退避していた内容に復元して、待ち時間のためのサイクルを実行する。
【0030】
このように元の処理に復帰するときはアドレスレジスタの内容が変更される。もし復帰した元の処理の最初の命令が内部メモリを参照することを指令する場合でも、復帰時には待ち時間のためのサイクルが実行されているから、アドレスレジスタが変更されて、変更後の内容に基づきアドレス解読部がアドレス信号を生成するのに要する時間は、待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【0031】
この発明の他の局面に従うコンパイル装置は、ソースプログラムを構成するソースコードを順次入力して、上述のマイクロプロセッサのための命令コードに変換して命令コード列を出力するコンパイル装置であって、内部メモリを参照するソースコードを変換するとき、直前に上位アドレス情報の変更を指示する命令コードへの変換がなされている場合には、命令コード列において該ソースコードの命令コードの前に待ち時間サイクルのための命令コードを置くようにコンパイルする。
【0032】
このように上位アドレス情報を変更するような命令コードと、内部メモリを参照する命令コードとの間には待ち時間サイクルのための命令コードが置かれるから、内部メモリを参照する命令コード実行時には、上位アドレス情報が更新されて更新後の内容に基づきアドレス信号を生成するのに要する時間は待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【0033】
好ましくは、ソースプログラムにおいてサブルーチン呼出しを指示するソースコードを検出すると、該ソースコードを、プログラムカウンタが保持する情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新することを指令する命令コードに変換する。
【0034】
したがって、サブルーチン呼出しが指令されるときは、1命令コードにより、マイクロプロセッサに対して、プログラムカウンタが保持する情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新することを指令できる。
【0035】
好ましくは、ソースプログラムにおいてサブルーチンの終了を指示するソースコードを検出すると、該ソースコードを、プログラムカウンタの内容を予め退避されていた内容に復元する命令コードに変換する。
【0036】
好ましくは、ソースプログラムにおいてサブルーチン呼出しを指示するソースコードの次位のソースコードが、内部メモリを参照することを指示している場合には、該サブルーチンからの復帰を指示する命令コード群に待ち時間サイクルのための命令コードを置くようにコンパイルする。
【0037】
サブルーチンから復帰するためには上位アドレス情報が変更されるから、該サブルーチンからの復帰を指示する命令コード群に待ち時間サイクルのための命令コードを置くようにすることで、サブルーチン復帰後に内部メモリを参照する場合は、上位アドレス情報が更新されて、更新後の内容に基づいて内部メモリをアクセスするための信号の生成に要する時間は待ち時間で相殺されることになって、該内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【0038】
好ましくは、ソースプログラムにおいてサブルーチンの最初のソースコードが内部メモリの参照を指示することを検出したとき、命令コード列において該ソースコードの命令コードの前に待ち時間サイクルのための命令コードを置くようにコンパイルする。
【0039】
したがって、直前のサブルーチンで上位アドレス情報が更新されて次位のサブルーチンの最初で内部メモリを参照する場合は、上位アドレス情報が更新されて、更新後の上位アドレス情報に基づいて内部メモリをアクセスする為の信号の生成に要する時間は待ち時間で相殺されることになって、該内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【0040】
【発明の実施の形態】
以下、この発明の各実施の形態について図面を参照して説明する。
【0041】
(実施の形態1)
本実施の形態では、内部RAMの部分領域をスタックとして機能させ、内部RAMに関するアドレスデコーダのスタック領域をアクセスする回路規模を小さくすることにより、アドレスデータをデコードしてデコード信号を生成(導出)するまでの所要時間(遅延)を短くするようなプロセッサが提供される。
【0042】
図1には、本実施の形態に係るマイクロプロセッサ40の構成が示される。マイクロプロセッサ40はポートであるアドレス出力1、データ入力2およびデータ出力3、プログラムカウンタ(以下、PCと略す)4、パイプ5、命令デコーダ6、3−PortRAM(以下、単に内部RAMと略す)7、Aバス8、内部RAM7の情報を用いた演算(算術・論理演算)および命令デコーダ6から与えられる情報を用いた演算(算術・論理演算)を行なうALU(Arithmetic and Logic Unit)9、Bバス10、アドレスレジスタ11、インクリメンタ12および14、MUX(Multiplexor)15と16、データ出力バッファ17、データ入力バッファ18およびCバス19を備える。内部RAM7はメモリセルアレイ70、ならびにAバス側、Bバス側およびCバス側のそれぞれにおいてアドレスデコード部7A、7Bおよび7Cを備える。アドレスデコード部7A、7Bおよび7Cはバス側から与えられるメモリセルアレイ70のアクセスに関するアドレス情報を入力して解読し、解読結果としてメモリセルアレイ70をアクセスするためのアドレス信号を出力する。
【0043】
マイクロプロセッサ40において実行されるプログラムは複数の命令コードを含み、図示しない外部メモリに格納されている。マイクロプロセッサ40から外部メモリをアクセスするためのアドレスデータはアドレス出力1に接続されて、外部メモリからマイクロプロセッサ40に読込まれるデータはデータ入力2に接続されて、マイクロプロセッサ40から外部メモリに書込まれるデータはデータ出力3に接続されている。マイクロプロセッサ40全体は、外部からのクロック入力に同期して動作しているが、ここではクロック入力の図示および同期動作の説明は略す。
【0044】
PC4は、カウント動作しながら次にフェッチすべき命令が格納されているアドレスデータを保持しており、アドレス出力1を介して外部メモリに指示する。指示されたアドレスデータに基づき指定されたアドレスから読出されたデータである命令コードは、データ入力2を経由してタイミングを調整するパイプ5へ入力すると、パイプ5により適宜命令デコーダ6に与えられて、ここで解読される。マイクロプロセッサ40のその他の部分は、命令コードの解読結果に基づく命令デコーダ6による指示に従い動作する。
【0045】
ALU9は2つの入力ポートと1つの出力ポートを有し、RAM7は3つの独立したポート(3-Port)を有する。Aバス8は内部RAM7のデータをALU9に出力する専用バスであり、ALU9の1方の入力ポートに接続されている。Bバス10はデータ入力2およびデータ入力バッファ18を介して外部メモリからのデータをALU9に出力する専用バスであり、ALU9の他方の入力ポートに接続され、同時にデータ出力バッファ17を介してデータ出力3にも接続されている。Cバス19は入力専用であり、ALU9の出力、PC4などが接続されている。ここで、内部RAM7はデータ幅は32ビット、アドレスデータ幅は16ビットで、64kワード=2Mビットの容量を有すると想定する。
【0046】
アドレスレジスタ11は、内部RAM7のアドレスデータ16ビット中の上位11ビットを保持するレジスタである。アドレスレジスタ11に保持される値は、命令デコーダ6の指示により、インクリメンタ12を介して+1されたり−1されたりする。
【0047】
Aバス8のAバスアドレスにはアドレスレジスタ11の出力およびインクリメンタ12の出力の一方がMUX16で選択されて接続される。Bバス10のBバスアドレスにはアドレスレジスタ11の出力が接続されている(図示しない)。
【0048】
Cバス19のCバスアドレスにはアドレスレジスタ11の出力およびインクリメンタ12の出力の一方がMUX15で選択されて接続される。内部RAM7のアドレスデータの下位5ビットは、内部RAM7の3つのポートでそれぞれ独立であって、命令デコーダ6からの信号が接続されている。したがって、内部RAM7をプログラムの命令コードに従って様々なアクセスが可能となっている。
【0049】
ここで、アドレスレジスタ11に保持される値(上位アドレスデータの値)を変化させないと想定した時、内部RAM7のアクセスできる領域は下位アドレスデータで指定できる範囲、すなわち32(=2^5)ワードの空間となるから、内部RAM7を32ビットの内蔵レジスタが32個存在するかの如くアクセスできて、命令コードに従い、その空間内で様々な演算が行なえる。
【0050】
アドレスレジスタ11の値を+1インクリメントすれば、内部RAM7のアドレスを32増加させることとなり、アクセスできる内部RAM7の領域(=命令コードによってデータの読出しまたは書込みが可能な領域)が移動し、異なった空間の32ワード分にアクセスが可能となる。アドレスレジスタの値を−1させた場合も同様である。
【0051】
いま、内部RAM7はSRAM(Static RAM)で実現されているとする。SRAMの各セルを図2に示す。図2のSRAMのセル21は、データ線対から供給される1ビットの情報を保持するインバータ22と23、およびトランジスタ24〜29を有する。内部RAM7の3つのポートのうちの1つめのポートのアドレスをデコードした信号が供給されるワード線WAはトランジスタ24と25に接続され、同様に2つめのポートのアドレスをデコードした信号が供給されるWBはトランジスタ26と27に接続され、同様に3つめのポートのアドレスをデコードした信号が供給されるWCはトランジスタ28と29に接続される。
【0052】
ワード線WA、WBおよびWBのうち選択されたワード線のみがハイとなり、選択されたワード線が接続されたトランジスタはオン状態となる。ワード線WAが選択された場合はデータ線の対DAとDAbがトランジスタ24と25を介してインバータ22と23に接続される。同様にワード線WBが選択された場合はデータ線の対DBとDBbがトランジスタ26と27を介してインバータ22と23に接続され、ワード線WCが選択された場合はデータ線の対DCとDCcがトランジスタ28と29を介してインバータ22と23に接続される。
【0053】
セル21は、図3の如く並べられSRAMが形成される。図3では、Aバスアドレスからのデコードされた信号はワード線WA0000〜WAFFFFを介して、Bバスアドレスからのデコードされた信号はワード線WB0000〜WBFFFFを介して、Cバスアドレスからのデコードされた信号はワード線WC0000〜WCFFFFを介して、各セル21に与えられる。選択されたワード線に接続されてオンしたセル21には対応のデータ線対が接続される。
【0054】
SRAM(内部RAM7)のそれぞれのポートにセンスアンプAMPが配され、各セル21で保持されたデータはセンスアンプAMPにより増幅されてAバス8のデータDA00〜DA1F、Bバス10のデータDB00〜DB1F、Cバス19のデータDC00〜DC1Fとしてそれぞれ出力(読出し)される。
【0055】
データを書込みする場合も同様にワード線で選択され、センスアンプAMPから駆動されたデータ線の値が、各セル21に書き込まれる。
【0056】
図4には、各ワード線の信号を生成するアドレスデコード部の構成が示される。内部RAM7のアドレスデコード部7A、7Bおよび7Cは図4に示す同様の構成を有する。アドレスデコード部は上位アドレスデコーダ41、下位アドレスデコーダ42およびアドレスデコーダ43を有する。アドレスレジスタ11から駆動される上位11ビットA5〜A15は、アドレスデコーダ41に入力され、デコード結果の信号GA000〜GA7FFが生成されてアドレスデコーダ43に与えられる。信号GA000〜GA7FFのうち該当するアドレスの信号のみがハイとなり、その他の信号はローとなる。
【0057】
命令デコーダ6から駆動される下位5ビットA0〜A4は、アドレスデコーダ42に入力され、デコード結果の信号GB00〜GB1Fが生成されアドレスデコーダ43に与えられる。信号GB00〜GB1Fのうち該当するアドレスの信号のみがハイとなり、その他の信号はローとなる。
【0058】
さらに、それぞれにデコードされた信号はアドレスデコーダ43に入力されて、個々のワード線信号W0000〜WFFFFが生成されて出力される。ワード線信号W0000〜WFFFFのうち該当するアドレスのワード線信号のみがハイとなり、その他のワード線信号はローとなる。
【0059】
ここでは、アドレスデコーダを上位アドレスデコーダ41と下位アドレスデコーダ42とに分離して、かつ下位アドレスデコーダ42は比較的規模の小さい回路、たとえばゲート1段の回路で実現し、また後段のアドレスデコーダ43も段数を少なくしているため、アドレスデコード部では下位アドレスデータ(下位5ビットA0〜A4のデータ)を入力してからワード線信号W0000〜WFFFFを出力するまでの所要時間(遅延量)を最小とすることができる。
【0060】
いま、マイクロプロセッサ40を100MHzのクロックで動作させたとすると、1サイクルは10nsであるが、下位アドレスデータ(下位5ビットA0〜A4のデータ)の変化から、デコードして、デコード結果を出力し、さらにそのデコード結果を用いてSRAMセルからデータを読出すまでの遅延(所要時間)を1サイクル以内となるようタイミング設計を行なったとする。このように設計されたマイクロプロセッサ40では、下位アドレスデータ(下位5ビットA0〜A4のデータ)のみが変化する場合、1サイクルで各種データの演算が行なえ、従来の汎用レジスタマシンによる、レジスタの演算と同様に演算を行なうことができる。
【0061】
このマイクロプロセッサ40を用いて、図5のC言語で書かれたソースプログラム50(以下、単にプログラム50という)を実行する。実行時にはプログラム50は予めコンパイルされてマイクロプロセッサ40が実行可能な機械コードに変換(翻訳)されていると想定する。
【0062】
プログラム50は関数func1のサブルーチンプログラムであり変数aとbを引数としており、ローカル変数c、dおよびeを有する。関数func1のプログラム50は図示しない他の関数プログラムなどから呼出されたとき実行される。また、プログラム50の関数func1の中で別の関数func2のサブルーチンプログラムが呼出されている。関数func2のサブルーチンプログラムは変数cを引数としており、ローカル変数fを有する。
【0063】
プログラム50を実行する時の内部RAM7上のデータの配置例を図6に模式的に示すとともに、各サイクル毎のマイクロプロセッサ40の動作を図7に表形式で示す。図7には図5のプログラム50の左端に当てられた行番号を示すソース行番号71と、該ソース行番号71の行に記載されたソースコードをコンパイルして得られた機械コードであるニーモニックコード72、該ニーモニックコード72を実行する時のマイクロプロセッサ40の動作73および該ニーモニックコード72を実行するサイクルの順番を示すサイクル番号74が示される。
【0064】
図示しない他の関数から関数func1が呼出されてプログラム50が実行される時、アドレスレジスタ11の値は0で、関数func1の引数にコピーすべき変数aとbが内部RAM7のアドレス“00h+2”とアドレス“00h+1”にそれぞれ格納されていたと想定する。
【0065】
まず引数をスタックへコピーする必要があるため、サイクル番号74が示す1番目および2番目のサイクルで、現在のアドレスレジスタ11のデータにより指定される内部RAM7の領域であるローカル変数領域の内容を、次に実行される関数func1が使用するローカル領域である(アドレスレジスタ11の値+1)により指定される領域へコピーする。この時、Aバス8にはアドレスレジスタ11の値が上位アドレスとなり、Cバス19には(アドレスレジスタ11の値+1)が上位アドレスとなり、異なった上位アドレスの領域間でのコピーを行なう。これにより変数aとbはアドレス“20h+1”と“20h+2”にそれぞれコピーされる。
【0066】
サイクル番号74が示す3番目のサイクルでは、サブルーチン(関数func1)の呼出し命令のニーモニックコード72を実行することにより、関数func1の処理が終了した時の戻り番地(PC+4)を、次の関数が使用するローカル領域に退避し、アドレスレジスタ11の値を+1し、そしてPC4に関数func1の先頭番地を代入して制御を関数func1に移すという動作を並列に実行できる。したがってサブルーチン呼出しは1サイクルで実行できるから、サブルーチン呼出しを高速に処理できる。
【0067】
関数func1のローカル変数c、d、eの領域をローカル領域のそれぞれ3番地、4番地、5番地にコンパイラが割り当てている(図6参照)。関数func1での最初の命令は「c=a+b;」の演算命令であり内部RAM7を参照する動作を伴う命令である。この時点では、先に関数func1を呼出した際にアドレスレジスタ11の値は変化しており、上位アドレスからの遅延量が大きい場合には該演算命令は1サイクルで実行完了しない場合がある。そのためサイクル番号74が示す4番目のサイクルでは何も行なわない命令を示すニーモニックコード72(‘NOP’)がコンパイラによって挿入され、次のローカル変数に対する演算、すなわち「c=a+b;」の演算に備える。命令デコーダ6は命令コードを入力して‘NOP’であることを解釈すると、該命令コードのために当てられたサイクルにおいては何ら動作せずに次の命令コードの入力まで待機する。‘NOP’のサイクルにおいては、全ての内部バスおよび制御信号は変化せずに現状状態を維持することになる。
【0068】
ここで命令コード(‘NOP’)を挿入する目的について説明する。マイクロプロセッサ40では上位アドレスデータを入力してからデコードしてデコード信号を導出するまでの遅延時間が、下位アドレスデータを入力してからデコードしてデコード信号を導出するまでの遅延時間よりも相対的に長くなる。アドレスデータを入力してからデコード信号導出までの遅延時間(所要時間)が長いと、内部RAM7のアクセス(参照)が1サイクルで終了せずに次の演算命令のためのデータを読出しできない惧れがある。つまり、実際は、「アクセス時間」=「アドレスデコードの遅延時間」+「メモリセルの読出し時間(ワード線・ビット線の遅延とセンスアンプ部の遅延)」であるので、デコードに時間がかかるとアクセス時間が長くなる。仮にアクセス時間が1サイクル以上(100MHzでは10ns以上)かかった場合でも、次の演算命令の直前に命令コード(‘NOP’)が1サイクル分実行されることで、アクセス時間のために余分に1サイクル分充てることができて、次の演算命令実行時には常にオペランドデータのアクセスに成功している状態とすることができる。これにより必要データが揃わずに演算命令が実行できないというエラー状態を確実に回避できる。
【0069】
サイクル番号74が示す5番目と6番目のサイクルでローカル変数間での演算が行なわれる。これら演算のための変数(オペランド)は、すべて同じ上位アドレスの領域に割当てられているため、すべて1サイクルで終了する。
【0070】
次に実行される関数func2の呼出し命令のため、サイクル番号74が示す7番目のサイクルで、引数cを関数func2で使用するローカル領域(図6のアドレス“40h+1”)へコピーし、サイクル番号74が示す8番目のサイクルではPC4の戻り番地の退避(図6のアドレス“40h+0”へのコピー)をして、アドレスレジスタ11の繰り上げ、およびPC4に対する関数func2の先頭番地の代入が同時に行なわれ、関数func2に制御が移される。
【0071】
サイクル番号74の9番目のサイクルでは、4番目のサイクルと同様にコンパイラが挿入したニーモニックコード72(‘NOP’)により、上位アドレスの遅延待ちを行なう。
【0072】
サイクル番号74の10番目のサイクルでは、ローカル変数と定数との演算命令(f=c+1;)が実行される。この演算のための定数(=1)の情報は対応のニーモニックコード72に含まれており、定数情報はBバス10を命令デコーダ6が駆動してALU9に与えられて演算実行される。したがってBバス10を内部RAM7から読出したデータのALU9への転送とともに、定数情報の命令デコーダ6からALU9への転送に利用できる。
【0073】
関数func2の処理が終了し関数func1の処理に戻るため、サイクル番号74が示す11番目のサイクルでアドレスレジスタ11の値を−1して戻し、サイクル番号74が示す13番目のサイクルで戻り値を元の関数func1で使用するローカル領域にコピーし、サイクル番号74の14番目のサイクルでPC4の値を復元して関数func1の制御に戻る。このようにサブルーチンから復帰する(関数func2から元の関数func1にリターンする)際にもアドレスレジスタ11の値を変化させるため、上位アドレスの遅延待ちが必要となり、サイクル番号74が示す12番目のサイクルではコンパイラが挿入したニーモニックコード72(‘NOP’)が実行される。
【0074】
サイクル番号74が示す15番目のサイクルでは、ローカル変数間の演算が行なわれ、16番目〜19番目のサイクルで関数func1を呼出した図示のない他の関数に復帰(リターン)するための処理が行なわれる。この時も同様にアドレスレジスタ11の値が変更されるため、コンパイラによって挿入された何もしない命令を示すニーモニックコード72(‘NOP’)が実行される。
【0075】
図7のサブルーチン呼出し命令(‘CALL func1’、‘CALL func2’)の動作73では、この1サイクル(クロックの1周期)で、「PC4の内容の退避」、「アドレスレジスタ11の値の繰り上げ」および「PC4の値の更新」の3つの動作が、同時に並行して行なわれる。従来は、「アドレスレジスタ」にあたる物はないので、「PC内容の退避」と「PC値の更新」とは逐次処理されるか、同時並列処理される物もあるかも知れない。本実施の形態では、「アドレスレジスタ11の繰り上げ」も含めて同時に並列処理される特徴を有する。
【0076】
この同時並列処理を図1を参照し説明する。「PC4の内容の退避」は、「PC4→インクリメンタ14→Cバス19→内部RAM7」の経路を用いて行なう。「アドレスレジスタ11の繰り上げ」は、「アドレスレジスタ11→インクリメンタ12→アドレスレジスタ11」の経路を用いて行なう。「PC4の値の更新」は、図示されないが、「命令デコーダ6→PC4」という経路を用いて行なう。これら3種類の経路は独立している(共通したバス接続でない)ために、同時並列処理が可能となる。
【0077】
またマイクロプロセッサ40では割込みを処理する。命令デコーダ6は図示しない割込み入力を受付けて、その割込み入力の信号がアクティブになると、予め準備された割込み処理プログラムへ分岐する。その様子を図8に示す。図8には割込み処理プログラムについて図7と同様に表形式でマイクロプロセッサ40の動作が示される。図8ではソース番号71は省略されている。
【0078】
プログラム50などの処理中に例外要因が生じたことを示す割込み信号が発生すると、ハード的にサイクル番号74が示す101番目〜103番目の3つのサイクルが実行される。101番目のサイクルでは、アドレスレジスタ11の値を退避レジスタ13にコピー(保存)し、同時にアドレスレジスタ11に所定値(固定した値)を代入する。アドレスレジスタ11の値が固定値になることで、割込み発生時は、常に内部RAM7の同じスタック領域を使用することとなる。割込み処理プログラムの中で、アドレスレジスタ11を適宜変更することにより、異なった領域をスタックとして使用することもできる。
【0079】
サイクル番号74が示す103番目のサイクルで、アドレスレジスタ11の新たな値が示すスタック領域の0番地に、戻り番地(PC4の値+4)を保存すると同時に、PC4に固定値を代入する。PC4の値が固定値となることで、割込み発生時は、常に同じ番地(割込み処理プログラムの先頭番地)にジャンプすることとなる。割込み処理プログラムの中で、適宜分岐することにより、様々な処理を行なうことができる。
【0080】
この場合も、101番目のサイクルでアドレスレジスタ11の値の変更が行なわれるので、次の102番目のサイクルで上位アドレスの遅延待ちを行なう。この102番目のサイクルでは、前述のコンパイラが挿入するニーモニックコード72(‘NOP’)を実行するのとは異なり、ハード制御により待ちサイクルが実行される。この待ちサイクルにおいては全ての内部バスおよび制御信号は変化せずに現状状態を維持し、かつ命令デコーダ6に対するパイプ5による命令コードの供給も停止する。
【0081】
サイクル番号74が示す104番目以降のサイクルでは、割込み処理が行なわれて処理の最後には、割込み処理から元の処理に復帰(リターン)するためのニーモニックコード72(“RETI”)が必ず配置される。この命令“RETI”を実行する201番目のサイクルでは、割込み処理用スタック領域の0番地の内容をPC4にコピーしてPC4の値を復元し、同時に退避レジスタ13の内容をアドレスレジスタ11にコピーし、分岐前の元の処理時のアドレスを復元する。これにより割込み入力により中断された元の処理を再開して、中断した時点の内容から実行することができる。
【0082】
サイクル番号74が示す203番目のサイクルから元の処理が再開することになるが、再開して最初に実行される命令コード(ニーモニックコード72)が内部RAM7を参照する命令か否か判別することは困難である。そのために、201番目のサイクルでアドレスレジスタ11の内容が変更されているので、203番目のサイクルの前に必ず202番目のサイクルが実行されるようにして上位アドレスの遅延待ちを行なう。これも102番目のサイクルと同様にハード制御による待ちサイクルである。
【0083】
上述のようにアドレスレジスタ11の内容が更新された後に内部RAM7を参照するような命令が実行されるときは、‘NOP’などによる待ちサイクルが挿入されるから、アドレスレジスタ11の内容が更新されたとしても内部RAM7参照のためのサイクルを確保できて、たとえば図5の3行目の演算命令でもALU9での実行時には上位アドレスからのデコード信号(GA000〜GA7FF)を準備しておくことができる。
【0084】
したがって、このような演算命令実行時には次のような動作となる。つまり、内部RAM7の3つのアドレスデコード部7A〜7Cに対応した独立した3つのポートのうちの1つ目のポートのAバスアドレスの信号に基づいて内部RAM7から情報を読出し、2つ目のポートのためのBバスアドレスの信号に基づいて内部RAM7から情報を読出し、これら読出された情報をALU9に与えて、その演算結果を、3つ目のポートのCバスアドレスの信号に基づいて内部RAM7に格納する動作を1サイクルで行なえる。
【0085】
また、A、BおよびCバスアドレスに与えられる命令デコーダ6からの下位アドレスに基づいて上述したように高速に内部RAM7をアクセスできる。
【0086】
(実施の形態2)
本実施の形態ではソースプログラムを入力して、ソースプログラム中の内部RAM7をアクセス(参照)する命令コードを検出したときは、上述の待ちサイクルを設けるための命令コード(‘NOP’)を挿入して、該ソースプログラムをコンパイルするコンパイラが提供される。
【0087】
図9は実施の形態2に係るコンパイル手順を実行するマイクロコンピュータ80である。マイクロコンピュータ80はCPU(Central Processing Unit)、コンパイラプログラム(以下、単にコンパイラと呼ぶ)などのデータを予め格納するROM(Read Only Memory)82、RAM83、入出力I/F(Inter Face)84、キーボードなどの外部から指示などの情報を入力するための入力部85、情報を外部に出力するための画面などの出力部86、インターネットなどの各種通信回線と接続するための通信I/F87、記録媒体89が着脱自在に挿入されて、挿入された記録媒体に対して情報をアクセスするための記録媒体駆動部88を備える。
【0088】
コンパイラは記録媒体89に予め記録されて記録媒体駆動部88により読出されることで供給されてもよく、ネットワークから通信I/F87を介してロードされることで供給されてよい。
【0089】
入出力I/F84はマイクロプロセッサ40を含む各種装置と入出力する。ROM82に格納されたコンパイラはCPU81の制御のもとに実行されることにより、RAM83などに準備された高級言語のソースプログラムは逐次読出されて、マイクロプロセッサ40のための機械語命令に翻訳されて、翻訳された内容はRAM83の所定領域に格納される。RAM83の所定領域に格納された機械語命令列は読出されて入出力I/F84を介してデータ入力2としてマイクロプロセッサ40に与えられる。なお、RAM83から読出された機械語命令列は通信I/F87およびネットワークを介して読出されてデータ入力2としてマイクロプロセッサ40に与えられても良く、または記録媒体駆動部88を介して記録媒体89に書込んで、記録媒体89の内容がデータ入力2としてマイクロプロセッサ40に与えられても良い。
【0090】
ここでは、マイクロコンピュータ80が動作していることを前提としてマイクロプロセッサ40が動作するとしているが、通常は、コンパイラが例えば記録媒体89にコンパイル結果(命令コード列)を格納し、その結果を、アドレス出力1、データ入力2に接続されているROM等に書き込んだ後に、マイクロプロセッサ40を動作させることになる。
【0091】
図10は実施の形態2に係るコンパイル手順を示すフローチャートであり、ROM82のコンパイラが実行されることにより図10の手順が実行される。図10のフローチャートに従い図5のC言語のプログラム50が図7のニーモニックコード72の列にコンパイルされる手順を説明する。プログラム50において宣言される変数(引数を含む)のスタック領域への図6のような割当てもコンパイラによりなされるが、ここではその説明は省略する。また、手順を追って逐次生成されるニーモニックコード72はCPU81の図示のない内部メモリに逐次格納される。コンパイルすべきソースコードが無くなる(全てのソースコードのコンパイルが終了する)と、内部メモリのニーモニックコード72の列はRAM83の所定領域に格納される。
【0092】
まず、CPU81はRAM83からプログラム50のファイルを図示のない内部メモリに読込む(ステップS1)。次に、読込んだソースファイルにコンパイルすべき関数のコードがあるか判定する(ステップS2)。コンパイルすべきコードがなければ、コンパイル結果である内部メモリに格納されたニーモニックコード72の列(機械語命令列)はRAM83の所定領域に出力されるが(ステップS17)、あればプログラム50の先頭行の内容は内部RAM7を参照する命令コードか否か判定する(ステップS3)。内部RAM7を参照する命令コードであればCPU81は‘NOP’のニーモニックコード72を生成して(ステップS4)、読込んだ内容に基づいて内部RAM7を参照するニーモニックコード72を生成する(ステップS5)。その後、ステップS6に移行する。
【0093】
関数func1のサブルーチンを呼び出す命令は、図示していない他のソースコードファイルに含まれるプログラムに記載されているため、ニーモニックコード「CALL func1」は、このソースコードファイルのコンパイル時には生成されない(図示していない他のソースコードファイルをコンパイルする時に生成される)。
【0094】
プログラム50の1行目の読込み内容は関数func1を定義する内容である(ステップS2でYES)。プログラム50の最初の命令は3行目の命令コードであり、内部RAM7を参照する命令であるから(S3でYES)、CPU81は‘NOP’のニーモニックコード72を生成して(ステップS4)、読込んだ内容に基づいて内部RAM7を参照するニーモニックコード72を生成する(ステップS5)。その後、ステップS6に移行する。
【0095】
4行の命令コードは一般命令であるから(S6でNO、S11でNO)、読込んだ内容に基づいてニーモニックコード72を生成する(ステップS16)。その後、ステップS6に移行する。
【0096】
CPU81はプログラム50の5行目を読込む。読込んだ内容はサブルーチン呼出し命令コードであるから(ステップS6でYES)、対応のニーモニックコード72(‘CALL func2’)を生成する(ステップS7)。関数func2のサブルーチンから戻ってきた最初の命令である、6行目のソースコードは内部RAM7を参照する命令であるから(ステップS8でYES)、‘NOP’のニーモニックコード72を生成して、さらに内部RAM7を参照する命令に対応のニーモニックコード72を生成する(ステップS9、S10)。その後、ステップS6に戻る。
【0097】
次の7行目はサブルーチン終了命令と判定されるので(ステップS6でNO、ステップS11でYES)、元のサブルーチンに戻るために、即ち関数func1を呼出したサブルーチンに戻るために、ニーモニックコード72(‘DEC ADR’)を生成し(ステップS12)、‘NOP’のニーモニックコード72を生成し(ステップS13)、戻り値コピー命令のニーモニックコード72を生成し(ステップS14)、ニーモニックコード72(‘RET’)を生成し(ステップS15)、ステップS2に戻る。
【0098】
これで関数func1のサブルーチンのコンパイルが終了し、さらにソースファイルには関数func2が続いている(ステップS2でYES)。関数func2のサブルーチンの最初の命令は11行目の命令コードで示される。これは、内部RAM7を参照する命令であるから(ステップS3でYES)、CPU81は‘NOP’のニーモニックコード72を生成して(ステップS4)、読込んだ内容に基づいて内部RAM7を参照するための、ニーモニックコード72を生成する(ステップS5)。その後、ステップS6に移行する。
【0099】
この時点でコンパイルすべきコードは残っていないので(ステップS2でYES)、コンパイル結果の機械語命令列はRAM83の所定領域に出力(格納)される(ステップS17)。以上でプログラム50のコンパイルは終了する。
【0100】
(実施の形態の変形例)
実施の形態1と2では、上位アドレスからの遅延量が大きいために、アドレスレジスタ11の値の変更の直後に内部RAM7の参照が実行される場合には、該参照は1サイクルで処理を終了することができない惧れがあるので、コンパイラにより何も動作しないことを指示する機械語命令(‘NOP’)を挿入したが、上位アドレスからの遅延量が比較的小さいので上述のような内部RAM7参照も1サイクルで処理が終了する場合は、該機械語命令(‘NOP’)の挿入は不要である。したがって、コンパイラのオプションとして、機械語命令(‘NOP’)の自動挿入を許可するか否かを可変に設定するようにしてもよい。
【0101】
また、割込み発生および割込み処理からの復帰時には、ハード制御による待ちサイクルが挿入されるが、これも上位アドレスからの遅延量が比較的小さい場合には、ハード設計時のオプションとすることができる。
【0102】
また、本実施の形態1では、下位アドレスを5ビットとし、内部RAM7の各ローカル領域を32ワードとしたが、これに限定されない。たとえば、多量のローカル変数を必要とするプログラムが実行されるようなマイクロプロセッサ40では、下位アドレスを増加させて各ローカル領域を大きく取る等、システムの最適化を行なうこともできる。また逆に必要なローカル変数が少ない場合には、下位アドレスを減少させて内部RAM7の未使用領域を減らして、内部RAM7に関する容量削減およびコストダウンをして、システムの最適化を行なうこともできる。
【0103】
(実施の形態の効果)
マイクロプロセッサ40を使用することにより、通常スタックを使用するローカル変数上の演算を、アドレスを演算するためのサイクルなしに1サイクルで行なえる。また、スタックをアドレスレジスタ11の値の変化によって切換えるため、ローカルに使用するアドレスレジスタ11の値のスタックへの退避等が必要なく、関数(サブルーチン)呼出しのオーバーヘッドが減少する。また、アドレスレジスタ11の出力と、インクリメンタ12の出力をMUX15と16で切換える構造により、関数(サブルーチン)呼出しの前後の領域間での引数渡しが可能となる。また、関数(サブルーチン)呼出しの際、戻り番地を退避し、アドレスレジスタ11の繰上げをし、PC4へ値を代入することを並列実行でき、関数(サブルーチン)呼出しを高速に実行できる。
【0104】
したがってマイクロプロセッサ40では、すべての演算をスタック上で行なうような言語仕様を有する言語のプログラムを、たとえばJava(R)で書かれたプログラムを高速に実行できる。
【0105】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0106】
【発明の効果】
この発明のマイクロプロセッサによれば、内部メモリの下位アドレス情報に基づいて参照される部分領域のアクセスを高速化できる。例えばレジスタファイルを用いて演算する従来手法に比較して大量データを高速アクセスできる。
【0107】
この発明のコンパイル装置によれば、上位アドレス情報を変更するような命令コードと、内部メモリを参照する命令コードとの間には待ち時間サイクルのための命令コードが置かれるから、内部メモリを参照する命令コード実行時には、上位アドレス情報が更新されて更新後の上位アドレス情報に基づいて内部メモリをアクセスするための信号の生成に要する時間は待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【図面の簡単な説明】
【図1】 マイクロプロセッサの構成図である。
【図2】 SRAMの各セルの構成例を示す図である。
【図3】 SRAMのセルの配列例を示す図である。
【図4】 各ワード線の信号を生成するアドレスデコード部の構成図である。
【図5】 C言語で書かれたソースプログラムの一例を示す図である。
【図6】 プログラムを実行する時の内部RAM上のデータの配置例を示す図である。
【図7】 各サイクル毎のマイクロプロセッサの動作を表形式で示す図である。
【図8】 割込み処理プログラムへ分岐時の各サイクル毎のマイクロプロセッサの動作を表形式で示す図である。
【図9】 コンパイル手順を実行するマイクロコンピュータのブロック図である。
【図10】 コンパイル手順を示すフローチャートである。
【符号の説明】
6 命令デコーダ、7 内部RAM、7A,7B,7C アドレスデコード部、9 ALU、11 アドレスレジスタ、40 マイクロプロセッサ、41 上位アドレスデコーダ、42 下位アドレスデコーダ。
Claims (16)
- マイクロプロセッサであって、
アドレス信号に基づいてアクセスされる情報を記憶する内部メモリと、
指令に基づき前記内部メモリの情報を用いた演算を含む各種演算を行なう演算部と、
与えられる命令コードをデコードしデコード結果に基づき前記演算の指令を含む各部を制御するための制御情報を出力する命令解読部と、
与えられるアドレス情報を入力して解読し前記アドレス信号を出力するアドレスデコード部とを備えて、
前記アドレス情報は上位アドレス情報と下位アドレス情報を含み、前記アドレスデコード部による、前記下位アドレス情報を入力してから前記アドレス信号を導出するまでの遅延は、前記上位アドレス情報を入力してから前記アドレス信号を導出するまでの遅延よりも短く、
前記マイクロプロセッサはさらに、前記上位アドレス情報を生成するアドレス生成部を備え、
前記アドレス生成部は、
前記上位アドレス情報を格納するアドレスレジスタと、
前記アドレスレジスタに格納される前記上位アドレス情報を、前記命令解読部の前記制御情報に基づき更新するアドレス更新部とを有し、
前記下位アドレス情報は、前記命令解読部が出力する前記制御情報に含まれることを特徴とする、マイクロプロセッサ。 - 前記アドレスデコード部は、前記アドレス情報のうちの前記上位アドレス情報をデコードして上位デコード信号を出力する上位デコーダと、前記アドレス情報のうちの前記下位アドレス情報をデコードして下位デコード信号を出力する下位デコーダと、前記上位デコード信号と前記下位デコード信号を入力して前記アドレス信号を生成し出力する生成デコーダとを有することを特徴とする、請求項1に記載のマイクロプロセッサ。
- 前記命令解読部に与える前記命令コードを逐次指定する情報を保持するプログラムカウンタをさらに備えて、
前記命令解読部に与えられた前記命令コードが他の処理ルーチンに分岐することを指令する命令コードであるとき、
前記制御情報により、前記プログラムカウンタに保持される情報を前記内部メモリに退避させて、前記プログラムカウンタの値を指定の値に変更して、前記アドレスレジスタの内容を更新することを特徴とする、請求項1または2に記載のマイクロプロセッサ。 - 前記プログラムカウンタに保持される情報の前記内部メモリへの退避と、前記プログラムカウンタの値の指定値への変更と、前記アドレスレジスタの内容更新とは、並列に行なわれることを特徴とする、請求項3に記載のマイクロプロセッサ。
- 処理において前記命令解読部に例外要因の信号が入力されたとき、
前記処理から予め準備された例外要因処理ルーチンに分岐するために、前記制御情報により、前記アドレスレジスタの内容および前記プログララムカウンタの内容は退避されて、かつ前記アドレスレジスタの内容は所定の固定値に変更されることを特徴とする、請求項3または4に記載のマイクロプロセッサ。 - 前記命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、前記制御情報により前記プログラムカウンタの内容を予め退避していた内容に復元することを特徴とする、請求項3から5のいずれか1項に記載のマイクロプロセッサ。
- 前記命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、前記制御情報により前記アドレスレジスタの内容と前記プログラムカウンタの内容とを復元することを特徴とする、請求項3から5のいずれか1項に記載のマイクロプロセッサ。
- 処理中に例外要因の発生に応じて例外処理ルーチンに分岐するとき、前記アドレスレジスタの内容を退避して固定値に更新し、待ち時間のためのサイクルを実行し、前記プログラムカウンタの値を退避させるために前記内部メモリに格納することを特徴とする、請求項3から7のいずれか1項に記載のマイクロプロセッサ。
- 前記例外処理ルーチンから分岐前の元の処理に復帰するとき、前記アドレスレジスタを退避していた内容に復元して、待ち時間のためのサイクルを実行することを特徴とする、請求項8に記載のマイクロプロセッサ。
- 前記内部メモリは独立した3つのポートを有し、
前記3つのポートのうちの1つ目のポートのための前記アドレス信号に基づいて前記内部メモリから情報を読出し、前記3つのポートのうちの2つ目のポートのための前記アドレス信号に基づいて前記内部メモリから情報を読出し、これら読出された情報を前記演算部に与えて、その演算結果を、前記3つのポートのうちの3つ目のポートのための前記アドレス信号に基づいて前記内部メモリに格納する動作を1サイクルで行なうことを特徴とする、請求項1から9のいずれか1項に記載のマイクロプロセッサ。 - 前記命令コードは、前記3つのポートのための前記アドレス情報それぞれの前記下位アドレス情報を含むことを特徴とする、請求項10に記載のマイクロプロセッサ。
- 前記命令コードは定数情報を含み、
前記命令解読部は、前記定数情報を、前記内部メモリから読出された情報を前記演算部に与えるためのバスに送出することを特徴とする、請求項10または11に記載のマイクロプロセッサ。 - ソースプログラムを構成するソースコードを順次入力して、請求項1から12のいずれか1項に記載のマイクロプロセッサのための前記命令コードに変換して命令コード列を出力するコンパイル装置であって、
前記ソースプログラムを構成する前記ソースコードを予め格納したプログラムメモリと、
処理部とを備え、
前記処理部は、
前記プログラムメモリから前記ソースコードを順次に読出すコード読出手段と、
前記コード読出手段により前記ソースコードが読出される毎に、読出された前記ソースコードを前記命令コードに変換し、変換された命令コードからなる前記命令コード列を生成するコード変換手段とを含み、
前記コード変換手段は、
前記読出された前記ソースコードが、前記内部メモリを参照するソースコードを指示すると検出したとき、直前に前記上位アドレス情報の変更を指示する命令コードへの変換がなされている場合には、前記命令コード列において該ソースコードの前記命令コードの前に待ち時間サイクルのための命令コードを置くことを特徴とする、コンパイル装置。 - 前記コード変換手段は、
前記読出された前記ソースコードが、前記ソースプログラムにおいてサブルーチン呼出しを指示すると検出したとき、該ソースコードを、前記プログラムカウンタが保持する情報を前記内部メモリに退避させて、前記プログラムカウンタの値を指定の値に変更して、前記アドレスレジスタの内容を更新することを指令する前記命令コードに変換することを特徴とする、請求項13に記載のコンパイル装置。 - 前記コード変換手段は、
前記読出された前記ソースコードが、前記ソースプログラムにおいてサブルーチン呼出しを指示する前記ソースコードの次位の前記ソースコードであって、かつ前記内部メモリを参照することを指示すると検出した場合には、前記命令コード列において該サブルーチンからの復帰を指示する命令コード群に前記待ち時間サイクルのための命令コードを置くことを特徴とする、請求項13または14に記載のコンパイル装置。 - 前記コード変換手段は、
前記読出された前記ソースコードが、前記ソースプログラムにおいてサブルーチンの最初の前記ソースコードであって、かつ前記内部メモリの参照を指示すると検出したとき、前記命令コード列において該ソースコードの前記命令コードの前に前記待ち時間サイクルのための命令コードを置くことを特徴とする、請求項13から15のいずれか1項に記載のコンパイル装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003200893A JP3853309B2 (ja) | 2003-07-24 | 2003-07-24 | マイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003200893A JP3853309B2 (ja) | 2003-07-24 | 2003-07-24 | マイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005044017A JP2005044017A (ja) | 2005-02-17 |
JP3853309B2 true JP3853309B2 (ja) | 2006-12-06 |
Family
ID=34261127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003200893A Expired - Fee Related JP3853309B2 (ja) | 2003-07-24 | 2003-07-24 | マイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3853309B2 (ja) |
-
2003
- 2003-07-24 JP JP2003200893A patent/JP3853309B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2005044017A (ja) | 2005-02-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6159825B2 (ja) | ハードウェアポインタを使用したsimdコア内での分岐ブランチに対するソリューション | |
JP3120152B2 (ja) | コンピューターシステム | |
US6061783A (en) | Method and apparatus for manipulation of bit fields directly in a memory source | |
US20050027970A1 (en) | Reconfigurable instruction set computing | |
US20100095286A1 (en) | Register reduction and liveness analysis techniques for program code | |
US5617553A (en) | Computer system which switches bus protocols and controls the writing of a dirty page bit of an address translation buffer | |
WO2006112045A1 (ja) | 演算処理装置 | |
JPH0228173B2 (ja) | ||
JPH0782441B2 (ja) | シミユレーシヨン方法 | |
JP4202244B2 (ja) | Vliw型dsp,及びその動作方法 | |
US20230084523A1 (en) | Data Processing Method and Device, and Storage Medium | |
JP2004086837A (ja) | データ処理装置 | |
US5367648A (en) | General purpose memory access scheme using register-indirect mode | |
Dolle et al. | A 32-b RISC/DSP microprocessor with reduced complexity | |
US8683178B2 (en) | Sharing a fault-status register when processing vector instructions | |
JP4800582B2 (ja) | 演算処理装置 | |
JP3853309B2 (ja) | マイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイル装置 | |
JP2000353092A (ja) | 情報処理装置及びそのレジスタファイル切替方法 | |
WO2006006613A1 (en) | Methods and apparatus for updating of a branch history table | |
US20050251795A1 (en) | Method, system, and program for optimizing code | |
JP2000029696A (ja) | プロセッサおよびパイプライン処理制御方法 | |
JP3147884B2 (ja) | 記憶装置及び情報処理装置 | |
Cocke et al. | The evolution of risc technology at ibm | |
US6289439B1 (en) | Method, device and microprocessor for performing an XOR clear without executing an XOR instruction | |
JPH04365133A (ja) | プレロード命令実行装置及びプログラム修正装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050810 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060606 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060801 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060829 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060905 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090915 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100915 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110915 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120915 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130915 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |