以下、図面を参照して、実施形態について詳細に説明する。
<制御装置を有する画像形成装置>
図1は、第1実施形態に係る画像形成装置10の構成例を示す図である。この画像形成装置10は、主制御部12及び機器制御部14がシリアルバス40を介して接続された制御装置11と、機器制御部14に接続された各種機器を含む機器群16とを含んで構成されている。シリアルバス40は、主制御部12から見た場合には送信用となる信号線Tx、及び受信用となる信号線Rxを備えた全二重の伝送路である。
機器群16に含まれる各機器は、画像形成を行なうための機器であって、例えば、感光体や現像ロール等を回転させるモータ、用紙検出のためのセンサ、或いはトナー濃度を検出するためのセンサ等が含まれる。なお、ここでは画像形成装置10を、電子写真方式で画像形成を行なう画像形成装置として説明したが、インクジェット方式で画像形成を行なう画像形成装置であってもよい。
主制御部12は、CPU(中央処理装置:Central Processing Unit)20、シリアライザ・デシリアライザ制御部22(以下、SerDes制御部22という)、及び複写レジスタ群24を備えている。
CPU20は、不図示の不揮発性の記憶部に記憶されたプログラムを実行し、画像形成装置10全体を制御する。なお、CPU20が実行するプログラムを記憶するための記憶部は、HDD(ハードディスクドライブ)、フレキシブルディスクやDVDディスク、光磁気ディスクやUSB(Universal Serial Bus)メモリ等(不図示)であってもよいし、不図示の通信IFを介して接続された他の装置の記憶媒体であってもよい。
CPU20は、CPUバス26を介してSerDes制御部22と接続されている。CPUバス26は、複数の信号線を備えたパラレルバスである。
SerDes制御部22は、CPU20からCPUバス26を介して機器制御部14に送信する情報(パラレル信号)を受け取ると、該パラレル信号をパケット化し、各パケットをシリアル信号に変換してシリアルバス40を介して機器制御部14に送信する。また、SerDes制御部22は、機器制御部14からシリアルバス40を介してシリアル形式のパケットを受信すると、当該受信したパケットをパラレル形式のパケットに変換し、該パラレル形式のパケットをデコードして、該パケットに含まれるデータを取り出す。
複写レジスタ群24は、複数のレジスタ(記憶領域)を含むメモリで構成されている。また、複写レジスタ群24は、各々が転送単位の情報を記憶する複数のブロックを含んで構成されている。以下では、1つのブロックに記憶される転送単位の情報を、「ブロック単位のデータ」という。ブロック単位のデータは、数ワード分(例えば、64ビット)のデータとしてもよい。
機器制御部14に含まれる入出力制御レジスタ群32の各レジスタの記憶内容が、この複写レジスタ群24に複写される。ここで、複写とは、入出力制御レジスタ群32からレジスタに記憶されたデータを読出して、該読出したデータをシリアルバス40を介して主制御部12に送信し、複写レジスタ群24の各レジスタに書込む一連の処理をいう。複写により、複写レジスタ群24の記憶内容が更新される。
機器制御部14は、シリアライザ・デシリアライザ制御部30(以下、SerDes制御部30という)、入出力制御レジスタ群32、及び駆動・受信回路34を備えている。
SerDes制御部30は、主制御部12からシリアルバス40を介してシリアル形式のパケットを受信すると、当該受信したパケットをパラレル形式のパケットに変換し、パラレル形式のパケットをデコードして、当該パケットに含まれるデータを取り出す。また、SerDes制御部30は、主制御部12に送信する情報(パラレル信号)をパケット化し、各パケットをシリアル信号に変換してシリアルバス40を介して主制御部12に送信する。
入出力制御レジスタ群32は、複数のレジスタ(記憶領域)を含むメモリで構成されている。入出力制御レジスタ群32もまた、各々が転送単位の情報を記憶する複数のブロックを含んで構成されている。入出力制御レジスタ群32の複数のレジスタは、入力レジスタと、出力レジスタとを含んでいる。入力レジスタには、各機器の状態を示すデータが書込まれる。出力レジスタには、主制御部12のCPU20から送信された各機器を制御するデータが書込まれる。また、入出力制御レジスタ群32には、割込の発生を示すデータが書込まれるレジスタ(以下、割込レジスタという)、及び割込要因を示すデータが書込まれるレジスタ(以下、割込要因レジスタという)も含まれる。
入出力制御レジスタ群32の各レジスタに記憶された記憶内容は、前述したように、主制御部12の複写レジスタ群24にブロック毎に複写される。本実施形態では、CPU20は、複写レジスタ群24に複写されたデータを読み出すことにより、入出力制御レジスタ群32に書込まれたデータと同じデータを参照することができる。この他、本実施形態では、CPU20は、シリアルバス40を介して入出力制御レジスタ群32に書込まれたデータを読出して取得することもできる。
なお、本実施形態において、複写レジスタ群24のメモリサイズ、及び入出力制御レジスタ群32のメモリサイズは、互いに等しく、入出力制御レジスタ群32から複写レジスタ群24への複写の際には、入出力制御レジスタ群32のブロックの1つから読み出されたデータは、当該データが記憶されていた入出力制御レジスタ群32のブロックに対応する複写レジスタ群24のブロックに書込まれるものとする。
駆動・受信回路34は、画像形成装置10を構成する機器群16の各機器に接続される。駆動・受信回路34は、入出力制御レジスタ群32の出力レジスタに機器を制御するためのデータが書込まれると、そのデータに応じた駆動信号を当該出力レジスタに対応する機器に出力する。機器は出力された駆動信号に応じて駆動される。また、接続された機器から当該機器の状態を示す信号が入力されると、その信号に応じたデータを当該機器の状態を示すデータ用の入力レジスタに書込む。状態を示すデータは、例えば、機器がセンサである場合には、センサの検出結果を示すデータであってもよいし、機器がモータである場合には、モータの回転状態を示すデータであってもよい。
画像形成装置10全体を制御するCPU20は、入力レジスタに書込まれたデータから機器の状態を把握し、出力レジスタに制御用のデータを書込むことにより各機器の駆動を制御している。
ただし、本実施形態では、後述するように、システムタイマの周期以下の周期で、入出力制御レジスタ群32のデータが複写レジスタ群24へ複写されるため、CPU20は、機器の状態等を把握する際には、わざわざシリアルバス40を介して入出力制御レジスタ群32からデータを取得しなくても、主制御部12に設けられた複写レジスタ群24に複写されたデータを読み出すことで、機器の状態等を把握することができる。
<主制御部のSerDes制御部>
図2は、主制御部12のSerDes制御部22の構成例を示す図である。SerDes制御部22は、CPUバスインタフェース50、コントローラ52、パケット生成回路54、バッファ56、パラレルシリアル変換回路58、シリアルパラレル変換回路60、バッファ62、パケットデコード回路64、及びアドレスカウンタ66を備えている。
CPUバスインタフェース50は、CPUバス26を介してCPU20と通信するためのインタフェースである。コントローラ52は、SerDes制御部22を構成する各構成要素と接続され、プロトコル制御や各構成要素の動作タイミング等を制御することで、SerDes制御部22全体を制御する。
パケット生成回路54は、パケットを生成する。バッファ56は、パケット生成回路54で生成されたパケットを一時的に記憶する。パラレルシリアル変換回路(シリアライザ)58は、バッファ56に一時的に記憶されたシリアル形式のパケットをパラレル形式のパケットに変換して、シリアルバス40を介して機器制御部14に送信する。
シリアルパラレル変換回路(デシリアライザ)60は、機器制御部14からシリアルバス40を介して受信したシリアル形式のパケットをパラレル形式のパケットに変換する。バッファ62は、シリアルパラレル変換回路60で変換されたパラレル形式のパケットを一時的に記憶する。パケットデコード回路64は、バッファ62に一時的に記憶されたパラレル形式のパケットをデコードして、当該パケットに含まれるデータを取り出す。
アドレスカウンタ66は、複写レジスタ群24に入出力制御レジスタ群32から読出され転送されたデータを書込むときの書込先のアドレスを生成してコントローラ52に出力する。ここでの「アドレス」とは、複写のために付与されるアドレスカウンタ66のカウント値であり、複写レジスタ群24及び入出力制御レジスタ群32内の、先頭から何番目のブロックであるかを表す番号である。このカウント値は、連続番号(シーケンス・ナンバー)としてパケットに含められる。入出力制御レジスタ群32の1番目のブロックから読み出されたデータは、対応する複写レジスタ群24の1番目のブロックに書込まれる。
複写レジスタ群24へのデータの複写は、入出力制御レジスタ群32から読出され送信されたブロック単位のデータを複写レジスタ群24の先頭アドレス(先頭ブロック)から順に書込んでいくことにより行なわれるため、ブロック単位のデータが書込まれる毎に、インクリメントされたアドレスが出力される。アドレスカウンタ66は、複写レジスタ群24への全データの書込が終了した後、次に書込を開始する前にリセットされる(先頭アドレスのカウント値となる)。
コントローラ52には、複写レジスタ更新回路52a、読出選択回路52b、書込選択回路52c、及び割込信号発生回路52dが、コントローラ52の機能として設けられている。書込選択回路52cは、割込信号発生回路52dによる割込信号の発生時に、割込要因データを入出力制御レジスタ群32から直接読出すか否かを判定する直接読出判定回路52eを含む。なお、直接読出判定回路52eの詳細については後述する。
複写レジスタ更新回路52aは、入出力制御レジスタ群32の各レジスタから読出され転送されたデータを複写レジスタ群24に書込んで、複写レジスタ群24の記憶内容を更新する。
読出選択回路52bは、CPU20から、入出力制御レジスタ群32に書込まれたデータの読出要求を受けたときに、当該読出要求に基づいて、複写レジスタ群24に複写されたデータを読み出すのか、或いは入出力制御レジスタ群32に書込まれたデータを直接読み出すのかを選択して、読出処理を実行し、読み出したデータをCPU20に供給する。
書込選択回路52cは、CPU20から入出力制御レジスタ群32に対する書込要求を受けたときに、当該書込要求に基づいて、入出力制御レジスタ群32のみに対して書込むのか、或いは入出力制御レジスタ群32に書込むだけでなく複写レジスタ群24にも(複写による更新ではなく)直接書込むのかを選択して、書込処理を実行する。
入出力制御レジスタ群32の割込レジスタに割込の発生を示すデータが書込まれると、割込発生を通知する割込パケットが主制御部12に送信される。割込信号発生回路52dは、機器制御部14側から割込パケットを受信すると、割込信号を発生してCPU20に出力する。CPU20は、割込信号を受け取ると、割込が発生したことを把握し、複写レジスタ群24から割込要因を示すデータを読み出して割込要因に応じた処理を行なう。本実施の形態では、割込信号発生回路52dで発生した割込信号は、直接読出判定回路52eにも出力される。
<機器制御部のSerDes制御部>
図3は、機器制御部14のSerDes制御部30の構成例を示す図である。SerDes制御部30は、コントローラ80、シリアルパラレル変換回路(デシリアライザ)82、バッファ84、パケットデコード回路86、パケット生成回路88、バッファ90、パラレルシリアル変換回路(シリアライザ)92、及びアドレスカウンタ94を備えている。
コントローラ80は、SerDes制御部30を構成する他の構成要素と接続され、プロトコル制御や各構成要素の動作タイミング等を制御することで、SerDes制御部30全体を制御する。
シリアルパラレル変換回路82は、主制御部12からシリアルバス40を介して受信したシリアル形式のパケットをパラレル形式のパケットに変換する。バッファ84は、シリアルパラレル変換回路82で変換されたパラレル形式のパケットを一時的に記憶する。パケットデコード回路86は、バッファ84に一時的に記憶されたパラレル形式のパケットをデコードして、当該パケットに含まれるデータを取り出す。
パケット生成回路88は、パケットを生成する。バッファ90は、パケット生成回路88で生成されたパケットを一時的に記憶する。パラレルシリアル変換回路92は、バッファ90に一時的に記憶されたシリアル形式のパケットをパラレル形式のパケットに変換して、シリアルバス40を介して主制御部12に送信する。
アドレスカウンタ94は、入出力制御レジスタ群32からデータを読み出して複写レジスタ群24に複写するときの、データの読出元のアドレスを生成してコントローラ80に出力する。複写レジスタ群24へのデータの複写は、ブロック単位のデータを入出力制御レジスタ群32から読み出して順次主制御部12に転送することにより行なわれる。このため、ブロック単位のデータが入出力制御レジスタ群32から読み出される毎に、インクリメントされたアドレスが出力される。アドレスカウンタ94は、複写レジスタ群24への複写のための入出力制御レジスタ群32からのデータの読出しが終了したとき、或いはデータの読出しを開始する際にリセットされる。
コントローラ80には、レジスタデータ転送回路80aが、コントローラ80の機能の1つとして設けられている。レジスタデータ転送回路80aは、入出力制御レジスタ群32の各レジスタに書込まれているデータを複写レジスタ群24に複写するため、入出力制御レジスタ群32からブロック単位のデータを読み出して、パケット生成回路88に出力し、複写レジスタ群24に書込ませるためのパケット(以下、複写パケットという)を生成させる。複写パケットは、パラレルシリアル変換回路92によりシリアル変換され、シリアルバス40を介して主制御部12に転送される。
また、本実施形態において、機器制御部14で割込(例えば、機器の動作異常など)が発生すると、コントローラ80は、入出力制御レジスタ群32の割込レジスタに、割込発生を示すデータを書込むと共に、割込要因レジスタに割込要因のデータを書込む。そして、コントローラ80は、割込パケットをパケット生成回路88に生成させる。割込パケットは、パラレルシリアル変換回路92によりシリアル形式のパケットに変換されて、シリアルバス40を介して主制御部12に送信される。
なお、主制御部12のCPU20は、システムタイマを基準として動作する。システムタイマは、予め定められた時間間隔(周期)でカウントするものであって、カウント毎にCPU20に対してタイマ割込みを発生させる。システムタイマの更新(時計のカウント)は、主制御部12の基板上に設けられた不図示のタイマIC(Integrated Circuit)から供給されるクロックを基準として行なわれる。システムタイマは、リアルタイムOS(オペレーティングシステム)においては、一般的に知られている技術であるため、ここではこれ以上の説明を省略する。
また、機器制御部14にも、タイマIC(不図示)が設けられ、上記システムタイマのカウント周期と同じ長さの周期でクロックを出力する。
なお、SerDes制御部22、複写レジスタ群24、SerDes制御部30、入出力制御レジスタ群32、及び駆動・受信回路34の各々は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等のハードウェアにより構成される。
<制御装置の作用>
次に、本実施形態に係る制御装置11の作用について説明する。
(入出力制御レジスタ群32の更新)
CPU20は、機器を制御するための制御用のデータを書込むための書込要求をCPUバス26を介してSerDes制御部22に出力する。この書込要求には、書込むデータだけでなく、書込先となる入出力制御レジスタ群32のレジスタのアドレスが指定されている。SerDes制御部22のコントローラ52は、CPUバスインタフェース50を介して書込要求を受け取ると、パケット生成回路54、バッファ56、及びパラレルシリアル変換回路58を制御して、CPU20から受け取った書込要求をパケット化して送信する。
機器制御部14のコントローラ80は、シリアルパラレル変換回路82、バッファ84、及びパケットデコード回路86を制御して、書込要求のパケットをデコードして書込要求を取り出す。
コントローラ80は、入出力制御レジスタ群32に含まれる複数のレジスタのうち、上記デコードして得られた書込要求で指定されたアドレスのレジスタ(出力レジスタ)に、当該レジスタに対応する機器を制御するための制御用のデータを書込む。これにより、書込まれた制御用のデータに応じて該当の機器が駆動される。
また、駆動・受信回路34は、接続された機器から当該機器の状態を示す信号が入力されると、その信号に応じたデータを当該機器の状態を示すデータ用の入力レジスタに書込む。
また、本実施形態においては、機器制御部14で割込が発生すると、コントローラ80は、割込レジスタに割込発生を示すデータを書込むと共に、割込要因レジスタに割込要因のデータを書込む。
(複写レジスタ群24への複写)
本実施の形態の制御装置11では、システムタイマのカウント周期以下の周期で、入出力制御レジスタ群32に記憶された全データを読出してシリアルバス40を介して送信し複写レジスタ群24に書込む複写処理が行なわれる。例えば、システムタイマのカウント周期が1msであれば、複写周期は、1ms以下の周期とされる。
また、本実施の形態では、入出力制御レジスタ群32に記憶された各データを先頭アドレス(先頭ブロック)から順に読出して、読出したデータから複写先のアドレスを指定せずに複数のパケットを生成して送信し、複写レジスタ群24の先頭アドレス(先頭ブロック)から当該複数のパケットの転送順にデータを書込む。これにより、複写レジスタ群24の記憶内容が更新される。
以下、この複写処理を詳しく説明する。
機器制御部14のSerDes制御部30のコントローラ80は、機器制御部14に設けられたタイマICからクロックが出力されると、入出力制御レジスタ群32から複写レジスタ群24へのデータ複写のための読出処理を開始する。なお、ここでは、タイマICのクロックが出力された時を読出開始タイミングとしたが、これは一例であって、読出開始タイミングはこれに限定されない。
具体的には、コントローラ80のレジスタデータ転送回路80aは、アドレスカウンタ94から出力されたアドレスに従って、入出力制御レジスタ群32の先頭アドレス(先頭ブロック)からブロック単位のデータを順次読み出して、パケット生成回路88に当該読み出したデータを順次入力する。アドレスカウンタ94の初期値は、入出力制御レジスタ群32の先頭アドレスとされる。例えば、1番目から順にカウントアップする場合は、アドレスカウンタ94の初期値は「1」である。
そして、レジスタデータ転送回路80aがブロック単位のデータを読み出す毎に、アドレスカウンタ94がカウントアップする。レジスタデータ転送回路80aは、入出力制御レジスタ群32から全データを読み出すまで、アドレスカウンタ94のカウント値が示すアドレスからブロック単位のデータを読み出してパケット生成回路88に入力することを繰り返す。
パケット生成回路88は、複写対象となるブロック単位のデータが入力される毎に、当該データを複写レジスタ群24に書込ませるための複写命令のパケット(以下、複写パケットという)を生成し、バッファ90に記憶する。なお、複写パケットには、複写先(書込先)のアドレスの情報は含めない。これにより、転送データ量が削減される。なお、送信される複数のパケットには、アドレスカウンタ94のカウント値が含まれる。
パラレルシリアル変換回路92は、レジスタデータ転送回路80aの制御の下、バッファ90に記憶された複写パケットをシリアル信号に変換して、シリアルバス40の信号線Rxに出力する。これにより、入出力制御レジスタ群32に記憶されている全データから複数の複写パケットが生成されて主制御部12に転送される。
主制御部12に転送された複写パケットは、シリアルパラレル変換回路60によりパラレル形式の複写パケットに変換されて、バッファ62に記憶される。パケットデコード回路64は、バッファ62に記憶された複写パケットをデコードして複写すべきデータを取り出す。
複写レジスタ更新回路52aは、パケットデコード回路64でデコードされて得られたデータを、複写レジスタ群24の、アドレスカウンタ66から出力されたアドレスが示すレジスタに書込む。1つの複写パケットにより書込まれるデータは、ブロック単位のデータである。従って、書込まれるデータのサイズは、入出力制御レジスタ群32からデータを読み出したときの読出しサイズに等しい。
アドレスカウンタ66の初期値は、複写レジスタ群24の先頭アドレスとされる。そして、複写レジスタ更新回路52aが、複写パケットのデータ(ブロック単位のデータ)を書込む毎に、アドレスカウンタ66がカウントアップする。複写レジスタ更新回路52aは、入出力制御レジスタ群32から読み出され送信された全データを書込むまで、アドレスカウンタ66のカウント値が示すアドレスにデータを書込む処理を繰り返す。
このように、入出力制御レジスタ群32の先頭アドレスから順に同じサイズのデータを読み出して順次複写レジスタ群24に書込むことを繰り返すことにより、最終的に全データが複写レジスタ群24に複写される。このため、複写パケットで複写先(書込先)のアドレスを指定しなくても、問題なく複写処理が実行される。これにより、複写処理が簡易化する。
また、本実施形態では、上記説明したように、システムタイマのカウント周期以下の周期で、複写レジスタ群24へ全データが複写されるように、レジスタデータ転送回路80a及び複写レジスタ更新回路52aが構成されている。すなわち、全データの複写開始から複写終了までの時間は、システムタイマのカウント周期以下の周期となる。ここで、複写開始とは、入出力制御レジスタ群32から複写のためのデータの読出しを開始するタイミングをいい、複写終了とは、複写レジスタ群24への全データの書込が終了するタイミングをいう。
従って、あるカウント周期の途中で、入出力制御レジスタ群32のデータが更新された場合、遅くとも次のカウント周期で、当該更新されたデータが複写レジスタ群24に複写されて、複写レジスタ群24の記憶内容が更新される。CPU20は、複写レジスタ群24に複写されたデータを参照することで、システムタイマのカウント周期以下の周期で更新されたデータを参照できる。なお、複写周期は予め設定しておく。
更にまた、入出力制御レジスタ群32のデータから生成された複数の複写パケットは、予め定められた時間以上の間隔をあけて(ただし、複写開始から複写終了までの時間がシステムタイマのカウント周期以下となるように)1つずつ送信される。従って、複写パケットの転送処理中に割込が発生した場合でも、当該複写パケットが送信された後、次の複写パケットが送信されるまでの間に、割込パケットを主制御部12に送信することができる。もちろん、複写パケットの送信間隔は、割込パケットの送信がなければ、間隔を詰めて(すなわち、割込パケットを発行する場合に比べて送信間隔を短くして)送信するようにしてもよい。
(CPU20による読出処理)
CPU20は、入出力制御レジスタ群32に書込まれたデータを参照する場合、入出力制御レジスタ群32から直接データを取得するのではなく、複写レジスタ群24からデータを読み出すことで、入出力制御レジスタ群32に書込まれたデータを参照することができる(通常読出処理)。
従って、CPU20は、データ読出しの際には、複写レジスタ群24のアドレスを指定した読出要求をSerDes制御部22に出力する。SerDes制御部22のコントローラ52の読出選択回路52bは、CPUバスインタフェース50を介してCPU20から複写レジスタ群24のデータの読出要求を取得した場合には、複写レジスタ群24に複写されたデータ(読出要求で指定されたアドレスのデータ)を読み出して、CPU20に供給する。入出力制御レジスタ群32に対する読出要求のパケットの発行はなされない。
また、入出力制御レジスタ群32から直接データを読み出す読出要求をCPU20が出力した場合には、上述した読出選択回路52bの機能により、入出力制御レジスタ群32からデータを直接読み出してCPU20に転送することができる(直接読出処理)。
読出選択回路52bは、複写レジスタ群24からデータを読み出す通常の読出要求を受け取った場合には、複写レジスタ群24の指定アドレスのレジスタからデータを読み出して、CPU20に供給する「通常読出処理」を行う。一方、読出選択回路52bは、入出力制御レジスタ群32から直接データを読み出す読出要求を受け取った場合には、複写レジスタ群24からのデータの読出しは行なわず、入出力制御レジスタ群32からデータを読み出して、CPU20に供給する「直接読出処理」を行なう。
「直接読出処理」を行なう場合、具体的には、読出選択回路52bは、入出力制御レジスタ群32のアドレスが指定された読出要求をパケット生成回路54によりパケット化して、バッファ56に記憶させ、パラレルシリアル変換回路58により当該バッファ56に記憶した読出要求のパケットをシリアル信号のパケットに変換して、シリアルバス40の信号線Txに出力する。
機器制御部14のSerDes制御部30において、読出要求のパケットを受信すると、当該受信したパケットをシリアルパラレル変換回路82によりパラレル化して、バッファ84に記憶し、パケットデコード回路86により当該バッファ84に記憶した読出要求のパケットをデコードして、読出要求のデータを取り出す。コントローラ80は、該読出要求に基づき、当該読出要求の指定アドレスが示す入出力制御レジスタ群32のレジスタからデータを読み出して、パケット生成回路88により該読み出したデータをパケット化し、バッファ90に記憶し、パラレルシリアル変換回路92で、バッファ90に記憶したパケットをシリアル信号に変換して、信号線Rxに出力する。
主制御部12の読出選択回路52bは、機器制御部14から送信された読出データのパケットを受け取ると、シリアルパラレル変換回路60によりパラレル変換し、パケットデコード回路64によりデコードしてデータを取り出して、CPUバスインタフェース50を介してCPUバス26に伝送しCPU20に供給する。
このように直接読出処理を可能に構成することで、CPU20が、入出力制御レジスタ群32のデータを直接参照したい場合に対応可能となる。
(CPU20による書込処理)
また、上記例では、CPU20から書込要求が出力されると、入出力制御レジスタ群32にのみデータを書込むよう動作する例(通常書込処理)を説明したが、これに限定されない。例えば、CPU20から、入出力制御レジスタ群32だけでなく、複写レジスタ群24にも直接データを書込む書込要求があった場合には、書込選択回路52cの機能により、複写レジスタ群24に対しても指定されたアドレスにデータを書込む処理(直接書込処理)が行われる。
「直接書込処理」を行う場合、具体的には、書込選択回路52cは、上記例と同様に、書込要求のパケットを生成して、シリアル化し、シリアルバス40を介して機器制御部14に送信して、入出力制御レジスタ群32のレジスタのうち、書込要求で指定されたアドレスのレジスタに、指定されたデータを書込ませる。
更にまた、書込選択回路52cは、入出力制御レジスタ群32にデータを書込んだレジスタに対応する複写レジスタ群24のレジスタにも、CPU20から受け取った書込要求で指定されたデータを書込む。
このように、書込選択回路52cは、CPU20から受け取った書込要求が、入出力制御レジスタ群32にのみに書込む「通常書込処理」を行う書込要求か、入出力制御レジスタ群32及び複写レジスタ群24の双方に書込む「直接書込処理」を行う書込要求かに応じて、処理内容を選択して実行する。
なお、直接書込処理を行なった場合には、当該直接書込処理を行なった直後の複写周期で行なわれる複写処理において、当該直接書込を行なった複写レジスタ群24のレジスタへの書込をマスク(書込を禁止)する。
(従来の制御装置との比較)
ここで、図6に示す従来の制御装置の構成例と比較しながら、本実施形態の制御装置11について説明する。ここでは、複写レジスタ群を主制御部に設けた場合の利点について説明する。
図6(A)に示すように、従来の制御装置は、入出力制御レジスタ群が、主制御部側に設けられていた。主制御部の入出力制御レジスタ群と、機器制御部の駆動・受信回路とはパラレル信号線により接続され、入出力制御レジスタ群から駆動・受信回路に対して、モータやスイッチなどの駆動を制御するデータがパラレル信号線を介して出力され、駆動・受信回路から入出力制御レジスタ群に対して、センサの検出結果等の状態を示すデータがパラレル信号線を介して入力されていた。すなわち、機器の数に比例した分のパラレル信号線で主制御部と機器制御部とを接続する必要があった。しかしながら、主制御部の基板の実装スペース等の問題により、多数のパラレル信号線を配設することは問題があった。
そこで、図6(B)に示すように、主制御部及び機器制御部の各々にシリアルI/Oインタフェース(SIO IF)を設け、複数のシリアル信号線で主制御部と機器制御部とを接続し、複数のパラレル信号線をいくつかのグループに分け、1つのグループに対して1つのシリアル信号線を対応させて配設し、同一グループに属する複数のパラレル信号をシリアル信号に変換して、対応するシリアル信号線を介して送受信させる構成も考えられる。この構成により、主制御部と機器制御部とを接続する信号線の数を減らすことができるが、駆動・受信回路に接続される機器が増加する等により、機器の変更があった場合には、シリアル信号線が増加してしまう。また、このように機器が増加する場合、グルーピングを新たに設定する必要があり、機器制御部だけでなく、主制御部の作り替えも必要となる。
これに対して、本実施形態の制御装置11は、主制御部12及び機器制御部14を汎用的なシリアルバス40により接続し、機器制御部14に入出力制御レジスタ群32を設けた。これにより、また、主制御部12と機器制御部14を接続する信号線の数が削減され、主制御部12や機器制御部14の基板面積も小さくでき、コスト削減につながる。また、機能変更(機器群16の機器の増加や削減など)が生じても、主制御部12及び機器制御部14を接続する信号線に変化は生じない。また、主制御部12の構成は、増加する機器に依存しないため、主制御部12の作り替えの必要もない。
また、本実施形態では、シリアルバス40を採用したため、パレラルバスのように、遠隔接続時の信号品質の劣化(スキュー、バラつき等)の問題は生じない。
また、シリアルバス40は、汎用的な例えば数100Mbpsのシリアル伝送路であるため、当該伝送路のインタフェースとなるSerDes制御部22やSerDes制御部30等は、安価なデバイス(ASIC,FPGA)で実現される。また、パケット方式で通信するため、エラーチェックを容易にでき、伝送路の信頼性が向上する。
なお、入出力制御レジスタ群32を機器制御部14側に設け、入出力制御レジスタ群32から常にデータを読出す構成とした場合、データを読み出す際の遅延が問題となる。すなわち、入出力制御レジスタ群32に対する読出要求をシリアルバス40を介して送信してからデータが読み出されてCPU20に送信されるまでの時間がかかる。しかしながら、本実施形態では、主制御部12に複写レジスタ群24を設け、入出力制御レジスタ群32のデータを複写レジスタ群24に複写するようにしたため、CPU20は、シリアルバス40を介さずとも、複写レジスタ群24に複写されたデータを読み出せば、入出力制御レジスタ群32に記憶されたデータを取得できる。
従って、データ読出しの遅延は生じず、必要以上に高速な伝送路を用いなくても従来と同等の読出性能が確保される。なお、書込については、CPU20からSerDes制御部22に対して書込要求を出力しさえすれば、その後は、SerDes制御部22でパケットが生成され、機器制御部14で書込処理されるため、CPU20が書込処理待ちとなることはない。
<直接読出判定回路>
ここで、主制御部12のコントローラ52に設けられた「直接読出判定回路52e」について説明する。直接読出判定回路52eは、割込信号の発生時に、割込要因データを入出力制御レジスタ群32から直接読出すか否かを判定する回路である。
(割込処理)
まず、割込処理の遅延要因について説明する。
上記の通り、機器制御部14で割込が発生すると、割込パケットが生成されて主制御部12に送信される。割込パケットは、SerDes制御部22でデコードされ、割込信号としてCPU20に伝達される。CPU20は、割込信号を受け取ると、複写レジスタ群24から割込要因データを読み出して、当該読み出した割込要因データに応じた処理を行なう。
複写レジスタ群24は、システムタイマのカウント周期以下の周期で、個別にアドレスを指定することなく先頭データから順に更新(複写)されるため、割込信号を複写レジスタ群24の複写途中で受け取った場合、新規に更新された割込要因を確実に取得するには、その次の周期の複写が完了するまで待って割込要因データを読み出さなければならない。すなわち、割込信号を受け取ってから次の周期の複写が完了するまで、CPU20はアイドル状態(待機動作)となり、CPU20による割込処理が遅延する。また、CPU20のアイドル状態が長いと、装置全体の稼働効率が低下する。
(直接読出判定回路)
そこで、本実施の形態では「直接読出判定回路52e」を設け、予め定めた判定条件を満たす場合には、割込信号の発生時に割込要因データを入出力制御レジスタ群32から直接読出すようにした。この直接読出処理により、割込信号の発生時に、複写レジスタ群24の更新を待たずに当該割込信号に応じた割込要因情報が参照される。
以下、図面を参照して「直接読出判定回路52e」の構成を詳細に説明する。図4は直接読出判定回路の構成例を示すブロック図である。図4に示すように、直接読出判定回路52eは、参照アドレスマップ100、割込判定フラグを有する割込検知回路102、タイマー104、論理積(AND)回路106、選択回路108、アドレス比較回路110、及び論理和(OR)回路112、114を備えている。また、参照アドレスマップ100は、参照有無判定回路116を備えている。
参照アドレスマップ100には、例えば、「INT.1−参照アドレス」等、割込信号と当該割込信号に応じた割込要因情報の参照アドレスとが関連付けられて予め記憶(例えば、電源投入時等に設定)されている。ここで「参照アドレス」とは、割込信号を発生させた割込要因データが書込まれた入出力制御レジスタ群32の割込レジスタのアドレスである。割込信号に応じた割込要因情報の参照アドレスは、CPU20により予め認識されている。図示した例では、「INT.1〜INT.13」の14種類の割込信号の各々に対して、対応する参照アドレスが記憶されている。参照有無判定回路116は、参照アドレスマップ100の参照の有無を判定して、判定結果を論理和回路114に出力する。
割込検知回路102は、割込信号発生回路52d、タイマー104、及び論理積回路106の一方の入力端子に接続されている。割込検知回路102には、割込信号発生回路52dで発生した割込信号が入力される。割込検知回路102は、割込信号が入力されると、割込判定フラグを立てる(ONにする)と共に、起動信号をタイマー104に出力してタイマー104を起動する。割込信号が入力される度に、タイマー104が再起動される。割込判定フラグの値(ON/OFF)は、論理積回路106の一方の入力端子に入力される。
タイマー104は、割込検知回路102及び論理和回路114の一方の入力端子に接続されている。タイマー104は、起動されてからの経過時間を計測し、複写周期等の予め定めた時間が経過すると、論理和回路114の一方の入力端子に時間経過信号(タイムアップ信号)を出力する。
論理積回路106は、一方の入力端子に割込検知回路102が接続され、出力端子に選択回路108が接続されている。上記の通り、論理積回路106の一方の入力端子には、割込判定フラグの値が入力される。また、論理積回路106の他方の入力端子には、読出要求があるか否か(読出有効/無効)を表す値が入力される。論理積回路106は、割込判定フラグの値がONで且つ読出要求あり(読出有効)の場合に、選択回路108に起動信号を出力する。
選択回路108には、読出要求及び書込要求が入力されている。起動信号により選択回路108が起動されると、選択回路108は読出要求を監視するように切り替わり、入力された読出要求をアドレス比較回路110に出力するようになる。なお、選択回路108は、論理和回路112の一方の入力端子に接続されている。選択回路108が起動されていない状態では、選択回路108は入力された読出要求及び書込要求を論理和回路112に出力し、通常読出処理及び通常書込処理を行う。
アドレス比較回路110は、選択回路108及び参照アドレスマップ100に接続されている。アドレス比較回路110は、参照アドレスマップ100を参照し、読出要求で指定されたアドレスを、参照アドレスマップ100に含まれる参照アドレスの各々と比較する。また、アドレス比較回路110は、論理和回路112の他方の入力端子に接続されている。
アドレスが一致しない場合(即ち、不一致の場合)には、選択回路108から入力された読出要求を論理和回路112に出力し、通常読出処理を行う。これに対し、アドレスが一致する場合には、入力された読出要求は割込要因データに対する読出要求であるため、直接読出処理を行う。これにより、読出要求された割込要因データが、入出力制御レジスタ群32から直接読出される。従って、割込信号が発生した場合に、複写レジスタ群24の更新を待たずに、当該割込信号に応じた割込要因データが参照される。
論理和回路114は、一方の入力端子が参照有無判定回路116が接続され、他方の入力端子にタイマー104が接続されている。参照有無判定回路116の判定結果(参照の有無)が、論理和回路114の一方の入力端子に入力される。タイマー104からの時間経過信号が、論理和回路114の他方の入力端子に入力される。また、論理和回路114の出力端子には、割込検知回路102が接続されている。論理和回路114は、時間経過信号が入力された場合、又は「参照有り」との判定結果が入力された場合に、出力端子から割込検知回路102にリセット信号を出力して、割込判定フラグを消す(OFFにする)。
上記構成の「直接読出判定回路52e」の動作の一例を詳細に説明する。図5は直接読出判定回路の動作の流れを示すフローチャートである。図5に示すように、まず、ステップ100で、参照アドレスマップを設定する。次に、ステップ102で、割込検知回路により割込信号が検知されたか否かを判断する。割込信号が検知された場合は、ステップ106に進む。一方、割込信号が検知されていない場合は、ステップ104に進み、通常読出処理又は通常書込処理を実施して、ステップ102に戻る。
次に、ステップ106で、割込判定フラグを立てる。続いて、ステップ108で、タイマーを起動する。次に、ステップ110で、読出有効が継続しているか(読出要求があるか)否かを判断する。読出有効が継続している場合には、ステップ114に進む。一方、読出有効が継続していない場合には、ステップ112に進み、通常読出処理又は通常書込処理を実施して、ステップ110に戻る。
次に、ステップ114で、選択回路を起動する。即ち、割込信号が検知されて割込判定フラグが立ち且つ読出有効が継続している場合に、選択回路が起動されて読出要求の監視が開始される。次に、ステップ116で、読出要求があったか否か判断する。読出要求があった場合は、ステップ118に進み、読出要求で指定されたアドレスと参照アドレスとが一致するか否かを判断する。一方、読出要求が無い場合は、ステップ116で判断を繰り返す。
ステップ118で参照アドレスと一致する場合は、ステップ122に進み、読出要求された割込要因データを入出力制御レジスタ群32から直接読出す「直接読出処理」を実施する。一方、ステップ118で参照アドレスと一致しない場合は、ステップ120に進み、読出要求されたデータを複写レジスタ群24から読み出す「通常読出処理」を実施して、ステップ126に進む。
ステップ124では、参照アドレスマップが参照されたか否か判断する。「参照有り」の場合は、ステップ128に進み、割込判定フラグを消す。「参照有り」の場合は、すでに割込要因データが読み出されているので、割込検知回路をリセットして割込判定フラグを消してもよい。
一方、「参照無し」の場合は、ステップ126に進む。ステップ126では、予め定めた時間が経過したか否かを判断する。ここで「予め定めた時間」とは、当該時間が経過していれば、複写レジスタ群24から割込信号に応じた割込要因データを読み出せるとして、予め定めた時間である。例えば、予め定めた時間は、1ミリ秒等の複写周期(更新周期)以下の時間としてもよい。所定時間が経過している場合は、ステップ128に進み、割込判定フラグを消す。一方、所定時間が経過していない場合は、ステップ110に戻って、手順を繰り返す。
以上の通り、本実施の形態では、割込信号が発生した際に、発生した割込信号に係る割込要因データが複写レジスタ群に書き込まれる前に、発生した割込信号に応じた割込要因データを入出力制御レジスタ群から直接読み出す。従って、複写レジスタ群の更新を待たずに当該割込信号に応じた割込要因データが参照される。
また、本実施の形態では、入出力制御レジスタ群に記憶されている割込要因データを直接読み出す期間を、割込信号の発生から予め定めた時間が経過するまでに制限するので、係る制限を行わない場合に比べて、送受信される情報量(トラフィック)が低減される。
また、本実施の形態では、割込信号の発生後に生じた読出要求の指定アドレスと参照アドレスとが一致する場合に限り、入出力制御レジスタ群に記憶されている割込要因データを直接読み出すので、係る制限を行わない場合に比べて、送受信される情報量(トラフィック)が更に低減される。
<その他の変形例>
なお、本実施形態では、機器制御部14が1つ設けられている場合を例に挙げて説明したが、複数設けられていても良い。複数の機器制御部14の各々と、主制御部12とがシリアルバス40を介して接続されるよう構成し、上記のように、入出力制御レジスタ群32の複写レジスタ群24に対する複写をシステムタイマのカウント周期以下の周期で行なえばよい。
また、上記では説明を省略したが、パケットの送受信において、正常に受信された場合には、正常受信を示す応答パケット(ACK)を相手装置に送信し、受信エラーが生じた場合には、受信エラーを示す応答パケット(NACK)を相手装置に送信することで、相手装置に処理完了・異常が通知される。応答パケットNACK受信時には、パケットが再送される。
例えば、コントローラ52は、機器制御部14から複写パケットを受信した場合には、CRCチェック等のエラーチェックを行ない、正常に受信されたことが検出されれば応答パケットACKを返信し、複写レジスタ群24の先頭アドレスから順番にデータを書込む。また、受信した複写パケットのエラーチェックにおいて、不正が検出されれば、応答パケットNACKを返信する。
また、例えば、入出力制御レジスタ群32へのデータの書込要求のパケットを主制御部12から機器制御部14に送信した場合も同様に、コントローラ80は、CRCチェック等を行ない、正常に受信されたことが検出されれば、指定アドレスにデータを書込み、応答パケットACKパケットを送信する。
また、入出力制御レジスタ群32に対するデータの読出要求のパケットを主制御部12から機器制御部14に送信した場合も同様に、コントローラ80は、CRCチェック等を行ない、正常に受信されたことが検出されれば、指定アドレスからデータを読み出して、読み出したデータをパケット化して送信し、不正が検出されれば、応答パケットNACKを返信する。なお、これら処理において、応答パケットACK/NACKパケットは、パリティチェックのみでCRCチェックは行なわなくてもよい。
こうした通信制御は一般的に採用されている技術であるため、ここでは詳細な説明を省略する。
なお、本実施形態では、予め定められた複写周期毎に、複数の複写パケットの送信、及び応答パケットACKの返信がなされるため、こうした定期的な通信により、シリアルバス40のリンク断線エラーのチェックも可能である。例えば、予め定められた時間以上、パケットの送受信がなされなかった場合、シリアルバス40のリンク断線エラーが発生したと判断してもよい。
また、本実施形態では、複写レジスタ更新回路52a、読出選択回路52b、書込選択回路52c、割込信号発生回路52d、及び直接読出判定回路52eをコントローラ52の機能として説明したが、これに限定されず、例えば、コントローラ52とは別の回路により構成し、コントローラ52が各回路を制御することによって、各機能を実現するように構成してもよい。
また、本実施形態では、書込先のアドレスを指定しない複数の複写パケットを機器制御部14から主制御部12に送信して、複写レジスタ群24にデータを書込ませる例について説明したが、アドレスを指定した複写パケットを生成して送信することも可能である。この場合には、当該指定されたアドレスにデータが書込まれる。