(57)【要約】【課題】パイプライン構造のプログラマブルコントローラにおいて、命令メモリやデータメモリがアクセス時間の比較的遅い外付けメモリで構成されている場合でも高速な動作を実現可能とする。【解決手段】プログラムカウンタ更新を行うＰＣステージ、命令フェッチを行うＩＦステージ、命令デコード、レジスタフェッチを行うＩＤステージ、算術論理演算、データアドレス計算、分岐先計算を行うＥＸステージ、メモリアクセス（リード／ライト）、分岐を行うＭＥＭステージ、ビット演算、レジスタ書き込みを行うＷＢステージよりなる６段パイプライン構造のプログラマブルコントローラにおいて、命令メモリとデータメモリはデュアルポートメモリで構成され、これらのメモリアクセスの時間はパイプラインの１ステージ分の時間よりも長く設定し、命令メモリやデータメモリへのアクセス動作を複数のパイプラインステージで実行可能とした。【選択図】図１
2005242457.tif 000002
【特許請求の範囲】
【請求項１】
基本的なビット処理演算と複数ビットの応用処理を行なうプログラマブルコントローラにおいて、
プログラムカウンタの更新を行なうパイプラインステージと、
命令メモリから命令を取り出す命令フェッチ処理を行なう複数のパイプラインステージと、
命令デコードおよび汎用レジスタから値を取り出すレジスタフェッチ処理を行なうパイプラインステージと、
算術論理演算またはデータアドレス計算または分岐先の実効アドレス計算を行なうパイプラインステージと、
データメモリへのアクセス処理または分岐処理を行なう複数のパイプラインステージと、
ビット処理演算または前記汎用レジスタへの書き込み処理を行なうパイプラインステージで構成されるパイプライン構造のプログラマブルコントローラであって、
前記命令メモリとデータメモリはデュアルポートメモリで構成され、これらのメモリアクセスの時間がパイプラインの１ステージ分の時間よりも長いことを特徴とするプログラマブルコントローラ。
【請求項２】
ビット処理演算の命令で更新されるレジスタを有し、前記レジスタの値により後続の命令を非実行にできる機能を有することを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
算術論理演算を行なうＡＬＵの引数として、汎用レジスタから読み出した値に代えて、パイプライン内に存在している汎用レジスタに書き込む前の値を引数として選択できる機能を有することを特徴とする請求項１または２に記載のプログラマブルコントローラ。
【請求項４】
データメモリから値を読み込むＬＯＡＤ命令よりも後に実行される命令が、前記ＬＯＡＤ命令で更新されるレジスタの値を参照する命令である場合に、データメモリからその値が読み出されるまで命令の実行を待たせる機能を有することを特徴とする請求項１〜３のいずれかに記載のプログラマブルコントローラ。
【請求項５】
ビット処理演算の命令で更新されるレジスタも含めて複数のフラグから構成される命令実行条件を備え、この命令実行条件により実行／非実行が決定される命令を持ち、命令実行条件により実行／非実行が決定される命令の前に命令実行条件を変更させるビット処理演算命令がパイプライン構造内で実行されている場合は、命令実行条件を変化させる命令であることを示す制御信号により、命令実行条件が確定するまで命令の実行を停止させる機能を有することを特徴とする請求項２〜４のいずれかに記載のプログラマブルコントローラ。
【請求項６】
命令実行ステージ１サイクルの時間では演算が完了しない命令を実行するための専用の演算回路を備え、その命令を実行するときは演算が完了するまでパイプラインの動作を停止させる機能を有することを特徴とする請求項１〜５のいずれかに記載のプログラマブルコントローラ。
【請求項７】
命令実行ステージ１サイクルの時間では演算が完了しない命令の実行／非実行を決定するフラグを備え、このフラグの値が命令を非実行の場合は命令実行ステージ１サイクルの時間では演算が完了しない命令を実行するための専用の演算回路を起動せずに、後続命令を待たせることなく実行する機能を有することを特徴とする請求項６に記載のプログラマブルコントローラ。
【請求項８】
分岐命令実行時に分岐条件が成立した時に、パイプライン構造内に既に投入されている無効な命令を非実行にする機能を有することを特徴とする請求項１〜７のいずれかに記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、基本的なビット演算命令処理と、複数ビットの応用命令処理の両方を処理することができる専用ハードウェア（プロセッサ）を備えたプログラマブルコントローラに関するものである。
【背景技術】
【０００２】
プログラマブルコントローラは、産業用装置、機械、ＦＡ装置の制御に広く用いられており、対象となる装置の複雑化、さらなる高速化の要求に応じて、より多数の入出力信号を高速に処理することが求められている。このため、ビット演算処理を主とする基本命令と複数ビットで構成されるデータを処理する応用命令の一部を実行することができる専用ハードウェア(プロセッサ)で高速化を実現し、通信処理・周辺処理・応用命令の実行などを行う汎用マイクロプロセッサと組み合わせて、プログラマブルコントローラを構成していた。
【０００３】
特開平８−７６９９６（特許第３０００８５７号）の従来例（特許文献１）では、この専用ハードウェア（プロセッサ）の構造として命令実行サイクルを以下のような５段に要素分割した、５段パイプライン構造を持ったプログラマブルコントローラが示されている。
【０００４】
１：命令フェッチ
２：命令デコード、レジスタフェッチ
３：算術論理演算、データアドレス計算、分岐先計算
４：メモリアクセス（リード／ライト）
５：分岐、ビット演算、レジスタ書き込み
【０００５】
また、特開２００１−１４１６１（特許文献２）には、上記５段パイプライン構造のプログラマブルコントローラの高速化を図るため、命令実行サイクルを以下のような６段に要素分割して単相クロックで動作する６段パイプライン構造を持ったプログラマブルコントローラが示されている。
１：プログラムカウンタ更新
２：命令フェッチ
３：命令デコード、レジスタフェッチ
４：算術論理演算、データアドレス計算、分岐先計算
５：メモリアクセス（リード／ライト）、分岐
６：ビット演算、レジスタ書き込み
【０００６】
従来例の６段パイプライン構造を持ったプログラマブルコントローラのブロック図を図２３に示す。上に示した６つに分割された処理内容がそれぞれ図のＰＣ，ＩＦ，ＩＤ，ＥＸ，ＭＥＭ，ＷＢの部分で実行され、それぞれの処理の間にはパイプラインレジスタＰＣ／ＩＦ，ＩＦ／ＩＤ，ＩＤ／ＥＸ，ＥＸ／ＭＥＭ，ＭＥＭ／ＷＢが配置されている。また、従来例の動作タイミング図を図２４に示す。上記の６つに分割された処理内容がパイプライン処理されて、ハードウェア内のそれぞれの部分で並列処理されている。
【０００７】
ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）で示されるステージは、プログラムカウンタ制御のためのアドレス計算回路ＡＤＤＲＣＡＬＣからの信号を受けて、次に実行する命令が格納された命令メモリＩＭＥＭのアドレスを計数するプログラムカウンタＰＣで構成されている。
【０００８】
ＩＦ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ）で示されるステージは、命令メモリＩＭＥＭから命令レジスタＩＲヘ次に実行する命令を読み込む命令フェッチ処理を行うステージで、命令を格納する命令メモリＩＭＥＭを備えており、プログラムカウンタＰＣからのアドレス指定に従って命令メモリＩＭＥＭから読み出された命令が格納される命令レジスタＩＲは、ＩＦステージの実行結果を保存して、次のＩＤステージにその結果を伝える、パイプラインレジスタＩＦ／ＩＤを兼ねている。
【０００９】
ＩＤ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｄｅｃｏｄｅ）で示されるステージは、命令デコーダＤＣによる命令デコード、および、レジスタファイルＲＦを構成する複数の汎用レジスタのいずれかより値を取り出すレジスタフェッチ処理を行うステージで、命令のオペレーションコード部を解読するデコーダＤＣと、複数の汎用レジスタで構成された汎用レジスタファイルＲＦとで構成されている。汎用レジスタファイルＲＦには、２つの出力が設けられており、一方の出力はパイプラインレジスタＩＤ／ＥＸのＳ１に接続され、他方の出力はパイプラインレジスタＩＤ／ＥＸのＳ２に接続されている。また、命令デコーダＤＣで解読された値もパイプラインレジスタＩＤ／ＥＸの所定の箇所に格納される。
【００１０】
次に、ＥＸ（ＥＸｅｃｕｔｅ）で示されるステージは、算術論理演算ユニットＡＬＵによって、算術論理演算またはデータアドレス計算または分岐先の実効アドレスを計算する分岐先計算を行うステージで、算術論理演算ユニットＡＬＵの一方の入力は、パイプラインレジスタＩＤ／ＥＸのＳ１の出力に接続され、他方の入力は、パイプラインレジスタＩＤ／ＥＸのＳ２の出力に接続されている。また、算術論理演算ユニットＡＬＵは、パイプラインレジスタＩＤ／ＥＸの所定の箇所に格納された、デコードされた命令の値によって制御され、算術論理演算ユニットＡＬＵの出力は、パイプラインレジスタＥＸ／ＭＥＭのＤの箇所に格納される。
【００１１】
次に、ＭＥＭ（ＭＥＭｏｒｙ  ａｃｃｅｓｓ）で示されるステージは、データメモリＤＭＥＭヘのメモリアクセス処理を行うステージで、パイプラインレジスタＥＸ／ＭＥＭのＤの箇所に格納されていた値は、データメモリＤＭＥＭの所定アドレスのメモリに格納されると共に、パイプラインレジスタＭＥＭ／ＷＢの所定箇所に出力される。または、データメモリＤＭＥＭの所定アドレスに格納されていた値がパイプラインレジスタＭＥＭ／ＷＢの所定箇所に格納される。
【００１２】
最後に、ＷＢ（Ｗｒｉｔｅ  Ｂａｃｋ）で示されるステージは、ビット演算または汎用レジスタへの書き込み処理または分岐処理を行うステージで、汎用レジスタへの書き込み処理の場合は、パイプラインレジスタＭＥＭ／ＷＢの所定箇所に格納されていた値が、レジスタファイルＲＦの所定の汎用レジスタに格納される。但し、図では本発明に関する部分のみ図示しており、他の構成は図示を省略している。
【００１３】
ところで、プログラマブルコントローラに必要とされる機能の中には、データメモリＤＭＥＭの１ワード中のある１ビットの値を参照、更新したり、命令実行中に複数ワードのデータメモリＤＭＥＭの参照、更新を行うビット処理命令がある。このビット処理命令を実行するには複数のメモリアクセスサイクルが必要となるため、上記の６段パイプライン構造をそのまま用いた場合には、これらのビット処理命令を実行させることができない。そこで、この従来例では、ビット処理命令を処理するＢＰＵ（Ｂｉｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のブロックと、ビット処理演算により更新されるレジスタ：ＢＩＴＡＣＣ（Ｂｉｔ  Ａｃｃｕｍｕｌａｔｏｒ）を有する構造となっている。
【００１４】
この６段パイプライン構造を持つプログラマブルコントローラでは、例えば、図２４に示すように、ＰＣ：プログラムカウンタ更新、ＩＦ：命令フェッチ、ＩＤ：命令デコード、レジスタフェッチ、ＥＸ：算術論理演算、データアドレス計算、分岐先計算、ＭＥＭ：メモリアクセス（リード／ライト）、ＷＢ：分岐、レジスタ書き込みのように、１つの命令を６つのパイプラインステージに分けて実行する。このような命令に加えて、プログラマブルコントローラに必要とされる命令として、データメモリ１ワード中のある１ビットの値を参照したり更新したりする“ビット処理命令”というものが存在する。ビット処理命令と呼ばれる命令には様々なものがあり、読み込んだデータメモリ１ワードのあるビットの状態によりプログラマブルコントローラ内部のレジスタ：ＢＩＴＡＣＣ（ビットアキュムレータ）を更新したり、このレジスタＢＩＴＡＣＣの更新に加えてデータメモリ中のある１ビットの値も更新する命令が存在する。このビット処理命令では、ビット処理命令以外の命令がレジスタ書き込みなどを行っていたＷＢステージに相当する部分に、ＭＥＭステージで読み込んだデータメモリの値によりＢＩＴＡＣＣの更新やデータメモリ中のある１ビットの値の更新、データメモリ書き込み等の動作を行うＢＰＵステージが存在する。
【特許文献１】特許第３０００８５７号公報
【特許文献２】特開２００１−１４１６１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
プログラマブルコントローラを実現するにあたり、上記６段パイプライン構造を採用することで高速化を図ることができる。半導体プロセスの微細化とそれに伴う論理回路の動作の高速化が進展するに従い、６段パイプライン構造のプログラマブルコントローラの動作の高速化が進んできたが、命令メモリやデータメモリへのアクセス動作がパイプライン構造の動作の高速化のボトルネックになっている。命令メモリやデータメモリはパイプライン構造を持つ専用ハードウェア（プロセッサ）とは別チップのメモリ素子であり、メモリアクセスの際には各デバイスのＩ／Ｏパッドやこれらのデバイスを実装したプリント基板上の配線を経由してデータのやり取りを行うため、同じ半導体チップ内でのアクセスに比べて時間がかかる。半導体素子の種類によりアクセス時間も変動するが、一例ではプロセッサ内のプログラムカウンタＰＣの値の変化がチップ外に伝播するのに必要な時間は５ｎｓ程度かそれ以上の時間が必要となり、プロセッサと外部メモリとの間のアクセスに１０〜１５ｎｓ程度の時間が必要になる。例えばここでパイプライン１ステージの時間が３０ｎｓという構成にした場合、プロセッサと外部メモリとの間のアクセスの時間はプリント基板上の配線などの伝播経路を通過するために１５ｎｓ程度の時間が必要になるため、メモリ素子もアクセス時間が１５ｎｓかそれ以下の高速なデバイスが必要になる。更にパイプライン１ステージの時間が１５ｎｓという構成を考えた場合は、メモリアクセスの際に信号が伝播経路を通過するだけで１ステージ分の時間を使い果たしてしまい、メモリ素子にはアクセス時間０ｎｓなど現実には有り得ない性能を要求することになる。
【００１６】
本発明はこのような点に鑑みてなされたものであり、その目的とするところは、パイプライン構造のプログラマブルコントローラにおいて、命令メモリやデータメモリへのアクセス動作を複数のパイプラインステージで実行可能とすることにより、命令メモリやデータメモリがアクセス時間の比較的遅い外付けメモリで構成されている場合でも、パイプラインステージ１ステージの時間を短くすることを可能とし、高速な動作を実現することにある。
【課題を解決するための手段】
【００１７】
本発明によれば、上記の課題を解決するために、図１に示すように、基本的なビット処理演算と複数ビットの応用処理を行なうプログラマブルコントローラにおいて、プログラムカウンタの更新を行なうパイプラインステージと、命令メモリから命令を取り出す命令フェッチ処理を行なう複数のパイプラインステージと、命令デコードおよび汎用レジスタから値を取り出すレジスタフェッチ処理を行なうパイプラインステージと、算術論理演算またはデータアドレス計算または分岐先の実効アドレス計算を行なうパイプラインステージと、データメモリへのアクセス処理または分岐処理を行なう複数のパイプラインステージと、ビット処理演算または前記汎用レジスタへの書き込み処理を行なうパイプラインステージで構成されるパイプライン構造のプログラマブルコントローラであって、前記命令メモリとデータメモリはデュアルポートメモリで構成され、これらのメモリアクセスの時間がパイプラインの１ステージ分の時間よりも長いことを特徴とするものである。
【発明の効果】
【００１８】
請求項１の発明により、例えばパイプラインステージ２サイクル分の時間をメモリアクセスに用いることができるようになり、パイプラインステージ１サイクルの時間の短縮に対応できるようになる。また、パイプラインステージ１サイクルの時間が比較的長い場合は、メモリアクセス時間が短い高価なメモリを使用しなくても、パイプライン構造の専用ハードウェアを構成することが可能になる。
請求項２の発明により、プログラマブルコントローラ特有の１ビットフラグによる命令の実行／非実行の制御を、ハードウェアで行なうことができるようになる。
請求項３の発明により、レジスタ間演算の結果がレジスタファイルに書き込まれるのを待つことなく、そのレジスタの値を参照する後続命令を実行することが可能となる。
【００１９】
請求項４の発明により、先行するＬＯＡＤ命令で更新されるレジスタを参照する命令を実行する際にレジスタ更新の完了を待つことにより、矛盾なく命令を実行することができる。
請求項５の発明により、命令実行条件により命令の実行／非実行が決定される命令を実行する際、命令実行条件を構成する複数のフラグのうち特に値の更新が遅いビット処理演算命令により更新されるフラグにより命令実行条件が変化する場合にも、命令実行条件が確定するのを待ってから該当命令を実行するため、矛盾なく命令を実行することができる。
請求項６の発明により、パイプラインステージ１サイクル分の時間内に演算を終えることができない命令も実行することが可能になる。
【００２０】
請求項７の発明により、パイプラインステージ１サイクル分の時間内に演算を終えることができない命令に実行／非実行の条件が存在して、その条件が非実行である場合に該当命令を実行せずに直ぐに後続命令を実行することにより、命令実行の速度低下を防ぐことができる。
請求項８の発明により、分岐命令実行時に分岐条件が成立した場合に、既にパイプライン内に投入されている無効な命令を非実行にすることができ、実行してはならない命令が実行されてしまうことを防ぐことができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明を実施するための最良の形態を実施例１〜８として説明する。実施例１〜８はそれぞれ請求項１〜８の構成に対応している。
（実施例１）
図１に本発明の実施例１の構成を示す。従来例（図２３）に対して変更された箇所は、命令メモリＩＭＥＭとデータメモリＤＭＥＭがデュアルポートメモリになったことと、そのメモリＩＭＥＭ，ＤＭＥＭにパイプライン構造の専用ハードウェア（プロセッサ）からアクセスするために、命令メモリインターフェース回路ＩＭＥＭＩＦとデータメモリインターフェース回路ＤＭＥＭＩＦが追加されたことである。
【００２２】
また、従来例では命令フェッチＩＦとメモリアクセスＭＥＭは各々１ステージで実行していたが、本発明では複数のパイプラインサイクルで実行しており、本実施例では３サイクルを用いてメモリアクセスを実行する。つまり、外付けメモリで構成される命令メモリＩＭＥＭやデータメモリＤＭＥＭへのアクセス動作がパイプライン構造の動作の高速化のボトルネックになるという問題を解決するために、これらメモリアクセスを複数のパイプラインステージで実行する構成を採用する。具体的には、デュアルポートメモリで構成した命令メモリＩＭＥＭやデータメモリＤＭＥＭに対して、２種類のメモリアクセスを半周期ずらせたタイミングで同時に発生させることにより、メモリアクセスをパイプラインステージ２サイクル分の時間で実行するものである。これにより、パイプラインステージの１ステージの時間がより短い構成の場合でも、クロックの比較的遅い外付けメモリへのアクセスを可能にすることができる。
【００２３】
図２に実施例１の動作タイミング図を示す。命令メモリＩＭＥＭの読み出しはＩＦ０，ＩＦ１，ＩＦ２のパイプラインステージ３サイクルで行う。横軸の時間はパイプラインステージの区切りを示しており、時刻１の命令１のＰＣステージの終了時に、パイプラインレジスタＰＣ／ＩＦ上のプログラムカウンタＰＣは、命令１のアドレスを示す。その後、命令メモリインターフェース回路ＩＭＥＭＩＦにプログラムカウンタＰＣの値が読み込まれて、次の時刻２から命令メモリＩＭＥＭのＡポートを用いて命令読み出しが行われ、時刻２〜４の２サイクル分の時間をかけて読み出しアクセスを行い、時刻４にパイプラインレジスタＩＦ／ＩＤ上の命令レジスタＩＲに命令１が読み出される。パイプライン動作はパイプライン１ステージ単位で行われ、時刻１で命令１のＰＣステージ（プログラムカウンタ更新）が終了した１サイクル後の時刻２には命令２のＰＣステージが終了し、これも命令メモリインターフェース回路ＩＭＥＭＩＦに読み込まれて、先ほどの時刻２から命令メモリＩＭＥＭのＡポートで命令読み出しが開始された１サイクル後の時刻３から、命令メモリＩＭＥＭのＢポートを用いて命令読み出しが行われる。図２に示すように、命令メモリＩＭＥＭのＡポートとＢポートの読み出しは、それぞれパイプラインステージ２サイクル分の時間をかけて行われ、その実行は１サイクルの時間のずれを持たせるため、互い違いにＡポートとＢポートの読み出し動作が行われることになる。
【００２４】
図３に図１の命令メモリインターフェース回路ＩＭＥＭＩＦ周辺の詳細図を示す。命令メモリインターフェース回路ＩＭＥＭＩＦは、パイプライン構造の専用ハードウェア（プロセッサ）からはプログラムカウンタＰＣの値を命令メモリＩＭＥＭのアドレスとして受け取り、命令メモリＩＭＥＭから読み出した値はデータ出力ポートＤＯから出力してパイプラインレジスタＩＦ／ＩＤ上の命令レジスタＩＲに書き込まれる。また、命令メモリＩＭＥＭはＡポートのアドレス入力ＡＡＤ，リード要求ＡＲＤ，データ出力ＡＤＯ、およびＢポートのアドレス入力ＢＡＤ，リード要求ＢＲＤ，データ出力ＢＤＯを持ち、命令メモリインターフェース回路ＩＭＥＭＩＦもそれらに対応したポートを持つ。
【００２５】
図４に図３の命令メモリインターフェース回路ＩＭＥＭＩＦの内部構成を示す。内部には幾つかのレジスタが存在し、これらはすべて同じクロック信号で駆動されているが、図が煩雑になるためクロック信号およびリセット信号は省略する。内部のレジスタはその大半がクロック信号ＣＬＫの立ち上がりエッジで動作するが、制御信号ＳＥＬはクロック信号ＣＬＫの立ち下がりエッジで動作し、この信号は命令メモリＩＭＥＭのＡポートとＢポートのどちらを用いるのかを示すために用いる。制御信号ＳＥＬはクロック信号ＣＬＫの立下りエッジごとに自分自身の値を反転させる制御信号で、この値が‘０’の時は命令メモリＩＭＥＭのＡポートを、‘１’の時はＢポートを用いる。
【００２６】
図５に命令メモリインターフェース回路ＩＭＥＭＩＦの動作タイミング図を示す。時刻１の命令１のＰＣステージの終了時にプログラムカウンタＰＣには命令１のアドレス１が現れ、これが次のクロックの立ち上がりエッジのタイミングの時刻２にＡポート用アドレスＡＡＤに書き込まれる。プログラムカウンタＰＣの値は制御信号ＳＥＬの値が‘０’の時にはＡＡＤに、制御信号ＳＥＬの値が‘１’の時はＢＡＤに書き込まれる。また、リード要求信号ＡＲＤ、ＢＲＤにも同様にＲＤの値が書き込まれるが、命令メモリＩＭＥＭは本実施例では常に読み出し動作を行うので、図４に示すように、読み出し要求を示す‘１’が命令メモリインターフェース回路ＩＭＥＭＩＦの外部から与えられている。
【００２７】
メモリアクセスはパイプライン２サイクル分の時間をかけて行われ、命令１の読み出し動作は時刻２〜４にかけて行われ、実際にメモリのＡポートから読み出し値が出力されるのは時刻３．５あたりから時刻４を過ぎたあたりである。また、命令２の読み出し動作は時刻３〜５にかけて行われ、実際にメモリのＢポートから読み出し値が出力されるのは時刻４．５あたりから時刻５を過ぎたあたりである。これらのＡポートからの出力とＢポートからの出力は図４に示すように制御信号ＳＥＬで制御されたセレクタで選択され、どちらか片方の値がＤＯポートから出力され、パイプラインレジスタＩＦ／ＩＤ上の命令レジスタＩＲに書き込まれる。
【００２８】
更に図６に図１のデータメモリインターフェース回路ＤＭＥＭＩＦ周辺の詳細図を示す。データメモリインターフェース回路ＤＭＥＭＩＦはパイプライン構造の専用ハードウェア（プロセッサ）からはメモリアドレスＡＤＤＲとデータメモリ書き込み値ＷＴＤＴとリード要求ＲＤとライト要求ＷＴを受け取り、データメモリＤＭＥＭから読み出した値はデータ出力ポートＤＯから出力してパイプラインレジスタＭＥＭ／ＷＢの所定の場所に書き込まれる。また、データメモリＤＭＥＭはＡポートのアドレス入力ＡＡＤ，リード要求ＡＲＤ，ライト要求ＡＷＴ，データ入力ＡＤＩ，データ出力ＡＤＯ、およびＢポートのアドレス入力ＢＡＤ，リード要求ＢＲＤ，ライト要求ＢＷＴ，データ入力ＢＤＩ，データ出力ＢＤＯを持ち、データメモリインターフェース回路ＤＭＥＭＩＦもそれらに対応したポートを持つ。
【００２９】
図７に図６のデータメモリインターフェース回路ＤＭＥＭＩＦの内部構成を示す。基本的に図４の命令メモリインターフェース回路ＩＭＥＭＩＦと同様の動作を行う回路で、プログラムカウンタＰＣから入力された値をＡＡＤとＢＡＤに向けて互い違いに出力した動作を、ＡＤＤＲ，ＷＴＤＴ，ＲＤ，ＷＴで行うように拡張している。
【００３０】
また、図８にデータメモリインターフェース回路ＤＭＥＭＩＦの動作タイミング図を示す。ここで行っているメモリアクセス動作は時刻１にアドレス１番地からデータ読み出しを開始し、実際にデータメモリＤＭＥＭへのアクセスは時刻２〜４の２サイクルで行われるという１番目の命令に続き、アドレス２番地から読み出し、アドレス３番地への書き込み、アドレス４番地への書き込み、メモリアクセスは非実行（ＮＯＰ）、アドレス６番地から読み出しという命令を順に実行するものである。ここではメモリの読み出し要求ＲＤと書き込み要求ＷＴはそれぞれ‘１’の時に有効であるとする。
【００３１】
（実施例２）
図９に実施例２の構成を示す。本実施例では、ビット処理演算の命令で更新されるレジスタ：ＢＩＴＡＣＣ（ビットアキュムレータ）を有し、前記レジスタの値により後続の命令を非実行にできる機能を有することを特徴とする。
【００３２】
図９において、命令を非実行にするための制御信号ＥＸ＿ＨＺＤは、ハザード検出回路ＨＤＵで生成され、本実施例ではビット処理演算命令で更新されるレジスタＢＩＴＡＣＣと、ＥＸステージに投入された命令のデコード結果を元に制御信号ＥＸ＿ＨＺＤが生成される。すなわち、ＥＸステージに投入された命令がレジスタＢＩＴＡＣＣの値により非実行になる種類の命令の場合には、レジスタＢＩＴＡＣＣの値を参照してＥＸ＿ＨＺＤに‘１’を出力し、ＥＸステージで命令のデコード結果を書き換えることによりその命令を非実行にする。
【００３３】
図９のＩＤステージで命令がデコーダＤＣにより解読され、各種制御信号に展開されてパイプラインレジスタＩＤ／ＥＸ上の所定の位置に書き込まれる。さらにこれらの制御信号のうち、ＭＥＭステージ、ＷＢステージで用いられるものはパイプラインレジスタＥＸ／ＭＥＭに転送されるが、制御信号ＥＸ＿ＨＺＤが‘１’であると、この制御信号ＥＸ＿ＨＺＤにより制御されたマルチプレクサＭＵＸにより、制御信号のうちデータメモリＤＭＥＭへの書き込みとレジスタファイルＲＦへの書き込みを示す制御信号を、これらのデータメモリＤＭＥＭやレジスタファイルＲＦに書き込まないという意味の‘０’に置き換える。ＡＬＵで演算が実行されても、その結果がデータメモリＤＭＥＭやレジスタファイルＲＦに書き込まれなければ何も演算は行われなかったことと同じなので、この制御信号の書き換えにより、ＥＸステージで命令を非実行にする機能を実現する。
【００３４】
（実施例３）
図１０に実施例３の構成を示す。本実施例では、算術論理演算を行なうＡＬＵの引数を、汎用レジスタ（レジスタファイルＲＦ）から読み出した値だけではなく、パイプライン内に存在している汎用レジスタに書き込む前の値を引数として用いることを可能としたことを特徴とする。
【００３５】
命令がパイプライン実行されている場合には、ある命令が読み出すレジスタの値が先行する命令により更新される場合には、先行する命令がレジスタの更新を終えてからレジスタの値を読み出さないと、命令実行を正しく行うことができない。このレジスタ更新の矛盾を解消するためには、先行する命令がレジスタファイルへの書き込みを終えるまでレジスタ読み出しを待つ必要があり、命令実行速度を低下させる原因になる。
【００３６】
この問題を解決するため、自命令が参照するレジスタを先行する命令が更新する場合、まだレジスタファイルに書き込んでいないパイプライン構造内を伝播している値をレジスタファイルから読み出した値の代わりに用いることができるよう、算術論理演算を行うＡＬＵの引数を選択するデータパスを設ける。
【００３７】
図１０ではパイプライン構造のうち、本実施例の動作に関係する部分のみを示し、ここではＡＬＵの２つの引数のうち片方に関連する部分のみを示す。これまで述べた構成では、例えば図１や図９に示すように、ＡＬＵの引数はレジスタファイルＲＦから読み出されてパイプラインレジスタＩＤ／ＥＸの所定の位置（Ｓ１又はＳ２）に書き込まれたものを使用していたが、この構成では先行する命令のレジスタファイルＲＦへの書き込みが完了しないとレジスタ読み出しが出来ないため、命令実行を待たせる必要があった。そこで、図１０に示すように元のパイプラインレジスタＩＤ／ＥＸ上の所定の位置の値だけではなく、パイプラインレジスタＥＸ／ＭＥＭやＭＥＭ／ＷＢ（あるいはＭＥＭステージのシフトレジスタＳＲ）上に存在するレジスタファイルＲＦに書き込む前の値もＡＬＵの引数として使用するためのデータパスを設ける。実際にどの値をＡＬＵの引数として用いるかは、ＥＸステージにある命令がどのレジスタの値を読み出すのかと、先行する命令がどのレジスタに値を書き込む命令なのかを示す制御情報を参照してデータセレクタＳＲＣＦＢにより決定される。
【００３８】
図１１に実施例３の動作タイミング図を示す。ここでは図示した３つの命令が順に実行される様子を示しているが、命令１はレジスタＲ１とＲ２の論理積（ＡＮＤ）をレジスタＲ３に格納し、命令２はレジスタＲ１とＲ２の論理和（ＯＲ）をレジスタＲ４に格納する命令であり、命令３はレジスタＲ３とＲ４の論理積（ＡＮＤ）をレジスタＲ５に格納するという命令であるから、命令３は引数としてレジスタＲ３とＲ４の値を必要とし、これらのレジスタＲ３，Ｒ４はそれぞれ先行する命令１と命令２により更新され、実際にレジスタファイルＲＦに書き込まれるのはそれぞれ時刻１０と時刻１１のタイミングになる。しかし、図１０に示したデータパスを用いることにより、パイプラインレジスタＥＸ／ＭＥＭやＭＥＭ／ＷＢ（あるいはＭＥＭステージのシフトレジスタＳＲ）上を伝播している値をデータセレクタＳＲＣＦＢを介してＡＬＵの引数として用いることができるため、時刻７から始まる命令３のＥＸステージにおいて命令１と命令２によりレジスタＲ３，Ｒ４に書き込まれる値を使用することが可能となり、命令３をすぐに実行することが可能となる。
【００３９】
（実施例４）
図１２に実施例４の構成を示す。本実施例では、データメモリＤＭＥＭから値を読み込むＬＯＡＤ命令よりも後に実行される命令が、前記ＬＯＡＤ命令で更新されるレジスタの値を参照する命令である場合に、データメモリＤＭＥＭからその値が読み出されるまで命令の実行を待たせる機能を有することを特徴とする。
【００４０】
上述の実施例３の構成により、先行する命令がレジスタファイルＲＦに値を書き込むのを待たずに命令を実行することが可能になったが、先行する命令がデータメモリＤＭＥＭから値を読み込むＬＯＡＤ命令の場合にはレジスタファイルＲＦに書き込む値はデータメモリＤＭＥＭから読み出すまではパイプライン構造内には存在しないため、実施例３で設けたデータパスを用いて命令実行を行うことはできない。この問題を解決するため、自命令が参照するレジスタを更新する先行命令がＬＯＡＤ命令である場合は、必要な値がデータメモリＤＭＥＭから読み出されてレジスタファイルＲＦに書き込まれるまで命令実行を停止させる機能を持たせる。
【００４１】
図１２の構成では、ＬＯＡＤ命令で更新されるレジスタの値を後続命令が参照する場合に、その後続命令の実行をレジスタへの書き込みが完了するまで待たせるという動作を実現するために、ＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤの３つの制御信号を生成する。これら制御信号はハザード検出回路ＨＤＵで生成され、制御信号生成の元になるのは、命令レジスタＩＲに読み込まれた命令をデコーダＤＣにより解読した情報と、さらに先行する命令のデコード結果がパイプラインレジスタ上を伝播している情報であり、これにより命令レジスタＩＲに読み込まれた命令が必要とするレジスタの値が先行するＬＯＡＤ命令で更新されるかどうかを判別する。
【００４２】
実施例４の動作タイミング図を図１３に示す。ここでは、ＬＯＡＤ命令とそのＬＯＡＤ命令で更新されるレジスタＲ１を参照するＯＲ命令が連続して実行される場合を示しており、後者のＯＲ命令の実行をＬＯＡＤ命令の完了まで待たせる動作を示している。時刻５に命令２（ＯＲ命令）が命令レジスタＩＲに読み込まれてデコードされた結果、この命令がレジスタＲ１とＲ２を参照することが判明し、更に先行するＬＯＡＤ命令がレジスタＲ１を更新するという情報がパイプラインレジスタ上からもたらされることにより、ハザード検出回路ＨＤＵは３つの制御信号ＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤをそれぞれアクティブ（＝‘１’）にする。ＭＵＸはマルチプレクサであり、ＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤの各制御信号を受けて、それぞれの制御信号が‘１’であれば‘１’側の入力を、制御信号が‘０’であれば‘０’側の入力を出力するように動作する。ＩＦ＿ＨＺＤ＝‘１’になったことにより、パイプラインレジスタＩＦ／ＩＤ上のプログラムカウンタＩＦ＿ＩＤ＿ＰＣはそのまま同じ値を保ち、また、パイプラインレジスタＩＦ／ＩＤ上の命令レジスタＩＦ＿ＩＤ＿ＩＲは命令メモリＩＭＥＭから読み込んだ値にかかわらず、ＩＦ＿ＩＤ＿ＩＲの値を以前のまま保ち続ける。また、ＰＣ＿ＨＺＤ＝‘１’により、パイプラインレジスタＰＣ／ＩＦ上のプログラムカウンタＰＣ＿ＩＦ＿ＰＣは本来のアドレス計算部ＡＤＤＲＣＡＬＣによる更新結果ではなく、パイプラインレジスタＩＦ／ＩＤ上のプログラムカウンタＩＦ＿ＩＤ＿ＰＣに１を加えた値となる。またＩＤ＿ＨＺＤ＝‘１’により、ＩＤステージでパイプラインレジスタＩＦ／ＩＤ上の命令レジスタＩＦ＿ＩＤ＿ＩＲをデコードした結果がＮＯＰ命令をデコードした結果に置き換えられる。
【００４３】
これら３つの制御信号ＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤが図１３に示すタイミングで更新されることにより、命令１（ＬＯＡＤ命令）がデータメモリＤＭＥＭから読み込んだ値をレジスタＲ１に書き込む時刻１０まで命令２（ＯＲ命令）の実行は停止させられ、矛盾なく命令１と命令２を実行することが可能となる。
【００４４】
（実施例５）
図１４に実施例５の構成を示す。また、図１５に本実施例の動作タイミング図を示す。本実施例は、ビット処理演算の命令で更新されるレジスタも含めて複数のフラグから構成される命令実行条件を備え、この命令実行条件により実行／非実行が決定される命令を持ち、命令実行条件により実行／非実行が決定される命令の前に実行条件を変更させるビット処理演算命令がパイプライン構造内で実行されている場合は、命令実行条件を変化させる命令であることを示す制御信号により、命令実行条件が確定するまで命令の実行を停止させる機能を有することを特徴とする。
【００４５】
ビット処理演算により更新されるレジスタ：ＢＩＴＡＣＣや、算術論理演算実行時に更新されるエラーフラグ：ＥＲＲＣＮＴＲＬやフラグセット命令で更新される強制実行フラグ：ＥＸＥＦＬＧなど、複数のフラグから構成される命令実行条件を設定し、ある種の命令はこの命令実行条件が成立している場合のみ実行するという仕様を設ける。この場合、特にＢＩＴＡＣＣはパイプラインの最終段のステージで更新されるため、ビット処理命令の直後の後続命令などはＢＩＴＡＣＣの最終的な値が確定する前に実行されてしまうと、命令実行条件の仕様に反する命令実行が行われる可能性がある。
【００４６】
この問題を解決するため、ＢＩＴＡＣＣを変更する命令がパイプライン構造内に投入されている場合にはその旨を示す制御信号をパイプラインレジスタ上に設け、自命令が命令実行条件によりその実行／非実行が決定される場合にはこの制御信号により先行する命令が命令実行条件を変更するかどうかを確認し、先行命令が命令実行条件を変更する場合は条件が確定するまで命令実行を待たせる機能を持たせる。
【００４７】
本実施例では実施例２で述べたビット処理演算命令で更新されるレジスタＢＩＴＡＣＣに加えて、エラーフラグ：ＥＲＲＣＮＴＲＬと強制実行フラグ：ＥＸＥＦＬＧの３つのフラグを元に、以下の命令実行条件を定義する。
【数１】
2005242457.tif 000003
【００４８】
プログラマブルコントローラで実行する命令のうち幾つかの命令は上記の命令実行条件が成立した場合に実行される。この命令実行条件を構成する３つのフラグのうちＥＲＲＣＮＴＲＬとＥＸＥＦＬＧは命令のＥＸステージで更新され、ＢＩＴＡＣＣは命令のＷＢステージで更新される。命令実行条件を変更する命令の後ろに命令実行条件により実行／非実行が決定される命令が続く場合、ＢＩＴＡＣＣが更新される場合はパイプライン動作の一番後ろのステージで更新されるため、命令実行条件が確定するまでは命令実行条件により実行／非実行が決定される命令の実行を停止させておく必要がある。
【００４９】
図１４はそのために必要な命令実行に関する制御構造を示しており、実施例４のＬＯＡＤ命令の後続命令の実行を停止させるために用いたＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤをここでも同様に用いている。ハザード検出回路ＨＤＵにはパイプラインレジスタ上を伝播する、該当命令がＢＩＴＡＣＣを更新する命令であることを示す制御信号が与えられ、これら制御信号と命令レジスタＩＲに読み込まれた命令をデコードした結果、これが命令実行条件により実行／非実行が決定される命令であることを示す情報を元に、ＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤを発生させる。
【００５０】
図１５に実際に命令を実行している時の動作タイミング図を示しており、命令１がＢＩＴＡＣＣを更新する命令で、命令２が命令実行条件により実行／非実行が決定される命令である。命令１によりＢＩＴＡＣＣは時刻１０に更新されるが、後続命令２は実施例４の場合と同様に図１５に示すように実行が停止される。そして、命令実行条件が確定した時刻１０の時点でＥＸステージが開始するようにパイプライン動作が再開するが、ここで図１５に示すようにＢＩＴＡＣＣが‘０’になり、命令実行条件が成立しなくなった場合、実施例２の図９に示したＥＸ＿ＨＺＤにより、命令２の制御信号が書き換えられて無効化され、結果として命令２は非実行となる。
【００５１】
また、命令実行条件のうち、ＥＸステージで更新されるＥＸＥＦＬＧが変化する場合の命令実行の様子を図１６に示す。図１６の命令１がＥＸＥＦＬＧを更新する命令で、命令２が命令実行条件により実行／非実行が決定される命令である。ここでは命令１が命令実行条件を更新した時刻６に後続の命令２のＥＸステージが開始し、ここでＥＸ＿ＨＺＤにより命令２を非実行にすることができるため、図１５の場合のように命令の実行を停止させる制御は行わない。
【００５２】
（実施例６）
図１７に実施例６の構成を示す。本実施例では、命令実行ステージ１サイクルの時間では演算が完了しない命令を実行するための専用の演算回路を備え、その命令を実行するときは演算が完了するまでパイプラインの動作を停止させることで命令実行ステージ１サイクルの時間では演算が完了しない命令の実行を可能とすることを特徴とする。
【００５３】
パイプラインステージ１段の時間を短くすることでパイプライン構造全体の動作の高速化を実現してきたが、逆にパイプライン１ステージの時間内に演算が完了する加算や減算などの単純な命令しか実行することができず、より演算に時間がかかる乗算や除算などの命令は実行できなくなる。
【００５４】
この問題を解決するため、パイプライン１ステージの時間内に演算が完了しない命令を実行するための専用の演算回路を設け、該当命令実行時にはパイプライン動作を停止させてこの専用の演算回路で命令実行を行い、演算が完了した時に演算結果を取り出してパイプライン動作を再開し、後続命令の実行を行うことができる機能を持たせる。
【００５５】
ここで、演算完了にパイプライン１サイクル以上の時間が必要な命令は幾つかあるが、本実施例では乗算命令を実行する場合を例に示す。図１７において、乗算命令を実行する演算回路ブロックはＭＵＬＴである。乗算命令以外の算術論理演算命令はＡＬＵで実行されるが、ＡＬＵの場合と同等の形式で引数を与えて結果を取り出すために、ＳＵＢＡＬＵというインターフェース回路を設ける。乗算を実行する演算回路ＭＵＬＴにはこのＳＵＢＡＬＵを経由して引数を与える。乗算命令のＥＸステージが実行されると、ＳＵＢＡＬＵは演算回路ＭＵＬＴに対して引数Ｓ１とＳ２を与えると同時に、演算回路ＭＵＬＴの起動要求ＧＯを発行する。また、ＳＵＢＡＬＵはハザード検出回路ＨＤＵに対してハザード発生要求信号ＨＺＤ＿ＲＱ，ＨＺＤ＿ＲＱ２を発行し、これに基づきハザード検出回路ＨＤＵはＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤを生成して後続命令の実行を停止させる。
【００５６】
図１８に実施例６の動作タイミング図を示す。図１８の命令１が演算に時間がかかる乗算命令で、後続の命令２の実行を乗算が完了するまで停止させている様子を示している。ここで前述した制御信号のうちＨＺＤ＿ＲＱ２は、図１８では図示していないが、ＩＦ＿ＨＺＤを生成するための信号である。演算回路ＭＵＬＴはＳＵＢＡＬＵから与えられる起動要求ＧＯにより演算を開始するとＤＯＮＥ信号を立ち下げ、演算が完了するとＤＯＮＥ信号を‘１’に変化させて演算が完了したことをＳＵＢＡＬＵに通知する。図１８の例では２サイクルでＤＯＮＥ信号が‘１’に変化している場合を示す。その後、ＳＵＢＡＬＵはＨＺＤ＿ＲＱ，ＨＺＤ＿ＲＱ２を通してＰＣ＿ＨＺＤ等の制御信号を‘０’に戻して後続命令の実行を再開させ、制御信号ＷＴ＿ＲＱで演算回路ＭＵＬＴから得られた演算結果をＡＬＵからの出力と同様にパイプラインレジスタＥＸ／ＭＥＭに書き込み、ＭＵＬＴ命令はＭＥＭステージの実行に移行する。
【００５７】
なお、図１７では演算完了にパイプライン１サイクル以上の時間が必要な命令として乗算命令だけを取り上げたが、特に命令は１種類に限定されるものではなく、例えば除算など別の命令を実行する専用演算回路を併せ持つ構成を用いることも有り得る。その場合、ＳＵＢＡＬＵは命令の種類に応じて複数の専用演算回路のうち相応しいものを起動する起動制御もあわせて行う。
【００５８】
（実施例７）
図１９に実施例７の構成を示す。本実施例では、命令実行ステージ１サイクルの時間では演算が完了しない命令の実行／非実行を決定するフラグを備え、このフラグの値が命令を非実行の場合は、命令実行ステージ１サイクルの時間では演算が完了しない命令を実行するための専用の演算回路を起動せずに、後続命令を待たせることなく実行可能とすることを特徴とする。
【００５９】
上述の実施例６の構成によりパイプライン１ステージの時間内に演算が完了しない命令も実行できるようになったが、複数のパイプラインサイクルを使って演算を行うため、この種類の命令実行にはそれ以外の命令実行時には無かったオーバーヘッドが発生する。また、この種類の命令が前記命令実行条件のように、あるフラグの値により命令の実行／非実行が決定される場合には、命令が非実行の場合にも専用演算回路を起動して演算を実行するが、その結果をレジスタファイルに書き戻すことを阻止して命令を非実行にするという構成では大きなオーバーヘッドが残ってしまう問題が発生する。
【００６０】
この問題を解決するため、パイプライン１ステージの時間内に演算が完了しない命令が、あるフラグの値により非実行であるという条件の場合には、専用演算回路を起動してパイプラインの動作を停止させるという制御を行わず、すぐに後続命令を実行することで高速動作の性能劣化を防ぐ機能を持たせる。
【００６１】
図１９では、実施例６で述べた演算完了にパイプライン１サイクル以上の時間が必要な命令の実行／非実行を決定するフラグが存在する場合について示したもので、このフラグは実施例５で述べた複数のフラグから構成される命令実行条件の場合も考えられるが、ここでは簡単のため条件フラグＦＬＡＧがその役割を果たすものとする。乗算命令を実行する際はＳＵＢＡＬＵが演算回路ＭＵＬＴに対して起動要求ＧＯを発行し、実際の演算が開始されるが、本実施例の構成では条件フラグＦＬＡＧの値によっては起動要求を発行しない場合もある。そこで、条件フラグＦＬＡＧをＳＵＢＡＬＵに入力し、専用演算回路ＭＵＬＴの起動制御の条件に用いている。
【００６２】
図２０に実施例７の動作タイミング図を示す。図２０において命令１は条件フラグＦＬＡＧを更新する命令、命令２は乗算命令であるとする。図２０の時刻６の時点で命令１により条件フラグＦＬＡＧが更新され、ＭＵＬＴ命令の実行条件が非実行に変化する。このため、ＳＵＢＡＬＵは図１８のように専用演算回路ＭＵＬＴに対して起動要求ＧＯを発行せずに、また、ＨＺＤ＿ＲＱ，ＨＺＤ＿ＲＱ２を発行して後続命令の実行を停止させることもなく順次命令の実行を継続する。ただ、乗算命令は非実行にする必要があるので、ハザード検出回路ＨＤＵに対して制御信号ＨＺＤ＿ＲＱ３を発行してＥＸ＿ＨＺＤ＝‘１’に変化させ、乗算命令：命令２のＥＸステージを無効化する。
【００６３】
（実施例８）
図２１に実施例８の構成を示す。また、図２２に本実施例の動作タイミング図を示す。本実施例では、分岐命令実行時に分岐条件が成立した時に、パイプライン構造内に既に投入されている無効な命令を非実行にする機能を有することを特徴とする。
【００６４】
パイプライン動作を行う場合は命令メモリＩＭＥＭから読み込んだ命令を順次実行することが前提となるが、分岐命令はこの命令読み込みの連続性を乱す元になる。順次命令を読み込んで実行している際に分岐命令が実行され、かつ、分岐条件が成立した場合には分岐先のアドレスから命令を読み込んで実行する必要があり、その際はすでにパイプライン構造内に読み込まれて実行されつつある分岐命令の後続命令の実行を無効化しなければ、実行してはならない命令を実行してしまう問題が発生する。
【００６５】
この問題を解決するため、図２１の構成では、分岐命令実行時に分岐条件が成立した場合は、既にパイプラインに投入されている無効な命令を非実行にできる機能を持たせている。
【００６６】
図２２の命令１が分岐命令で、そのＥＸステージで分岐先アドレスの計算が行われ、分岐条件成立時には続くＭＥＭ０ステージでプログラムカウンタＰＣの更新が行われ、時刻７の時点で分岐先のアドレス（本例では１００番地）がプログラムカウンタＰＣに格納される。つまり、図２２に示した通り命令１から順に後続命令をパイプライン処理したとすると、命令１の次は分岐先の命令７を実行しなければならず、その間の命令２〜命令６は実行してはならない無効な命令となる。
【００６７】
そこで、これらの無効な命令を非実行にするために、図２１に示した回路構成を用いる。図２１に示した制御信号ＰＣ＿ＨＺＤ，ＩＦ＿ＨＺＤ，ＩＤ＿ＨＺＤ，ＥＸ＿ＨＺＤは、これまでの説明で述べたもので、新たに示したＰＣ＿ＳＥＬはプログラムカウンタＰＣの値を分岐命令のＥＸステージで計算した分岐先アドレスに更新するかどうかを選択する制御信号である。また、ＩＦ＿ＮＯＰは命令レジスタＩＲの値を命令メモリＩＭＥＭから読み込んだ値ではなく、ＮＯＰ命令の命令語で更新させる制御信号である。これらの制御信号を図２２に示すように分岐命令が分岐処理を実行するＭＥＭ０ステージ以降に変化させることにより、後続の無効な命令を非実行にする。図２２の命令２〜命令６の各ステージのうちグレーに着色したステージが非実行にされた部分となる。
【図面の簡単な説明】
【００６８】
【図１】本発明の実施例１の全体構成を示すブロック図である。
【図２】本発明の実施例１の動作タイミングを示す説明図である。
【図３】本発明の実施例１の命令メモリ関連部のブロック図である。
【図４】本発明の実施例１の命令メモリインターフェイスのブロック図である。
【図５】本発明の実施例１の命令メモリインターフェイスの動作タイミングを示す説明図である。
【図６】本発明の実施例１の命令メモリ関連部のブロック図である。
【図７】本発明の実施例１のデータメモリ関連部のブロック図である。
【図８】本発明の実施例１のデータメモリインターフェイスの動作タイミングを示す説明図である。
【図９】本発明の実施例２の全体構成を示すブロック図である。
【図１０】本発明の実施例３の要部構成を示すブロック図である。
【図１１】本発明の実施例３の動作タイミングを示す説明図である。
【図１２】本発明の実施例４の全体構成を示すブロック図である。
【図１３】本発明の実施例４の動作タイミングを示す説明図である。
【図１４】本発明の実施例５の全体構成を示すブロック図である。
【図１５】本発明の実施例５の動作タイミングを示す説明図である。
【図１６】本発明の実施例５の動作タイミングを示す説明図である。
【図１７】本発明の実施例６の全体構成を示すブロック図である。
【図１８】本発明の実施例６の動作タイミングを示す説明図である。
【図１９】本発明の実施例７の全体構成を示すブロック図である。
【図２０】本発明の実施例７の動作タイミングを示す説明図である。
【図２１】本発明の実施例８の全体構成を示すブロック図である。
【図２２】本発明の実施例８の動作タイミングを示す説明図である。
【図２３】６段パイプライン構造を有する従来例のブロック図である。
【図２４】６段パイプライン構造を有する従来例の動作タイミングを示す説明図である。
【符号の説明】
【００６９】
ＰＣ      プログラムカウンタ更新ステージ
ＩＦ      命令読み出しステージ
ＩＤ      命令解読ステージ
ＥＸ      命令実行ステージ
ＭＥＭ    メモリアクセスステージ
ＷＢ      結果書き込みステージ
ＩＭＥＭ  命令メモリ
ＤＭＥＭ  データメモリ
【図１】
2005242457.tif 000004
【図２】
2005242457.tif 000005
【図３】
2005242457.tif 000006
【図４】
2005242457.tif 000007
【図５】
2005242457.tif 000008
【図６】
2005242457.tif 000009
【図７】
2005242457.tif 000010
【図８】
2005242457.tif 000011
【図９】
2005242457.tif 000012
【図１０】
2005242457.tif 000013
【図１１】
2005242457.tif 000014
【図１２】
2005242457.tif 000015
【図１３】
2005242457.tif 000016
【図１４】
2005242457.tif 000017
【図１５】
2005242457.tif 000018
【図１６】
2005242457.tif 000019
【図１７】
2005242457.tif 000020
【図１８】
2005242457.tif 000021
【図１９】
2005242457.tif 000022
【図２０】
2005242457.tif 000023
【図２１】
2005242457.tif 000024
【図２２】
2005242457.tif 000025
【図２３】
2005242457.tif 000026
【図２４】
2005242457.tif 000027