| 【発明の名称】 |
メモリアクセス制御装置及びプログラム変換方法 |
| 【発明者】 |
【氏名】岩崎 洋一
|
| 【要約】 |
【課題】低速のメモリデバイスからデータを効率的に読み出す。
【解決手段】CPU11は、データの先読みを要求するために、オフセットアドレス及び変数アドレスをシステムバスSYSAD に順次送出する。これに応答してメモリ13は、オフセットアドレスに変数アドレスを書き込む。入出力装置12は、オフセットアドレスを検出すると、変数アドレスを用いて、先読みのアドレスを生成し、先読みのアドレスをメモリデバイス2に送出する。メモリデバイス2は、先読みのアドレスに対応するデータを入出力装置12に送出する。入出力装置12は、データを保持しておく。CPU11は、データのアドレスをシステムバスSYSAD に送出する。入出力装置12は、アドレスが先読みのアドレスに一致するか否かを判定し、両者のアドレスが一致すれば、先読みして保持しておいたデータをCPU11に与える。 |
【特許請求の範囲】
【請求項1】 メモリデバイスにアクセスして、メモリデバイスからデータを読み出すメモリアクセス制御装置において、システムバス上で、予め設定された外部変数を検出する監視手段と、監視手段によって検出された外部変数に代入される変数アドレスと、この外部変数に対応する予め設定された先頭アドレスとを加算することにより、先読みされるデータのアドレスを予測する予測手段と、予測手段によって予測されたアドレスに応じて、メモリデバイスからデータを読み出して保持する先読み保持手段とを備えることを特徴とするメモリアクセス制御装置。 【請求項2】 複数の外部変数に対応するそれぞれの先頭アドレスを登録した参照テーブルを更に備え、予測手段は、参照テーブルを参照することにより、外部変数に対応する先頭アドレスを求めることを特徴とする請求項1に記載のメモリアクセス制御装置。 【請求項3】 請求項1に記載のメモリアクセス制御装置のプログラム変換方法であって、メモリデバイスからデータを読み出すためのルーチンにおいて、外部変数を参照する様に、コードを変換するステップを含むことを特徴とするメモリアクセス制御装置のプログラム変換方法。 【請求項4】 ルーチンにメモリデバイスのアドレスが記述されている場合に、コードを変換するステップを適用することを特徴とする請求項3に記載のメモリアクセス制御装置のプログラム変換方法。 【請求項5】 外部変数に対応する先頭アドレスを参照テーブルに登録するステップと、同一の外部変数の登録を禁止するステップとを更に含むことを特徴とする請求項3に記載のメモリアクセス制御装置のプログラム変換方法。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、アクセス速度が低いメモリデバイスからデータを効率的に読み出すためのメモリアクセス制御装置に関する。 【0002】 【従来の技術】一般に、この種の装置においては、図14に示す様に該装置内のシステムバスSYSAD 上に、メモリデバイスのアドレスAddress が発生すると、このアドレスAddress がアドレス信号線ADDrを通じてメモリデバイスへと伝送され、これに応答してメモリデバイスからデータ信号線DATAを通じてデータDataが伝送され、このデータDataがシステムバスSYSAD 上に取り込まれる。 【0003】 【発明が解決しようとする課題】ところが、アドレスAddress を受け取ってから、データDataを送出するまでのメモリデバイスの応答速度が遅いと、メモリデバイスへのアクセス時間が長くなり、多くのデータを読み出すときには、長い時間を費やしてしまう。特に、メモリアクセス制御装置のシステムバスSYSAD のデータ転送速度が速い場合は、システムバスSYSAD の使用効率の低下を招くという問題が生じた。 【0004】このため、例えば特開平4−7762号公報に記載の「メモリアクセス方法」においては、メモリのアクセスのときに用いたアドレスに1ワード分の値を加算することによって、次のアドレスを予測し、この予測したアドレスを用いて、メモリをアクセスしている。 【0005】しかしながら、上記公報の技術によれば、メモリを連続的に繰り返しアクセスすることを前提とし、アクセス回数が多ければ、処理速度を十分に高くすることができるものの、アクセス回数が少なければ、全体の処理時間が短くなるとは限らず、その利点を活かすことが困難である。 【0006】また、所謂キャッシュにおいては、一度アクセスしたデータを保存しておき、2度目のアクセスのときに該データを直ちに読み出すことを可能にする。 【0007】しかしながら、このキャッシュの場合は、データを一度読み出すだけならば、何の利点もない。 【0008】更に、特開平8−95852号公報に記載の「バッファ回路」においては、前処理の実行に先立ち、先読みコマンドを先読み専用ポートに書き込んで、データをメモリから読み出し、この後に前処理等を実行し、これによりデータの先読みを実現している。 【0009】しかしながら、上記公報の技術においては、データの読み出し手順が一般的なものとは大きく異なり、前処理の以前に先読みのためのコマンドをプログラムに挿入したり、特殊な流れのプログラムを作成せねばならず、プログラムの開発及び実現に手間を要する。 【0010】そこで、本発明は、上記従来の問題点に鑑みてなされたものであり、1度のアクセスであっても、メモリデバイスからデータを効率的に読み出すことができ、またプログラムの開発が容易なメモリアクセス制御装置及びプログラム変換方法を提供することを目的とする。 【0011】 【課題を解決するための手段】上記課題を解決するために、本発明は、メモリデバイスにアクセスして、メモリデバイスからデータを読み出すメモリアクセス制御装置において、システムバス上で、予め設定された外部変数を検出する監視手段と、監視手段によって検出された外部変数に代入される変数アドレスと、この外部変数に対応する予め設定された先頭アドレスとを加算することにより、先読みされるデータのアドレスを予測する予測手段と、予測手段によって予測されたアドレスに応じて、メモリデバイスからデータを読み出して保持する先読み保持手段とを備えている。 【0012】この様な本発明によれば、外部変数が検出されると、この外部変数に係わる先頭アドレス及び変数アドレスから先読みされるデータのアドレスが生成され、先読みが開始される。このため、メモリデバイスからの読み出しを行う一般的なルーチンにおいて、外部変数に応答して、変数アドレスと先頭アドレスを加算し、これにより先読みされるデータのアドレスを生成する様に、該ルーチンのコードを変換すれば、先読みを実行することができる。従って、従来の様に先読みのためのコマンドを必要とせず、一般的なルーチンのコードを変換するだけで良い。また、外部変数の検出からデータの先読みまでの処理手順が極めて簡単であり、データが少数であっても、処理時間が短くて済む。 【0013】また、本発明においては、複数の外部変数に対応するそれぞれの先頭アドレスを登録した参照テーブルを更に備え、予測手段は、参照テーブルを参照することにより、外部変数に対応する先頭アドレスを求めている。 【0014】この様な参照テーブルを設けることにより、複数の外部変数のいずれにも応答して、複数のデータの先読みが可能になる。 【0015】次に、本発明は、上記メモリアクセス制御装置のプログラム変換方法であって、メモリデバイスからデータを読み出すためのルーチンにおいて、外部変数を参照する様に、コードを変換するステップを含んでいる。 【0016】ここでは、メモリデバイスからの読み出しを行う一般的なルーチンにおいて、外部変数を参照する様に、該ルーチンのコードを変換している。これにより、外部変数に応答して、先読みの処理を行うことが可能になる。 【0017】また、本発明においては、ルーチンにメモリデバイスのアドレスが記述されている場合に、コードを変換するステップを適用している。 【0018】メモリデバイスからの読み出しを行う一般的なルーチンにおいては、データの読み出し処理に、アドレスが必ず伴うので、このアドレスに応じて、コードを変換している。 【0019】更に、本発明においては、外部変数に対応する先頭アドレスを参照テーブルに登録するステップと、同一の外部変数の登録を禁止するステップとを更に含んでいる。 【0020】参照テーブルは、外部変数に対応する先頭アドレスを求めるために用いられる。この参照テーブルには、同一の外部変数が重複して登録されることはない。 【0021】 【発明の実施の形態】以下、本発明の実施形態を添付図面を参照して説明する。 【0022】図1は、本発明のメモリアクセス制御装置の一実施形態を示すブロック図である。本実施形態のメモリアクセス制御装置1は、中央処理装置(以下CPUと称す)11と、入出力装置12と、ROM及びRAM等からなるメモリ13とを備えており、動作速度が低いメモリデバイス2に対するデータの書き込み及び読み出しを行うものである。 【0023】図1において、システムバスSYSAD は、データ及びアドレス等を転送する。CPU11は、アドレスをシステムバスSYSAD に送出し、アドレスストローブ信号ASを「ハイ」にすることにより、該アドレスを確定し、また選択信号/IO _CSを「ロー」にすることにより、入出力装置12を選択する。入出力装置12は、アドレスストローブ信号ASが「ハイ」になり、選択信号/IO _CSが「ロー」になると、システムバスSYSAD 上のアドレスAddress を取り込む。CPU11は、リードライト信号M _RD/M_WRを「ロー」にすることにより、書き込みを入出力装置12に指示したり、リードライト信号M _RD/M_WRを「ハイ」にすることにより、読み出しを入出力装置12に指示する。また、入出力装置12は、アクセス待機要求信号/WAIT を「ハイ」にして、入出力装置12へのアクセスが行われない様に、CPU11を待機させる。更に、CPU11は、選択信号/MEM_CSを「ロー」にすることにより、メモリ13を選択する。 【0024】入出力装置12は、メモリデバイス2へのアクセスのときに、選択信号/CS を「ロー」にする。入出力装置12は、リードライト信号RD/WR を「ロー」に設定することにより、書き込みをメモリデバイス2に指示したり、リードライト信号RD/WR を「ハイ」にすることにより、読み出しをメモリデバイス2に指示する。メモリデバイス2は、選択信号/CS が「ロー」のときに、アドレス信号線ADDr上のアドレスAddress を取り込み、リードライト信号RD/WR に応じて、データ信号線DATA上のデータDataを書き込んだり、あるいは読み出したデータDataをデータ信号線DATAに送出する。 【0025】本実施形態のメモリアクセス制御装置1の概略動作は、次の通りである。 【0026】CPU11は、データの先読みを要求するために、変数アドレスAddressiを求め、この変数アドレスaddressiに対応する外部変数(メモリ13のアドレスであって、以下オフセットアドレスoffseti と称す)を生成する。そして、CPU11は、選択信号/IO _CSを「ハイ」に、選択信号/MEM_CSを「ロー」にして、オフセットアドレスoffseti 及び変数アドレスaddressiをシステムバスSYSAD に順次送出する。これに応答してメモリ13は、オフセットアドレスoffsetn の位置に変数アドレスaddressnを書き込む。 【0027】一方、入出力装置12は、選択信号/IO _CSが「ハイ」のときに、オフセットアドレスoffseti を検出すると、変数アドレスaddressiを用いて、先読みのアドレスを生成し、この先読みのアドレスをアドレス信号線ADDrを通じてメモリデバイス2に送出し、選択信号/CS 及びリードライト信号RD/WR によりデータの読み出しをメモリデバイス2に指示する。これに応答してメモリデバイス2は、先読みのアドレスに対応するデータDataを読み出し、このデータDataをデータ信号線DATAを通じて入出力装置12に送出する。入出力装置12は、このデータDataを保持しておく。 【0028】この後、CPU11は、選択信号/IO _CSを「ロー」に、リードライト信号M_RD/M_WRを「ハイ」にして、データのアドレスAddress をシステムバスSYSADに送出する。入出力装置12は、選択信号/IO _CSが「ロー」で、リードライト信号M _RD/M_WRが「ハイ」のときに、データのアドレスAddress を検出すると、このアドレスAddress が先読みのアドレスに一致するか否かを判定し、両者のアドレスが一致すれば、先読みして保持しておいたデータDataをCPU11に与える。 【0029】図2は、先読みして保持したおいたデータDataを入出力装置12からCPU11に与えるときのタイミングを示している。図2から明らかな様に、選択信号/IO _CSを「ロー」に、リードライト信号M _RD/M_WRを「ハイ」にして、データのアドレスAddress をシステムバスSYSAD に送出した直後に、システムバスSYSAD 上にデータDataが送出されるので、メモリデバイス2は、見かけ上、データDataを高速で読み出して、メモリアクセス制御装置1に返したことになる。 【0030】尚、両者のアドレスが一致しなければ、入出力装置12は、通常の手順で、メモリデバイス2をアクセスして、このメモリデバイス2からデータを読み出し、このデータをCPU11に与える。 【0031】ここで、メモリデバイス2のアドレスが一定の先頭アドレス(SLOW_START1)と変化する変数アドレス(address1)との和(SLOW_START1+address1)であるとする。この場合、先頭アドレス(SLOW_START1)と、変化する変数アドレス(address1)を共に特定しなければならない。このため、入出力装置12は、図3に示す様な参照テーブルAを備えている。この参照テーブルAにおいては、複数のオフセットアドレスoffset1 、offset2 、……、offsetimaxと複数の先頭アドレスSLOW_START1、SLOW_START2、……等を対応づけて格納している。 【0032】入出力装置12では、システムバスSYSAD からオフセットアドレスoffseti を検出すると、このオフセットアドレスoffseti を参照テーブルAの各オフセットアドレスと比較する。そして、両者のオフセットアドレスが一致すると、このオフセットアドレスoffseti に変数アドレスaddressiを代入すると共に、このオフセットアドレスに対応する先頭アドレスを選択する。更に、先頭アドレスと変数アドレスaddressiとを加算して、先読みのアドレスを求める。 【0033】この様な先読みのアドレスの生成とデータの先読みは、入出力装置12によって図4(b)に示す様なルーチンを実行することによりなされる。図4(b)のルーチンにおいては、文103によりオフセットアドレスoffset1 に変数アドレスaddress1が代入され、文101により先頭アドレスと変数アドレスaddress1の和である先読みのアドレス(SLOW_START1+address1)が求められて、データの先読みが行われている。各文104,102によっても同様の処理が行われる。 【0034】尚、図4(a)は、通常の読み出しを行うためのルーチンを示している。図4(a)と図4(b)の比較から明らかな様に、図4(b)の先読みのためのルーチンは、図4(a)の通常の読み出しのためのルーチンに、幾つかの文を追加挿入しただけのものであり、両者のルーチンの基本的な流れに変化はない。 【0035】図5は、入出力装置12の構成を示すブロック図である。図5に示す様に入出力装置12は、この入出力装置12を統括的に制御するコントロール部21と、先読みのアドレスを生成する先読み起動アドレス部22と、この先読みのアドレスを保持する先読みアドレスラッチ部23と、通常の読み出しのアドレスを保持するアドレスラッチ部24と、先読みアドレスラッチ部23内のアドレスとアドレスラッチ部24内のアドレスを比較するコンパレータ25と、メモリデバイス2から先読みされたデータを保持する先読みデータラッチ部26と、メモリデバイス2から通常に読み出されたデータを入力してシステムバスSYSAD に送出するデータゲート部27とを備えている。 【0036】図6は、入出力装置12による先読みのための処理手順を示すフローチャートである。 【0037】まず、CPU11は、メモリデバイス2の先読みされるデータのアドレス(SLOW_START1+addressi)の変数アドレスaddressiを求める。この変数アドレスaddressiを求めるには、周知の方法を適用すれば良く、例えばメモリデバイス2から前回に読み出されたデータのアドレスを予め設定された値だけインクリメントするのが簡単な方法である。そして、CPU11は、先読みを要求するために、選択信号/IO _CSを「ハイ」に、選択信号/MEM_CSを「ロー」にして、オフセットアドレスoffsetn 及び変数アドレスaddressiをシステムバスSYSAD に順次送出する。メモリ13は、選択信号/MEM_CSが「ロー」であるからオフセットアドレスoffsetn を取り込み、リードライト信号M _RD/M_WRが「ロー」となったときにシステムバスSYSAD 上の変数アドレスaddressiを書き込む。 【0038】一方、入出力装置12のコントロール部21は、選択信号/IO _CSが「ハイ」のときに、アドレスストローブ信号ASが「ハイ」になると(ステップS11,Yes)、信号/WE3により先読み起動アドレス部22を制御し、システムバスSYSAD から先読み起動アドレス部22にオフセットアドレスoffsetn を取り込む。先読み起動アドレス部22は、参照テーブルAを保持しており、値iを「1」に初期設定してから(ステップS12)、この値iに対応するオフセットアドレスoffset1 を参照テーブルAから読み出し、このオフセットアドレスoffset1 がシステムバスSYSAD のオフセットアドレスoffsetn に一致するか否かを判定する(ステップS13)。仮に、2つのアドレスが一致しなければ(ステップS13,No)、値iを1つ歩進して「2」に更新する(ステップS14)。そして、値iが最大値imax に達していないことを確認してから(ステップS15,No)、この値iに対応するオフセットアドレスoffset2 を参照テーブルAから読み出し、このオフセットアドレスoffset2 がシステムバスSYSAD のオフセットアドレスoffsetn に一致するか否かを判定する(ステップS13)。以降同様に、2つのアドレスが一致しなければ、値iを逐次歩進し、参照テーブルAのオフセットアドレスoffseti がシステムバスSYSAD のオフセットアドレスoffsetn に一致するか否かを判定することにより、参照テーブルAを検索する。そして、参照テーブルAのいずれのオフセットアドレスoffseti もシステムバスSYSAD のオフセットアドレスoffsetn に一致しなければ(ステップS15,Yes)、先読みを行わずにステップS11に戻る。 【0039】また、参照テーブルAのオフセットアドレスoffseti がシステムバスSYSAD のオフセットアドレスoffsetn に一致すると(ステップS13,Yes)、先読み起動アドレス部22は、参照テーブルAのオフセットアドレスoffseti に対応する先頭アドレスSLOW_STARTIを選択する。そして、コントロール部21は、リードライト信号RD/WR が「ロー」となるまで待機し(ステップS16)、この信号が「ロー」になると(ステップS16,Yes)、システムバスSYSAD から先読み起動アドレス部22に変数アドレスaddressiを取り込む。先読み起動アドレス部22は、オフセットアドレスoffseti に変数アドレスaddressiを代入して、先頭アドレスSLOW_STARTIと変数アドレスaddressiを加算し、先読みのアドレス(SLOW_STARTI+addressi)を求め(ステップS17)、この先読みのアドレス(SLOW_STARTI+addressi)を先読みアドレスラッチ部23に与えると共に、この先読みのアドレス(SLOW_STARTI+addressi)をアドレス信号線ADDrを通じてメモリデバイス2に送出する。このとき、コントロール部21は、信号/WE1により先読みアドレスラッチ部23を制御し、ここに先読みのアドレス(SLOW_STARTI+addressi)を保持させ、また選択信号/CS を「ロー」にする(ステップS18)。 【0040】メモリデバイス2は、選択信号/CS が「ロー」のときに、先読みのアドレス(SLOW_STARTI+addressi)を取り込み、この先読みのアドレスに対応する先読みのデータDataを読み出し、この先読みのデータDataをデータ信号線DATAを通じて入出力装置12に送出する。 【0041】コントロール部21は、信号/WE2により先読みデータラッチ部26を制御し、メモリデバイス2からの先読みのデータDataを先読みデータラッチ部26に取り込んで保持させる(ステップS19)。 【0042】図7は、図6のフローチャートの処理に伴う、各信号の変化を示すタイミングチャートである。図7のタイミングチャートにおいては、時点T0 で、選択信号/MEM_CS及びアドレスストローブ信号ASが「ロー」となって、オフセットアドレスoffsetn がシステムバスSYSAD に送出され、時点T1 で、リードライト信号M_RD/M_WRが「ロー」となって、変数アドレスaddressiがシステムバスSYSAD に送出される。更に、時点T2 で、選択信号/CS が「ロー」となって、先読みのアドレス(SLOW_STARTI+addressi)がアドレス信号線ADDrに送出され、時点T3で、先読みのデータDataがデータ信号線DATAに送出される。 【0043】この様に入出力装置12は、CPU11からメモリ13へと送出されたオフセットアドレスoffsetn に応答して、先読みの処理を開始し、このオフセットアドレスoffsetn 及びメモリ13に書き込まれる変数アドレスaddressiを用いて、先読みアドレスを生成している。また、入出力装置12により実行される図4(b)のルーチンは、図4(a)の通常の読み出しを行うためのルーチンに、幾つかの文を追加挿入しただけのものである。このため、先読みのために格別なコマンドや処理の流れを必要とせず、データDataの数にかかわらず、通常の読み出しとほぼ同様の手順で、先読みを速やかに行うことができる。 【0044】図8は、先読みされたデータDataをCPU11に与えるための処理手順を示すフローチャートである。 【0045】入出力装置12のコントロール部21は、選択信号/IO _CSの「ロー」を待機しており(ステップS1)、選択信号/IO _CSが「ロー」となり(ステップS1,Yes)、リードライト信号M _RD/M_WRが「ハイ」となって(ステップS2,Yes)、データの読み出しが要求されると、コンパレータ24からの信号EQ1 が「ハイ」になるのを待機する(ステップS4)。このとき、CPU11によってアドレスストローブ信号ASが「ハイ」にされ、CPU11からデータのアドレスがシステムバスSYSAD に送出され、このアドレスが入出力装置12のアドレスラッチ部25に取り込まれて保持される。 【0046】コンパレータ24は、先読みアドレスラッチ部23内の先読みのアドレス(SLOW_STARTI+addressi)とアドレスラッチ部25内のアドレスを比較し、2つのアドレスが一致すると(ステップS4,Yes)、信号EQ1 を「ハイ」にする。これに応答してコントロール部21は、信号/RE を「ハイ」にして、先読みデータラッチ部26からシステムバスSYSAD へと先読みのデータDataを送出させる(ステップS5)。この先読みのデータDataは、CPU11に取り込まれる。この後、信号/RE 及び信号/OE を「ロー」に設定してから(ステップS9)、ステップS1に戻る。 【0047】この様に先読みのデータDataがメモリデバイス2から既に読み出されて先読みデータラッチ部26に保持されているので、CPU11から指示されたアドレスが先読みのアドレス(SLOW_STARTI+addressi)に一致したときには、先読みデータラッチ部26からCPU11へとデータDataを直ちに与えることができる。すなわち、図2のタイミングチャートを参照して先に説明した様に、アドレスAddress がシステムバスSYSAD に送出された直後に、システムバスSYSAD 上にデータDataが送出されるので、見かけ上、データDataが高速で読み出されたことになる。 【0048】尚、先読みアドレスラッチ部23内の先読みのアドレスとアドレスラッチ部25内のアドレスが一致しなければ(ステップS4,No)、コントロール部21は、コンパレータ24から「ロー」の信号EQ1 を入力し、通常の読み出し処理を行う。すなわち、アクセス待機要求信号/WAIT を「ハイ」にして、入出力装置12へのアクセスを禁止してから(ステップS6)、選択信号/CS を「ロー」に、リードライト信号RD/WR を「ハイ」にして、アドレスAddress をアドレス信号線ADDrを通じてメモリデバイス2に送出する(ステップS7)。そして、信号/OEを「ハイ」にすることにより、メモリデバイス2からデータ信号線DATAを通じて伝送されてきたデータDataをデータゲート部27に入力して、ここからデータDataをシステムバスSYSAD に送出させる(ステップS8)。この後、信号/RE 及び信号/OE を「ロー」に設定して、ステップS1に戻る。 【0049】また、リードライト信号M _RD/M_WRが「ロー」となって(ステップS2,No)、データの書き込みが要求されると、データをメモリデバイス2に書き込むための通常の書き込み処理が行われる(ステップS3)。 【0050】ところで、本実施形態の先読みの処理は、図4(b)に示す様なルーチンを用いるので、これを予め作成しておく必要がある。このルーチンを最初から作成することも可能であるが、この場合には、プログラムの作成者に多大な負担を強いることになる。しかしながら、先に述べた様に図4(b)の先読みのためのルーチンは、図4(a)の通常の読み出しのためのルーチンに、幾つかの文を追加挿入しただけのものであり、両者のルーチンの基本的な流れに変化はない。しかも、それらの文の挿入は、所定の法則に従ってなされる。このため、通常の読み出しのためのルーチンを作成してから、これを先読みのためのものに自動的に変換することが可能である。 【0051】図9は、通常の読み出しのルーチンのコードを先読みのルーチンのコードに自動的に変換するための処理の一例を示すフローチャートである。 【0052】ここでは、プログラムを先頭から文単位でループ処理している。まず、メモリデバイスからデータを読み出すためのルーチンや関数をプログラムから検索する(ステップS21)。該当するルーチンや関数があれば、これらのルーチンや関数には、データのアドレス空間が必ず存在するので、先頭アドレスと変数アドレスの組み合わせをチェックする(ステップS22)。図4(a)の通常の読み出しのためのルーチンを例に挙げると、文101のアドレス(SLOW_START1+address1)については、先頭アドレス(SLOW_START1)と変数アドレス(address1)との組み合わせがチェックされ、また文102のアドレス(SLOW_START2+address2)については、先頭アドレス(SLOW_START2)と変数アドレス(address2)との組み合わせがチェックされる。 【0053】引き続いて、それぞれの組み合わせが新規のものであるか否かが確認される(ステップS23)。組み合わせが新規であれば(ステップS23,Yes)、変数アドレスaddressiに対応するオフセットアドレスoffseti が設定され(ステップS24)、オフセットアドレスoffseti 及び先頭アドレス(SLOW_STARTI)を対応付けて参照テーブルAに登録する(ステップS25)。また、組み合わせが新規でなければ(ステップS23,No)、各ステップS24,25の処理を行わない。 【0054】こうして参照テーブルAへの書き込みを行った後に、オフセットアドレスoffseti に変数アドレスaddressiを代入するための文を書き込む(ステップS27)。 【0055】各ステップS21〜S27までの処理は、プログラム中のデータを読み出すための全てのルーチンや関数に対して繰り返し施される。この後、全てのオフセットアドレスoffseti の定義宣言をプログラムに追加し(ステップS28)、更に参照テーブルAの初期化プログラムを生成する(ステップS29)。 【0056】図10は、参照テーブルAの初期化プログラムを例示している。この初期化プログラムは、先読み起動アドレス部22のレジスタ内の参照テーブルAに、オフセットアドレスoffseti と先頭アドレスの組み合わせを設定するためのものである。 【0057】図11は、図9のステップS27の処理を詳しく示すフローチャートである。 【0058】ここでは、プログラムを逆方向に文単位でループ処理している。まず、メモリデバイスからデータを読み出すためのルーチンや関数を検索し、これらのルーチンや関数の先頭を見つけ出す(ステップS31,Yes)。そして、これらのルーチンや関数において、データの読み出しを示す文の前に、オフセットアドレスoffseti に変数アドレスaddressiを代入するための文を挿入する(ステップS36)。 【0059】また、メモリデバイスからデータを読み出すためのループの先頭を見つけ出した場合は(ステップS32,Yes)、データの読み出しを示す文の前に、オフセットアドレスoffseti に変数アドレスaddressiを代入するための文を挿入する(ステップS36)。 【0060】こうして代入のための文が挿入されると、図9のフローチャートに戻る。 【0061】また、プログラムの途中で、何等かの計算式等により変数アドレスが変更される場合は(ステップS33,Yes)、変数アドレスの変更直後に、変数アドレスをオフセットアドレスoffseti に代入するための文を挿入する(ステップS34)。例えば、コード変換前の図12(a)のルーチンにおいては、文105によって変数アドレスaddress3が変更されている。この場合、コード変換後の図11(b)のルーチンにおいては、変数アドレスaddress3をオフセットアドレスoffset3 に代入するための文106が挿入される。このとき、代入のための文の挿入後、直ちに図9のフローチャートに戻らず、変数アドレスが無条件で変更されるのか否かが確認される(ステップS35)。そして、無条件で変更されるのであれば(ステップS35,Yes)、つまり「if」等の分岐条件無しに変更されるのであれば、これより以前に変数アドレスの変更があっても、この後に変数アドレスを変更することになるので、前の段階でデータを先読みする必要性がなく、この時点で、図9のフローチャートに戻る。 【0062】また、変数アドレスが条件付きで変更されるのであれば(ステップS35,No)、つまり「if」等の分岐条件付きで変更されるのであれば、これより以前に変更前の変数アドレスが先読みのために使用される可能性があるため、この時点では、図9のフローチャートに戻らず、更に逆方向に進んで、代入のための文を挿入するための処理を継続する(ステップS38)。例えば、図12(a)のルーチンにおいて、文105が「if」の条件付きで存在する。このため、図12(b)に示す様に、代入のための文106を挿入してから、更に逆方向に進んで、変数アドレスaddress3をオフセットアドレスoffset3 に代入するための文107を挿入する。 【0063】図11のフローチャートにおいては、通常、各ステップS31,32,35のいずれかにおいて「Yes」となって、この処理を終了するが、これらのステップSのいずれにおいても「Yes」とならずに、プログラム先頭へ到達し、ループエンドとなった場合には、プログラムに誤りがあるので、エラー処理を行う(ステップS37)。 【0064】尚、本発明は、上記実施形態に限定されるものでなく、多様に変形することができる。例えば、図13(a)のルーチンを図13(b)に示す様にコード変換しても良い。図13(b)のルーチンにおいては、変数アドレスをオフセットアドレスoffseti に置き換えている。また、入出力装置において、複数組の先読みデータラッチ部と先読みアドレスラッチ部を備え、複数のアドレスに応じて複数のデータを先読みしても構わない。これにより、先読みを効率的に行うことが可能になる。 【0065】 【発明の効果】以上説明した様に本発明のメモリアクセス制御装置によれば、外部変数が検出されると、この外部変数に係わる先頭アドレス及び変数アドレスから先読みされるデータのアドレスが生成され、先読みが開始される。このため、メモリデバイスからの読み出しを行う一般的なルーチンにおいて、外部変数に応答して、変数アドレスと先頭アドレスを加算し、これにより先読みされるデータのアドレスを生成する様に、該ルーチンのコードを変換すれば、先読みを実行することができる。従って、従来の様に先読みのためのコマンドを必要とせず、一般的なルーチンのコードを変換するだけで良い。また、外部変数の検出からデータの先読みまでの処理手順が極めて簡単であり、データが少数であっても、処理時間が短くて済む。 【0066】また、本発明によれば、参照テーブルを設けているので、複数の外部変数のいずれにも応答して、複数のデータの先読みが可能になる。 【0067】更に、本発明のプログラム変換方法によれば、メモリデバイスからの読み出しを行う一般的なルーチンのコードを変換するだけで、データの先読みが可能となるので、プログラムの作成が容易になる。
|
| 【出願人】 |
【識別番号】000005049 【氏名又は名称】シャープ株式会社
|
| 【出願日】 |
平成12年10月18日(2000.10.18) |
| 【代理人】 |
【識別番号】100075502 【弁理士】 【氏名又は名称】倉内 義朗
|
| 【公開番号】 |
特開2002−132575(P2002−132575A) |
| 【公開日】 |
平成14年5月10日(2002.5.10) |
| 【出願番号】 |
特願2000−318221(P2000−318221) |
|