(57)【特許請求の範囲】
【請求項１】
ビット演算処理の対象となる１ビットのデータを複数個まとめたワードの単位でメモリの読み書きを行うプログラマブルコントローラであって、
プログラムに含まれるビット演算処理命令列を、パイプライン処理機構によって並列に実行するビット演算プロセッサを備え、
前記ビット演算プロセッサが備えるパイプラインステージは、前記ビット演算処理命令を構成する各命令をデコードし、そのデコードした命令がメモリアクセスを伴う場合はデータアドレスを生成するデコードステージの次にリードステージがあり、演算対象となるデータをワード単位でメモリから読み込む前記リードステージの次に演算ステージがあり、前記演算ステージの次に、前記演算ステージによって演算されたビット演算の結果を含むワードデータを前記リードステージで読み込んだデータと同じアドレスに書き込むライトステージがあり、
前記メモリは、
単一のパイプラインステージ処理サイクル時間内に１回以上のリードと１回以上のライトとを行うことができる２ポート以上のメモリであるとともに、
前記リードステージにて読み込んだデータのアドレスを保持する第１アドレス保持レジスタと、前記第１アドレス保持レジスタからコピーされる前記データのアドレスを、前記ライトステージまで保持し、前記ライトステージの書き込み先アドレスとして使用させる第２アドレス保持レジスタと、を有するアドレス保持回路を備える
ことを特徴とするプログラマブルコントローラ。
【請求項２】
ビット演算処理の対象となる１ビットのデータを複数個まとめたワードの単位でメモリの読み書きを行うプログラマブルコントローラであって、
プログラムに含まれるビット演算処理命令列を、パイプライン処理機構によって並列に実行するビット演算プロセッサを備え、
前記ビット演算プロセッサが備えるパイプラインステージは、前記ビット演算処理命令を構成する各命令をデコードし、そのデコードした命令がメモリアクセスを伴う場合はデータアドレスを生成するデコードステージの次にリードステージがあり、演算対象となるデータをワード単位でメモリから読み込む前記リードステージの次に演算ステージがあり、前記演算ステージの次に、前記演算ステージによって演算されたビット演算の結果を含むワードデータを前記リードステージで読み込んだデータと同じアドレスに書き込むライトステージがあり、
前記メモリは、
単一のパイプラインステージ処理サイクル時間内に１回以上のリードと１回以上のライトとを行うことができる２ポート以上のメモリであり、かつ、少なくとも２ウェイ以上のセットアソシアティブ方式又はフルアソシアティブ方式のキャッシュメモリであるとともに、
前記リードステージにて読み込んだキャッシュエントリのアドレスから抜き出されたインデックス情報を保持する第１インデックス保持レジスタと、
前記リードステージにてヒットしたウェイ情報を保持する第１ウェイ保持レジスタと、
前記第１インデックス保持レジスタからコピーされる前記インデックス情報を、前記ライトステージまで保持する第２インデックス保持レジスタと、
前記第１ウェイ保持レジスタからコピーされる前記ウェイ情報を、前記ライトステージまで保持する第２ウェイ保持レジスタと、を有しており、
前記第２インデックス保持レジスタ内の前記インデックス情報と、前記第２ウェイ保持レジスタ内の前記ウェイ情報との組み合わせを、前記ライトステージの書き込み先アドレスとして使用させるアドレス保持回路を備える
ことを特徴とするプログラマブルコントローラ。
【請求項３】
前記ビット演算プロセッサは、
前記ビット演算処理命令列のなかのビットデータのストア命令を実行するときに、
前記リードステージにてストア対象のビットを含む元のワードデータを読み込んで記憶部に保持しておき、
前記演算ステージにて演算された前記ビット演算の結果のビットデータを、前記保持した元のワードデータにマージする
ことを特徴とする請求項１または請求項２に記載のプログラマブルコントローラ。
【請求項４】
キャッシュヒット判定を前記リードステージで行い、前記ライトステージでは前記アドレス保持回路の前記第２インデックス保持レジスタに保持された前記インデックス情報及び前記第２ウェイ保持レジスタに保持された前記ウェイ情報によって示されるキャッシュエントリに、前記ビット演算の結果を含むワードデータがマージされたラインデータを書き込む
ことを特徴とする請求項２に記載のプログラマブルコントローラ。
【請求項５】
ストアするアドレス範囲によってライトスルーモードとライトバックモードを切り替える
ことを特徴とする請求項２に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、鉄鋼、電力、上下水道等のプラントや各種機械に対してシーケンス制御を高速に行うビット演算プロセッサを搭載したプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラにおいては、従来からシーケンス制御を効率よく記述できるラダー言語が使われている。ラダー言語では、スイッチの開閉状態等、１ビットで表わされる情報を入力とし、リレー（継電器）出力等、１ビットで表わされる情報を出力とする場合が多い。そのため、プログラマブルコントローラは、ラダー言語特有の１ビットデータ処理を高速に行うため、専用のビット演算プロセッサを搭載することが多い。
【０００３】
ビット演算プロセッサは、１ビットのデータを扱うのに適した専用の命令セットをサポートしているが、演算結果を格納する先は汎用のメモリ素子であるため、８ビットや１６ビットといったメモリ素子のアクセス単位サイズに合わせなければならない。汎用のメモリ素子に対して１ビットのデータを書き込むには、リードモディファイライト動作、即ち、メモリをアクセス単位サイズでリードし、リードしたデータの一部を変更し、再びアクセス単位サイズでライトする動作、が必要になるため、ラダー言語処理では汎用言語処理よりもメモリアクセス回数が多くなる特徴がある。
【０００４】
ビット演算プロセッサの高速化に関連する従来技術として、特許文献１には、過去複数回分のワード単位のメモリアクセスアドレスとデータを高速アクセスが可能なバッファに記憶しておき、アクセスしようとするビットを含むワードデータのアドレスがバッファに記憶されているアドレスと一致する場合には、メモリでなくバッファ上のデータを使用することによりメモリアクセス回数を減らす工夫が記載されている。
【０００５】
一方、汎用コンピュータの分野では、メモリアクセスの高速化のために従来からキャッシュメモリが使用されてきたが、近年の半導体微細化に伴い、キャッシュメモリ用内部ＳＲＡＭ（Static Random Access Memory）のソフトエラー対策が必要になり、キャッシュメモリにＥＣＣ（Error Check and Correct：誤り検出・訂正符号）を付加して保護する場合も多くなってきている。ＥＣＣの付加単位は４バイト程度で設計されることが多いため、キャッシュメモリへの書き込み単位も４バイト以上になってしまう。汎用コンピュータの命令でも１バイトや２バイトの書き込みがサポートされるが、このようなＥＣＣ付加単位以下のサイズの書き込みを行おうとするとキャッシュメモリに対してリードモディファイライトを行うことになる。
【０００６】
単純な構成のキャッシュメモリでリードモディファイライトを行う場合、キャッシュメモリが２サイクル以上占有され、その間プロセッサのパイプライン処理が中断されてしまう。リードモディファイライトがあってもパイプライン処理を中断させないための工夫としては、複数段のストアバッファを設け、ストア処理を置き去りにすることが行われている。特許文献２には、ＥＣＣを付加したキャッシュメモリのストアバッファの構成が記載されている。なお、ストアバッファによるストア処理の置き去りは、ロード・ストア命令以外を実行する際のキャッシュメモリの空き時間を利用してストア処理を行うものであるため、パイプライン処理の中断を確定的に無くすものではなく、中断の確率をできるだけ減らす工夫である。
【０００７】
また、特許文献３には、キャッシュメモリを多ポート化し、オペランドフェッチ（リード）のパイプラインステージとオペランドライトのパイプラインステージを分けることにより、メモリ間データ転送を行う命令を効率よく実行するための工夫が記載されているが、キャッシュミス時の動作やオペランドフェッチとライトのアドレス競合時の動作については記載されていないし、リードモディファイライトの処理にも全く触れられていない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−３９１６０号公報
【特許文献２】国際公開第２００７／０８８５９７号
【特許文献３】特開平４−４０５２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ラダー言語処理用のビット演算プロセッサにおいても高速化のためにパイプライン処理やキャッシュメモリを採用することが考えられるが、前述のようにラダー言語処理ではリードモディファイライトが多発するため、リードモディファイライトによるパイプライン処理のストール（中断）を防ぐ必要がある。特許文献２のようにアドレス比較器の付いた多段のストアバッファを使用すれば、パイプライン処理が中断する確率を減らすことができるが、ラダー言語で記述されるプログラムは汎用言語に比べてビット単位でのストア命令の比率が高い傾向があり、ストアバッファの段数をより大きくしなければならず、実現に必要な回路規模が大きくなってしまう。
【００１０】
一方、現在のほとんどの汎用プロセッサの命令セットは、ＲＩＳＣ（Reduced Instruction Set Computer：縮小命令セットコンピュータ）の思想が取り入れられているため、演算処理とロード・ストア処理とはそれぞれ異なる命令で実行されるようになっている。即ち、演算処理は演算命令によって汎用レジスタ間で行い、メモリとレジスタ間のロード・ストアは別の命令で行うようになっている。このため、汎用プロセッサ用のパイプラインは、レジスタ間演算に適した構成になっているが、ラダー言語処理はメモリとアキュムレータ間の演算が中心であり、汎用プロセッサ用のパイプライン構成は必ずしも処理効率のよいものではない。
【００１１】
従来技術によるパイプライン及びメモリの構成によってラダー言語処理を行った場合の課題を具体例によって示す。図１４に典型的なＲＩＳＣプロセッサのパイプライン構成を示す。ＰＣ（Program Counter）は命令アドレスを計算するステージ、ＩＦ（Instruction Fetch）は命令をフェッチするステージ、Ｄ（Decode）はフェッチした命令をデコードするステージ、ＥＸ（Execute）はレジスタ間演算またはメモリアドレス計算を行うステージ、Ｍ（Memory）はメモリをリード又はメモリにライトするステージ、ＷＢ（Write Back）は演算結果又はリード値をレジスタに書き戻すステージである。ビットデータ演算に伴うリードモディファイライトを行う場合には、ＭステージをＭ１とＭ２の２つに分け、Ｍ１サイクルでリードを、Ｍ２サイクルでビットデータのマージとライトを行う。
【００１２】
ここで、図７（ａ）に例示したラダー図を前記従来技術のパイプライン構成で実行する場合を考える。図７（ｂ）は、図７（ａ）に例示したラダー図を通常のラダー言語の命令列に変換したプログラムの例である。また、図７（ｃ）は、それを前記従来技術のパイプライン構成で実行するための命令列に変換したプログラムの例である。
【００１３】
変数Ｘ０〜Ｘ３は入力、変数Ｙ２〜Ｙ３は出力を表し、それぞれ１ビット長のデータとしてメモリ内の２つのワードデータ内に記憶されているものとする。図８はこれらの変数がメモリに割り付けられて格納される様子を示している。図７（ｂ）において、ＬＤ（Load）はメモリからアキュムレータへのロード命令、ＡＮＤはメモリからロードした値とアキュムレータ値の論理積をアキュムレータに記憶する命令、ＳＴ（Store）はアキュムレータ値をメモリにストアする命令、ＯＲはメモリからロードした値とアキュムレータ値の論理和をアキュムレータに記憶する命令である。また、図７（ｃ）においては、ＬＤはメモリからレジスタへのロード命令、ＡＮＤは２つのレジスタ値の論理積をレジスタに記憶する命令、ＳＴはレジスタ値をメモリにストアする命令、ＯＲは２つのレジスタ値の論理和をレジスタに記憶する命令である。
【００１４】
図１５は、図７（ｃ）に示した命令列を図１４のパイプライン構成で実行した場合の動作を示すタイムチャートである。図１５に示すように、１番目及び２番目のＬＤ命令はそれぞれサイクルｔ０及びｔ１から開始され、サイクルｔ５及びｔ６までそのまま実行され、レジスタＲ１とＲ２にデータがロードされる。３番目のＡＮＤ命令はサイクルｔ２からｔ４まではそのまま実行されるが、サイクルｔ５のＥＸステージで必要な変数Ｘ１のデータがまだリードされていないためパイプラインが１サイクルの間ストールする（「−」印）。変数Ｘ１のデータは２番目のＬＤ命令のＭステージの実行が完了する次のサイクルｔ６で利用可能となり、その後はサイクルｔ８までそのまま実行される。４番目のＳＴ命令はサイクルｔ３から開始されるが、サイクルｔ５での前命令のストールに伴い一緒にストールする。続いてサイクルｔ６及びｔ７が実行されたのち、Ｍステージではサイクルｔ８とｔ９との２サイクルをかけてリードモディファイライトが実行される。そのため、５番目のＬＤ命令は、サイクルｔ５に加えてサイクルｔ９でもストールする。
【００１５】
以下同様にして、６番目のＬＤ命令はサイクルｔ５及びｔ９が、７番目のＯＲ命令及び８番目のＳＴ命令はサイクルｔ９及びｔ１１が、それぞれストールすることになる。また、８番目のＳＴ命令はサイクルｔ１４とｔ１５の２サイクルをかけてリードモディファイライトが実行される。以上説明したように、従来技術のパイプライン構成では、通常のラダー言語では６命令で記述される処理を実行するのに８命令を要し、かつ、３つのサイクルにてパイプラインのストールが発生するため、全ての処理を完了するまでに計１７サイクルを要することとなる。
【００１６】
本発明の目的は、ラダー言語を処理するビット演算プロセッサを備えたプログラマブルコントローラに好適な、リードモディファイライトなどによるパイプライン処理のストールを起こさないパイプラインの構成を提案することにある。さらには、キャッシュメモリを備えるビット演算プロセッサにおいて好適なパイプラインとキャッシュメモリの構成を提案することを目的とする。
【課題を解決するための手段】
【００１７】
ラダー言語を処理するビット演算プロセッサにおいて、パイプライン処理のストールを起こさないためには、ＥＸステージの演算結果を次のサイクルで実行される次命令のＥＸステージで利用可能とするとともに、リードモディファイライトの対象となるメモリの内容を事前にリードする新たなステージであるＲ（Read）ステージを設け、その次のＥＸステージにてビット演算及びビットデータのマージを行い、その結果を最後のＷ（Write）ステージにてメモリにストアするようにすればよい。
【００１８】
そこで、前記の目的を達成するために、本発明は、ビット演算処理の対象となる１ビットのデータを複数個まとめたワードの単位でメモリの読み書きを行うプログラマブルコントローラであって、プログラムに含まれるビット演算処理命令列を、パイプライン処理機構によって並列に実行するビット演算プロセッサを備え、前記ビット演算プロセッサが備えるパイプラインステージは、前記ビット演算処理命令を構成する各命令をデコードし、そのデコードした命令がメモリアクセスを伴う場合はデータアドレスを生成するデコードステージの次にリードステージがあり、ビット演算対象となるデータをワード単位でメモリから読み込む前記リードステージの次に演算ステージがあり、前記演算ステージの次に、前記演算ステージによって演算されたビット演算の結果を含むワードデータを前記リードステージで読み込んだデータと同じアドレスに書き込むライトステージがあることを特徴とする。
ここで、前記メモリは、前記リードステージにて読み込んだデータのアドレスを保持する第１アドレス保持レジスタと、前記第１アドレス保持レジスタからコピーされる前記データのアドレスを、前記ライトステージまで保持し、前記ライトステージの書き込み先アドレスとして使用させる第２アドレス保持レジスタと、を有するアドレス保持回路を備える。
【００１９】
また、本発明は、前記メモリが、少なくとも２ウェイ以上のセットアソシアティブ方式又はフルアソシアティブ方式のキャッシュメモリであるとともに、
前記リードステージにて読み込んだキャッシュエントリのアドレスから抜き出されたインデックス情報を保持する第１インデックス保持レジスタと、
前記リードステージにてヒットしたウェイ情報を保持する第１ウェイ保持レジスタと、
前記第１インデックス保持レジスタからコピーされる前記インデックス情報を、前記ライトステージまで保持する第２インデックス保持レジスタと、
前記第１ウェイ保持レジスタからコピーされる前記ウェイ情報を、前記ライトステージまで保持する第２ウェイ保持レジスタと、を有しており、
前記第２インデックス保持レジスタ内の前記インデックス情報と、前記第２ウェイ保持レジスタ内の前記ウェイ情報との組み合わせを、前記ライトステージの書き込み先アドレスとして使用させるアドレス保持回路を備える
ことを特徴とする。
【００２０】
また、メモリにアクセスする命令が連続した場合でもパイプライン処理をストールさせないために、前記メモリは単一のパイプライン処理サイクル時間内に１回以上のリードと１回以上のライトが独立に行える２ポート以上のメモリであることが好ましい。
【００２１】
なお、特許文献３には、キャッシュリード、演算、キャッシュライト、という順番のパイプライン構成が記載されているが、リードとライトを独立に行うことが目的であるため、リードとライトには別なアドレスを指定でき、そのためキャッシュライト時にもキャッシュヒット判定が行われる。すなわち、リードモディファイライトを行うことは考慮されておらず、２リード＋１ライトの３ポートメモリが必要となるなど、本発明とは目的と構成が異なっている。
【発明の効果】
【００２２】
本発明によれば、ビット演算プロセッサを備えたプログラマブルコントローラにおいて実行されるプログラムにおいて、リードモディファイライトに伴うパイプライン処理のストールが起こらないため、ラダー言語によって記述されたプログラムを効率よく処理することができる。また、キャッシュメモリを備えたビット演算プロセッサにおいても同様にパイプライン処理のストールが起こらないため、ラダー言語によって記述されたプログラムを効率よく処理することができる。また、ストア命令の実行時に先行するリードステージでキャッシュヒット判定を行うことにより、ライトステージでのキャッシュ入れ替え処理が不要となるので、パイプライン制御が単純になる。
【図面の簡単な説明】
【００２３】
【図１】第１実施形態に係るプログラマブルコントローラが備えるビット演算プロセッサの内部構成及びパイプライン構成を示す図
【図２】第１実施形態に係るプログラマブルコントローラの全体構成を示す図
【図３】データメモリとして２ポートメモリを用いた場合の構成を示すブロック図
【図４】第１実施形態に係るビット演算プロセッサの演算ステージの詳細構成を示す図
【図５】第２実施形態に係るキャッシュメモリの構成を示す図
【図６】第２実施形態に係るビット演算プロセッサの演算ステージの詳細構成を示す図
【図７】ビット演算プロセッサの動作を説明するためのラダー図とそのプログラム例
【図８】図７のプログラムで使用される変数のメモリへの割り付けを示す図
【図９】ビット演算プロセッサによって実行される命令の命令フォーマットを示す図
【図１０】図７のプログラムに対する命令コード列がメモリに格納された様子を示す図
【図１１】第１及び第２実施形態に係るビット演算プロセッサの動作例を示すタイムチャート
【図１２】第２実施形態に係るビット演算プロセッサにおいてキャッシュミスが発生した場合の動作例を示すタイムチャート
【図１３】第１実施形態に係るパイプライン構成を図１４と対比して表現した図
【図１４】典型的なＲＩＳＣプロセッサのパイプライン構成を示す図
【図１５】従来技術によるビット演算プロセッサの動作例を示すタイムチャート
【発明を実施するための形態】
【００２４】
以下、本発明を実施するための形態につき、図１から図１３を用いて説明する。
《第１実施形態》
図１は、本発明の第１実施形態に係るプログラマブルコントローラが備えるビット演算プロセッサの内部構成及びパイプライン構成を示す図である。また、図１３は、第１実施形態に係るパイプライン構成を図１４の従来技術と対比して表現したものである。図１及び図１３に示すように、本実施形態に係るパイプライン構成は、（１）プログラムカウンタ（ＰＣ）ステージ、（２）命令フェッチ（ＩＦ）ステージ、（３）デコード（Ｄ）ステージ、（４）メモリリード（Ｒ）ステージ、（５）演算実行（ＥＸ）ステージ、（６）メモリライト（Ｗ）ステージ、の６段からなる。
【００２５】
ＰＣステージは、直前の命令アドレスを示すＰＣ（プログラムカウンタ）１０１の値に定数「１」又は指定されたレジスタ値を加算する加算器１０２、加算結果又は分岐先アドレスを示すレジスタ値を選択するセレクタ１０３を備え、直前に選択された命令の次に実行すべき命令の命令アドレスを、当該ステージの出力として命令アドレスレジスタ１１１にセットする。ＩＦステージは命令アドレスレジスタ１１１にセットされた命令アドレスに対応する命令を命令バッファ３０から読み出し、命令レジスタ１２１にセットする。
【００２６】
Ｄステージは、読み出した命令を解釈するデコーダ１２２、デコーダ１２２によって命令から抜き出されたアドレスに指定されたレジスタ値を加算する加算器１２３を備え、デコードした命令がメモリアクセスを伴う場合はデータアドレスを生成してデータアドレスレジスタ１３１にセットする。また、図示は省略しているが、デコード結果に応じてレジスタ選択や演算機能選択などその後のステージの制御に必要な制御情報を取り出す。
【００２７】
Ｒステージは、データアドレスレジスタ１３１で示されたデータアドレスに該当するデータをデータメモリ２０から読み出す。読み出されたデータは次のＥＸステージからのバイパスデータとの選択を行うセレクタ１３２を介してワードバッファ１４１にセットされる。また、データアドレスレジスタ１３１で示されたデータアドレスをＷステージで再度利用できるように、データメモリ２０内に備えるアドレス保持回路２２にセットする。
【００２８】
ＥＸステージは、ＡＬＵ（Arithmetic Logic Unit：演算器）１４２、及びビットマージ機構１４３をもち、ワードバッファ１４１にセットされたデータ値及び／又は指定されたレジスタ値を使って命令で指示された演算を行う。このとき、ビットデータの演算を行う場合は、演算対象のワードデータのなかから指定されたビット位置のビットデータを抽出して演算を実行し、ビットマージ機構１４３を使用して当該ビット位置に演算結果のビットデータを埋め込んでワードデータを生成する。結果を格納する先がレジスタの場合はレジスタファイル１５２に書き込みを行い、格納する先がデータメモリ２０の場合は格納すべき演算結果のデータをライトバッファ１５１に書き込む。
【００２９】
Ｗステージは、Ｒステージにてアドレス保持回路２２にセットされたデータアドレス、つまりＲステージでデータを読み出したのと同じデータメモリ２０内のデータアドレスにライトバッファ１５１にセットされたデータを格納する。
【００３０】
図２は、第１実施形態に係るプログラマブルコントローラの全体構成を示す図である。図２に示すように、プログラマブルコントローラ１０００は、ＣＰＵ（Central Proseccing Unit）モジュール１、Ｉ／Ｏ（Input／Output）モジュール２Ａ及び２Ｂ、それらを接続するＩ／Ｏバス３、ＣＰＵモジュール１に着脱可能に接続されるプログラム入力装置４を備えて構成される。Ｉ／Ｏモジュール２Ａ，２Ｂは、それぞれＩ／Ｏバス接続回路とＩ／Ｏインターフェース回路を有しており、必要なＩ／Ｏの仕様と接点数に応じて種類と数を変えられるようになっている。
【００３１】
ＣＰＵモジュール１は、ビット演算プロセッサ１０、データメモリ２０、命令バッファ３０、Ｉ／Ｏバス制御回路４０、メモリコントローラ５０、外部ＲＡＭ（Random Access Memory）６０、ＲＯＭ（Read Only Memory）７０、汎用マイクロプロセッサ８０、通信Ｉ／Ｆ（Interface）９０を備えて構成される。
【００３２】
データメモリ２０に格納される所定アドレス範囲のデータ群は、それぞれがＩ／Ｏモジュール２Ａ，２Ｂに接続された外部機器（図示省略）との間でやり取りされる入力データ又は出力データに対応する。Ｉ／Ｏバス制御回路４０は、Ｉ／Ｏバス３を制御し、Ｉ／Ｏモジュール２Ａ，２Ｂに接続された外部機器から得られる入力データをデータメモリ２０に書き込み、また、データメモリ２０から読み出した出力データをＩ／Ｏバス３経由でＩ／Ｏモジュール２Ａ，２Ｂに接続された外部機器に出力する。
【００３３】
命令バッファ３０は、ビット演算プロセッサ１０から要求される命令アドレスに対する命令がバッファ内に蓄えられていればそれを返し、当該命令がバッファ内にない場合にはメモリコントローラ５０に外部ＲＡＭ６０からの命令の読み込みを要求する。メモリコントローラ５０は、ビット演算プロセッサ１０、命令バッファ３０、Ｉ／Ｏバス制御回路４０、汎用マイクロプロセッサ８０からの要求に応じて外部ＲＡＭ６０のリードライト又はＲＯＭ７０のリードを行う。また、汎用マイクロプロセッサ８０は、通信Ｉ／Ｆ９０を介してプログラム入力装置４からローディングされるラダープログラムを外部ＲＡＭ６０に書き込む等、プログラマブルコントローラ１０００全体の制御を司る。汎用マイクロプロセッサ８０を動作させるプログラムはＲＯＭ７０に格納されている。
【００３４】
なお、本実施形態においては、ビット演算プロセッサ１０、データメモリ２０、命令バッファ３０、Ｉ／Ｏバス制御回路４０、及びメモリコントローラ５０は、システムＬＳＩ（Large Scale Integration）１００に内蔵されているものとする。
【００３５】
図３は、本実施形態に係るデータメモリ２０として好適な２ポートメモリを用いた場合の構成を示す図である。図３に示すように、データメモリ２０は、アドレスセレクタ２０１、アドレス保持レジスタ２２１及び２２２を有するアドレス保持回路２２、ライトアドレスセレクタ２１５、ライトデータセレクタ２０４、メモリアレイ２１を備えて構成される。
【００３６】
アドレスセレクタ２０１は、ビット演算プロセッサ１０のデータアドレスレジスタ１３１（図１）の値とＩ／Ｏバス制御回路４０から出力されるＩ／Ｏデータアドレスのいずれかを選択する。アドレス保持レジスタ２２１，２２２は、Ｒステージの実行に使用されたデータアドレスを２サイクル後のＷステージまで保持する。すなわち、Ｒステージの出力データとして１段目のアドレス保持レジスタ２２１にデータアドレスを保持し、その値をＥＸステージの出力データとして２段目のアドレス保持レジスタ２２２にコピーして保持することによって、Ｗステージで使用できるようにする。
【００３７】
ライトアドレスセレクタ２１５は、データアドレスレジスタ１３１の値とアドレス保持レジスタ２２２の値のいずれかを選択する。ライトデータセレクタ２０４は、ライトバッファ１５１の値とＩ／Ｏバス制御回路４０から出力されるＩ／Ｏデータの値のいずれかを選択する。
【００３８】
メモリアレイ２１は、リード用のポート１とライト用のポート２の２つが単一のサイクル内でアクセス可能な２ポートメモリで構成される。そのため、パイプライン処理されるある命令のＲステージの処理と並列に実行される別命令のＷステージの処理とを同一サイクル内に並列に実行することが可能となる。ここでは、メモリアレイ２１は２ポートメモリとしたが、単一のサイクル内で１以上のリード用ポートと１以上のライト用ポートがアクセス可能な３ポート以上のメモリとしてもよい。なお、Ｉ／Ｏバス制御回路４０からのメモリアクセス時にはリードとライトはそれぞれ独立して行うので、アドレス保持回路２２は使用されない。
【００３９】
図４は、第１実施形態に係るビット演算プロセッサの演算ステージ（ＥＸステージ、一部他ステージの要素を含む）の詳細構成を示す図である。図４に示すように、演算ステージは、ＡＬＵ１４２の他に、ＡＬＵ１４２の入力を選択するセレクタ１４４及び１４５、データメモリ２０からリードされた1ワード（１６ビット）のデータもしくはこの演算ステージの演算結果を次命令で再び演算に使用するためのバイパスデータのいずれかを選択するセレクタ１３２（Ｒステージの要素）、その選択されたワードデータを保持するワードバッファ１４１、演算結果であるＡＬＵ１４２の出力を入力されたワードデータにマージするビットマージ機構１４３、ビットマージされたデータを保持するライトバッファ１５１、アキュムレータや汎用レジスタなどのデータを保持するレジスタファイル１５２（Ｗステージの要素）を備えて構成される。ＡＬＵ１４２は１ビット長又は１ワード即ち１６ビット長の演算を行うことができる。
【００４０】
図９は、ビット演算プロセッサ１０によって実行される命令の命令フォーマットを示す図である。図９に示すように、命令には２つの形式があるが、いずれも３２ビット固定長である。命令形式１は、５ビットの命令コード（ＯＰ：Operation）、４ビットのビット位置フィールド（ＢＡ：Bit Address）、２３ビットのワードアドレスフィールド（ＷＡ：Word Address）からなり、ビットデータを対象とする。命令形式２は、５ビットの命令コード（ＯＰ）、４ビットのレジスタ指定フィールド（ＲＡ：Register Address）、２３ビットのワードアドレスフィールド（ＷＡ）からなり、ワードデータを対象とする。
【００４１】
次に、図７及び図８に示したラダープログラムを例にとり、図１を参照しつつ、本実施形態に係るビット演算プロセッサ１０の動作を図１１のタイムチャートを使って説明する。図１０は、図７（ｂ）のラダープログラムに対する前記した命令形式１の命令コード列がプログラムメモリ（外部ＲＡＭ６０）に格納された様子を示したものであり、アドレスＡ番地から順に命令コード列が格納されているものとする。
【００４２】
先ず、１番目のＬＤ命令は、サイクルｔ０から開始され、サイクルｔ５までそのまま実行される。このとき、サイクルｔ０（ＰＣステージ）では、ＬＤ命令のアドレスが計算されて命令アドレスレジスタ１１１にセットされる。サイクルｔ１（ＩＦステージ）では、命令バッファ３０から当該命令がリードされて命令レジスタ１２１にセットされる。サイクルｔ２（Ｄステージ）では、命令がデコードされ、ＬＤ命令であることが認識される。１番目のＬＤ命令では、リードすべきワードアドレスは命令中で直接指定されているので、該当するワードアドレスがデータアドレスレジスタ１３１にセットされる。サイクルｔ３（Ｒステージ）では、データメモリ２０から、対象となるビットデータを含む１ワード分のデータが読み込まれ、ワードバッファ１４１にセットされる。サイクルｔ４（ＥＸステージ）では、対象となる変数Ｘ０のビットが抜き出されてレジスタファイル１５２に含まれるアキュムレータにセットされる。サイクルｔ５（Ｗステージ）では何の動作も行わない（図の網かけ表示部分）。
【００４３】
２番目のＡＮＤ命令は、サイクルｔ１から開始され、サイクルｔ６までそのまま実行される。なお、サイクルｔ６（Ｗステージ）では何の動作も行わない。このとき、ＰＣステージからＲステージまでは１番目のＬＤ命令と同様に実行される。サイクルｔ５（ＥＸステージ）では、対象となる変数Ｘ１のビットを抜き出したのちにＡＬＵ１４２でアキュムレータの内容との論理積を計算し、再びアキュムレータにセットする。本実施例ではＥＸステージの前に実行されるＲステージにおいて、変数Ｘ１を含むワードデータがリードされるので、従来技術の例（図１５）のようにＡＮＤ命令のＥＸステージでパイプライン処理がストールすることはない。
【００４４】
３番目のＳＴ命令は、サイクルｔ２から開始されサイクルｔ７までそのまま実行される。ＰＣステージからＲステージまでは１番目のＬＤ命令と同様に実行される。ＳＴ命令においてもＲステージにて事前にデータのリードを行うことが本実施形態の大きな特徴である。サイクルｔ６（ＥＸステージ）では、アキュムレータ値（１ビット）が読み出され、ワードバッファ１４１の値（１ワード）にマージされた結果がライトバッファ１５１にセットされる。サイクルｔ７のＷステージでは、データメモリ２０にライトバッファ１５１の内容が格納される。その際、格納先のメモリアドレスとしては、Ｒステージで使用した値を保持しているアドレス保持回路２２に記憶された内容が使用される。このように、本実施形態のパイプライン構成によれば、１ビットデータの書き込みを行う際においてもパイプライン処理のストールは発生しない。
【００４５】
以下同様の動作により、４番目のＬＤ命令はサイクルｔ３からサイクルｔ８にかけて、５番目のＯＲ命令はサイクルｔ４からサイクルｔ９にかけて、６番目のＳＴ命令はサイクルｔ５からサイクルｔ１０にかけて、それぞれパイプライン処理がストールすることなく実行される。このように、本実施形態によれば、６命令を実行する間にパイプライン処理のストールは全く発生せず、図７（ｂ）に示した６命令で記述される処理を実行するのに要するサイクル数を、従来技術の１７サイクルから１１サイクルに短縮することができる。
【００４６】
以上説明したように、第１実施形態に係るビット演算プロセッサを備えたプログラマブルコントローラによれば、ラダー言語処理に特有のビット演算処理をパイプライン処理のストールなしに１サイクルピッチで実行できるので、ラダー言語によって記述されたプログラムを高速に実行することができる。
【００４７】
《第２実施形態》
続いて、第１実施形態におけるデータメモリ２０（図２参照）をキャッシュメモリによって構成する本発明の第２実施形態について説明する。図５は、第２実施形態に係るキャッシュメモリの構成を示す図である。図５に示すように、データメモリ２０としてのキャッシュメモリ２０Ａは、２ウェイセットアソシアティブ方式のキャッシュメモリであり、アドレスセレクタ２０１Ａ、インデックス保持レジスタ２２１Ａ及び２２２Ａ、ウェイセレクタ２０３、ライトデータセレクタ２０４Ａ、ウェイ０タグメモリ２０５、ウェイ１タグメモリ２０６、ＬＲＵ（Least Recently Used）メモリ２０７、ウェイ０データメモリ２０８、ウェイ１データメモリ２０９、ヒット判定回路２１０、ライトバック制御回路２１１、ウェイデータセレクタ２１２、ウェイ保持レジスタ２１３及び２１４を備えて構成される。図１のアドレス保持回路２２は、インデックス保持レジスタ２２１Ａ，２２２Ａを有するアドレス保持回路１（２２Ａ）と、ウェイ保持レジスタ２１３，２１４を有するアドレス保持回路２（２２Ｂ）によって構成される。
【００４８】
ウェイデータメモリ２０８及び２０９は、それぞれ２５６個のエントリを持ち、各エントリはそれぞれ１６バイト（８ワード）のデータを保持する。キャッシュメモリのアクセス単位は１６バイトであり、この１６バイト単位のデータを１ラインと呼ぶ。タグメモリ２０５及び２０６は、それぞれ２５６個のエントリを持ち、各エントリは、有効ビットＶ（Valid）、ダーティビットＤ（Dirty）及びタグアドレス（図５では「タグ」と略記）からなる。ＬＲＵメモリ２０７は２５６個のエントリを持ち、最近使用されたウェイを保持する。
【００４９】
アドレスセレクタ２０１Ａは、ビット演算プロセッサ１０のデータアドレスレジスタ１３１（図１）の値とＩ／Ｏバス制御回路４０から出力されるＩ／Ｏデータアドレスのいずれかを選択し、そのなかから１２ビットのタグアドレスと８ビットのインデックス値を抽出する。インデックス保持レジスタ２２１Ａ，２２２Ａは、Ｒステージの実行に使用されたデータアドレスから抜き出されたインデックス値の部分（８ビット）を２サイクル後のＷステージまで保持する。同様に、ウェイ保持レジスタ２１３，２１４は、ＲステージにてヒットしたウェイをＷステージまで保持する。
【００５０】
ウェイセレクタ２０３は、２段目のインデックス保持レジスタ２２２Ａに記憶されたインデックス値と２段目のウェイ保持レジスタ２１４に記憶されたヒットウェイを、Ｗステージにて書き込みを行うインデックス値とウェイとしてウェイデータメモリ２０８，２０９に出力する。ライトデータセレクタ２０４Ａは、後記するライトバッファ１５１Ａの値とＩ／Ｏバス制御回路４０から出力される１ライン分のＩ／Ｏデータの値のいずれかを選択する。
【００５１】
ヒット判定回路２１０は、アクセスするデータアドレスの上位１２ビットとタグメモリ２０５，２０６から出力されるタグ値をウェイごとに比較し、ヒット又はミスを判定する。ウェイデータセレクタ２１２は、ヒット判定回路２１０の出力によってウェイ０データ又はウェイ１データのいずれかのラインデータを選択する。なお、Ｉ／Ｏバス制御回路４０からのキャッシュアクセス時にはキャッシュのリードとライトをそれぞれ独立して行うため、アドレス保持回路１，２（２２Ａ，２２Ｂ）は使用されない。
【００５２】
ライトバック制御回路２１１は、キャッシュミス時にＬＲＵメモリ２０７の出力が示す追い出しウェイ（最近使用されたウェイでない方のウェイ）の対象エントリがライトバックモードの対象となるアドレス範囲に含まれていてダーティであった場合、つまり、データの更新が行われていた場合は、タグと同時に読み出されているデータをメモリコントローラ５０に送って外部ＲＡＭ６０（図２）の記憶内容を更新させる。なお、Ｉ／Ｏデータアドレスに相当する所定のアドレス範囲については、動作をライトスルーモードに切り替えて直ちに記憶内容の更新を行わせるので、ライトバック動作は行わない。また、不図示のリード制御回路により、当該追い出した対象エントリにキャッシュミスとなったラインデータを読み込む。
【００５３】
なお、これらキャッシュメモリ２０Ａを構成するタグメモリ２０５，２０６及びウェイデータメモリ２０８，２０９は、単一サイクル内でリード用のポートとライト用のポートの２つが並列にアクセス可能な２ポート以上のメモリで構成することが好ましく、それによってメモリへのアクセスが競合することによって生じるパイプライン処理のストールをなくすことができる。また、ここではキャッシュメモリ２０Ａは２ウェイセットアソシアティブ方式としたが、３ウェイ以上のセットアソシアティブ方式やフルアソシアティブ方式としてもよい。
【００５４】
図６は、第２実施形態に係るビット演算プロセッサの演算ステージ（ＥＸステージ、一部他ステージの要素を含む）の詳細構成を示す図である。図６に示すように、この演算ステージ構成は、前記の第１実施形態に係る演算ステージ構成（図４）における入力及び出力データのサイズを１ライン長（１６バイト＝１２８ビット）に変更するとともに、１ライン長のデータを保持しておいて演算結果のワードデータをマージするための手段を付加したものであり、その他の構成要素は図４と同様であるので重複する説明を省略する。
【００５５】
セレクタ１３２Ａ（Ｒステージの要素）は、キャッシュメモリ２０Ａからリードされた１ライン長（１６バイト）のデータのなかの1ワード（１６ビット）もしくはこの演算ステージの演算結果を次命令で再び演算に使用するためのバイパスデータのいずれかを選択する。ラインバッファ１４６は、リードされた１ライン長のデータを保持する。また、ワードマージ機構１４７は、ビットマージ機構１４３の出力である演算結果のワードデータをラインバッファ１４６に保持されているラインデータにマージする。ライトバッファ１５１Ａはマージされた１ライン分のデータを保持する。
【００５６】
ここで、前記と同様に、図７及び図８に示したラダープログラムを例にとり、本実施形態に係るビット演算プロセッサの動作を説明する。キャッシュメモリ２０Ａがリード動作とライト動作を単一のサイクルで実行可能な２ポートメモリによって構成されており、かつ、対象データが全てキャッシュヒットするものと仮定した場合の動作は、前記した図１１のタイムチャートと同様である。本実施形態の動作が前記の第１実施形態と異なるのは、Ｒステージ及びＷステージにおけるデータのリード及びライトが１ラインの単位で行われ、ＥＸステージでは、セレクタ１３２Ａによって抽出された対象ワードに対して演算を実行し、演算結果のワードデータを、ラインバッファ１４６に保持しておいたラインデータにマージしてライトするラインデータを生成する点にある。
【００５７】
次に、図７（ｂ）のラダープログラムにおける３番目のＳＴ命令でキャッシュミスが起こった場合の動作を図１２のタイムチャートを使って説明する。１番目のＬＤ命令と２番目のＡＮＤ命令の動作は図１１の場合と同じである。３番目のＳＴ命令のＲステージ（サイクルｔ５）でキャッシュミスが発生すると、メモリコントローラ５０を介して外部ＲＡＭ６０のデータを読み込むために、例えばサイクルｔ５からサイクルｔ１４までパイプライン処理がストールする。しかし、サイクルｔ１５でＲステージが再開されたのちは、パイプライン処理のストールなしに実行される。このようにＳＴ命令に対するキャッシュミスが発生した場合であっても、Ｒステージにおいてキャッシュラインの入れ替えを行うだけで済むのでキャッシュの制御が単純になる。
【００５８】
なお、ＳＴ命令の次命令がアクセスするデータアドレスがＳＴ命令と同一インデックス値を有しており、かつ、次命令がキャッシュミスとなった場合でも、２ウェイセットアソシアティブ以上のキャッシュメモリであれば、当該ＳＴ命令がＷステージでラインデータを上書きする前に当該エントリがパージされてしまっていることはない。
【００５９】
以上説明したように、第２実施形態に係るキャッシュメモリを内蔵したビット演算プロセッサを備えたプログラマブルコントローラによれば、ラダー言語処理に特有のビット演算処理をパイプライン処理のストールなしに１サイクルピッチで実行できるので、ラダー言語によって記述されたプログラムを高速に実行することができる。
【００６０】
以上にて本発明を実施する形態の説明を終えるが、本発明の実施の態様はこれに限られるものではなく、本発明の趣旨を逸脱しない範囲内で各種の変更が可能である。
【符号の説明】
【００６１】
１  ＣＰＵモジュール
２Ａ，２Ｂ  Ｉ／Ｏモジュール
３    Ｉ／Ｏバス
４    プログラム入力装置
１０  ビット演算プロセッサ
２０  データメモリ
２０Ａ  キャッシュメモリ
２１  メモリアレイ
２２，２２Ａ，２２Ｂ  アドレス保持回路
３０  命令バッファ
４０  Ｉ／Ｏバス制御回路
５０  メモリコントローラ
６０  外部ＲＡＭ
７０  ＲＯＭ
８０  汎用マイクロプロセッサ
９０  通信Ｉ／Ｆ
１００  システムＬＳＩ
１０００  プログラマブルコントローラ
【図１】
0005480793.tif 000002
【図２】
0005480793.tif 000003
【図３】
0005480793.tif 000004
【図４】
0005480793.tif 000005
【図５】
0005480793.tif 000006
【図６】
0005480793.tif 000007
【図７】
0005480793.tif 000008
【図８】
0005480793.tif 000009
【図９】
0005480793.tif 000010
【図１０】
0005480793.tif 000011
【図１１】
0005480793.tif 000012
【図１２】
0005480793.tif 000013
【図１３】
0005480793.tif 000014
【図１４】
0005480793.tif 000015
【図１５】
0005480793.tif 000016