(57)【要約】【課題】異なるプロセッサ間でアクセススピードの遅い被演算データの読み出しが発生しないハードウェア構成にすることにより、命令の実行時間を短縮するプログラマブルコントローラを提供すること。【解決手段】シーケンスプログラムを実行するプログラマブルコントローラ１００において、所定の第１の命令を実行する第１のプロセッサ１０と、前記第１のプロセッサで実行できない第２の命令を実行する第２のプロセッサ２０と、前記第１のプロセッサ１０に内蔵され、シーケンスプログラムを構成する命令コードに含まれる第２のプロセッサ２０が処理する命令をデコードするインストラクションデコーダ１６および被演算データのアドレス情報から第２のプロセッサ２０が該当命令を実行するのに必要な被演算データを取得するためのメモリの読み出しを行うメモリアクセス回路を内蔵するコードジェネレータ１７を有する、プログラマブルコントローラ。【選択図】図１
2015210628.tif 000002
【特許請求の範囲】
【請求項１】
シーケンスプログラムを実行するプログラマブルコントローラにおいて、
所定の第１の命令を実行する第１のプロセッサと、
前記第１のプロセッサで実行できない第２の命令を実行する第２のプロセッサとを有し、
前記第１のプロセッサは、
前記第１の命令および前記第２の命令の実行時に用いられる被演算データを格納するメモリと、
前記シーケンスプログラムを構成する命令コードに含まれる前記第２のプロセッサが処理する命令に関する情報をデコードするデコード回路と、
前記メモリから前記被演算データを、前記デコード回路によりデコードされた被演算データのアドレス情報に基づいて読み出すメモリアクセス回路を内蔵するコードジェネレータとを有する、
ことを特徴とするプログラマブルコントローラ。
【請求項２】
前記コードジェネレータは、前記第２のプロセッサが処理する命令を実行するための関数が格納されているメモリ上のアドレスを算出するアドレス変換回路を有する、
ことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項３】
前記コードジェネレータは、前記被演算データと前記第２のプロセッサのロード命令コードを組み合わせて、前記第２のプロセッサが前記被演算データを前記第２のプロセッサの汎用レジスタにロードするロード命令を生成する、
ことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項４】
前記コードジェネレータは、関数が格納されているメモリ上のアドレスデータと前記第２のプロセッサの分岐命令コードを組み合わせて、前記第２のプロセッサが実行するべき命令に該当する関数に分岐するための分岐命令を生成する、
ことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項５】
前記コードジェネレータは、前記第２のプロセッサがシーケンスプログラムを実行するのに必要な前記第２のプロセッサが実行できる前記第２の命令の命令コードを生成し、この命令コードを前記第２のプロセッサが読みだすことができるバッファメモリに転送する、
ことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項６】
前記コードジェネレータは、シーケンスプログラムから前記第２のプロセッサが実行するべき前記第２の命令をフェッチした時以外は、前記第２のプロセッサのＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）コードを生成し、この命令コードを前記第２のプロセッサが読みだすことができるバッファメモリに転送する、
ことを特徴とする請求項１に記載のプログラマブルコントローラ。
【請求項７】
前記バッファメモリは、前記コードジェネレータで生成したコードを第２のプロセッサから見てメモリ空間に配置されているように見える、
ことを特徴とする請求項５または６に記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラに関し、特にプロセッサによる被演算データ読み出しのための外部メモリアクセスが発生しないプログラマブルコントローラに関する。
【背景技術】
【０００２】
プログラマブルコントローラにおいて、シーケンスプログラムの処理は、１ビットのデータに対する演算処理に特化した専用プロセッサ（ＡＳＩＣ）、および、１バイト以上のデータを扱う複雑な命令を実行する汎用プロセッサ（ＣＰＵ）から構成されるハードウェアにより実行されることが多い（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−１１６４４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術にあるような２つのプロセッサから構成されるハードウェアにおいても演算データを格納するメモリは１つであり、このメモリは一方のプロセッサから高速にアクセスすることができるが、もう一方のプロセッサによるアクセススピードは遅く、これが命令の実行スピードを遅くする原因となっている。
【０００５】
例えば、図３のような構成のプログラマブルコントローラの場合、演算データ格納用メモリは専用プロセッサに内蔵されているため、専用プロセッサの演算処理回路からは高速にアクセスすることができるが、汎用プロセッサと演算データ格納用メモリは外部バスにより接続されているため、汎用プロセッサによる演算格納用メモリへのアクセスは、専用プロセッサの演算データ格納用メモリへのアクセスよりもアクセススピードが遅くなる。
【０００６】
従来技術にみられる課題を解決する一手法として、シーケンスプログラムを汎用プロセッサのみで実行する（汎用プロセッサ内臓データキャッシュを利用する）構成が考えられる。この構成を用いる場合、シーケンスプログラムの処理では、１ビットデータの演算処理、被演算データ読み出し・演算結果データ書き込みのためのメモリのアラインメント境界に跨るワード・ロングワードアクセスを行う。このため、シーケンスプログラム処理用の汎用プロセッサとしては以下の条件を満たすものを選定しなければならなくなる。
条件１：１ビットデータの演算処理を汎用プロセッサで実行するためにリード・モディファイ・ライトをアトミックに実行する手段を有すること。
条件２：メモリのアラインメント境界に跨るワード・ロングワードアクセス時のデータのコヒーレンシ（整合性）を保つために、２回のメモリアクセスをアトミックに実行する手段を有すること。
【０００７】
また、課題を解決する別の手法として、使用頻度の高い一部の機能命令の処理を専用プロセッサ（ＡＳＩＣ）で実行するように構成することも考えられる。しかしながら、このような構成を設けるためには複雑な機能命令の処理回路を専用プロセッサ（ＡＳＩＣ）に組み込む必要があるため、ＡＳＩＣの開発・評価のために多くの時間・費用を要する。
【０００８】
そこで、本発明の目的は、異なるプロセッサ間でアクセススピードの遅い被演算データの読み出しが発生しないハードウェア構成にすることにより、命令の実行時間を短縮するプログラマブルコントローラを提供することである。
【課題を解決するための手段】
【０００９】
本願請求項１に係る発明は、シーケンスプログラムを実行するプログラマブルコントローラにおいて、所定の第１の命令を実行する第１のプロセッサと、前記第１のプロセッサで実行できない第２の命令を実行する第２のプロセッサとを有し、前記第１のプロセッサは、前記第１の命令および前記第２の命令の実行時に用いられる被演算データを格納するメモリと、前記シーケンスプログラムを構成する命令コードに含まれる前記第２のプロセッサが処理する命令に関する情報をデコードするデコード回路と、前記メモリから前記被演算データを、前記デコード回路によりデコードされた被演算データのアドレス情報に基づいて読み出すメモリアクセス回路を内蔵するコードジェネレータとを有する、ことを特徴とするプログラマブルコントローラである。
【００１０】
本願請求項２に係る発明は、前記コードジェネレータは、前記第２のプロセッサが処理する命令を実行するための関数が格納されているメモリ上のアドレスを算出するアドレス変換回路を有する、ことを特徴とする請求項１に記載のプログラマブルコントローラである。
【００１１】
本願請求項３に係る発明は、前記コードジェネレータは、前記被演算データと前記第２のプロセッサのロード命令コードを組み合わせて、前記第２のプロセッサが前記被演算データを前記第２のプロセッサの汎用レジスタにロードするロード命令を生成する、ことを特徴とする請求項１に記載のプログラマブルコントローラである。
【００１２】
本願請求項４に係る発明は、前記コードジェネレータは、関数が格納されているメモリ上のアドレスデータと前記第２のプロセッサの分岐命令コードを組み合わせて、前記第２のプロセッサが実行するべき命令に該当する関数に分岐するための分岐命令を生成する、
ことを特徴とする請求項１に記載のプログラマブルコントローラである。
【００１３】
本願請求項５に係る発明は、前記コードジェネレータは、前記第２のプロセッサがシーケンスプログラムを実行するのに必要な前記第２のプロセッサが実行できる前記第２の命令の命令コードを生成し、この命令コードを前記第２のプロセッサが読みだすことができるバッファメモリに転送する、ことを特徴とする請求項１に記載のプログラマブルコントローラである。
【００１４】
本願請求項６に係る発明は、前記コードジェネレータは、シーケンスプログラムから前記第２のプロセッサが実行するべき前記第２の命令をフェッチした時以外は、前記第２のプロセッサのＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）コードを生成し、この命令コードを前記第２のプロセッサが読みだすことができるバッファメモリに転送する、ことを特徴とする請求項１に記載のプログラマブルコントローラである。
【００１５】
本願請求項７に係る発明は、前記バッファメモリは、前記コードジェネレータで生成したコードを第２のプロセッサから見てメモリ空間に配置されているように見える、ことを特徴とする前記請求項５または６に記載のプログラマブルコントローラである。
【発明の効果】
【００１６】
本発明により、専用プロセッサ（ＡＳＩＣ）と汎用プロセッサ（ＣＰＵ）のそれぞれの利点を生かしたまま、シーケンスプログラムで使用する汎用プロセッサが実行するべき命令の処理時間が確実に短縮することを可能とするプログラマブルコントローラを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明に基づくプログラマブルコントローラのブロック図である。
【図２】バッファ１５の内容の一例を示す図である。
【図３】従来技術に基づくプログラマブルコントローラのブロック図である。
【発明を実施するための形態】
【００１８】
以下、本発明のプログラマブルコントローラの一実施形態について図面とともに説明する。
【００１９】
図１は、本発明のプログラマブルコントローラの概略ブロック図である。
プログラマブルコントローラ１００は、専用プロセッサ１０、汎用プロセッサ２０、および、メインメモリ３０、バス４０、バス５０を備えている。
【００２０】
専用プロセッサ１０は、演算処理回路１１、演算データ格納用メモリ１２、調停回路１３、Ｉ／Ｆ１４、バッファ１５、インストラクションデコーダ１６、コードジェネレータ１７、バッファ１８を備えている。演算処理回路１１は、専用プロセッサが実行するべき命令、例えば１ビットデータに対する演算処理などを行う回路である。演算データ格納用メモリ１２は、演算処理の対象となる被演算データを格納している。調停回路１３は、演算データ格納用メモリ１２への書き込み読み出しを制御している。Ｉ／Ｆ１４は、専用プロセッサ１０がメインメモリ３０からシーケンスプログラムコードを取り出す時、および汎用プロセッサ２０からの演算結果を受け取る時に用いられるインタフェース回路である。バッファ１５は、コードジェネレータ１７が生成したロード・分岐命令を汎用プロセッサ２０に転送する際に用いられるバッファメモリであり、バッファ１５の本体は例えば数段のＦＩＦＯにより構成されている。インストラクションデコーダ１６は、メインメモリ３０から取り出した命令をデコードする機能を有する。コードジェネレータ１７は、汎用プロセッサ２０が実行するべきコードがフェッチされた時に汎用プロセッサ２０が実行するロード・分岐命令を生成して汎用プロセッサ２０に転送する機能を有する。バッファ１８は、汎用プロセッサ２０が命令を実行した結果を演算データ格納用メモリ１２に書き込む際にライトバッファとして用いられる。
【００２１】
汎用プロセッサ２０は、専用プロセッサが実行できない命令であって汎用プロセッサが実行するべき命令（以下、機能命令と呼ぶ）を実行する。本実施形態では、汎用プロセッサ２０は専用プロセッサと２つのバスを介して接続されている。１つはＰＣＩ−Ｅｘｐｒｅｓｓなどにより実現されるバス４０である。バス４０は、バッファ１５と接続されており、汎用プロセッサ２０が機能命令をバッファ１５から読みだすために用いられる。もう一つはバス５０であり、汎用プロセッサ２０が、メインメモリからの機能命令関数コードを読み出す際、および機能命令を実行した結果を専用プロセッサ１０のバッファ１８に書き込む際に用いる。
【００２２】
メインメモリ３０は、専用プロセッサ１０によって実行されるシーケンスプログラムコードと、汎用プロセッサ２０により実行される機能命令関数コードを記憶している。本実施形態では、メインメモリ３０は、バス５０を介して専用プロセッサ１０、汎用プロセッサ２０と接続されている。
【００２３】
また、コードジェネレータが生成してバッファ１５に転送された各コードが汎用プロセッサから見てメモリ上のコード領域に配置されているように見えるようにするために、例えばバッファ１５のアドレス空間はメモリ上のアドレス空間の一部にマッピングされている。このような構成とすることで、コードジェネレータが生成してバッファ１５に転送されたコードは、汎用プロセッサから見てメモリ空間上のコード領域に配置されているように見えるので、汎用プロセッサはこれら各コードを直接実行することができる。
【００２４】
次に、上記ハードウェア構成を備えたプログラマブルコントローラ１００におけるシーケンスプログラムの実行処理について説明する。
【００２５】
本実施形態におけるプログラマブルコントローラでは、「シーケンスプログラムコード」と「汎用プロセッサ２０の命令セットにより構成されるコード」の２種類のプログラムコードを扱う。シーケンスプログラムコードは、専用プロセッサ１０で直接実行でき、汎用プロセッサ２０では実行できないコードである。シーケンスプログラムコードは、汎用プロセッサ２０で実行する命令の種類、被演算データのアドレス情報・サイズ・形式（バイナリ形式、ＢＣＤ形式など）を示す中間コードを含んでいる。一方、汎用プロセッサ２０の命令セットにより構成されるコードは、汎用プロセッサ２０で直接実行でき、専用プロセッサ１０では実行できないコードである。
【００２６】
専用プロセッサ１０は、汎用プロセッサ２０により実行されるべき機能命令が発生していないときは、バッファ１５に対して「ＮＯＰ（Ｎｏ−Ｏｐｅｒａｔｉｏｎ）」命令コードを書き込んでいる。また、バッファメモリの見かけのメモリサイズ（汎用プロセッサ２０から見た場合のメモリサイズ）に応じてｎバイト毎にバッファメモリの先頭アドレスに戻るための分岐命令が記録されている。例えば、汎用プロセッサ２０の命令セットの命令長が４バイト、バッファメモリの見かけのサイズを６４バイトとする場合には、６４バイト（１６命令）毎にバッファ先頭アドレスへの分岐命令コード「ＢＬ  ＳｔａｒｔＡｄｄｒｅｓｓ」を挿入する。この場合、汎用プロセッサ２０から見たコード領域としてのバッファ１５は、例えば図２（ａ）に示すような状態になる。
【００２７】
専用プロセッサ１０はメインメモリ３０から外部バス５０を介してプログラムコードをフェッチする。フェッチされたプログラムコードがシーケンスプログラムコードである場合は専用プロセッサで実行処理が行われる。一方で、フェッチされたプログラムコードが汎用プロセッサ２０が実行処理するべき命令である場合には当該命令コードから命令の種類、被演算データのアドレス情報・サイズ・形式などの情報をデコードし、これらデコードされた各情報を用いてコードジェネレータ１７は以下の処理を行う。
ステップ１：デコードされた被演算データのアドレス情報・サイズ・形式に基づいて演算データ格納用メモリ１２から必要な被演算データを読み出す。
ステップ２：デコードされた命令の種類に基づいて該当命令の処理関数が格納されているメモリのアドレスを算出する。
ステップ３：ステップ１，２で得られた被演算データおよびアドレスを用いて汎用プロセッサ２０の命令セット（「被演算データを汎用プロセッサ２０の汎用レジスタにロードする命令コード」および「該当命令の処理関数が格納されているアドレスに分岐する命令コード」）を生成する。
ステップ４：ステップ３で生成した命令コードを汎用プロセッサ２０へバッファ１５を介して転送する。
ここで、バッファ１５は例えば２バンクで構成し、一方のバッファへの命令コードの書き込みが完了したらこれを汎用プロセッサ２０に転送するなどの方法により、ステップ３で生成した命令コードをバッファ１５へ書き込むタイミングと、バッファ１５のデータを汎用プロセッサ２０へ転送するタイミングが重ならないようにする。
【００２８】
コードジェネレータ１７によって生成された命令コードが転送されると、汎用プロセッサ２０から見たコード領域としてのバッファ１５は例えば図２（ｂ）に示すような状態になる。ここで、「ＬＤ  Ｄａｔａ＿Ａ，  ＧＰＲ＿１」「ＬＤ  Ｄａｔａ＿Ｂ，  ＧＰＲ＿２」「ＬＤ  Ｄａｔａ＿Ｃ，  ＧＰＲ＿３」は被演算データＤａｔａ＿Ａ，Ｄａｔａ＿Ｂ，Ｄａｔａ＿Ｃを、それぞれ汎用プロセッサ２０が備える汎用レジスタＧＰＲ＿１，ＧＰＲ＿２，ＧＰＲ＿３にロードする命令である。また「ＢＬ  ＩｎｓｔＡｄｄｒｅｓｓ」は、該当する命令処理関数が格納されているメインメモリ３０のアドレスへと分岐する分岐命令コードである。
【００２９】
そして、汎用プロセッサ２０は専用プロセッサ１０により生成されたプログラムコードをバッファ１５から読み出して順次実行する。機能命令処理に当たると、バッファ１５に図２（ｂ）のようにロード命令、分岐命令が書き込まれるので、汎用プロセッサ２０がこれを実行することにより該当機能命令関数コードに分岐し、汎用プロセッサ２０が備える汎用レジスタから被演算データを取り出して演算処理を実行する。
【００３０】
汎用プロセッサ２０は演算処理終了後、演算結果をバス５０を介して専用プロセッサ１０に内蔵されたバッファ１８に書き込み、その後演算結果はバッファ１８から演算データ格納用メモリ１２に格納される。
【００３１】
以上のように、汎用プロセッサ２０による機能命令の実行時に、これまで処理時間中大きな割合を占めていた低速なメモリアクセス処理が発生しないため、機能命令を従来よりも高速に処理することができる。
【符号の説明】
【００３２】
１０  専用プロセッサ
１１  演算処理回路
１２  演算データ格納用メモリ
１３  調停回路
１４  Ｉ／Ｆ
１５  バッファ
１６  インストラクションデコーダ
１７  コードジェネレータ
１８  バッファ
２０  汎用プロセッサ
３０  メインメモリ
４０  バス
５０  バス
１００  プログラマブルコントローラ
【図１】
2015210628.tif 000003
【図２】
2015210628.tif 000004
【図３】
2015210628.tif 000005