(57)【要約】【課題】データを高速にアクセスできるマイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイラを提供する。【解決手段】マイクロプロセッサ４０は順次読み込んだ命令コードを解読し制御信号を発生させる命令デコーダ６と、アドレス情報を記憶させ発生させるアドレスレジスタ１１と、各種演算を行なうＡＬＵ９と、情報の一時記憶のための内部ＲＡＭ７とを備える。内部ＲＡＭ７のアドレスデコード部７Ａ、７Ｂおよび７Ｃは、上位アドレスのデコーダと、下位アドレスのデコーダと、上位アドレスデコード信号と下位アドレスデコード信号とにより全体のアドレスデコード信号を作成する構成となっており、下位アドレスデコーダの下位アドレスデコード信号を導出するまでの遅延は、上位アドレスデコーダの上位アドレスデコード信号を導出するまでの遅延よりも短くなっている。【選択図】        図１
2005044017.tif 000002
【特許請求の範囲】
【請求項１】
アドレス信号に基づいてアクセスされる情報を記憶する内部メモリと、
指令に基づき前記内部メモリの情報を用いた演算を含む各種演算を行なう演算部と、
与えられる命令コードをデコードしデコード結果に基づき前記演算の指令を含む各部を制御するための制御情報を出力する命令解読部と、
与えられるアドレス情報を入力して解読し前記アドレス信号を出力するアドレスデコード部とを備えて、
前記アドレス情報は上位アドレス情報と下位アドレス情報を含み、前記アドレスデコード部による、前記下位アドレス情報を入力してから前記アドレス信号を導出するまでの遅延は、前記上位アドレス情報を入力してから前記アドレス信号を導出するまでの遅延よりも短いことを特徴とする、マイクロプロセッサ。
【請求項２】
前記アドレスデコード部は、前記アドレス情報のうちの前記上位アドレス情報をデコードして上位デコード信号を出力する上位デコーダと、前記アドレス情報のうちの前記下位アドレス情報をデコードして下位デコード信号を出力する下位デコーダと、前記上位デコード信号と前記下位デコード信号を入力して前記アドレス信号を生成し出力する生成デコーダとを有することを特徴とする、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記上位アドレス情報を生成するアドレス生成部をさらに備えて、前記アドレス生成部は、
前記上位アドレス情報を格納するアドレスレジスタと、
前記アドレスレジスタに格納される前記上位アドレス情報を、前記命令解読部の前記制御情報に基づき更新するアドレス更新部とを有し、
前記下位アドレス情報は、前記命令解読部が出力する前記制御情報に含まれることを特徴とする、請求項１または２に記載のマイクロプロセッサ。
【請求項４】
前記命令解読部に与える前記命令コードを逐次指定する情報を保持するプログラムカウンタをさらに備えて、
前記命令解読部に与えられた前記命令コードが他の処理ルーチンに分岐することを指令する命令コードであるとき、
前記制御情報により、前記プログラムカウンタに保持される情報を前記内部メモリに退避させて、前記プログラムカウンタの値を指定の値に変更して、前記アドレスレジスタの内容を更新することを特徴とする、請求項１から３のいずれか１項に記載のマイクロプロセッサ。
【請求項５】
前記プログラムカウンタに保持される情報の前記内部メモリへの退避と、前記プログラムカウンタの値の指定値への変更と、前記アドレスレジスタの内容更新とは、並列に行なわれることを特徴とする、請求項４に記載のマイクロプロセッサ。
【請求項６】
処理において前記命令解読部に例外要因の信号が入力されたとき、
前記処理から予め準備された例外要因処理ルーチンに分岐するために、前記制御情報により、前記アドレスレジスタの内容および前記プログララムカウンタの内容は退避されて、かつ前記アドレスレジスタの内容は所定の固定値に変更されることを特徴とする、請求項４または５に記載のマイクロプロセッサ。
【請求項７】
前記命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、前記制御情報により前記プログラムカウンタの内容を予め退避していた内容に復元することを特徴とする、請求項４から６のいずれか１項に記載のマイクロプロセッサ。
【請求項８】
前記命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、前記制御情報により前記アドレスレジスタの内容と前記プログラムカウンタの内容とを復元することを特徴とする、請求項４から６のいずれか１項に記載のマイクロプロセッサ。
【請求項９】
前記内部メモリは独立した３つのポートを有し、
前記３つのポートのうちの１つ目のポートのための前記アドレス信号に基づいて前記内部メモリから情報を読出し、前記３つのポートのうちの２つ目のポートのための前記アドレス信号に基づいて前記内部メモリから情報を読出し、これら読出された情報を前記演算部に与えて、その演算結果を、前記３つのポートのうちの３つ目のポートのための前記アドレス信号に基づいて前記内部メモリに格納する動作を１サイクルで行なうことを特徴とする、請求項１から８のいずれか１項に記載のマイクロプロセッサ。
【請求項１０】
前記命令コードは、前記３つのポートのための前記アドレス情報それぞれの前記下位アドレス情報を含むことを特徴とする、請求項９に記載のマイクロプロセッサ。
【請求項１１】
前記命令コードは定数情報を含み、
前記命令解読部は、前記定数情報を、前記内部メモリから読出された情報を前記演算部に与えるためのバスに送出することを特徴とする、請求項９または１０に記載のマイクロプロセッサ。
【請求項１２】
処理中に例外要因の発生に応じて例外処理ルーチンに分岐するとき、前記アドレスレジスタの内容を退避して固定値に更新し、待ち時間のためのサイクルを実行し、前記プログラムカウンタの値を退避させるために前記内部メモリに格納することを特徴とする、請求項４から１１のいずれか１項に記載のマイクロプロセッサ。
【請求項１３】
前記例外処理ルーチンから分岐前の元の処理に復帰するとき、前記アドレスレジスタを退避していた内容に復元して、待ち時間のためのサイクルを実行することを特徴とする、請求項１２に記載のマイクロプロセッサ。
【請求項１４】
ソースプログラムを構成するソースコードを順次入力して、請求項１から１３のいずれか１項に記載のマイクロプロセッサのための前記命令コードに変換して命令コード列を出力するコンパイラであって、
前記内部メモリを参照する前記ソースコードを変換するとき、直前に前記上位アドレス情報の変更を指示する命令コードへの変換がなされている場合には、前記命令コード列において該ソースコードの前記命令コードの前に待ち時間サイクルのための命令コードを置くようにコンパイルすることを特徴とする、コンパイラ。
【請求項１５】
前記ソースプログラムにおいてサブルーチン呼出しを指示する前記ソースコードを検出すると、該ソースコードを、前記プログラムカウンタが保持する情報を前記内部メモリに退避させて、前記プログラムカウンタの値を指定の値に変更して、前記アドレスレジスタの内容を更新することを指令する前記命令コードに変換することを特徴とする、請求項１４に記載のコンパイラ。
【請求項１６】
前記ソースプログラムにおいてサブルーチン呼出しを指示する前記ソースコードの次位の前記ソースコードが、前記内部メモリを参照することを指示している場合には、該サブルーチンからの復帰を指示する命令コード群に前記待ち時間サイクルのための命令コードを置くようにコンパイルすることを特徴とする、請求項１４または１５に記載のコンパイラ。
【請求項１７】
前記ソースプログラムにおいてサブルーチンの最初の前記ソースコードが前記内部メモリの参照を指示することを検出したとき、前記命令コード列において該ソースコードの前記命令コードの前に前記待ち時間サイクルのための命令コードを置くようにコンパイルすることを特徴とする、請求項１４から１６のいずれか１項に記載のコンパイラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
主に高級言語で書かれたプログラムを実行するマイクロプロセッサおよびコンパイラであって、特にスタックを用いて処理を行なうマイクロプロセッサと該マイクロプロセッサで実行されるプログラムのためのコンパイラに関する。
【０００２】
【従来の技術】
高級言語でプログラムを設計する際、サブルーチンへの引数・戻り値がスタックでやり取りされ、また、Ｃ言語でのローカル変数はスタック上に領域が確保されて演算が行なわれる。そのため、ローカル変数での演算は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のアドレス演算とそのリード、格納アドレス演算とそのライトが発生し複雑である。また、外部ＲＡＭのアクセス速度が遅い場合には、その速度が全体の処理速度に影響する。サブルーチンの実行処理を高速化するために、サブルーチン呼出し・復帰に関するスタック操作を並列化して、よって高速化する方法が提供されている（たとえば、特許文献１参照）。
【０００３】
【特許文献１】
特開平１１−２４２５９５号公報
【０００４】
【発明が解決しようとする課題】
上述の文献で提案された方法は高速化を図るように構成されるが、実際に使用するスタックは外部メモリとして接続されているから、外部メモリへのアクセスが一般的に低速であることに鑑みると、外部メモリへのアクセスが頻繁となる処理内容であった場合には実行処理を高速にすることが困難である。この文献ではスタック上のデータへのアクセス、演算には言及されていない。
【０００５】
それゆえにこの発明の目的は、データを高速にアクセスできるマイクロプロセッサおよび該マイクロプロセッサで実行されるプログラムのためのコンパイラを提供することである。
【０００６】
【課題を解決するための手段】
この発明のある局面に従うマイクロプロセッサは、アドレス信号に基づいてアクセスされる情報を記憶する内部メモリと、指令に基づき内部メモリの情報を用いた演算を含む各種演算を行なう演算部と、与えられる命令コードをデコードしデコード結果に基づき演算の指令を含む各部を制御するための制御情報を出力する命令解読部と、与えられるアドレス情報を入力して解読しアドレス信号を出力するアドレスデコード部とを備える。
【０００７】
アドレス情報は上位アドレス情報と下位アドレス情報を含み、アドレスデコード部による、下位アドレス情報を入力してからアドレス信号を導出するまでの遅延は、上位アドレス情報を入力してからアドレス信号を導出するまでの遅延よりも短い。
【０００８】
したがって、内部メモリの下位アドレス情報に基づいて参照される部分領域のアクセスは上位アドレス情報に基づいて参照される部分領域のアクセスよりも速く行なわれるので、下位アドレスが変化した場合に内部メモリの高速アクセスが可能となる。また、内部メモリの下位アドレス情報に基づいて参照される部分領域のアクセスを高速化できる。例えばレジスタファイルを用いて演算する従来手法に比較して大量データを高速アクセスできる。
【０００９】
好ましくは、アドレスデコード部は、アドレス情報のうちの上位アドレス情報をデコードして上位デコード信号を出力する上位デコーダと、アドレス情報のうちの下位アドレス情報をデコードして下位デコード信号を出力する下位デコーダと、上位デコード信号と下位デコード信号を入力してアドレス信号を生成し出力する生成デコーダとを有する。
【００１０】
したがって、アドレスデコード部に上位デコーダと下位デコーダとを別個に設けて、さらに生成デコーダを設けることにより、下位アドレス情報を入力してからアドレス信号を導出するまでの遅延を、上位アドレス情報を入力してからアドレス信号を導出するまでの遅延よりも短くしている。
【００１１】
好ましくは下位アドレスのビット長は上位アドレスのビット長よりも短い。したがって、下位デコーダを簡単に構成できるとともに、デコードのための処理段数を少なくできる。
【００１２】
上述のマイクロプロセッサは好ましくは上位アドレス情報を生成するアドレス生成部をさらに備えて、アドレス生成部は、上位アドレス情報を格納するアドレスレジスタと、アドレスレジスタに格納される上位アドレス情報を、命令解読部の制御情報に基づき更新するアドレス更新部とを有し、下位アドレス情報は、命令解読部が出力する制御情報に含まれる。
【００１３】
したがってアドレスレジスタの上位アドレス情報を更新することにより、内部メモリの下位アドレス情報に基づいてアクセスされる領域を、すなわち高速アクセス可能なスタック領域を、内部メモリにおいて可変に設定できる。
【００１４】
好ましくは上述の更新は上位アドレス情報が示すアドレスのインクリメントまたはデクリメントである。
【００１５】
好ましくは命令解読部から出力された下位アドレス情報により内部メモリへのアクセスは１サイクルで行なわれる。
【００１６】
上述のマイクロプロセッサは、命令解読部に与える命令コードを逐次指定する情報を保持するプログラムカウンタをさらに備えて、命令解読部に与えられた命令コードが他の処理ルーチンに分岐することを指令する命令コードであるとき、制御情報により、プログラムカウンタに保持される情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新する。
【００１７】
したがって、他の処理ルーチンへの分岐時には、１命令コードを実行することにより、プログラムカウンタに保持される情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新するという一連の処理を実行できる。
【００１８】
好ましくは上述のプログラムカウンタに保持される情報の内部メモリへの退避と、プログラムカウンタの値の指定値への変更と、アドレスレジスタの内容更新とは、並列に行なわれる。したがって、他の処理ルーチンへの分岐を速やかに処理できる。
【００１９】
好ましくは、処理において命令解読部に例外要因の信号が入力されたとき、この処理から予め準備された例外要因処理ルーチンに分岐するために、制御情報により、アドレスレジスタの内容およびプログララムカウンタの内容は退避されて、かつアドレスレジスタの内容は所定の固定値に変更される。
【００２０】
したがって１命令コードにより、アドレスレジスタの内容およびプログララムカウンタの内容を退避して、かつアドレスレジスタの内容を所定の固定値に変更できるから、速やかに例外要因処理ルーチンに分岐できる。
【００２１】
好ましくは命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、制御情報によりプログラムカウンタの内容を予め退避していた内容に復元する。
【００２２】
好ましくは命令解読部に、分岐先の処理ルーチンから元の処理に復帰する命令コードが与えられたとき、制御情報によりアドレスレジスタの内容と前記プログラムカウンタの内容とを復元する。
【００２３】
したがって１命令コードによりアドレスレジスタの内容とプログラムカウンタの内容とを復元できるから、分岐先の処理ルーチンから元の処理に速やかに復帰できる。
【００２４】
好ましくは、内部メモリは独立した３つのポートを有し、３つのポートのうちの１つ目のポートのためのアドレス信号に基づいて内部メモリから情報を読出し、３つのポートのうちの２つ目のポートのためのアドレス信号に基づいて内部メモリから情報を読出し、これら読出された情報を演算部に与えて、その演算結果を、３つのポートのうちの３つ目のポートのためのアドレス信号に基づいて内部メモリに格納する動作を１サイクルで行なう。
【００２５】
したがって内部メモリを参照しながらの演算処理を高速に実行できる。
好ましくは命令コードは、３つのポートのためのアドレス情報それぞれの下位アドレス情報を含む。
【００２６】
好ましくは命令コードは定数情報を含み、命令解読部は、定数情報を、内部メモリから読出された情報を演算部に与えるためのバスに送出する。したがってバスは内部メモリを参照した情報と定数情報との演算部への供給に共用できて装置構成を簡単化できる。また定数情報を命令解読部から直接に演算部に与えることができて、定数情報を用いた演算を速く実行できる。
【００２７】
好ましくは処理中に例外要因の発生に応じて例外処理ルーチンに分岐するとき、アドレスレジスタの内容を退避して固定値に更新し、待ち時間のためのサイクルを実行し、プログラムカウンタの値を退避させるために内部メモリに格納する。
【００２８】
このように処理中に例外要因の発生するとアドレスレジスタの内容は退避されて固定値に更新される。もし分岐先の例外処理ルーチンの最初に内部メモリを参照する命令が実行される場合でも、分岐時には待ち時間のためのサイクルが実行されているから、アドレスレジスタが変更されて、変更後の内容に基づきアドレス解読部がアドレス信号を生成するのに要する時間は、待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【００２９】
好ましくは、例外処理ルーチンから分岐前の元の処理に復帰するとき、アドレスレジスタを退避していた内容に復元して、待ち時間のためのサイクルを実行する。
【００３０】
このように元の処理に復帰するときはアドレスレジスタの内容が変更される。もし復帰した元の処理の最初の命令が内部メモリを参照することを指令する場合でも、復帰時には待ち時間のためのサイクルが実行されているから、アドレスレジスタが変更されて、変更後の内容に基づきアドレス解読部がアドレス信号を生成するのに要する時間は、待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【００３１】
この発明の他の局面に従うコンパイラは、ソースプログラムを構成するソースコードを順次入力して、上述のマイクロプロセッサのための命令コードに変換して命令コード列を出力するコンパイラであって、内部メモリを参照するソースコードを変換するとき、直前に上位アドレス情報の変更を指示する命令コードへの変換がなされている場合には、命令コード列において該ソースコードの命令コードの前に待ち時間サイクルのための命令コードを置くようにコンパイルする。
【００３２】
このように上位アドレス情報を変更するような命令コードと、内部メモリを参照する命令コードとの間には待ち時間サイクルのための命令コードが置かれるから、内部メモリを参照する命令コード実行時には、上位アドレス情報が更新されて更新後の内容に基づきアドレス信号を生成するのに要する時間は待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【００３３】
好ましくは、ソースプログラムにおいてサブルーチン呼出しを指示するソースコードを検出すると、該ソースコードを、プログラムカウンタが保持する情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新することを指令する命令コードに変換する。
【００３４】
したがって、サブルーチン呼出しが指令されるときは、１命令コードにより、マイクロプロセッサに対して、プログラムカウンタが保持する情報を内部メモリに退避させて、プログラムカウンタの値を指定の値に変更して、アドレスレジスタの内容を更新することを指令できる。
【００３５】
好ましくは、ソースプログラムにおいてサブルーチンの終了を指示するソースコードを検出すると、該ソースコードを、プログラムカウンタの内容を予め退避されていた内容に復元する命令コードに変換する。
【００３６】
好ましくは、ソースプログラムにおいてサブルーチン呼出しを指示するソースコードの次位のソースコードが、内部メモリを参照することを指示している場合には、該サブルーチンからの復帰を指示する命令コード群に待ち時間サイクルのための命令コードを置くようにコンパイルする。
【００３７】
サブルーチンから復帰するためには上位アドレス情報が変更されるから、該サブルーチンからの復帰を指示する命令コード群に待ち時間サイクルのための命令コードを置くようにすることで、サブルーチン復帰後に内部メモリを参照する場合は、上位アドレス情報が更新されて、更新後の内容に基づいて内部メモリをアクセスするための信号の生成に要する時間は待ち時間で相殺されることになって、該内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【００３８】
好ましくは、ソースプログラムにおいてサブルーチンの最初のソースコードが内部メモリの参照を指示することを検出したとき、命令コード列において該ソースコードの命令コードの前に待ち時間サイクルのための命令コードを置くようにコンパイルする。
【００３９】
したがって、直前のサブルーチンで上位アドレス情報が更新されて次位のサブルーチンの最初で内部メモリを参照する場合は、上位アドレス情報が更新されて、更新後の上位アドレス情報に基づいて内部メモリをアクセスする為の信号の生成に要する時間は待ち時間で相殺されることになって、該内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【００４０】
【発明の実施の形態】
以下、この発明の各実施の形態について図面を参照して説明する。
【００４１】
（実施の形態１）
本実施の形態では、内部ＲＡＭの部分領域をスタックとして機能させ、内部ＲＡＭに関するアドレスデコーダのスタック領域をアクセスする回路規模を小さくすることにより、アドレスデータをデコードしてデコード信号を生成（導出）するまでの所要時間（遅延）を短くするようなプロセッサが提供される。
【００４２】
図１には、本実施の形態に係るマイクロプロセッサ４０の構成が示される。マイクロプロセッサ４０はポートであるアドレス出力１、データ入力２およびデータ出力３、プログラムカウンタ（以下、ＰＣと略す）４、パイプ５、命令デコーダ６、３−ＰｏｒｔＲＡＭ（以下、単に内部ＲＡＭと略す）７、Ａバス８、内部ＲＡＭ７の情報を用いた演算（算術・論理演算）および命令デコーダ６から与えられる情報を用いた演算（算術・論理演算）を行なうＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  ａｎｄ  Ｌｏｇｉｃ  Ｕｎｉｔ）９、Ｂバス１０、アドレスレジスタ１１、インクリメンタ１２および１４、ＭＵＸ（Ｍｕｌｔｉｐｌｅｘｏｒ）１５と１６、データ出力バッファ１７、データ入力バッファ１８およびＣバス１９を備える。内部ＲＡＭ７はメモリセルアレイ７０、ならびにＡバス側、Ｂバス側およびＣバス側のそれぞれにおいてアドレスデコード部７Ａ、７Ｂおよび７Ｃを備える。アドレスデコード部７Ａ、７Ｂおよび７Ｃはバス側から与えられるメモリセルアレイ７０のアクセスに関するアドレス情報を入力して解読し、解読結果としてメモリセルアレイ７０をアクセスするためのアドレス信号を出力する。
【００４３】
マイクロプロセッサ４０において実行されるプログラムは複数の命令コードを含み、図示しない外部メモリに格納されている。マイクロプロセッサ４０から外部メモリをアクセスするためのアドレスデータはアドレス出力１に接続されて、外部メモリからマイクロプロセッサ４０に読込まれるデータはデータ入力２に接続されて、マイクロプロセッサ４０から外部メモリに書込まれるデータはデータ出力３に接続されている。マイクロプロセッサ４０全体は、外部からのクロック入力に同期して動作しているが、ここではクロック入力の図示および同期動作の説明は略す。
【００４４】
ＰＣ４は、カウント動作しながら次にフェッチすべき命令が格納されているアドレスデータを保持しており、アドレス出力１を介して外部メモリに指示する。指示されたアドレスデータに基づき指定されたアドレスから読出されたデータである命令コードは、データ入力２を経由してタイミングを調整するパイプ５へ入力すると、パイプ５により適宜命令デコーダ６に与えられて、ここで解読される。マイクロプロセッサ４０のその他の部分は、命令コードの解読結果に基づく命令デコーダ６による指示に従い動作する。
【００４５】
ＡＬＵ９は２つの入力ポートと１つの出力ポートを有し、ＲＡＭ７は３つの独立したポート（３−Ｐｏｒｔ）を有する。Ａバス８は内部ＲＡＭ７のデータをＡＬＵ９に出力する専用バスであり、ＡＬＵ９の１方の入力ポートに接続されている。Ｂバス１０はデータ入力２およびデータ入力バッファ１８を介して外部メモリからのデータをＡＬＵ９に出力する専用バスであり、ＡＬＵ９の他方の入力ポートに接続され、同時にデータ出力バッファ１７を介してデータ出力３にも接続されている。Ｃバス１９は入力専用であり、ＡＬＵ９の出力、ＰＣ４などが接続されている。ここで、内部ＲＡＭ７はデータ幅は３２ビット、アドレスデータ幅は１６ビットで、６４ｋワード＝２Ｍビットの容量を有すると想定する。
【００４６】
アドレスレジスタ１１は、内部ＲＡＭ７のアドレスデータ１６ビット中の上位１１ビットを保持するレジスタである。アドレスレジスタ１１に保持される値は、命令デコーダ６の指示により、インクリメンタ１２を介して＋１されたり−１されたりする。
【００４７】
Ａバス８のＡバスアドレスにはアドレスレジスタ１１の出力およびインクリメンタ１２の出力の一方がＭＵＸ１６で選択されて接続される。Ｂバス１０のＢバスアドレスにはアドレスレジスタ１１の出力が接続されている（図示しない）。
【００４８】
Ｃバス１９のＣバスアドレスにはアドレスレジスタ１１の出力およびインクリメンタ１２の出力の一方がＭＵＸ１５で選択されて接続される。内部ＲＡＭ７のアドレスデータの下位５ビットは、内部ＲＡＭ７の３つのポートでそれぞれ独立であって、命令デコーダ６からの信号が接続されている。したがって、内部ＲＡＭ７をプログラムの命令コードに従って様々なアクセスが可能となっている。
【００４９】
ここで、アドレスレジスタ１１に保持される値（上位アドレスデータの値）を変化させないと想定した時、内部ＲＡＭ７のアクセスできる領域は下位アドレスデータで指定できる範囲、すなわち３２（＝２＾５）ワードの空間となるから、内部ＲＡＭ７を３２ビットの内蔵レジスタが３２個存在するかの如くアクセスできて、命令コードに従い、その空間内で様々な演算が行なえる。
【００５０】
アドレスレジスタ１１の値を＋１インクリメントすれば、内部ＲＡＭ７のアドレスを３２増加させることとなり、アクセスできる内部ＲＡＭ７の領域（＝命令コードによってデータの読出しまたは書込みが可能な領域）が移動し、異なった空間の３２ワード分にアクセスが可能となる。アドレスレジスタの値を−１させた場合も同様である。
【００５１】
いま、内部ＲＡＭ７はＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）で実現されているとする。ＳＲＡＭの各セルを図２に示す。図２のＳＲＡＭのセル２１は、データ線対から供給される１ビットの情報を保持するインバータ２２と２３、およびトランジスタ２４〜２９を有する。内部ＲＡＭ７の３つのポートのうちの１つめのポートのアドレスをデコードした信号が供給されるワード線ＷＡはトランジスタ２４と２５に接続され、同様に２つめのポートのアドレスをデコードした信号が供給されるＷＢはトランジスタ２６と２７に接続され、同様に３つめのポートのアドレスをデコードした信号が供給されるＷＣはトランジスタ２８と２９に接続される。
【００５２】
ワード線ＷＡ、ＷＢおよびＷＢのうち選択されたワード線のみがハイとなり、選択されたワード線が接続されたトランジスタはオン状態となる。ワード線ＷＡが選択された場合はデータ線の対ＤＡとＤＡｂがトランジスタ２４と２５を介してインバータ２２と２３に接続される。同様にワード線ＷＢが選択された場合はデータ線の対ＤＢとＤＢｂがトランジスタ２６と２７を介してインバータ２２と２３に接続され、ワード線ＷＣが選択された場合はデータ線の対ＤＣとＤＣｃがトランジスタ２８と２９を介してインバータ２２と２３に接続される。
【００５３】
セル２１は、図３の如く並べられＳＲＡＭが形成される。図３では、Ａバスアドレスからのデコードされた信号はワード線ＷＡ００００〜ＷＡＦＦＦＦを介して、Ｂバスアドレスからのデコードされた信号はワード線ＷＢ００００〜ＷＢＦＦＦＦを介して、Ｃバスアドレスからのデコードされた信号はワード線ＷＣ００００〜ＷＣＦＦＦＦを介して、各セル２１に与えられる。選択されたワード線に接続されてオンしたセル２１には対応のデータ線対が接続される。
【００５４】
ＳＲＡＭ（内部ＲＡＭ７）のそれぞれのポートにセンスアンプＡＭＰが配され、各セル２１で保持されたデータはセンスアンプＡＭＰにより増幅されてＡバス８のデータＤＡ００〜ＤＡ１Ｆ、Ｂバス１０のデータＤＢ００〜ＤＢ１Ｆ、Ｃバス１９のデータＤＣ００〜ＤＣ１Ｆとしてそれぞれ出力（読出し）される。
【００５５】
データを書込みする場合も同様にワード線で選択され、センスアンプＡＭＰから駆動されたデータ線の値が、各セル２１に書き込まれる。
【００５６】
図４には、各ワード線の信号を生成するアドレスデコード部の構成が示される。内部ＲＡＭ７のアドレスデコード部７Ａ、７Ｂおよび７Ｃは図４に示す同様の構成を有する。アドレスデコード部は上位アドレスデコーダ４１、下位アドレスデコーダ４２およびアドレスデコーダ４３を有する。アドレスレジスタ１１から駆動される上位１１ビットＡ５〜Ａ１５は、アドレスデコーダ４１に入力され、デコード結果の信号ＧＡ０００〜ＧＡ７ＦＦが生成されてアドレスデコーダ４３に与えられる。信号ＧＡ０００〜ＧＡ７ＦＦのうち該当するアドレスの信号のみがハイとなり、その他の信号はローとなる。
【００５７】
命令デコーダ６から駆動される下位５ビットＡ０〜Ａ４は、アドレスデコーダ４２に入力され、デコード結果の信号ＧＢ００〜ＧＢ１Ｆが生成されアドレスデコーダ４３に与えられる。信号ＧＢ００〜ＧＢ１Ｆのうち該当するアドレスの信号のみがハイとなり、その他の信号はローとなる。
【００５８】
さらに、それぞれにデコードされた信号はアドレスデコーダ４３に入力されて、個々のワード線信号Ｗ００００〜ＷＦＦＦＦが生成されて出力される。ワード線信号Ｗ００００〜ＷＦＦＦＦのうち該当するアドレスのワード線信号のみがハイとなり、その他のワード線信号はローとなる。
【００５９】
ここでは、アドレスデコーダを上位アドレスデコーダ４１と下位アドレスデコーダ４２とに分離して、かつ下位アドレスデコーダ４２は比較的規模の小さい回路、たとえばゲート１段の回路で実現し、また後段のアドレスデコーダ４３も段数を少なくしているため、アドレスデコード部では下位アドレスデータ（下位５ビットＡ０〜Ａ４のデータ）を入力してからワード線信号Ｗ００００〜ＷＦＦＦＦを出力するまでの所要時間（遅延量）を最小とすることができる。
【００６０】
いま、マイクロプロセッサ４０を１００ＭＨｚのクロックで動作させたとすると、１サイクルは１０ｎｓであるが、下位アドレスデータ（下位５ビットＡ０〜Ａ４のデータ）の変化から、デコードして、デコード結果を出力し、さらにそのデコード結果を用いてＳＲＡＭセルからデータを読出すまでの遅延（所要時間）を１サイクル以内となるようタイミング設計を行なったとする。このように設計されたマイクロプロセッサ４０では、下位アドレスデータ（下位５ビットＡ０〜Ａ４のデータ）のみが変化する場合、１サイクルで各種データの演算が行なえ、従来の汎用レジスタマシンによる、レジスタの演算と同様に演算を行なうことができる。
【００６１】
このマイクロプロセッサ４０を用いて、図５のＣ言語で書かれたソースプログラム５０（以下、単にプログラム５０という）を実行する。実行時にはプログラム５０は予めコンパイルされてマイクロプロセッサ４０が実行可能な機械コードに変換（翻訳）されていると想定する。
【００６２】
プログラム５０は関数ｆｕｎｃ１のサブルーチンプログラムであり変数ａとｂを引数としており、ローカル変数ｃ、ｄおよびｅを有する。関数ｆｕｎｃ１のプログラム５０は図示しない他の関数プログラムなどから呼出されたとき実行される。また、プログラム５０の関数ｆｕｎｃ１の中で別の関数ｆｕｎｃ２のサブルーチンプログラムが呼出されている。関数ｆｕｎｃ２のサブルーチンプログラムは変数ｃを引数としており、ローカル変数ｆを有する。
【００６３】
プログラム５０を実行する時の内部ＲＡＭ７上のデータの配置例を図６に模式的に示すとともに、各サイクル毎のマイクロプロセッサ４０の動作を図７に表形式で示す。図７には図５のプログラム５０の左端に当てられた行番号を示すソース行番号７１と、該ソース行番号７１の行に記載されたソースコードをコンパイルして得られた機械コードであるニーモニックコード７２、該ニーモニックコード７２を実行する時のマイクロプロセッサ４０の動作７３および該ニーモニックコード７２を実行するサイクルの順番を示すサイクル番号７４が示される。
【００６４】
図示しない他の関数から関数ｆｕｎｃ１が呼出されてプログラム５０が実行される時、アドレスレジスタ１１の値は０で、関数ｆｕｎｃ１の引数にコピーすべき変数ａとｂが内部ＲＡＭ７のアドレス“００ｈ＋２”とアドレス“００ｈ＋１”にそれぞれ格納されていたと想定する。
【００６５】
まず引数をスタックへコピーする必要があるため、サイクル番号７４が示す１番目および２番目のサイクルで、現在のアドレスレジスタ１１のデータにより指定される内部ＲＡＭ７の領域であるローカル変数領域の内容を、次に実行される関数ｆｕｎｃ１が使用するローカル領域である（アドレスレジスタ１１の値＋１）により指定される領域へコピーする。この時、Ａバス８にはアドレスレジスタ１１の値が上位アドレスとなり、Ｃバス１９には（アドレスレジスタ１１の値＋１）が上位アドレスとなり、異なった上位アドレスの領域間でのコピーを行なう。これにより変数ａとｂはアドレス“２０ｈ＋１”と“２０ｈ＋２”にそれぞれコピーされる。
【００６６】
サイクル番号７４が示す３番目のサイクルでは、サブルーチン（関数ｆｕｎｃ１）の呼出し命令のニーモニックコード７２を実行することにより、関数ｆｕｎｃ１の処理が終了した時の戻り番地（ＰＣ＋４）を、次の関数が使用するローカル領域に退避し、アドレスレジスタ１１の値を＋１し、そしてＰＣ４に関数ｆｕｎｃ１の先頭番地を代入して制御を関数ｆｕｎｃ１に移すという動作を並列に実行できる。したがってサブルーチン呼出しは１サイクルで実行できるから、サブルーチン呼出しを高速に処理できる。
【００６７】
関数ｆｕｎｃ１のローカル変数ｃ、ｄ、ｅの領域をローカル領域のそれぞれ３番地、４番地、５番地にコンパイラが割り当てている（図６参照）。関数ｆｕｎｃ１での最初の命令は「ｃ＝ａ＋ｂ；」の演算命令であり内部ＲＡＭ７を参照する動作を伴う命令である。この時点では、先に関数ｆｕｎｃ１を呼出した際にアドレスレジスタ１１の値は変化しており、上位アドレスからの遅延量が大きい場合には該演算命令は１サイクルで実行完了しない場合がある。そのためサイクル番号７４が示す４番目のサイクルでは何も行なわない命令を示すニーモニックコード７２（‘ＮＯＰ’）がコンパイラによって挿入され、次のローカル変数に対する演算、すなわち「ｃ＝ａ＋ｂ；」の演算に備える。命令デコーダ６は命令コードを入力して‘ＮＯＰ’であることを解釈すると、該命令コードのために当てられたサイクルにおいては何ら動作せずに次の命令コードの入力まで待機する。‘ＮＯＰ’のサイクルにおいては、全ての内部バスおよび制御信号は変化せずに現状状態を維持することになる。
【００６８】
ここで命令コード（‘ＮＯＰ’）を挿入する目的について説明する。マイクロプロセッサ４０では上位アドレスデータを入力してからデコードしてデコード信号を導出するまでの遅延時間が、下位アドレスデータを入力してからデコードしてデコード信号を導出するまでの遅延時間よりも相対的に長くなる。アドレスデータを入力してからデコード信号導出までの遅延時間（所要時間）が長いと、内部ＲＡＭ７のアクセス（参照）が１サイクルで終了せずに次の演算命令のためのデータを読出しできない惧れがある。つまり、実際は、「アクセス時間」＝「アドレスデコードの遅延時間」＋「メモリセルの読出し時間（ワード線・ビット線の遅延とセンスアンプ部の遅延）」であるので、デコードに時間がかかるとアクセス時間が長くなる。仮にアクセス時間が１サイクル以上（１００ＭＨｚでは１０ｎｓ以上）かかった場合でも、次の演算命令の直前に命令コード（‘ＮＯＰ’）が１サイクル分実行されることで、アクセス時間のために余分に１サイクル分充てることができて、次の演算命令実行時には常にオペランドデータのアクセスに成功している状態とすることができる。これにより必要データが揃わずに演算命令が実行できないというエラー状態を確実に回避できる。
【００６９】
サイクル番号７４が示す５番目と６番目のサイクルでローカル変数間での演算が行なわれる。これら演算のための変数（オペランド）は、すべて同じ上位アドレスの領域に割当てられているため、すべて１サイクルで終了する。
【００７０】
次に実行される関数ｆｕｎｃ２の呼出し命令のため、サイクル番号７４が示す７番目のサイクルで、引数ｃを関数ｆｕｎｃ２で使用するローカル領域（図６のアドレス“４０ｈ＋１”）へコピーし、サイクル番号７４が示す８番目のサイクルではＰＣ４の戻り番地の退避（図６のアドレス“４０ｈ＋０”へのコピー）をして、アドレスレジスタ１１の繰り上げ、およびＰＣ４に対する関数ｆｕｎｃ２の先頭番地の代入が同時に行なわれ、関数ｆｕｎｃ２に制御が移される。
【００７１】
サイクル番号７４の９番目のサイクルでは、４番目のサイクルと同様にコンパイラが挿入したニーモニックコード７２（‘ＮＯＰ’）により、上位アドレスの遅延待ちを行なう。
【００７２】
サイクル番号７４の１０番目のサイクルでは、ローカル変数と定数との演算命令（ｆ＝ｃ＋１；）が実行される。この演算のための定数（＝１）の情報は対応のニーモニックコード７２に含まれており、定数情報はＢバス１０を命令デコーダ６が駆動してＡＬＵ９に与えられて演算実行される。したがってＢバス１０を内部ＲＡＭ７から読出したデータのＡＬＵ９への転送とともに、定数情報の命令デコーダ６からＡＬＵ９への転送に利用できる。
【００７３】
関数ｆｕｎｃ２の処理が終了し関数ｆｕｎｃ１の処理に戻るため、サイクル番号７４が示す１１番目のサイクルでアドレスレジスタ１１の値を−１して戻し、サイクル番号７４が示す１３番目のサイクルで戻り値を元の関数ｆｕｎｃ１で使用するローカル領域にコピーし、サイクル番号７４の１４番目のサイクルでＰＣ４の値を復元して関数ｆｕｎｃ１の制御に戻る。このようにサブルーチンから復帰する（関数ｆｕｎｃ２から元の関数ｆｕｎｃ１にリターンする）際にもアドレスレジスタ１１の値を変化させるため、上位アドレスの遅延待ちが必要となり、サイクル番号７４が示す１２番目のサイクルではコンパイラが挿入したニーモニックコード７２（‘ＮＯＰ’）が実行される。
【００７４】
サイクル番号７４が示す１５番目のサイクルでは、ローカル変数間の演算が行なわれ、１６番目〜１９番目のサイクルで関数ｆｕｎｃ１を呼出した図示のない他の関数に復帰（リターン）するための処理が行なわれる。この時も同様にアドレスレジスタ１１の値が変更されるため、コンパイラによって挿入された何もしない命令を示すニーモニックコード７２（‘ＮＯＰ’）が実行される。
【００７５】
図７のサブルーチン呼出し命令（‘ＣＡＬＬ  ｆｕｎｃ１’、‘ＣＡＬＬ  ｆｕｎｃ２’）の動作７３では、この１サイクル（クロックの１周期）で、「ＰＣ４の内容の退避」、「アドレスレジスタ１１の値の繰り上げ」および「ＰＣ４の値の更新」の３つの動作が、同時に並行して行なわれる。従来は、「アドレスレジスタ」にあたる物はないので、「ＰＣ内容の退避」と「ＰＣ値の更新」とは逐次処理されるか、同時並列処理される物もあるかも知れない。本実施の形態では、「アドレスレジスタ１１の繰り上げ」も含めて同時に並列処理される特徴を有する。
【００７６】
この同時並列処理を図１を参照し説明する。「ＰＣ４の内容の退避」は、「ＰＣ４→インクリメンタ１４→Ｃバス１９→内部ＲＡＭ７」の経路を用いて行なう。「アドレスレジスタ１１の繰り上げ」は、「アドレスレジスタ１１→インクリメンタ１２→アドレスレジスタ１１」の経路を用いて行なう。「ＰＣ４の値の更新」は、図示されないが、「命令デコーダ６→ＰＣ４」という経路を用いて行なう。これら３種類の経路は独立している（共通したバス接続でない）ために、同時並列処理が可能となる。
【００７７】
またマイクロプロセッサ４０では割込みを処理する。命令デコーダ６は図示しない割込み入力を受付けて、その割込み入力の信号がアクティブになると、予め準備された割込み処理プログラムへ分岐する。その様子を図８に示す。図８には割込み処理プログラムについて図７と同様に表形式でマイクロプロセッサ４０の動作が示される。図８ではソース番号７１は省略されている。
【００７８】
プログラム５０などの処理中に例外要因が生じたことを示す割込み信号が発生すると、ハード的にサイクル番号７４が示す１０１番目〜１０３番目の３つのサイクルが実行される。１０１番目のサイクルでは、アドレスレジスタ１１の値を退避レジスタ１３にコピー（保存）し、同時にアドレスレジスタ１１に所定値（固定した値）を代入する。アドレスレジスタ１１の値が固定値になることで、割込み発生時は、常に内部ＲＡＭ７の同じスタック領域を使用することとなる。割込み処理プログラムの中で、アドレスレジスタ１１を適宜変更することにより、異なった領域をスタックとして使用することもできる。
【００７９】
サイクル番号７４が示す１０３番目のサイクルで、アドレスレジスタ１１の新たな値が示すスタック領域の０番地に、戻り番地（ＰＣ４の値＋４）を保存すると同時に、ＰＣ４に固定値を代入する。ＰＣ４の値が固定値となることで、割込み発生時は、常に同じ番地（割込み処理プログラムの先頭番地）にジャンプすることとなる。割込み処理プログラムの中で、適宜分岐することにより、様々な処理を行なうことができる。
【００８０】
この場合も、１０１番目のサイクルでアドレスレジスタ１１の値の変更が行なわれるので、次の１０２番目のサイクルで上位アドレスの遅延待ちを行なう。この１０２番目のサイクルでは、前述のコンパイラが挿入するニーモニックコード７２（‘ＮＯＰ’）を実行するのとは異なり、ハード制御により待ちサイクルが実行される。この待ちサイクルにおいては全ての内部バスおよび制御信号は変化せずに現状状態を維持し、かつ命令デコーダ６に対するパイプ５による命令コードの供給も停止する。
【００８１】
サイクル番号７４が示す１０４番目以降のサイクルでは、割込み処理が行なわれて処理の最後には、割込み処理から元の処理に復帰（リターン）するためのニーモニックコード７２（“ＲＥＴＩ”）が必ず配置される。この命令“ＲＥＴＩ”を実行する２０１番目のサイクルでは、割込み処理用スタック領域の０番地の内容をＰＣ４にコピーしてＰＣ４の値を復元し、同時に退避レジスタ１３の内容をアドレスレジスタ１１にコピーし、分岐前の元の処理時のアドレスを復元する。これにより割込み入力により中断された元の処理を再開して、中断した時点の内容から実行することができる。
【００８２】
サイクル番号７４が示す２０３番目のサイクルから元の処理が再開することになるが、再開して最初に実行される命令コード（ニーモニックコード７２）が内部ＲＡＭ７を参照する命令か否か判別することは困難である。そのために、２０１番目のサイクルでアドレスレジスタ１１の内容が変更されているので、２０３番目のサイクルの前に必ず２０２番目のサイクルが実行されるようにして上位アドレスの遅延待ちを行なう。これも１０２番目のサイクルと同様にハード制御による待ちサイクルである。
【００８３】
上述のようにアドレスレジスタ１１の内容が更新された後に内部ＲＡＭ７を参照するような命令が実行されるときは、‘ＮＯＰ’などによる待ちサイクルが挿入されるから、アドレスレジスタ１１の内容が更新されたとしても内部ＲＡＭ７参照のためのサイクルを確保できて、たとえば図５の３行目の演算命令でもＡＬＵ９での実行時には上位アドレスからのデコード信号（ＧＡ０００〜ＧＡ７ＦＦ）を準備しておくことができる。
【００８４】
したがって、このような演算命令実行時には次のような動作となる。つまり、内部ＲＡＭ７の３つのアドレスデコード部７Ａ〜７Ｃに対応した独立した３つのポートのうちの１つ目のポートのＡバスアドレスの信号に基づいて内部ＲＡＭ７から情報を読出し、２つ目のポートのためのＢバスアドレスの信号に基づいて内部ＲＡＭ７から情報を読出し、これら読出された情報をＡＬＵ９に与えて、その演算結果を、３つ目のポートのＣバスアドレスの信号に基づいて内部ＲＡＭ７に格納する動作を１サイクルで行なえる。
【００８５】
また、Ａ、ＢおよびＣバスアドレスに与えられる命令デコーダ６からの下位アドレスに基づいて上述したように高速に内部ＲＡＭ７をアクセスできる。
【００８６】
（実施の形態２）
本実施の形態ではソースプログラムを入力して、ソースプログラム中の内部ＲＡＭ７をアクセス（参照）する命令コードを検出したときは、上述の待ちサイクルを設けるための命令コード（‘ＮＯＰ’）を挿入して、該ソースプログラムをコンパイルするコンパイラが提供される。
【００８７】
図９は実施の形態２に係るコンパイル手順を実行するマイクロコンピュータ８０である。マイクロコンピュータ８０はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、コンパイラプログラム（以下、単にコンパイラと呼ぶ）などのデータを予め格納するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）８２、ＲＡＭ８３、入出力Ｉ／Ｆ（Ｉｎｔｅｒ  Ｆａｃｅ）８４、キーボードなどの外部から指示などの情報を入力するための入力部８５、情報を外部に出力するための画面などの出力部８６、インターネットなどの各種通信回線と接続するための通信Ｉ／Ｆ８７、記録媒体８９が着脱自在に挿入されて、挿入された記録媒体に対して情報をアクセスするための記録媒体駆動部８８を備える。
【００８８】
コンパイラは記録媒体８９に予め記録されて記録媒体駆動部８８により読出されることで供給されてもよく、ネットワークから通信Ｉ／Ｆ８７を介してロードされることで供給されてよい。
【００８９】
入出力Ｉ／Ｆ８４はマイクロプロセッサ４０を含む各種装置と入出力する。ＲＯＭ８２に格納されたコンパイラはＣＰＵ８１の制御のもとに実行されることにより、ＲＡＭ８３などに準備された高級言語のソースプログラムは逐次読出されて、マイクロプロセッサ４０のための機械語命令に翻訳されて、翻訳された内容はＲＡＭ８３の所定領域に格納される。ＲＡＭ８３の所定領域に格納された機械語命令列は読出されて入出力Ｉ／Ｆ８４を介してデータ入力２としてマイクロプロセッサ４０に与えられる。なお、ＲＡＭ８３から読出された機械語命令列は通信Ｉ／Ｆ８７およびネットワークを介して読出されてデータ入力２としてマイクロプロセッサ４０に与えられても良く、または記録媒体駆動部８８を介して記録媒体８９に書込んで、記録媒体８９の内容がデータ入力２としてマイクロプロセッサ４０に与えられても良い。
【００９０】
ここでは、マイクロコンピュータ８０が動作していることを前提としてマイクロプロセッサ４０が動作するとしているが、通常は、コンパイラが例えば記録媒体８９にコンパイル結果（命令コード列）を格納し、その結果を、アドレス出力１、データ入力２に接続されているＲＯＭ等に書き込んだ後に、マイクロプロセッサ４０を動作させることになる。
【００９１】
図１０は実施の形態２に係るコンパイル手順を示すフローチャートであり、ＲＯＭ８２のコンパイラが実行されることにより図１０の手順が実行される。図１０のフローチャートに従い図５のＣ言語のプログラム５０が図７のニーモニックコード７２の列にコンパイルされる手順を説明する。プログラム５０において宣言される変数（引数を含む）のスタック領域への図６のような割当てもコンパイラによりなされるが、ここではその説明は省略する。また、手順を追って逐次生成されるニーモニックコード７２はＣＰＵ８１の図示のない内部メモリに逐次格納される。コンパイルすべきソースコードが無くなる（全てのソースコードのコンパイルが終了する）と、内部メモリのニーモニックコード７２の列はＲＡＭ８３の所定領域に格納される。
【００９２】
まず、ＣＰＵ８１はＲＡＭ８３からプログラム５０のファイルを図示のない内部メモリに読込む（ステップＳ１）。次に、読込んだソースファイルにコンパイルすべき関数のコードがあるか判定する（ステップＳ２）。コンパイルすべきコードがなければ、コンパイル結果である内部メモリに格納されたニーモニックコード７２の列（機械語命令列）はＲＡＭ８３の所定領域に出力されるが（ステップＳ１７）、あればプログラム５０の先頭行の内容は内部ＲＡＭ７を参照する命令コードか否か判定する（ステップＳ３）。内部ＲＡＭ７を参照する命令コードであればＣＰＵ８１は‘ＮＯＰ’のニーモニックコード７２を生成して（ステップＳ４）、読込んだ内容に基づいて内部ＲＡＭ７を参照するニーモニックコード７２を生成する（ステップＳ５）。その後、ステップＳ６に移行する。
【００９３】
関数ｆｕｎｃ１のサブルーチンを呼び出す命令は、図示していない他のソースコードファイルに含まれるプログラムに記載されているため、ニーモニックコード「ＣＡＬＬ  ｆｕｎｃ１」は、このソースコードファイルのコンパイル時には生成されない（図示していない他のソースコードファイルをコンパイルする時に生成される）。
【００９４】
プログラム５０の１行目の読込み内容は関数ｆｕｎｃ１を定義する内容である（ステップＳ２でＹＥＳ）。プログラム５０の最初の命令は３行目の命令コードであり、内部ＲＡＭ７を参照する命令であるから（Ｓ３でＹＥＳ）、ＣＰＵ８１は‘ＮＯＰ’のニーモニックコード７２を生成して（ステップＳ４）、読込んだ内容に基づいて内部ＲＡＭ７を参照するニーモニックコード７２を生成する（ステップＳ５）。その後、ステップＳ６に移行する。
【００９５】
４行の命令コードは一般命令であるから（Ｓ６でＮＯ、Ｓ１１でＮＯ）、読込んだ内容に基づいてニーモニックコード７２を生成する（ステップＳ１６）。その後、ステップＳ６に移行する。
【００９６】
ＣＰＵ８１はプログラム５０の５行目を読込む。読込んだ内容はサブルーチン呼出し命令コードであるから（ステップＳ６でＹＥＳ）、対応のニーモニックコード７２（‘ＣＡＬＬ  ｆｕｎｃ２’）を生成する（ステップＳ７）。関数ｆｕｎｃ２のサブルーチンから戻ってきた最初の命令である、６行目のソースコードは内部ＲＡＭ７を参照する命令であるから（ステップＳ８でＹＥＳ）、‘ＮＯＰ’のニーモニックコード７２を生成して、さらに内部ＲＡＭ７を参照する命令に対応のニーモニックコード７２を生成する（ステップＳ９、Ｓ１０）。その後、ステップＳ６に戻る。
【００９７】
次の７行目はサブルーチン終了命令と判定されるので（ステップＳ６でＮＯ、ステップＳ１１でＹＥＳ）、元のサブルーチンに戻るために、即ち関数ｆｕｎｃ１を呼出したサブルーチンに戻るために、ニーモニックコード７２（‘ＤＥＣ  ＡＤＲ’）を生成し（ステップＳ１２）、‘ＮＯＰ’のニーモニックコード７２を生成し（ステップＳ１３）、戻り値コピー命令のニーモニックコード７２を生成し（ステップＳ１４）、ニーモニックコード７２（‘ＲＥＴ’）を生成し（ステップＳ１５）、ステップＳ２に戻る。
【００９８】
これで関数ｆｕｎｃ１のサブルーチンのコンパイルが終了し、さらにソースファイルには関数ｆｕｎｃ２が続いている（ステップＳ２でＹＥＳ）。関数ｆｕｎｃ２のサブルーチンの最初の命令は１１行目の命令コードで示される。これは、内部ＲＡＭ７を参照する命令であるから（ステップＳ３でＹＥＳ）、ＣＰＵ８１は‘ＮＯＰ’のニーモニックコード７２を生成して（ステップＳ４）、読込んだ内容に基づいて内部ＲＡＭ７を参照するための、ニーモニックコード７２を生成する（ステップＳ５）。その後、ステップＳ６に移行する。
【００９９】
この時点でコンパイルすべきコードは残っていないので（ステップＳ２でＹＥＳ）、コンパイル結果の機械語命令列はＲＡＭ８３の所定領域に出力（格納）される（ステップＳ１７）。以上でプログラム５０のコンパイルは終了する。
【０１００】
（実施の形態の変形例）
実施の形態１と２では、上位アドレスからの遅延量が大きいために、アドレスレジスタ１１の値の変更の直後に内部ＲＡＭ７の参照が実行される場合には、該参照は１サイクルで処理を終了することができない惧れがあるので、コンパイラにより何も動作しないことを指示する機械語命令（‘ＮＯＰ’）を挿入したが、上位アドレスからの遅延量が比較的小さいので上述のような内部ＲＡＭ７参照も１サイクルで処理が終了する場合は、該機械語命令（‘ＮＯＰ’）の挿入は不要である。したがって、コンパイラのオプションとして、機械語命令（‘ＮＯＰ’）の自動挿入を許可するか否かを可変に設定するようにしてもよい。
【０１０１】
また、割込み発生および割込み処理からの復帰時には、ハード制御による待ちサイクルが挿入されるが、これも上位アドレスからの遅延量が比較的小さい場合には、ハード設計時のオプションとすることができる。
【０１０２】
また、本実施の形態１では、下位アドレスを５ビットとし、内部ＲＡＭ７の各ローカル領域を３２ワードとしたが、これに限定されない。たとえば、多量のローカル変数を必要とするプログラムが実行されるようなマイクロプロセッサ４０では、下位アドレスを増加させて各ローカル領域を大きく取る等、システムの最適化を行なうこともできる。また逆に必要なローカル変数が少ない場合には、下位アドレスを減少させて内部ＲＡＭ７の未使用領域を減らして、内部ＲＡＭ７に関する容量削減およびコストダウンをして、システムの最適化を行なうこともできる。
【０１０３】
（実施の形態の効果）
マイクロプロセッサ４０を使用することにより、通常スタックを使用するローカル変数上の演算を、アドレスを演算するためのサイクルなしに１サイクルで行なえる。また、スタックをアドレスレジスタ１１の値の変化によって切換えるため、ローカルに使用するアドレスレジスタ１１の値のスタックへの退避等が必要なく、関数（サブルーチン）呼出しのオーバーヘッドが減少する。また、アドレスレジスタ１１の出力と、インクリメンタ１２の出力をＭＵＸ１５と１６で切換える構造により、関数（サブルーチン）呼出しの前後の領域間での引数渡しが可能となる。また、関数（サブルーチン）呼出しの際、戻り番地を退避し、アドレスレジスタ１１の繰上げをし、ＰＣ４へ値を代入することを並列実行でき、関数（サブルーチン）呼出しを高速に実行できる。
【０１０４】
したがってマイクロプロセッサ４０では、すべての演算をスタック上で行なうような言語仕様を有する言語のプログラムを、たとえばＪａｖａ（Ｒ）で書かれたプログラムを高速に実行できる。
【０１０５】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０１０６】
【発明の効果】
この発明のマイクロプロセッサによれば、内部メモリの下位アドレス情報に基づいて参照される部分領域のアクセスを高速化できる。例えばレジスタファイルを用いて演算する従来手法に比較して大量データを高速アクセスできる。
【０１０７】
この発明のコンパイラによれば、上位アドレス情報を変更するような命令コードと、内部メモリを参照する命令コードとの間には待ち時間サイクルのための命令コードが置かれるから、内部メモリを参照する命令コード実行時には、上位アドレス情報が更新されて更新後の上位アドレス情報に基づいて内部メモリをアクセスするための信号の生成に要する時間は待ち時間で相殺されることになって、その後の内部メモリ参照においては更新後のアドレス情報を用いて適正な領域を参照できる。
【図面の簡単な説明】
【図１】マイクロプロセッサの構成図である。
【図２】ＳＲＡＭの各セルの構成例を示す図である。
【図３】ＳＲＡＭのセルの配列例を示す図である。
【図４】各ワード線の信号を生成するアドレスデコード部の構成図である。
【図５】Ｃ言語で書かれたソースプログラムの一例を示す図である。
【図６】プログラムを実行する時の内部ＲＡＭ上のデータの配置例を示す図である。
【図７】各サイクル毎のマイクロプロセッサの動作を表形式で示す図である。
【図８】割込み処理プログラムへ分岐時の各サイクル毎のマイクロプロセッサの動作を表形式で示す図である。
【図９】コンパイル手順を実行するマイクロコンピュータのブロック図である。
【図１０】コンパイル手順を示すフローチャートである。
【符号の説明】
６  命令デコーダ、７  内部ＲＡＭ、７Ａ，７Ｂ，７Ｃ  アドレスデコード部、９  ＡＬＵ、１１  アドレスレジスタ、４０  マイクロプロセッサ、４１  上位アドレスデコーダ、４２  下位アドレスデコーダ。
【図１】
2005044017.tif 000003
【図２】
2005044017.tif 000004
【図３】
2005044017.tif 000005
【図４】
2005044017.tif 000006
【図５】
2005044017.tif 000007
【図６】
2005044017.tif 000008
【図７】
2005044017.tif 000009
【図８】
2005044017.tif 000010
【図９】
2005044017.tif 000011
【図１０】
2005044017.tif 000012