(57)【特許請求の範囲】
【請求項１】
シーケンスプログラムを実行するプログラマブルコントローラにおいて、
外部メモリから命令コードを読み出し実行するプロセッサと、
前記シーケンスプログラムに含まれる分岐命令の分岐先のプログラムコードを格納するためのインストラクションキャッシュメモリと、
前記分岐命令の命令コード上に前記インストラクションキャッシュメモリへのエントリーの優先度を示すデータを含み、該優先度データに従って分岐先のプログラムコードを前記インストラクションキャッシュメモリにエントリーするためのキャッシュコントローラと、
を有することを特徴とするプログラマブルコントローラ。
【請求項２】
前記シーケンスプログラム実行中、プログラムに含まれる個々の分岐命令の実行回数をカウントするカウンタと、
前記カウンタの値に従って、各分岐命令コードに処理の優先度を示すデータを付加する手段と、
前記シーケンスプログラムをプログラミングする際に命令分岐コードに処理の優先度を示すデータを付加する手段と、
を有することを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
前記インストラクションキャッシュメモリの全エントリーがフィルされたら、それ以降前記インストラクションキャッシュメモリの書き込みが行われないようにロックするロック手段と、
を有することを特徴とする請求項１に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラに関し、特に、分岐命令を高速に処理するためのインストラクションキャッシュを有するプログラマブルコントローラに関する。
【背景技術】
【０００２】
シーケンスプログラムを実行するプログラマブルコントローラにおいて、ＣＡＬＬ，ＪＵＭＰ等の分岐命令の実行手順は以下のようになる。
＜１＞プロセッサ内部のシーケンスプログラム用プログラムカウンタ（ＰＣ）に外部メモリのアドレスデータをセットする。
＜２＞プロセッサが外部メモリにアドレスデータを出力する。
＜３＞外部メモリがプログラムコードデータを出力する。
＜４＞プロセッサがプログラムコードデータを取り込み、実行する。
【０００３】
シーケンスプログラムがプログラマブルコントローラの外部のメモリに格納されている場合、図５に示すように、ＰＣセット（プログラムカウンタをセットした時点）から、プログラムの実行開始までにタイムラグがある。このタイムラグが分岐命令の処理時間を長くする原因になっている。この分岐命令の処理時間が長くなる問題を回避するため、例えば、特許文献１や特許文献２に開示されるように、通常、分岐先のプログラムコードを格納するインストラクションキャッシュを設け、分岐発生時このキャッシュから高速にプログラムコードを読み出すことにより、分岐発生時の処理時間を短縮している（図６，図７参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２２５７７号公報
【特許文献２】特表２０１０−５０９６８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
背景技術の欄で説明したように、インストラクションキャッシュを使用する構成でも、分岐先の数がインストラクションキャッシュのエントリー数より多い場合、プロセッサがインストラクションキャッシュを参照する前に、常に上書きされ、全くキャッシュヒットしない現象が発生する問題があり、インストラクションキャッシュが常に有効に作用するとは限らない。
【０００６】
そこで本発明の目的は、プロセッサ外部のメモリにシーケンスプログラムを格納するプログラマブルコントローラにおいて、シーケンスプログラムで使用されている分岐命令の一部または全ての処理時間を短縮することが可能なプログラマブルコントローラを提供することである。
【課題を解決するための手段】
【０００７】
本願の請求項１に係る発明は、シーケンスプログラムを実行するプログラマブルコントローラにおいて、外部メモリから命令コードを読み出し実行するプロセッサと、前記シーケンスプログラムに含まれる分岐命令の分岐先のプログラムコードを格納するためのインストラクションキャッシュメモリと、前記分岐命令の命令コード上に前記インストラクションキャッシュメモリへのエントリーの優先度を示すデータを含み、該優先度データに従って分岐先のプログラムコードを前記インストラクションキャッシュメモリにエントリーするためのキャッシュコントローラと、を有することを特徴とするプログラマブルコントローラである。  
請求項２に係る発明は、前記シーケンスプログラム実行中、プログラムに含まれる個々の分岐命令の実行回数をカウントするカウンタと、前記カウンタの値に従って、各分岐命令コードに処理の優先度を示すデータを付加する手段と、前記シーケンスプログラムをプログラミングする際に命令分岐コードに処理の優先度を示すデータを付加する手段と、を有することを特徴とする請求項１に記載のプログラマブルコントローラである。
【０００８】
請求項３に係る発明は、前記インストラクションキャッシュメモリの全エントリーがフィルされたら、それ以降前記インストラクションキャッシュメモリの書き込みが行われないようにロックするロック手段と、を有することを特徴とする請求項１に記載のプログラマブルコントローラである。
【発明の効果】
【０００９】
本発明により、プロセッサ外部のメモリにシーケンスプログラムを格納するプログラマブルコントローラにおいて、シーケンスプログラムで使用されている分岐命令の一部または全ての処理時間を短縮することが可能なプログラマブルコントローラを提供できる。
【図面の簡単な説明】
【００１０】
【図１】本発明に係るプログラマブルコントローラの構成を説明する図である。
【図２】インストラクションキャッシュメモリの記憶内容を示す図である。
【図３】分岐命令のオブジェクトコードの例を示す図である。
【図４】シーケンスプログラムの分岐命令に組み込まれるキャッシュエントリー優先度データを示す図である。
【図５】ＰＣセットからプログラムの実行開始までにタイムラグがあることを示す図である。
【図６】インストラクションキャッシュメモリを用いて処理時間を短縮することを示す図である。
【図７】インストラクションキャッシュメモリに格納される分岐先のプログラムコードデータを示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態を図面と共に説明する。図１は本発明に係るプログラマブルコントローラの構成を説明する図である。図２はインストラクションキャッシュメモリの記憶内容を示す図である。図３は分岐命令のオブジェクトコードの例を示す図である。図４はシーケンスプログラムの分岐命令に組み込まれるキャッシュエントリー優先度データを示す図である。
【００１２】
本発明にかかる実施形態は、外付けＳＤＲＡＭなど、プロセッサ外部のメモリにシーケンスプログラムを格納するプログラマブルコントローラにおいて、ＣＡＬＬ、ＪＵＭＰなどの分岐命令を高速に処理するための構成を備えている。
【００１３】
図１に示されるように、プログラマブルコントローラ１は、プロセッサ１０、メインメモリ１３、バッファ１４、インストラクションキャッシュメモリ１５、および、キャッシュコントローラ１６を備えている。プロセッサ１０は、プログラムカウンタ（ＰＣ）１１とインストラクションデコーダ１２を備えている。
【００１４】
従来技術同様、プログラマブルロジックコントローラ１の内部に、分岐先のコードをいくつか格納するためのインストラクションキャッシュメモリ（図１〜図４参照）を用意する。
【００１５】
ＰＣセット直後、コードデータをメインメモリ１３からではなく、このインストラクションキャッシュメモリ１５から取り出してシーケンスプログラムを実行することにより、メインメモリ１３からコードデータを取り出す場合に発生するタイムラグをキャンセルする（図６参照）。ただ、「発明が解決しようとする課題」で述べた通り、従来のキャッシュでは、プログラム中のサブルーチンなどの分岐先の数がキャッシュのエントリー数より多い場合、プロセッサ１０がキャッシュを参照する前に、常に上書きされ、全くキャッシュにヒットしない現象が発生する場合がある。
【００１６】
一方、シーケンスプログラムには、一般的なプロセッサが処理するプログラム同様、実行頻度の多い分岐命令及び非常に稀に実行される分岐命令が存在する。従来技術の問題点を回避し、インストラクションキャッシュメモリ１５を最大限有効利用するため、以下のような仕様を追加している。プログラマブルコントローラ１のユーザはキャッシュのエントリーに関して以下（１）〜（３）の方法のどれかを選択する。例えば、プログラム中の分岐先の数がキャッシュのエントリー数よりも小さい場合、（３）の方法を選択する。
【００１７】
（１）ＣＡＬＬ，  ＪＵＭＰ等の分岐命令の命令コード上に高速処理の優先度すなわちインストラクションキャッシュメモリ１５へのエントリーの優先度を示すデータを付加する。優先度は、例えば、以下のように３段階に分け、この優先度に応じてキャッシュを以下のように使い分ける。
◆優先度０：キャッシュを使用しない。分岐先命令コードはメインメモリ１３から読み出す。
◆優先度１：優先度低。エントリーの上書き有り。一度呼び出されたらその後繰り返し呼び出されるサブプログラムなどの場合にこの設定を行う。
◆優先度２：優先度高。エントリー後、キャッシュラインをロック。キャッシュラインの上書き無し。インストラクションデータは常にキャッシュに書き込まれている。インストラクションデータは常にキャッシュに書き込まれている。
【００１８】
この優先度データはシーケンスプログラムの仕様に従ってプログラマーがプログラミング時に付加する（図４参照）。シーケンスプログラムをコンパイルする際、この分岐命令コードに付加されている優先度を参照し、どの分岐命令の分岐先コードをどのようにキャッシュにエントリー（マッピング）するかを決定する。分岐先コードのキャッシュへの書き込みは実際に分岐命令が実行される時に実施される。
【００１９】
（２）シーケンスプログラム実行中、プログラムに含まれる個々の分岐命令の実行回数をカウントし、実行回数の多い分岐命令の分岐先プログラムコードから順番にキャッシュにエントリー（マッピング）する。一度エントリーした分岐先プログラムコードは上書きしない。プログラム中の各分岐命令実行回数は、例えばソフトウェアでシーケンスプログラム実行シミュレーションを行いカウントする。なお、これは、請求項２の「前記シーケンスプログラム実行中、プログラムに含まれる個々の分岐命令の実行回数をカウントするカウンタと、実行回数の多い分岐命令の分岐先プログラムコードから順番に前記インストラクションキャッシュメモリにエントリーするキャッシュラインフィル手段と、」に対応する。
【００２０】
（３）キャッシュへのエントリーに関して優先度の設定は行わず、通常のキャッシュと同様のフィルを行う。全エントリーがフィルされたら、それ以降キャッシュへの書き込みができないようにする（ロック）。ロックにより、インストラクションデータが上書きされないため、発明が解決しようとする課題に示した問題が回避される。
【００２１】
図１に示すプログラマブルコントローラ１では、分岐命令の処理を例えば次のように行う。  
＜１＞演算処理回路（プロセッサ１０）が分岐命令コードをフェッチする。  
＜２＞分岐命令コードに含まれるキャッシュ使用フラグ及びキャッシュロックフラグ（図３）を抽出しキャッシュコントローラ１６へ転送する（図１参照）。
＜３＞演算処理回路（プロセッサ１０）は分岐命令に従いプログラムカウンタ（ＰＣ）セットを実行。※ここで、ＰＣの値はメインメモリ１３の物理アドレスを示すものとする。
＜４＞キャッシュコントローラ１６は、キャッシュ使用フラグを参照する。
【００２２】
ここで、キャッシュ使用フラグが「有効」の状態を示す場合と「無効」の状態を示す場合を説明する。
[１]キャッシュ使用フラグが「有効」の状態を示す場合
キャッシュコントローラ１６は、インストラクションキャッシュメモリ１５のキャッシュタグとＰＣの値とを比較する（図２参照）。インストラクションキャッシュメモリ１５のタグの中にＰＣの値に該当するものがあれば、分岐先プログラムコードはインストラクションキャッシュメモリ１５に格納されていると判定する。
（ｉ）分岐先プログラムコードがキャッシュメモリにエントリーされている場合
（キャッシュ・ヒット）
・メインメモリのアドレス「ＰＣ＋キャッシュラインサイズ（バイト）」から分岐先プログラムコードの読み出しを開始する。メインメモリから読み出したプログラムコードは、バッファに格納する。
・演算処理回路はキャッシュメモリに格納されているプログラムコードを実行した後バッファに格納されているプログラムコードを読み出して実行する。
（ｉｉ）分岐先プログラムコードがインストラクションキャッシュメモリにエントリーされていない場合
（キャッシュ・ミスヒット）
・メインメモリ１３のアドレス「ＰＣ」から分岐先プログラムコードの読み出しを開始する。
・また、キャッシュコントローラ１６は、インストラクションキャッシュメモリ１５の未書き込みのラインに、未書き込みのラインがなければ、ロックビットが無効になっているラインに分岐先プログラムコードをエントリーする。
このとき、分岐命令コードから抽出したキャッシュロックフラグをキャッシュメモリのステイタスのロックビットにそのままコピーする。
※キャッシュメモリの全てのラインがロック状態になっている場合、インストラクションキャッシュメモリ１５へのエントリーを行わない。分岐命令以外の処理と同様の処理を順次行う。
【００２３】
［２］キャッシュ使用フラグが「無効」の状態を示す場合
インストラクションキャッシュメモリ１５へのエントリーは行わずに分岐命令以外の処理と同様の処理を順次行う。キャッシュラインのロックビットの状態によらず、単純に、キャッシュの全ラインにプログラムデータがエントリーされたら、キャッシュコントローラ１６がキャッシュ全体をロックするという仕様にしても、キャッシュが常に上書きされ全くキャッシュヒットしない現象（発明が解決しようとする問題）は回避することができる。
【符号の説明】
【００２４】
１  プログラマブルコントローラ
１０  プロセッサ
１１  プログラムカウンタ
１２  インストラクションデコーダ
１３  メインメモリ
１４  バッファ
１５  インストラクションキャッシュメモリ
１６  キャッシュコントローラ
【図４】
0005863855.tif 000002
【図１】
0005863855.tif 000003
【図２】
0005863855.tif 000004
【図３】
0005863855.tif 000005
【図５】
0005863855.tif 000006
【図６】
0005863855.tif 000007
【図７】
0005863855.tif 000008