(57)【特許請求の範囲】
【請求項１】
レジスタセットと、前記レジスタセットの内容の第１のバスへの読み出しをマイクロ制御部からの指示に応じて制御するコアレジスタ読出し制御部とを有するマイコンコアを備えるマイクロコンピュータであって、
更に、第１および第２の拡張レジスタセットと、前記第１または第２の拡張レジスタセットの内容の前記第１のバスまたは第２のバスへの読み出しを前記指示に応じて制御する拡張レジスタ読出し制御部と、前記第２のバスに接続されたコンテキスト退避メモリとを有する拡張部を備え、
前記コアレジスタ読出し制御部は、前記拡張部が接続されたことが通知された場合は前記指示によらず、前記レジスタセットの内容の前記第１のバスへの読み出しを行なわないよう制御し、
前記拡張レジスタ読出し制御部は、前記指示に応じて、前記第１または前記第２の拡張レジスタセットのいずれか一方の拡張レジスタセットの内容を前記第１のバスに、他方の拡張レジスタセットの内容を前記第２のバスに読み出すよう制御することで、前記マイコンコアが前記一方の拡張レジスタセットの読み出しに前記第１のバスを占有している場合にも、前記他方の拡張レジスタセットの内容を前記コンテキスト退避メモリに退避することを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のタスクを切り換えながら実行するマイクロコンピュータに関する。
【０００２】
【従来の技術】
近年、マイクロコンピュータはあらゆる機器に利用されており、処理能力の向上に伴い、より広い分野でより複雑な制御に応用されている。組み込み用途ではより複雑な制御に応用できるように、マルチタスク処理などの高度な機能が望まれている。
【０００３】
図１４は、第１の従来例におけるマルチタスク機能を有するマイクロコンピュータの説明図である。同図において、ＣＰＵ１０は、演算部１１とレジスタセット１２からなる。
【０００４】
演算部１１は、タスクを１つずつ実行し、レジスタセット１２は、タスク実行に必要なデータを保持する。
【０００５】
メモリ１３は、各タスク毎にコンテキスト（レジスタセットのデータ、ＰＣの内容、ＰＳＷの内容等のタスクの実行によって変化するタスク固有のデータ）を退避する領域であるコンテキストブロック１４を有する。同図では、コンテキストブロック１４中にタスク１〜３用のコンテキス退避領域が示されている。
【０００６】
第１の従来例におけるタスクはソフトウェア（ＯＳ）によって管理される。例えば、タスク１からタスク２に切り換わる場合、ＯＳは、タスク切り換えを示すイベント（タイマ割込み等）を受け付けると、まずＣＰＵ１０からメモリ１３にタスク１のコンテキストを退避し、次にメモリ１３からＣＰＵ１０にタスク２のコンテキストを復帰してからタスク２の実行を開始する。
【０００７】
上記のように、第１の従来例では、ソフトウェア（ＯＳ）によりマルチタスクを実現しているので、ハードウェア規模が小さくて済むという利点がある。
【０００８】
図１５は、第２の従来例におけるマルチタスク機能を有するマイクロコンピュータの説明図である。同図においてＣＰＵ２０は、演算部２１、レジスタファイル２２、レジスタセット切り換え部２３、制御部２４とからなる。
【０００９】
演算部２１は、タスクを１つずつ実行し、レジスタファイル２２は、タスクの実行に必要なデータを保持する複数のレジスタセットからなる。
【００１０】
レジスタセット切り換え部２３は、現在実行中のタスクに対応するレジスタセットを有効にする。この有効なレジスタセットのみが演算部２１に使用される。制御部２４は、タスクの切り換えを制御する。
【００１１】
メモリ２５は、レジスタセットのデータを除くコンテキストの退避領域を有する。この第２の従来例におけるタスクはハードウェアによって管理される。例えば、タスク１からタスク２に切り換える場合、制御部２４は、タスク切り換えを指示するイベント（タイマ割込み等）を受け付けると、レジスタセット切り換え部２３にタスク２に対応するレジスタセットを有効にするように指示すると共に、演算部２１のＰＣの内容、ＰＳＷの内容等をメモリ２５に退避し、タスク２のＰＣの内容、ＰＳＷの内容等を演算部２１に復帰する。その後、演算部２１は、有効なレジスタセット２を用いてタスク２を実行する。
【００１２】
上記のように第２の従来例では、ハードウェアによってマルチタスクを実現しているので、タスクの切り換えが高速であるという利点がある。
【００１３】
【発明が解決しようとする課題】
しかしながら、上記従来例によれば、組み込み用途のマイクロコンピュータにおけるマルチタスク管理には適していないという問題があった。
【００１４】
第１の従来例によれば、タスク切り換えに際してコンテキストの退避および復帰をソフトウェアによって実現するので切り換え速度が遅く、リアルタイム性を要求される制御の組み込み用途のマイクロコンピュータには適していない。また、第２の従来例によれば、タスク数と同数のレジスタセットを必要とし、しかもタスク切り換えをハードウェアで実現するので制御部のハードウェア規模が大きくなる。その結果コストが高くなり組み込み用途のマイクロコンピュータには適していない。
【００１５】
本発明は上記の問題点に鑑み、コストを増大させることなく高速にタスクを切り換えるマイクロコンピュータを提供することを目的としている。
【００２３】
【課題を解決するための手段】
上記課題を解決するため、請求項１の発明は、レジスタセットと、前記レジスタセットの内容の第１のバスへの読み出しをマイクロ制御部からの指示に応じて制御するコアレジスタ読出し制御部とを有するマイコンコアを備えるマイクロコンピュータであって、更に、第１および第２の拡張レジスタセットと、前記第１または第２の拡張レジスタセットの内容の前記第１のバスまたは第２のバスへの読み出しを前記指示に応じて制御する拡張レジスタ読出し制御部と、前記第２のバスに接続されたコンテキスト退避メモリとを有する拡張部を備え、前記コアレジスタ読出し制御部は、前記拡張部が接続されたことが通知された場合は前記指示によらず、前記レジスタセットの内容の前記第１のバスへの読み出しを行なわないよう制御し、前記拡張レジスタ読出し制御部は、前記指示に応じて、前記第１または前記第２の拡張レジスタセットのいずれか一方の拡張レジスタセットの内容を前記第１のバスに、他方の拡張レジスタセットの内容を前記第２のバスに読み出すよう制御することで、前記マイコンコアが前記一方の拡張レジスタセットの読み出しに前記第１のバスを占有している場合にも、前記他方の拡張レジスタセットの内容を前記コンテキスト退避メモリに退避することを特徴とする。
【００２７】
【発明の実施の形態】
図１は、本発明の実施例におけるマイクロコンピュータの主要な構成を示すブロック図である。実施例のマイクロコンピュータは、レジスタファイル１、ＣＰＵ２、コンテキスト退避メモリ３、メモリ４、転送部５を有する。
【００２８】
レジスタファイル１は、レジスタセットＡ（ＧＲＡ）とレジスタセットＢ（ＧＡＢ）とからなる。レジスタセットＡ、Ｂはタスク切り換え毎に交互に切り換えられ、常にどちらか一方がＣＰＵ２のタスク実行に使用される。
【００２９】
ＣＰＵ２は、複数のタスクを切り換えながら実行する。ＣＰＵ２が実行するタスクは、タスク切り換えを指示するイベントが発生する毎に、転送部５のタスク許可フラグに基づいてタスク番号の昇順又は降順に切り換えられる。タスク切り換えのイベントは例えば、周期的なタイマー割込み、シリアル転送割込み、タスク切り換え命令等である。
【００３０】
コンテキスト退避メモリ３は、ＣＰＵ２が実行中でないタスクの情報を退避しておくメモリである。タスクの情報はレジスタセットの内容、プロセッサステータスワード（ＰＳＷ）の内容、プログラムカウンタ（ＰＣ）の内容等を含むコンテキストである。
【００３１】
メモリ４は、ＣＰＵ２がタスクの実行で処理するデータ等を記憶する。
転送部５は、タスク切り換えイベントが発生する毎に、ＣＰＵ２が次に実行するタスクのコンテキストをコンテキスト退避メモリ３から使用中でないレジスタセットに復帰し、レジスタセットを切り換える。切り換えたレジスタセットを使用してＣＰＵ２が次のタスクを実行中に、切り換える前に使用中であったレジスタセットの内容をコンテキスト退避メモリ３に退避する。
【００３２】
図２は、図１に示したマイクロコンピュータの転送部の内部バスを含むより詳細な構成を示すブロック図である。転送部５は、転送制御部５１、ＡＢＵＳ５０１、ＢＢＵＳ５０２、ＣＢＵＳ５０３、ＡＲＡＭＢＵＳ５０４、ＤＲＡＭＢＵＳ５０５から構成される。
【００３３】
転送制御部５１は、転送部５の各バスや各バスに接続されたメモリ、レジスタファイル等を制御する。転送制御部５１は、ＣＰＵがコンテキスト退避メモリ３をアクセスする際のアドレスをＡＲＡＭＢＵＳ５０４から入力する。さらに、ＡＢＵＳ５０１にコンテキスト退避時の特定アドレスを出力する。
【００３４】
図３は、図１に示したマイクロコンピュータのより詳細な構成を示すブロック図である。
【００３５】
同図に示すように、本マイクロコンピュータは、レジスタセットＡ１０１、レジスタセットＢ１０２、インクリメンタ２０１、命令アドレスバッファ２０２、プリフェッチカウンタ２０３、命令フェッチバッファ２０４、プロセッサステータスワード２０５、命令バッファ２０６、命令レジスタ２０７、ステータスレジスタ２０８、ＰＬＡ２０９、マイクロ命令レジスタ２１０、ＡＬＵ２１１、ＡＬＵ出力バッファ２１２、オペランドアドレスバッファ２１３、ストアバッファ２１４、ロードバッファ２１５、バス制御部２１６、タイミング生成部２１７、ＲＯＭ４０１、ＲＡＭ４０２、転送制御部５１、タスクタイマ５２、バススイッチ５３、ＲＡＭアドレス生成部５４、シーケンサ５５、タスク許可フラグ５６、次タスク番号レジスタ５７、コンテキスト退避メモリアドレスレジスタ５８、ＡＢＵＳ５０１、ＢＢＵＳ５０２、ＣＢＵＳ５０３、ＡＲＡＭＢＵＳ５０４、ＤＲＡＭＢＵＳ５０５、ＡＲＯＭＢＵＳ５０６、ＤＲＯＭＢＵＳ５０７、ＣＯＲＥＢＵＳ５０８とからなる。
【００３６】
レジスタセット１０１とレジスタセット１０２とは、同一のレジスタ構成であり、それぞれ８ビット幅のデータレジスタ（Ｄ０、Ｄ１、Ｄ２、Ｄ３）と１６ビット幅のアドレスレジスタ（Ａ０、Ａ１）と、１６ビット幅のスタックポインタ（ＳＰ）と、これらのデータを選択して出力するセレクタとを有する。インクリメンタ２０１、命令アドレスバッファ２０２、プリフェッチカウンタ２０３、命令フェッチバッファ２０４からなる回路は、ＲＯＭ４０１から命令を順次プリフェッチする命令先読み準備部である。
【００３７】
プロセッサステータスワード２０５は、ＡＬＵ２１１の演算フラグやＣＰＵ２の割込み状態等を記憶する。
【００３８】
命令バッファ２０６は、命令先読み準備部によってプリフェッチされた複数の命令を保持する命令キューである。
【００３９】
命令レジスタ２０７、ステータスレジスタ２０８、ＰＬＡ２０９、マイクロ命令レジスタ２１０からなる回路は、命令バッファ２０６から供給される命令を解読し、実行を制御する命令制御部である。また、この命令制御部はタスク切り換えを指示するイベントが発生すると、タスクのコンテキストの一部を退避、復帰する制御および転送制御部５１に転送の開始を通知する制御を行う。本実施例では、上記イベントはタスクタイマー５２による割込みとする。また、命令制御部は、ＡＢＵＳ５０１、ＢＢＵＳ５０２のデータの入出力を制御する。
【００４０】
ＡＬＵ２１１、ＡＬＵ出力バッファ２１２、オペランドアドレスバッファ２１３、ストアバッファ２１４、ロードバッファ２１５からなる回路は、命令制御部の制御に従って命令を実行する命令実行部である。
【００４１】
ＲＯＭ４０１とＲＡＭ４０２は図１に示したメモリ４に相当し、複数のタスクのプログラム、スタック領域、タスク開始アドレス退避領域を有する。各タスクのプログラムはＲＯＭ４０１に記憶され、スタック領域、タスク開始アドレス退避領域はＲＡＭ４０２に設けられる。
【００４２】
ＣＰＵ内部バスはＡＢＵＳ５０１、ＢＢＵＳ５０２、ＣＢＵＳ５０３の３本から構成され、ＣＰＵ外部のメモリバスは、ＡＲＡＭＢＵＳ５０４、ＤＲＡＭＢＵＳ５０５、ＡＲＯＭＢＵＳ５０６、ＤＲＯＭＢＵＳ５０７、ＣＯＲＥＢＵＳ５０８の５本から構成される。
【００４３】
ＡＢＵＳ５０１、ＢＢＵＳ５０２は、主にレジスタファイル１に対してアクセスされるデータを伝達する。
【００４４】
ＣＢＵＳ５０３は、主にコンテキスト退避メモリ３に対してアクセスするデータを伝達する。
【００４５】
ＡＲＡＭＢＵＳ５０４とＤＲＡＭＢＵＳ５０５は、それぞれ主にＲＡＭ４０２に対してアクセスするアドレスとデータを伝達し、ＡＲＯＭＢＵＳ５０６とＤＲＯＭＢＵＳ５０７は、それぞれ主にＲＯＭ４０１に対してアクセスするアドレスとデータを伝達する。
【００４６】
ＣＯＲＥＢＵＳ５０８は、主にマイクロコンピュータの周辺機能に含まれるレジスタ等をアクセスするアドレスとデータを伝達する。
【００４７】
タスクタイマー５２は、ＣＰＵが実行中のタスクの時間を計測するタイマーで、タスク実行開始時に設定され、一定時間間隔でタイマーの値がデクリメントされる。タスクタイマーの内容がゼロになると、ＣＰＵ２に対してタスク切り換えイベントの割込みを発生する。タスクタイマーに設定される値は、あらかじめコンテキスト退避メモリに設定されている。また、タスク切り換え時にはタスクタイマーの内容は常にゼロであるため、コンテキスト退避メモリには退避されない。
【００４８】
バススイッチ５３は、ＤＲＡＭＢＵＳ５０５とＣＢＵＳ５０３との間でデータの受け渡しをするバッファである。
【００４９】
ＲＡＭアドレス生成部５４は、タスク切り換え時にＣＰＵが退避、復帰するコンテキストの一部を格納するＲＡＭ４０２のアドレスを生成する。
【００５０】
シーケンサ５５は、ＣＰＵからの起動要求に応じて、ＣＢＵＳ５０３の制御や転送制御部内のレジスタの更新を制御する信号を出力し、タスクのコンテキストを退避、復帰させる。
【００５１】
タスク許可フラグ５６は、ＣＰＵが実行するタスクの数と同数のビット数から構成され、各ビットに対応するタスクの実行を許可するか、またはタスクの実行を禁止するかを指定する。
【００５２】
次タスク番号レジスタ５７は、タスク切り換えのイベントが発生したときに、次に切り換えて実行するタスクの番号を格納するレジスタで、レジスタの内容は、シーケンサがタスク許可フラグ５６の内容に基づいて決められる。
【００５３】
タスク許可レジスタ５６および次タスク番号レジスタ５７は、ＣＯＲＥＢＵＳ５０８にも接続されており、ＣＰＵのプログラム実行によって内容の読み出しまたは書き込みが出来る。
【００５４】
コンテキスト退避メモリアドレスレジスタ５８は、コンテキスト退避メモリ３をアクセスする番地を格納するレジスタで、シーケンサ５５がコンテキスト退避メモリをアクセスする際に参照される。
【００５５】
図４は、図２のマイクロコンピュータの転送制御部５１のより詳細な構成と、コンテキスト退避メモリ３のより詳細なデータ構成を示すブロック図である。
同図において、タスク許可フラグ制御部５９は、次タスク番号レジスタ５７に格納されたタスクの番号をデコードし、タスク許可フラグ５６のタスク番号に対応するビットを１にする。また、命令によりタスク許可フラグを変更する場合、タスク許可フラグ制御部５９はＣＯＲＥＢＵＳ５０８のデータをタスク許可フラグ５６に設定する。
【００５６】
現タスク番号レジスタ６０は、ＣＰＵが現在実行中のタスクの番号を格納する。前タスク番号レジスタ６１は、ＣＰＵが現在実行中のタスクに切り換わる前に実行していたタスクの番号を格納する。
【００５７】
タスク番号制御部６２は、タスク許可フラグ５６の内容と現タスク番号レジスタ６０の内容とシーケンサ５５が出力するレジスタ書換信号とを入力し、次タスク番号レジスタ５７、現タスク番号レジスタ６０、前タスク番号レジスタ６１の内容をそれぞれ更新する。シーケンサ５５が出力する書換信号のタイミングは、図９に矢印で示されている。また、タスク番号制御部が次タスク番号レジスタを更新する内容は、図１１に示されている。
【００５８】
図９によると、矢印で示されているように、前タスク番号レジスタ６１が書き換えられるのはシーケンサ５５のステート０であり、次タスク番号レジスタ５７および現タスク番号レジスタ６０が書き換えられるのはシーケンサ５５のステート９である。
【００５９】
レジスタセットＡ使用フラグ６３は、ＣＰＵがタスク実行に使用するレジスタセットを指定するフラグであり、レジスタセットＡ使用フラグが１の時、レジスタセットＡを使用し、０の時、レジスタＢを使用する。
【００６０】
メモリ制御部６４は、コンテキスト退避メモリ３の読み出しおよび書き込みと、レジスタファイル１の読み出しおよび書き込みを制御する。メモリ制御部６４は、コンテキスト退避メモリ３へのデータの書き込みを制御するコンテキスト退避メモリ書き込み制御部６５と、コンテキスト退避メモリ３からのデータの読み出しを制御するコンテキスト退避メモリ読み出し制御部６６と、レジスタファイルへのデータの書き込みを制御するレジスタ書き込み制御部６７と、レジスタファイルからのデータの読み出しを制御するレジスタ読み出し制御部６８とを有する。
【００６１】
図４に示すコンテキスト退避メモリ３は、タスク数４までに対応する場合の構成を示し、６４バイトの容量である。６４バイトを４つに分割し、分割した各領域のアドレスの若いほうから順に、スタックポインタ（ＳＰ）、データレジスタ（Ｄ０、Ｄ１、Ｄ２、Ｄ３）、アドレスレジスタ（Ａ０、Ａ１）、プロセッサステータスワード（ＰＳＷ）、タスクタイマー（ＴＴ）、オペランドアドレスバッファ（ＯＡＢ）を退避する。１６ビット幅のレジスタは、下位の８ビットがアドレスの若いほうに退避される。また、本実施例では分割した各領域には、２バイトの予備の退避領域が存在する。
【００６２】
図５は、タスク切り換え時の処理のフローチャートである。同図において、「ＣＰＵ、転送部」、「転送部」はそれぞれ、タスク切り換え時にＣＰＵ２および転送部５が同期して並行に処理するフローと転送部５単独で処理するフローを示す。
【００６３】
同図のフローチャートは、ＣＰＵ２がレジスタセットＡを使用してタスク１を実行中に、タスク切り換え要求が発生し、タスク２に切り換わるフローを示している。ＣＰＵ２は、タスク切り換え要求が発生すると、実行中のタスクを一次停止し、タスク切り換え処理に移行する。このタスク切り換えは、ＣＰＵ２は割込み処理と同様にＰＬＡ２０９により処理され、転送部５はシーケンサ５５により処理される。
【００６４】
図６、図７、図８は、タスク切り換え処理のタイミングチャートを示す図である。同図には、タイミング（Ｔ２、Ｔ１）、ＩＡＢ２０２、ＰＦＣ２０３、ＩＲ２０７、ＭＩＲ２１０、ＡＢＵＳ５０１、ＢＢＵＳ５０２、ＣＢＵＳ５０３、ＡＬＵ２１１、ＡＬＢ２１２、ＯＡＢ２１３、ＳＴＢ２１４、ＬＤＢ２１５、ＡＲＡＭＢＵＳ５０４、ＤＲＡＭＢＵＳ５０５の内容が、各サイクル毎にそれぞれ示されている。なお同図において右方向が時間軸である。
【００６５】
また、ＡＢＵＳ、ＢＢＵＳ、ＣＢＵＳの網かけは転送部５により制御されていることを示している。
【００６６】
図９は、転送部５のシーケンサ５５による各部の動作を示した図であり、シーケンサ５５のステートおよびタイミング毎に、コンテキスト退避メモリ３のアドレス（ａｄｄｒｅｓｓ）とデータ（ｄａｔａ）と転送方向（Ｒ／Ｗ）、バス（ＡＢＵＳ、ＢＢＵＳ、ＣＢＵＳ）、タスク番号レジスタ（ＰＲＶＴＳＫ、ＣＲＮＴＴＳＫ、ＮＥＸＴＴＳＫ）、レジスタファイルＡ使用フラグ（ＧＲＡＲＵＮ）の状態がそれぞれ図示されている。
【００６７】
転送方向のＷはコンテキスト退避メモリへの書き込みを、Ｒはコンテキスト退避メモリからの読み出しをそれぞれ示している。
【００６８】
同図のバスの欄にカッコ付きで示されたものは、他のバスに出力された内容が転送されていることを示す。また、「ｏｌｄ」はタスク切り換え要求発生時点で実行していたタスクのコンテキストを指し、「ｎｅｗ」はタスク切り換え要求により新しく切り換わるタスクのコンテキストを指す。「ａｄｄｒｅｓｓ」の欄の「ｃｒｎｔｔｓｋ」、「ｎｅｘｔｔｓｋ」、「ｐｒｖｔｓｋ」はそれぞれ、現タスク番号レジスタＣＲＮＴＴＳＫ６０、次タスク番号レジスタＮＥＸＴＴＳＫ５７、前タスク番号レジスタＰＲＶＴＳＫ６１の内容を１６倍した値を示し、例えば、ステート０の「ｃｒｎｔｔｓｋ＋１２」はＣＲＮＴＴＳＫの内容「１」を１６倍した値に１２を加算した値「２８」をコンテキスト退避メモリのアドレスにすることを示している。
【００６９】
同図のステートおよびタイミングは、図６Ａから図６Ｃのサイクルの表示に一致している。従って、例えば図７のステート０は、図６Ａのサイクル０に対応し、タイミングＴ２、タイミングＴ１は、図６のＴ２の状態１、Ｔ１の状態１にそれぞれ対応している。
【００７０】
図１０は、各タスクのプログラムカウンタを退避するＲＡＭ４０２の特定領域の構成を示した図である。本実施例では４つのタスクのプログラムカウンタの内容を退避する領域が、アドレス０からアドレス７までの８バイトの特定領域に設けられている。
【００７１】
以下、図５、図６、図７、図８、図９に基づいてタスク切り換え処理をステートに従って詳細に説明する。
【００７２】
＜ステート０＞
ＣＰＵ２はタスク切り換え要求発生時のＯＡＢ２１３の内容をタイミングＴ２、Ｔ１でそれぞれＢＢＵＳに出力する。
【００７３】
転送部５は、現タスク番号レジスタの内容が１なので、ＡＢＵＳにはＰＣの退避アドレス２番地の下位８ビットをタイミングＴ２で、上位８ビットをタイミングＴ１でそれぞれＡＢＵＳに出力するとともに、ＣＰＵがＢＢＵＳに出力したＯＡＢの内容をＣＢＵＳに転送し、コンテキスト退避メモリの２８番地と２９番地に書き込む（ステップ５１）。また、ＣＲＮＴＴＳＫの内容をＰＲＶＴＳＫに転送する。
【００７４】
ＡＢＵＳに出力された退避アドレスは、ＣＰＵによりＡＬＵを通してＡＬＢ２１２に転送される。
【００７５】
＜ステート１＞
ＣＰＵはＡＬＢに格納された退避アドレスをＩＡＢ２０２に転送するとともに、ＡＲＯＭＢＵＳを通して、ＡＲＡＭＢＵＳに出力する。また、ＡＢＵＳにＰＦＣ２０３の内容を、ＢＢＵＳに定数「１」をそれぞれ出力し、実行中であったタスク１の戻り番地（プログラムカウンタの値）をＡＬＵにより計算する。計算結果の下位８ビットはＳＴＢ２１４に転送され、タイミングＴ２でＤＲＡＭＢＵＳに出力される。計算結果の上位８ビットはＡＬＢに格納される。従って、ＣＰＵはＲＡＭ４０２の２番地に戻り番地の下位８ビットを書き込む（ステップ５２）。
【００７６】
転送部はステート１では何もしない。
なお、戻り番地の計算は、計算時の命令バッファ２０６の先読み量によって制御されるが、本発明には関係ないので詳細な説明は省略する。
【００７７】
＜ステート２＞
ＣＰＵはサイクル１で使用したＩＡＢの内容をインクリメンタ２０１により＋１し、ＡＲＯＭＢＵＳを通してＡＲＡＭＢＵＳに出力するとともに、サイクル１で計算したタスク１の戻り番地の上位８ビットをＤＲＡＭＢＵＳに出力して、ＲＡＭ４０２の３番地に書き込む（ステップ５２）。また、タスク１のＰＳＷの内容をＡＢＵＳに出力する。
【００７８】
転送部はタイミングＴ２でＡＢＵＳに出力されたＰＳＷの内容を、ＣＢＵＳに転送し、コンテキスト退避メモリの２６番地に書き込み（ステップ５３）、タイミングＴ１でコンテキスト退避メモリの３２番地を読み出す。また、転送部がアクセスするレジスタセットは、レジスタセットＡ使用フラグの内容を反転した値が示すレジスタセットを使用する。従って、図７の例では、ステート２よりステート８の間では、転送部はレジスタセットＢに対してアクセスし、ステート９よりステート１４の間では、レジスタセットＡに対してアクセスする。
【００７９】
＜ステート３＞
ＣＰＵは、ＡＢＵＳに出力されたタスク２の戻り番地が退避されているＲＡＭ４０２のアドレスをＡＬＵを通してＡＬＢに格納する。
【００８０】
転送部は、次タスク番号レジスタの内容「２」に基づいて、タスク２の戻り番地が退避されているＲＡＭ４０２のアドレス４番地の下位８ビットをタイミングＴ２で、上位８ビットをタイミングＴ１でそれぞれＡＢＵＳに出力するとともに、前サイクルのタイミングＴ１で読み出したタスク２のＳＰＬを、タイミングＴ２でＣＢＵＳに出力する。また、タイミングＴ２ではコンテキスト退避メモリの３３番地を読み出し、タイミングＴ１でＣＢＵＳに出力する。ＣＢＵＳに出力されたＳＰＬの内容およびＳＰＨの内容はＢＢＵＳに転送され、レジスタセットＢのＳＰＬおよびＳＰＨに格納される（ステップ５４）。
【００８１】
＜ステート４＞
ＣＰＵは、ＡＬＢに格納されたアドレスをＩＡＢに転送するとともに、ＡＲＯＭＢＵＳを通してＡＲＡＭＢＵＳに出力し、ＲＡＭ４０２の４番地からタスク２の戻り番地の下位８ビットを読み出して、ＬＤＢに格納する。
【００８２】
転送部は、前サイクルのタイミングＴ１でコンテキスト退避メモリの３４番地から読み出したＤ０の内容を、ＣＢＵＳに出力し、ＢＢＵＳを通してレジスタセットＢのＤ０に格納するとともに、タイミングＴ１でコンテキスト退避メモリの３５番地のＤ１の内容を読み出してＣＢＵＳに出力し、ＢＢＵＳを通してレジスタセットＢのＤ１に格納する（ステップ５４）。
【００８３】
＜ステート５＞
ＣＰＵは、ＬＤＢの内容をＡＢＵＳに出力し、ＡＬＵを通してＡＬＢに格納すると共に、前サイクルのＩＡＢの内容をインクリメンタにより＋１したアドレスをＡＲＡＭＢＵＳに出力して、ＲＡＭ４０１の５番地からタスク２の戻り番地の上位８ビットを読み出し、ＬＤＢに格納する（ステップ５５）。
【００８４】
転送部は、ステート４と同様に、Ｄ２の内容およびＤ３の内容をコンテキスト退避メモりから読み出して、レジスタセットＢのＤ２、Ｄ３にそれぞれ格納する（ステップ５４）。
【００８５】
＜ステート６＞
ＣＰＵは、ＡＬＢに格納されたタスク２の戻り番地の下位８ビットの内容をＩＡＢの下位８ビットに格納すると共に、ＬＤＢの内容をＡＢＵＳに出力し、ＡＬＵを通して再度ＡＢＵＳに出力する。ＣＰＵはＡＢＵＳに出力したタスク２の戻り番地の上位８ビットをＡＬＵを通してＡＬＢに格納する。
【００８６】
転送部は、ステート４と同様に、Ａ０の下位８ビットの内容および上位８ビットの内容をコンテキスト退避メモりから読み出して、レジスタセットＢのＡ０Ｌ、Ａ０Ｈにそれぞれ格納する（ステップ５４）。
【００８７】
＜ステート７＞
ＣＰＵは、ＡＬＢに格納されたタスク２の戻り番地の上位８ビットの内容をＩＡＢの上位８ビットに格納し（ステップ５５）、ＩＡＢの内容をＡＲＯＭＢＵＳに出力してタスク２の戻り番地から命令をフェッチしてＩＦＢに格納する。
【００８８】
転送部は、ステート４と同様に、Ａ１の下位８ビットの内容および上位８ビットの内容をコンテキスト退避メモりから読み出して、レジスタセットＢのＡ１Ｌ、Ａ１Ｈにそれぞれ格納する。
【００８９】
＜ステート８＞
ＣＰＵは、ＢＢＵＳに出力されたタスク２のＰＳＷの内容をＡＬＵを通してＡＢＵＳに出力し、ＰＳＷ２０５に格納する（ステップ５６）。また、前サイクルでフェッチした命令を命令バッファ２０６に転送すると共に、タスク２の戻り番地を＋１したアドレスから続けて命令をフェッチし、ＩＦＢに格納する。
【００９０】
転送部は、前サイクルのタイミングＴ１でコンテキスト退避メモリの４２番地から読み出したタスク２のＰＳＷの内容を、タイミングＴ２でＣＢＵＳに出力すると共にＢＢＵＳに転送する。また、タイミングＴ２で読み出した４３番地の内容を、タスクの実行時間を決めるタスクタイマ５２に格納する（ステップ５７）。
【００９１】
＜ステート９＞
ＣＰＵは、タスク２の命令をＩＲ２０７に格納して命令の解読を開始すると共に、ＢＢＵＳに出力されたタスク２のＯＡＢの内容をＡＬＵを通してＡＬＢに格納する（ステップ５８）。
【００９２】
転送部は、前サイクルのタイミングＴ１でコンテキスト退避メモリの４４番地から読み出したタスク２のＯＡＢＬの内容を、タイミングＴ２でＣＢＵＳに出力すると共にＢＢＵＳに転送する。また、タイミングＴ２で読み出した４５番地の内容を、タイミングＴ１でＣＢＵＳに出力すると共にＢＢＵＳに転送する。さらに、次タスク番号レジスタＮＥＸＴＴＳＫの内容を現タスク番号レジスタＣＲＮＴＴＳＫに転送し、ＮＥＸＴＴＳＫの内容を更新する。
【００９３】
転送部はさらに、レジスタセットＡ使用フラグ６３を「０」にして、以降でＣＰＵがタスクの実行に使用するレジスタセットをＢ側にする（ステップ５９）。
【００９４】
＜ステート１０＞
ＣＰＵは、ＡＬＢに格納された内容をタスク２のＯＡＢに格納し、タスク２の命令を転送部とは独立して実行する（ステップ６１）。従って、ステート１１以降は、転送部のみの動作を説明する。
【００９５】
転送部は、タスク切り換え要求発生時のタスク１のコンテキストであるＳＰＬおよびＳＰＨをレジスタセットＡから読み出してＣＢＵＳに出力し、コンテキスト退避メモリの１６番地および１７番地に格納する（ステップ６２）。
【００９６】
＜ステート１１＞
転送部は、ステート１０と同様にタスク切り換え要求発生時のタスク１のコンテキストであるＤ０およびＤ１をレジスタセットＡから読み出してＣＢＵＳに出力し、コンテキスト退避メモリの１８番地および１９番地に格納する（ステップ６２）。
【００９７】
＜ステート１２＞
転送部は、ステート１０と同様にタスク切り換え要求発生時のタスク１のコンテキストであるＤ２およびＤ３をレジスタセットＡから読み出してＣＢＵＳに出力し、コンテキスト退避メモリの２０番地および２１番地に格納する（ステップ６２）。
【００９８】
＜ステート１３＞
転送部は、ステート１０と同様にタスク切り換え要求発生時のタスク１のコンテキストであるＡ０ＬおよびＡ０ＨをレジスタセットＡから読み出してＣＢＵＳに出力し、コンテキスト退避メモリの２２番地および２３番地に格納する（ステップ６２）。
【００９９】
＜ステート１４＞
転送部は、ステート１０と同様にタスク切り換え要求発生時のタスク１のコンテキストであるＡ１ＬおよびＡ１ＨをレジスタセットＡから読み出してＣＢＵＳに出力し、コンテキスト退避メモリの２４番地および２５番地に格納する（ステップ６２）。
【０１００】
図１１は、タスク番号制御部６２が次タスク番号レジスタＮＥＸＴＴＳＫの値を決定するための動作を示した図である。
【０１０１】
次タスク番号レジスタの値は、タスク許可フラグＴＳＫＥＮ５６の内容と現タスク番号レジスタＣＲＮＴＴＳＫ６０の内容とによって決定する。タスク許可フラグのＬＳＢ側が番号の若いタスクに対応しており、本実施例では、タスク許可フラグのＬＳＢ側が高い優先度となっている。従って、タスク許可フラグの複数のビットがセットされている場合には、番号の若いタスクから先に実行される。例えば、ＴＳＫＥＮ＝’００１１’はタスク０とタスク１を許可することを示し、現タスク番号が「０」であれば次タスク番号は「１」になり、現タスク番号が「１」、「２」、「３」であれば次タスク番号は「０」になる。この例ではＴＳＫＥＮのビット２、ビット３は「０」になっているので、タスク２およびタスク３の許可フラグが命令の実行等でクリアされたことを示している。
【０１０２】
他の組み合わせ状態も同様であるので、詳細な説明は省略する。
なお、上記実施例の説明ではタスクの数を４にしたが、これに限定されるものではない。また、コンテキスト退避メモリやＲＡＭへのタスクの退避領域のアドレスも限定されるものではない。
【０１０３】
上記実施例では、タスクのコンテキストのうちプログラムカウンタのみをＲＡＭに退避したが、プログラムカウンタ以外にＰＳＷ等をＲＡＭに退避してもよい。
【０１０４】
上記実施例では、ＲＡＭへの退避領域は特定番地としたが、実行中であったタスクのＳＰが指すスタック領域にコンテキストを退避してもよい。その場合、退避するＳＰはタスクの実行を停止した時点の値のままでもよい。
【０１０５】
図１２は、本発明の第２の実施例における転送部とＣＰＵとの接続を説明する図である。
【０１０６】
同図においてマイコンコア１は、ＣＰＵ２とレジスタセット３とからなり、ＣＰＵ２は、マイクロ制御部２１と、コアレジスタ読み出し制御部２２とバッファ２３とを含む。拡張部４は、転送部５と２つのレジスタセットＧＲＡ６およびレジスタセットＧＲＢ７とからなり、転送部５は、拡張指定部５１と拡張レジスタ読み出し制御部５２とバッファ５３とバッファ５４とを含む。マイコンコア１と拡張部４とはＡＢＵＳとＢＢＵＳからなる２本の内部バスで接続されている。
マイコンコア１は、拡張部４が接続されていない状態でも命令の実行が可能である。以下では、マイコンコア１に拡張部４が接続されている場合の動作を説明する。
【０１０７】
拡張指定部５１により、拡張部４がマイコンコア１に接続されていることをＣＰＵ２に通知すると、コアレジスタ読み出し制御部２２は、レジスタセットの読み出しをマイクロ制御部２１から指示されても、バッファ２３を動作させず、ＡＢＵＳおよびＢＢＵＳには何も読み出さないようにする。一方、マイクロ制御部からのレジスタセット読み出しの指示は、拡張レジスタ読み出し制御部５２に対しても出される。拡張部４に含まれる転送部５の動作は、２つのレジスタセットを有する本発明の第１の実施例と同様であるので詳細は省略する。
【０１０８】
図１３は、図１２に示された本発明の第２の実施例における回路配置を説明する図である。
【０１０９】
マイコンコア１はビット当りの回路の繰り返しから構成されるデータパス部と不規則回路から構成される制御部とからなり、データパス部は制御部から出力されるデータパス制御信号により制御される。データパス部で処理するデータの流れの方向をＸ軸とすると、データパス制御信号はＹ軸方向である。制御部、データパス部、拡張部の順にＹ軸方向に配置し、データパス制御信号をデータパス部を貫通させてＹ軸方向に延長することで、同一のデータパス制御信号をデータパス部と拡張部とに接続する。
【０１１０】
また、拡張部を制御する拡張部制御信号は、制御部から一旦Ｘ軸方向に出力した後、データパスを通らずに拡張部に接続する。
【０１１１】
図１３には省略しているが、ＡＢＵＳおよびＢＢＵＳは、データパス部からＹ軸方向に延ばして拡張部に接続する。
【０１１２】
なお、ＡＢＵＳおよびＢＢＵＳは拡張部制御信号と同様に一旦Ｘ軸方向に延ばした後、拡張部に接続してもよい。
【０１２０】
【発明の効果】
請求項１の発明によれば、タスク切り換えの機能をマイコンコアに容易に追加して、機能拡張できるという効果がある。
【図面の簡単な説明】
【図１】本発明の実施例におけるマイクロコンピュータの主要な概略構成を示すブロック図
【図２】同実施例における転送部５の詳細な構成を示すブロック図
【図３】同実施例におけるマイクロコンピュータのより詳細な構成を示すブロック図
【図４】同実施例における転送制御部５１のより詳細な構成と、コンテキスト退避メモリ３のより詳細なデータ構成を示すブロック図
【図５】同実施例におけるタスク切り換え時の処理のＣＰＵ２および転送部５の動作を示すフローチャート
【図６】同実施例におけるタスク切り換え時の処理のＣＰＵ２および転送部５の動作を示すタイミングチャート
【図７】同実施例におけるタスク切り換え時の処理のＣＰＵ２および転送部５の動作を示すタイミングチャート
【図８】同実施例におけるタスク切り換え時の処理のＣＰＵ２および転送部５の動作を示すタイミングチャート
【図９】同実施例における転送部５のシーケンサ５５による各部の動作を示した図
【図１０】同実施例における各タスクのプログラムカウンタを退避するＲＡＭ４０２の特定領域の構成を示した図
【図１１】同実施例におけるタスク番号制御部６２が、次タスク番号レジスタＮＥＸＴＴＳＫの値を決定するための動作を示した図
【図１２】本発明の第２の実施例におけるマイクロコンピュータの転送部とＣＰＵとの接続を説明する図
【図１３】同実施例における回路配置を説明する図
【図１４】第１の従来技術におけるマルチタスク処理機能を有するマイクロコンピュータの説明図
【図１５】第２の従来技術におけるマルチタスク処理機能を有するマイクロコンピュータの説明図
【符号の説明】
１  レジスタファイル
２  ＣＰＵ
３  コンテキスト退避メモリ
４  メモリ
５  転送部
５１  転送制御部
５２  タスクタイマ
５３  バススイッチ
５４  ＲＡＭアドレス生成部
５５  シーケンサ
５６  タスク許可フラグ
５７  次タスク番号レジスタ
５８  コンテキスト退避メモリアドレスレジスタ
５９  タスク許可フラグ制御部
６０  現タスク番号レジスタ
６１  前タスク番号レジスタ
６２  タスク番号制御部
６３  レジスタセットＡ使用フラグ
６４  メモリ制御部
６５  コンテキスト退避メモリ書き込み制御部
６６  コンテキスト退避メモリ読み出し制御部
６７  レジスタ書き込み制御部
６８  レジスタ読み出し制御部
【図１】
0003605978.tif 000002
【図２】
0003605978.tif 000003
【図３】
0003605978.tif 000004
【図４】
0003605978.tif 000005
【図５】
0003605978.tif 000006
【図６】
0003605978.tif 000007
【図７】
0003605978.tif 000008
【図８】
0003605978.tif 000009
【図９】
0003605978.tif 000010
【図１０】
0003605978.tif 000011
【図１１】
0003605978.tif 000012
【図１２】
0003605978.tif 000013
【図１３】
0003605978.tif 000014
【図１４】
0003605978.tif 000015
【図１５】
0003605978.tif 000016