JP2005044017A - Microprocessor and compiler for program to be executed by microprocessor - Google Patents
Microprocessor and compiler for program to be executed by microprocessor Download PDFInfo
- Publication number
- JP2005044017A JP2005044017A JP2003200893A JP2003200893A JP2005044017A JP 2005044017 A JP2005044017 A JP 2005044017A JP 2003200893 A JP2003200893 A JP 2003200893A JP 2003200893 A JP2003200893 A JP 2003200893A JP 2005044017 A JP2005044017 A JP 2005044017A
- Authority
- JP
- Japan
- Prior art keywords
- address
- information
- instruction
- instruction code
- microprocessor
- 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.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
Description
【0001】
【発明の属する技術分野】
主に高級言語で書かれたプログラムを実行するマイクロプロセッサおよびコンパイラであって、特にスタックを用いて処理を行なうマイクロプロセッサと該マイクロプロセッサで実行されるプログラムのためのコンパイラに関する。
【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 下位アドレスデコーダ。[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a microprocessor and a compiler that mainly execute programs written in a high-level language, and more particularly to a microprocessor that performs processing using a stack and a compiler for a program that is executed by the microprocessor.
[0002]
[Prior art]
When designing a program in a high-level language, arguments and return values for subroutines are exchanged on the stack, and for local variables in the C language, an area is secured on the stack and an operation is performed. For this reason, the operation with local variables is complicated by the occurrence of RAM (Random Access Memory) address operation and its read, storage address operation and its write. Further, when the access speed of the external RAM is low, the speed affects the overall processing speed. In order to increase the speed of subroutine execution processing, a method has been provided in which stack operations relating to subroutine call / return are parallelized and thus speeded up (see, for example, Patent Document 1).
[0003]
[Patent Document 1]
JP 11-242595 A
[0004]
[Problems to be solved by the invention]
The method proposed in the above document is configured to increase the speed, but since the stack actually used is connected as an external memory, it is considered that access to the external memory is generally slow. If the processing contents frequently access the external memory, it is difficult to speed up the execution process. This document does not mention access to data on the stack and computation.
[0005]
Therefore, an object of the present invention is to provide a microprocessor capable of accessing data at high speed and a compiler for a program executed by the microprocessor.
[0006]
[Means for Solving the Problems]
A microprocessor according to an aspect of the present invention includes an internal memory that stores information accessed based on an address signal, an arithmetic unit that performs various operations including information using information in the internal memory based on an instruction, and an instruction to be given An instruction decoding unit that decodes a code and outputs control information for controlling each unit including an operation command based on the decoding result, and an address decoding unit that inputs and decodes given address information and outputs an address signal .
[0007]
The address information includes upper address information and lower address information. The delay from the input of the lower address information to the derivation of the address signal by the address decoding unit is from the input of the upper address information to the derivation of the address signal. Shorter than the delay.
[0008]
Therefore, the access to the partial area referred to based on the lower address information of the internal memory is performed faster than the access to the partial area referred to based on the upper address information. Access is possible. Further, it is possible to speed up the access of the partial area referred to based on the lower address information of the internal memory. For example, a large amount of data can be accessed at a high speed as compared with the conventional method of calculating using a register file.
[0009]
Preferably, the address decoding unit decodes the upper address information of the address information and outputs a higher decode signal, and the lower decoder which decodes the lower address information of the address information and outputs a lower decode signal And a generation decoder that inputs an upper decoding signal and a lower decoding signal to generate and output an address signal.
[0010]
Therefore, by providing a separate upper decoder and lower decoder in the address decoding unit, and further providing a generation decoder, the delay from the input of the lower address information to the derivation of the address signal is input to the upper address information. It is shorter than the delay until the address signal is derived.
[0011]
Preferably, the bit length of the lower address is shorter than the bit length of the upper address. Therefore, the low-order decoder can be configured easily, and the number of processing stages for decoding can be reduced.
[0012]
The above-mentioned microprocessor preferably further includes an address generation unit that generates upper address information, and the address generation unit converts the address register that stores the upper address information and the upper address information stored in the address register into the instruction decoding unit. The address update unit for updating based on the control information is included, and the lower address information is included in the control information output by the instruction decoding unit.
[0013]
Therefore, by updating the upper address information of the address register, an area accessed based on the lower address information of the internal memory, that is, a stack area that can be accessed at high speed can be variably set in the internal memory.
[0014]
Preferably, the above update is an increment or decrement of the address indicated by the upper address information.
[0015]
Preferably, access to the internal memory is performed in one cycle based on the lower address information output from the instruction decoding unit.
[0016]
The above-mentioned microprocessor further includes a program counter for holding information for sequentially designating instruction codes to be given to the instruction decoding unit, and instructs the instruction code given to the instruction decoding unit to branch to another processing routine When it is a code, the information held in the program counter is saved in the internal memory by the control information, the value of the program counter is changed to a specified value, and the contents of the address register are updated.
[0017]
Therefore, when branching to another processing routine, by executing one instruction code, the information held in the program counter is saved in the internal memory, the value of the program counter is changed to the specified value, and the address register It is possible to execute a series of processes for updating the contents of.
[0018]
Preferably, saving of the information held in the program counter to the internal memory, changing the value of the program counter to a specified value, and updating the contents of the address register are performed in parallel. Therefore, it is possible to quickly process a branch to another processing routine.
[0019]
Preferably, when an exception factor signal is input to the instruction decoding unit in the process, the contents of the address register and the program counter are controlled according to the control information in order to branch from this process to an exception factor processing routine prepared in advance. Is saved and the contents of the address register are changed to a predetermined fixed value.
[0020]
Accordingly, the contents of the address register and the contents of the program counter can be saved by one instruction code, and the contents of the address register can be changed to a predetermined fixed value, so that it is possible to quickly branch to the exception factor processing routine.
[0021]
Preferably, when an instruction code for returning from the branch destination processing routine to the original processing is given to the instruction decoding unit, the contents of the program counter are restored to the contents previously saved by the control information.
[0022]
Preferably, when the instruction decoding unit is given an instruction code for returning from the branch destination processing routine to the original processing, the contents of the address register and the contents of the program counter are restored by the control information.
[0023]
Therefore, the contents of the address register and the contents of the program counter can be restored by one instruction code, so that it is possible to quickly return to the original process from the branch destination processing routine.
[0024]
Preferably, the internal memory has three independent ports, reads information from the internal memory based on an address signal for the first port of the three ports, and the second of the three ports. The information is read from the internal memory based on the address signal for the other port, the read information is given to the operation unit, and the operation result is obtained as the address signal for the third port of the three ports. Based on the above, the operation of storing in the internal memory is performed in one cycle.
[0025]
Therefore, it is possible to execute arithmetic processing while referring to the internal memory at high speed.
Preferably, the instruction code includes lower address information for each of the address information for the three ports.
[0026]
Preferably, the instruction code includes constant information, and the instruction decoding unit sends the constant information to a bus for supplying information read from the internal memory to the arithmetic unit. Therefore, the bus can be shared for supplying the information referring to the internal memory and the constant information to the arithmetic unit, and the apparatus configuration can be simplified. Also, constant information can be given directly from the instruction decoding unit to the arithmetic unit, so that arithmetic using the constant information can be executed quickly.
[0027]
Preferably, when branching to an exception handling routine according to the occurrence of an exception factor during processing, the contents of the address register are saved and updated to a fixed value, a cycle for waiting time is executed, and the value of the program counter is saved To store in internal memory.
[0028]
Thus, when an exception factor occurs during processing, the contents of the address register are saved and updated to a fixed value. Even if an instruction that references internal memory is executed at the beginning of the exception processing routine at the branch destination, the cycle for the waiting time is executed at the time of branching, so the address register is changed and the contents after the change are changed. Based on this, the time required for the address decoding unit to generate the address signal is offset by the waiting time, and the appropriate area can be referred to using the updated address information in the subsequent internal memory reference.
[0029]
Preferably, when returning from the exception handling routine to the original process before branching, the address register is restored to the saved contents and a cycle for waiting time is executed.
[0030]
Thus, when returning to the original processing, the contents of the address register are changed. Even if the first instruction of the original process that was restored instructs to refer to the internal memory, the cycle for waiting time is executed at the time of return, so the address register is changed and the contents after the change are changed. Based on this, the time required for the address decoding unit to generate the address signal is offset by the waiting time, and the appropriate area can be referred to using the updated address information in the subsequent internal memory reference.
[0031]
A compiler according to another aspect of the present invention is a compiler that sequentially inputs source codes constituting a source program, converts them into instruction codes for the above-described microprocessor, and outputs an instruction code string. When the source code to be referred is converted, if conversion to an instruction code for instructing the change of upper address information is performed immediately before, the waiting cycle is performed before the instruction code of the source code in the instruction code string. Compile to put the instruction code.
[0032]
Since the instruction code for the waiting cycle is placed between the instruction code that changes the upper address information and the instruction code that refers to the internal memory, when executing the instruction code that refers to the internal memory, The time required to generate the address signal based on the updated contents after the upper address information is updated is offset by the waiting time, and the updated address information is used for subsequent internal memory references. You can refer to the area.
[0033]
Preferably, when a source code instructing a subroutine call is detected in the source program, the information stored in the program counter is saved in the internal memory, and the value of the program counter is changed to a specified value. Converts to an instruction code that instructs to update the register contents.
[0034]
Therefore, when a subroutine call is instructed, the information held by the program counter is saved in the internal memory by one instruction code, the value of the program counter is changed to the specified value, and the address is changed. You can command to update the register contents.
[0035]
Preferably, when a source code instructing the end of a subroutine is detected in the source program, the source code is converted into an instruction code for restoring the contents of the program counter to the contents saved in advance.
[0036]
Preferably, when the source code next to the source code instructing the subroutine call in the source program instructs to refer to the internal memory, the waiting time is set in the instruction code group instructing the return from the subroutine. Compile to put the instruction code for the cycle.
[0037]
Since the high-order address information is changed in order to return from the subroutine, the instruction memory for the waiting cycle is placed in the instruction code group instructing the return from the subroutine. In the case of referring, the upper address information is updated, and the time required to generate a signal for accessing the internal memory based on the updated contents is offset by the waiting time. Can refer to an appropriate area using the updated address information.
[0038]
Preferably, when it is detected in the source program that the first source code of the subroutine indicates an internal memory reference, an instruction code for a waiting cycle is placed in the instruction code string before the instruction code of the source code. Compile to
[0039]
Therefore, when the upper address information is updated in the immediately preceding subroutine and the internal memory is referred to at the beginning of the next subroutine, the upper address information is updated and the internal memory is accessed based on the updated upper address information. The time required to generate a signal for this purpose is offset by the waiting time, and in the internal memory reference, an appropriate area can be referred to using the updated address information.
[0040]
DETAILED DESCRIPTION OF THE INVENTION
Embodiments of the present invention will be described below with reference to the drawings.
[0041]
(Embodiment 1)
In the present embodiment, the partial area of the internal RAM is made to function as a stack, and the circuit scale for accessing the stack area of the address decoder related to the internal RAM is reduced, so that the address data is decoded and a decode signal is generated (derived). A processor is provided that shortens the time (delay) required until the time.
[0042]
FIG. 1 shows a configuration of a
[0043]
A program executed in the
[0044]
The
[0045]
The
[0046]
The
[0047]
One of the output of the
[0048]
One of the output of the
[0049]
Here, assuming that the value held in the address register 11 (the value of the upper address data) is not changed, the accessible area of the
[0050]
If the value of the
[0051]
Now, it is assumed that the
[0052]
Of the word lines WA, WB and WB, only the selected word line goes high, and the transistor connected to the selected word line is turned on. When word line WA is selected, data line pair DA and DAb are connected to
[0053]
The
[0054]
A sense amplifier AMP is arranged at each port of the SRAM (internal RAM 7), and the data held in each
[0055]
Similarly, when data is written, the value of the data line selected by the word line and driven from the sense amplifier AMP is written to each
[0056]
FIG. 4 shows a configuration of an address decoding unit that generates a signal of each word line. The
[0057]
The lower 5 bits A0 to A4 driven from the
[0058]
Further, the decoded signals are input to the
[0059]
Here, the address decoder is separated into a high-
[0060]
Assuming that the
[0061]
Using this
[0062]
The
[0063]
An example of the arrangement of data on the
[0064]
When the function func1 is called from another function not shown and the
[0065]
First, since it is necessary to copy the argument to the stack, in the first and second cycles indicated by the cycle number 74, the contents of the local variable area which is the area of the
[0066]
In the third cycle indicated by the cycle number 74, the next function uses the return address (PC + 4) when the processing of the function func1 is completed by executing the
[0067]
The compiler assigns the areas of local variables c, d, and e of the function func1 to
[0068]
Here, the purpose of inserting the instruction code ('NOP') will be described. In the
[0069]
Calculations between local variables are performed in the fifth and sixth cycles indicated by cycle number 74. Since all the variables (operands) for these operations are assigned to the same upper address area, they all end in one cycle.
[0070]
Since the function func2 is to be executed next, the argument c is copied to the local area (address “40h + 1” in FIG. 6) used in the function func2 in the seventh cycle indicated by the cycle number 74. In the eighth cycle shown in FIG. 6, the return address of PC4 is saved (copied to the address “40h + 0” in FIG. 6), the
[0071]
In the ninth cycle of cycle number 74, the upper address is delayed by the mnemonic code 72 ('NOP') inserted by the compiler as in the fourth cycle.
[0072]
In the tenth cycle of cycle number 74, an operation instruction (f = c + 1;) with local variables and constants is executed. Information on the constant (= 1) for this calculation is included in the corresponding
[0073]
Since the process of the function func2 is completed and the process returns to the process of the function func1, the value of the
[0074]
In the fifteenth cycle indicated by cycle number 74, an operation between local variables is performed, and a process for returning (returning) to another function (not shown) that called function func1 in the sixteenth to nineteenth cycles is performed. It is. At this time as well, since the value of the
[0075]
In the operation 73 of the subroutine call instruction ('CALL func1', 'CALL func2') in FIG. 7, in this one cycle (one cycle of the clock), "saving the contents of PC4" and "carrying up the value of the
[0076]
This simultaneous parallel processing will be described with reference to FIG. “Saving the contents of PC4” is performed using the path “PC4 →
[0077]
The
[0078]
When an interrupt signal indicating that an exception factor has occurred during processing of the
[0079]
In the 103rd cycle indicated by cycle number 74, the return address (PC4 value + 4) is stored at
[0080]
Also in this case, since the value of the
[0081]
In the 104th and subsequent cycles indicated by the cycle number 74, an interrupt process is performed, and at the end of the process, a mnemonic code 72 ("RETI") for returning from the interrupt process to the original process is always arranged. The In the 201st cycle in which this instruction “RETI” is executed, the contents of
[0082]
The original process is restarted from the 203rd cycle indicated by the cycle number 74, but it is determined whether or not the instruction code (mnemonic code 72) executed first after restarting is an instruction referring to the
[0083]
When an instruction that refers to the
[0084]
Accordingly, the following operation is performed when such an arithmetic instruction is executed. That is, information is read from the
[0085]
Further, as described above, the
[0086]
(Embodiment 2)
In this embodiment, when a source program is input and an instruction code for accessing (referring to) the
[0087]
FIG. 9 shows a microcomputer 80 that executes a compiling procedure according to the second embodiment. The microcomputer 80 includes a CPU (Central Processing Unit), a ROM (Read Only Memory) 82 that stores data such as a compiler program (hereinafter simply referred to as a compiler), a
[0088]
The compiler may be supplied by being recorded in advance on the
[0089]
The input / output I /
[0090]
Here, it is assumed that the
[0091]
FIG. 10 is a flowchart showing a compile procedure according to the second embodiment, and the procedure shown in FIG. 10 is executed by executing the compiler in the
[0092]
First, the
[0093]
Since the instruction for calling the subroutine of the function func1 is described in a program included in another source code file (not shown), the mnemonic code “CALL func1” is not generated when the source code file is compiled (not shown). Not generated when compiling other source code files).
[0094]
The content read in the first line of the
[0095]
Since the instruction codes in the four lines are general instructions (NO in S6, NO in S11), the
[0096]
The
[0097]
Since the next 7th line is determined to be a subroutine end instruction (NO in step S6, YES in step S11), in order to return to the original subroutine, that is, to return to the subroutine that called the function func1, mnemonic code 72 ( 'DEC ADR') is generated (step S12), the
[0098]
This completes the compilation of the subroutine of the function func1, and the function func2 continues in the source file (YES in step S2). The first instruction of the subroutine of the function func2 is indicated by the instruction code on the 11th line. Since this is an instruction for referring to the internal RAM 7 (YES in step S3), the
[0099]
Since no code to be compiled remains at this time (YES in step S2), the machine language instruction sequence as a compilation result is output (stored) in a predetermined area of the RAM 83 (step S17). Thus, the compilation of the
[0100]
(Modification of the embodiment)
In the first and second embodiments, since the delay amount from the upper address is large, when the reference of the
[0101]
In addition, a wait cycle by hardware control is inserted at the time of interrupt generation and return from interrupt processing. This can also be an option at the time of hardware design if the delay amount from the higher address is relatively small.
[0102]
In the first embodiment, the lower address is 5 bits and each local area of the
[0103]
(Effect of embodiment)
By using the
[0104]
Therefore, the
[0105]
The embodiment disclosed this time should be considered as illustrative in all points and not restrictive. The scope of the present invention is defined by the terms of the claims, rather than the description above, and is intended to include any modifications within the scope and meaning equivalent to the terms of the claims.
[0106]
【The invention's effect】
According to the microprocessor of the present invention, it is possible to speed up the access to the partial area referred to based on the lower address information of the internal memory. For example, a large amount of data can be accessed at a high speed as compared with the conventional method of calculating using a register file.
[0107]
According to the compiler of the present invention, since the instruction code for the waiting cycle is placed between the instruction code for changing the upper address information and the instruction code for referring to the internal memory, the internal memory is referred to. When executing the instruction code, the upper address information is updated and the time required to generate a signal for accessing the internal memory based on the updated upper address information is offset by the waiting time. In reference, an appropriate area can be referred to using the updated address information.
[Brief description of the drawings]
FIG. 1 is a configuration diagram of a microprocessor.
FIG. 2 is a diagram illustrating a configuration example of each cell of an SRAM.
FIG. 3 is a diagram illustrating an example of an array of SRAM cells.
FIG. 4 is a configuration diagram of an address decoding unit that generates a signal of each word line.
FIG. 5 is a diagram showing an example of a source program written in C language.
FIG. 6 is a diagram illustrating an example of data arrangement on an internal RAM when a program is executed.
FIG. 7 is a diagram showing the operation of the microprocessor for each cycle in a table format.
FIG. 8 is a diagram showing, in a tabular form, the operation of the microprocessor for each cycle when branching to an interrupt processing program.
FIG. 9 is a block diagram of a microcomputer that executes a compiling procedure;
FIG. 10 is a flowchart showing a compilation procedure.
[Explanation of symbols]
6 instruction decoder, 7 internal RAM, 7A, 7B, 7C address decoding unit, 9 ALU, 11 address register, 40 microprocessor, 41 upper address decoder, 42 lower address decoder.
Claims (17)
指令に基づき前記内部メモリの情報を用いた演算を含む各種演算を行なう演算部と、
与えられる命令コードをデコードしデコード結果に基づき前記演算の指令を含む各部を制御するための制御情報を出力する命令解読部と、
与えられるアドレス情報を入力して解読し前記アドレス信号を出力するアドレスデコード部とを備えて、
前記アドレス情報は上位アドレス情報と下位アドレス情報を含み、前記アドレスデコード部による、前記下位アドレス情報を入力してから前記アドレス信号を導出するまでの遅延は、前記上位アドレス情報を入力してから前記アドレス信号を導出するまでの遅延よりも短いことを特徴とする、マイクロプロセッサ。An internal memory for storing information accessed based on an address signal;
A calculation unit for performing various calculations including a calculation using information in the internal memory based on a command;
An instruction decoding unit that decodes a given instruction code and outputs control information for controlling each unit including the operation instruction based on the decoding result;
An address decoding unit that inputs and decodes given address information and outputs the address signal;
The address information includes upper address information and lower address information, and a delay from the input of the lower address information to the derivation of the address signal by the address decoding unit after the input of the upper address information A microprocessor characterized by being shorter than a delay until an address signal is derived.
前記上位アドレス情報を格納するアドレスレジスタと、
前記アドレスレジスタに格納される前記上位アドレス情報を、前記命令解読部の前記制御情報に基づき更新するアドレス更新部とを有し、
前記下位アドレス情報は、前記命令解読部が出力する前記制御情報に含まれることを特徴とする、請求項1または2に記載のマイクロプロセッサ。The address generation unit further includes an address generation unit that generates the upper address information.
An address register for storing the upper address information;
An address update unit that updates the upper address information stored in the address register based on the control information of the instruction decoding unit;
The microprocessor according to claim 1, wherein the lower address information is included in the control information output from the instruction decoding unit.
前記命令解読部に与えられた前記命令コードが他の処理ルーチンに分岐することを指令する命令コードであるとき、
前記制御情報により、前記プログラムカウンタに保持される情報を前記内部メモリに退避させて、前記プログラムカウンタの値を指定の値に変更して、前記アドレスレジスタの内容を更新することを特徴とする、請求項1から3のいずれか1項に記載のマイクロプロセッサ。A program counter for holding information for sequentially designating the instruction code to be given to the instruction decoding unit;
When the instruction code given to the instruction decoding unit is an instruction code instructing to branch to another processing routine,
According to the control information, the information held in the program counter is saved in the internal memory, the value of the program counter is changed to a specified value, and the contents of the address register are updated. The microprocessor according to any one of claims 1 to 3.
前記処理から予め準備された例外要因処理ルーチンに分岐するために、前記制御情報により、前記アドレスレジスタの内容および前記プログララムカウンタの内容は退避されて、かつ前記アドレスレジスタの内容は所定の固定値に変更されることを特徴とする、請求項4または5に記載のマイクロプロセッサ。When an exception factor signal is input to the instruction decoding unit during processing,
In order to branch from the processing to the exception factor processing routine prepared in advance, the contents of the address register and the contents of the program counter are saved by the control information, and the contents of the address register are set to a predetermined fixed value. The microprocessor according to claim 4, wherein the microprocessor is changed to:
前記3つのポートのうちの1つ目のポートのための前記アドレス信号に基づいて前記内部メモリから情報を読出し、前記3つのポートのうちの2つ目のポートのための前記アドレス信号に基づいて前記内部メモリから情報を読出し、これら読出された情報を前記演算部に与えて、その演算結果を、前記3つのポートのうちの3つ目のポートのための前記アドレス信号に基づいて前記内部メモリに格納する動作を1サイクルで行なうことを特徴とする、請求項1から8のいずれか1項に記載のマイクロプロセッサ。The internal memory has three independent ports;
Read information from the internal memory based on the address signal for a first port of the three ports, and based on the address signal for a second port of the three ports Information is read from the internal memory, the read information is given to the calculation unit, and the calculation result is obtained based on the address signal for the third port of the three ports. The microprocessor according to any one of claims 1 to 8, wherein the operation of storing data in (1) is performed in one cycle.
前記命令解読部は、前記定数情報を、前記内部メモリから読出された情報を前記演算部に与えるためのバスに送出することを特徴とする、請求項9または10に記載のマイクロプロセッサ。The instruction code includes constant information;
11. The microprocessor according to claim 9, wherein the instruction decoding unit sends the constant information to a bus for supplying information read from the internal memory to the arithmetic unit.
前記内部メモリを参照する前記ソースコードを変換するとき、直前に前記上位アドレス情報の変更を指示する命令コードへの変換がなされている場合には、前記命令コード列において該ソースコードの前記命令コードの前に待ち時間サイクルのための命令コードを置くようにコンパイルすることを特徴とする、コンパイラ。A compiler that sequentially inputs source code constituting a source program, converts the source code into the instruction code for the microprocessor according to any one of claims 1 to 13, and outputs an instruction code string.
When the source code that refers to the internal memory is converted, if the instruction code that changes the upper address information has been converted immediately before, the instruction code of the source code in the instruction code string A compiler characterized by compiling to put an instruction code for a waiting cycle in front of each other.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003200893A JP3853309B2 (en) | 2003-07-24 | 2003-07-24 | Microprocessor and compiling device for a program executed by the microprocessor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003200893A JP3853309B2 (en) | 2003-07-24 | 2003-07-24 | Microprocessor and compiling device for a program executed by the microprocessor |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005044017A true JP2005044017A (en) | 2005-02-17 |
JP3853309B2 JP3853309B2 (en) | 2006-12-06 |
Family
ID=34261127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003200893A Expired - Fee Related JP3853309B2 (en) | 2003-07-24 | 2003-07-24 | Microprocessor and compiling device for a program executed by the microprocessor |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3853309B2 (en) |
-
2003
- 2003-07-24 JP JP2003200893A patent/JP3853309B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP3853309B2 (en) | 2006-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3120152B2 (en) | Computer system | |
US7284114B2 (en) | Video processing system with reconfigurable instructions | |
WO2006112045A1 (en) | Processor | |
US5617553A (en) | Computer system which switches bus protocols and controls the writing of a dirty page bit of an address translation buffer | |
US20100095286A1 (en) | Register reduction and liveness analysis techniques for program code | |
JP4202244B2 (en) | VLIW DSP and method of operating the same | |
US20230084523A1 (en) | Data Processing Method and Device, and Storage Medium | |
US5367648A (en) | General purpose memory access scheme using register-indirect mode | |
Dolle et al. | A 32-b RISC/DSP microprocessor with reduced complexity | |
JP3790626B2 (en) | Method and apparatus for fetching and issuing dual word or multiple instructions | |
JP7048612B2 (en) | Vector generation instruction | |
JP4800582B2 (en) | Arithmetic processing unit | |
JP3853309B2 (en) | Microprocessor and compiling device for a program executed by the microprocessor | |
JP2000353092A (en) | Information processor and register file switching method for the processor | |
EP1039376A1 (en) | Efficient sub-instruction emulation in a vliw processor | |
WO2006006613A1 (en) | Methods and apparatus for updating of a branch history table | |
JP2000029696A (en) | Processor, and pipeline process control method | |
KR20010072490A (en) | Data processor comprising a register stack | |
JP3341847B2 (en) | Data processing device | |
JPH07191845A (en) | Immediate data transfer device | |
JP3147884B2 (en) | Storage device and information processing device | |
JPH05173778A (en) | Data processor | |
JP3743155B2 (en) | Pipeline controlled computer | |
JPH1166046A (en) | Vector processor | |
KR20090101939A (en) | Inversion of alternate instruction and/or data bit in a computer |
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 |