以下、本発明の実施例を図面に基づいて詳細に説明する。
(実施例1)
図1は本発明の一実施例であるシングルチップマイクロコンピュータを示すブロック図、図2は本実施例のシングルチップマイクロコンピュータにおける全体のアドレスマップの説明図、図3はシングルチップマイクロコンピュータのバスの接続状態のブロック図、図4は割込コントローラの概略ブロック図、図5は割込要求ビットおよび割込許可回路の概略ブロック図、図6はバスの動作タイミング図、図7は低消費電力状態制御回路の概略ブロック図、図8は入出力ポートを制御するレジスタ構成の説明図、図9は入出力ポートの概略ブロック図、図10はPROMのアドレスマップ、図11はPROMモードの主要部のブロック図、図12はテストモードの主要部のブロック図、図13はエミュレーション用プロセッサの概略ブロック図、図14はエミュレータの概略ブロック図、図15は本実施例におけるシングルチップマイクロコンピュータの変形例を示すブロック図である。
まず、図1により本実施例のシングルチップマイクロコンピュータの構成を説明する。
本実施例のシングルチップマイクロコンピュータは、中央処理装置(CPU1:第1のデータ処理装置、CPU2:第2のデータ処理装置)、リードオンリメモリ(ROM1:第1の読み出し可能な記憶手段、ROM2:第2の読み出し可能な記憶手段)、ランダムアクセスメモリ(RAM1、RAM2、RAMP)、タイマ、パルス出力回路、シリアルコミュニケーションインタフェース(SCI)、A/D変換器(A/D)、入出力ポート(IOP0〜IOP11:データ入出力手段)、割込コントローラ(割込制御手段)、バスコントローラ(バス制御手段)、クロック発振器の機能ブロック(またはモジュール)から構成され、一つの半導体基板上に形成されている。
これらの機能ブロックは、内部バスによって相互に接続される。内部バスはアドレスバス、データバスの他、リード信号、ライト信号を含み、さらにバスサイズ信号あるいはシステムクロックを含んでもよい。この内部アドレスバスには、IAB1(第1のバス)、IAB2(第2のバス)、PAB(第3のバス)が存在し、また内部データバスにはIDB1(第1のバス)、IDB2(第2のバス)、PDB(第3のバス)が存在する。この内部データバスIDB1、IDB2、PDBは16ビット構成である。また、CPU1、CPU2の命令は16ビット単位としている。
なお、CPU1、ROM1、RAM1はIAB1、IDB1に接続され、CPU2、ROM2、RAM2はIAB2、IDB2に接続されている点で相違される。また、RAMPはPAB、PDBに接続される。このIAB1、IAB2、PABはバスコントローラでインタフェースされ、同様にIDB1、IDB2、PDBはバスコントローラでインタフェースされる。
また、PAB、PDBはバスコントローラ、RAMP、タイマ、パルス出力回路、SCI、A/D変換器、割込コントローラ、IOP0〜11に接続される。CPU1、CPU2のいずれか一方がPAB、PDBを使用して、これらをリード/ライトできる。割込コントローラは、タイマ、SCI、入出力ポートの出力する割込信号を入力し、CPU1またはCPU2に割込要求信号とベクタ番号を出力する。
入出力ポートは、外部バス信号、入出力回路の入出力信号と兼用とされている。IOP0〜3はアドレスバス出力、IOP4、5はデータバス入出力、IOP6はバス制御信号入出力信号と兼用されている。外部アドレス、外部データは、それぞれこれらの入出力ポートに含まれるバッファ回路を介してIAB1、IDB1と接続されている。PAB、PDBは入出力ポートのレジスタをリード/ライトするために使用し、外部バスとは直接の関係はない。
このバス制御信号出力は、アドレスストローブ、ハイ/ロウデータストローブ、リードストローブ、ライトストローブ、バスアクノリッジ信号などがあり、またバス制御入力信号にはウェイト信号、バスリクエスト信号などがある。これらの入出力信号は図示はされない。外部バス拡張を行うことは、動作モードなどで選択され、これらの入出力ポートの機能も選択される。
また、IOP7はタイマ入出力、IOP8はパルス出力、IOP9はSCI入出力、IOP10はアナログ入力、IOP11は外部割込要求(IRQ)入力と兼用されている。なお、タイマ、SCI、A/D変換器とIOP7、IOP9、IOP10との入出力信号は図示はされない。
そのほか、電源端子Vcc、Vss、アナログ電源端子AVcc、AVss、リセット入力RES、スタンバイ入力STBY、割込入力NMI、クロック入力EXTAL、XTAL、動作モード入力MD0、MD1、MD2などの入力端子がある。
パルス出力回路は、タイマから与えられるトリガ信号に従って、図示はされないレジスタ(NDR)に保持した内容をIOP8と兼用の端子から出力する。
次に、図2によりシングルチップマイクロコンピュータのアドレスマップを説明する。
たとえば、CPU1は4Gバイトのアドレス空間、CPU2は64kバイトのアドレス空間を持つ。また、ROM1、RAM1はCPU1のアドレス空間上にのみ、ROM2、RAM2はCPU2のアドレス空間上にのみ存在する。斜線部で示されるRAMP、およびタイマ、パルス出力回路、SCI、A/D変換器、IOP0〜11、割込コントローラの各機能ブロックのアドレス、すなわち内部レジスタは、1つの物理的アドレスに対し、それぞれのCPUのアドレス空間上で固有の論理的アドレスを有する。
このアドレスは、それぞれアドレスで対応付けられており、具体的にはCPU2のアドレスの上位にH’FFFFを付加したアドレスがCPU1のアドレスになる。たとえば、RAMPの先頭アドレスはCPU1ではH’FFFFFB80、CPU2ではH’FB80である。
すなわち、CPU1はROM1、RAM1、RAMP、内部レジスタをリード/ライトでき、CPU2はROM2、RAM2、RAMP、内部レジスタをリード/ライトできる。
次に、図3により、このシングルチップマイクロコンピュータのアドレスバス、データバスの接続状態を説明する。
図3において、I/Oには図1のタイマ、パルス出力回路、SCI、A/D変換器、IOP0〜11、割込コントローラの各機能ブロックを含む。クロック発振器はバスと接続されていないので省略する。
アドレスバス、データバスとして、CPU1、ROM1、RAM1、外部を接続するIAB1、またCPU2、ROM2、RAM2を接続するIAB2、さらにRAMP、I/Oを接続するPABがある。このようなアドレスバス、データバスはバスコントローラ(BSC)でインタフェースされている。
たとえば、CPU1がROM1からプログラムをリードする場合、またはRAM1とのデータのリード/ライトする場合、IAB1、IDB1を使用して動作が行われる。このCPU1はPAB、PDBを使用しない。
一方、CPU2がROM2からプログラムをリードする場合、またはRAM2とのデータのリード/ライトする場合、IAB2、IDB2を使用して動作が行われる。このCPU2はPAB、PDBを使用しない。このとき、CPU1とCPU2は互いに独立したバスを用いて動作し、並列に動作することができる。
また、CPU1とCPU2のいずれか一方が、RAMPまたはI/Oとのデータのリード/ライトを行う場合、バス権調停が行われる。この場合に、CPU2によるバス権要求がCPU1によるバス権要求より優先される。このバス権調停は、IAB1/IAB2に示されるアドレスとCPU1/2が出力するコマンド信号によって、バスコントローラが行う。コマンド信号にはリード要求、ライト要求、サイズ信号等を含む。
一方がRAMPまたはI/Oとのデータのリード/ライト中に、他方がRAMPまたはI/Oとのデータのリード/ライトを行おうとすると、後者は前者のリード/ライトが終了するまで、バスコントローラから待機信号を与えられ、待機状態とされる。たとえば、CPU2がRAMPまたはI/Oとのデータのリード/ライトを行っている間、CPU1はROM1、RAM1のリード/ライトを行うことができる。
さらに、CPU1とCPU2が、同時にRAMPまたはI/Oとのデータのリード/ライトを行おうとした場合、一方のCPUは停止状態にすることになるが、プログラムをRAMPまたはI/Oには配置しないことによって、RAMPまたはI/Oとのデータのリード/ライトをデータのみに限定して頻度を低下することができる。
この場合に、リードした命令に基づいてデータのリード/ライトを行うのであるから、命令のリードとデータのリード/ライトの回数の比は1/2以上にはならない。また、データのリード/ライト命令で全てのプログラムが構成されることはないから、前記の比はさらに小さくできる。一般的には1/4〜1/5程度であると考えられる。この実施例中に記載されるプログラムによっても同様であることが示される。従って、CPU1とCPU2の並列動作性を高めることができる。
このような並列動作を有効に利用するためには、CPU1が全体的な設定と、ROM1、RAM1あるいは外部のデバイスを用いた主たるプログラム処理を行い、CPU2がI/Oの逐次的な制御を行うようにするとよい。また、CPUの命令をROM1またはROM2に配置し、作業領域をRAM1またはRAM2に配置するとよい。
次に、図4により割込コントローラを詳細に説明する。
たとえば、割込要因には内部割込、外部割込の2種類があり、それぞれ割込要因フラグを有する。この内部割込の要因フラグは、タイマ、SCI、A/D変換器の入出力回路が所定の状態になったときに“1”にセットされ、また外部割込の要因フラグは、外部割込入力端子が所定のレベルになったとき、または所定の信号変化が発生したときに“1”にセットされる。この割込要因フラグは、CPU1/2のライト動作によって“0”にクリアされる。
割込要因フラグの各ビットの出力は、割込許可回路に入力され、この割込許可回路には、さらに割込許可レジスタの内容、すなわち割込許可ビットが入力される。この割込許可レジスタは、CPU1/2からリード/ライト可能なレジスタで、対応する割込を許可するか、禁止するかを選択する。
たとえば、割込要因フラグが“1”にセットされ、割込許可ビットが“1”にセットされていると、割込が要求される。すなわち、割込許可回路は、対応する割込要因フラグと割込許可ビットとを入力とした論理積回路で構成される。
割込許可回路の出力は、CPU選択回路に入力され、このCPU選択回路には、さらに割込選択レジスタIRQSELの内容が入力される。この割込選択レジスタは、割込が要求されたとき、CPU1またはCPU2のいずれに割込を許可するかを選択する。
たとえば、割込選択レジスタのビットが“1”にセットされていると、CPU2に割込が要求される。割込選択レジスタのビットが“0”にクリアされていると、CPU1の割込が要求される。すなわち、CPU選択回路は、対応する割込信号と割込選択ビットの論理積回路、および割込信号と割込選択ビットの反転信号の論理積回路で構成される。前者の論理積回路の出力がCPU2割込要求信号とされ、後者の論理積回路の出力がCPU1割込要求信号とされる。
CPU選択回路の出力は、CPU1割込要求とCPU2割込要求が独立に、優先順位判定回路に入力され、この優先順位判定回路には、さらにプライオリティレジスタの出力が入力される。このプライオリティレジスタは割込要因のグループ毎に、たとえば2レベルの優先順位を設定する。
この場合に、CPU1/2割込要求のそれぞれについて優先順位を判定する。この判定の結果、優先順位の最高のものが選択され、ベクタ番号が生成され、CPU1/2割込要求のそれぞれのベクタ番号が出力される。
このCPU1/2割込要求信号、ベクタ番号はマスクレベル判定回路に入力され、このマスクレベル判定回路には、さらに対応するCPU1/2の割込マスクビットが入力される。ここで、要求された割込がCPUの割込マスクレベル以下であれば保留される。そして、CPU1/2のそれぞれに対し、割込要求信号とベクタ番号が出力される。なお、CPU1は2ビットのマスクビットを持つが、CPU2は1ビットのマスクビットを持つ。
さらに、それぞれのCPUに対する割込要求信号が活性状態になると、このCPUは実行中の命令の終了時点で割込例外処理を開始し、ベクタ番号に対応するベクタアドレスから分岐先アドレスを取り出し、割込処理ルーチンへ分岐する。
このような優先順位判定や割込マスクレベルについては、前記平成5年3月、(株)日立製作所発行『H8/3003 ハードウェアマニュアル』または特願平4−137955号などによって公知であるので、詳細な説明は省略する。
また、CPU1またはCPU2のいずれに要求されるかによらず、ベクタ番号は一定である。しかし、アドレス空間の大きさに対応して、ベクタアドレスは、CPU1では4バイト単位、CPU2では2バイト単位とされる。
ノンマスカブル割込NMIは、1本の端子NMIから入力されるが、2つのCPUに同時に割込を要求できる。これは対応する割込許可ビットを持たない。このNMI割込は、マスク不可能な特性上、シングルチップマイクロコンピュータまたは半導体集積回路の暴走時などに、CPUの処理を強制的に停止させるために用いるため、1本のNMI端子によって、CPU1およびCPU2の両方にNMI割込を要求することは都合がよい。少なくとも2本の端子にするのに比較して、端子1本を節約して、入出力ポートなどとして有効に使用することができる。
また、割込要因フラグには、CPU2がライト可能な割込要求ビットを持つ。この割込許可ビットを“1”にセットすると、CPU1に割込を要求できる。また、割込要求ビットはCPU2から“1”にセットすることが可能であり、CPU1からは“0”にクリアすることができる。CPU1が“0”にクリアする場合は、事前に“1”の状態をリードした後、“0”をライトする必要がある。
次に、割込コントローラにおいて、図5により割込要求ビットと割込許可回路を詳細に説明する。
たとえば、2つのフリップフロップFF1、FF2を含む。このFF1は、割込要求ビットを構成し、クリア信号CLRとしてリセット信号RESETが入力される。また、セット信号Sには論理積回路AND1の出力が入力され、リセット信号Rには論理積回路AND3Aの出力が入力され、出力Qは、論理積回路AND4を介して割込要求として出力されるほか、論理積回路AND2、出力バッファに入力される。
論理積回路AND1には、CPU2のバス権信号、レジスタライト信号、および内部データバスの所定のビットが入力される。なお、レジスタリード/レジスタライト信号は、リード信号/ライト信号と、アドレスをデコードしてこのレジスタが選択されたことを示す信号との論理積で生成される信号とする。たとえば、レジスタライト信号は、CPU2またはCPU1がこの割込要求ビットのアドレスにライトしたとき、活性状態“1”となる。
FF2は、割込要求ビットの制御を行い、クリア信号CLRとしてリセット信号RESETが入力される。また、セット信号Sには論理積回路AND2の出力が入力され、リセット信号Rには論理積回路AND3Aの出力が入力され、出力Qは論理積回路AND3Aに入力される。
論理積回路AND2には、FF1の出力、CPU1のバス権信号、およびレジスタリード信号が入力される。
論理積回路AND3Aには、FF2の出力、および内部データバスの所定のビットの反転、およびAND3Bの出力が入力される。このAND3Bには、CPU1のバス権信号、レジスタライト信号が入力される。
論理積回路AND4には、FF1の出力、および、図示はされない割込許可レジスタの所定のビットの出力である割込許可信号を入力し、出力は割込要求信号とされる。なお、選択ビットは設けられず、必ずCPU1に割込を要求するとよい。
出力バッファは、FF1の出力をデータとして入力し、レジスタリード信号をクロック信号として入力する。この出力は内部データバスの所定のビットに結合される。
従って、CPU2がこの割込要求ビットのアドレスに“1”をライトしたとき、AND1の出力が“1”となって、FF1が“1”にセットされる。このように、割込許可レジスタの所定のビットが“1”にセットされていると、CPU1に割込が要求される。
さらに、CPU1がこの状態で割込要求ビットのアドレスをリードすると、出力バッファを介してデータバスに割込要求ビットの内容を出力するとともに、AND2の出力が“1”となって、FF2が“1”にセットされる。
続いて、CPU1が割込要求ビットに“0”をライトすると、AND3Aの出力が“1”となって、FF1およびFF2が“0”にクリアされる。同様に、CPU1がライト可能な割込要求ビットを持ち、この割込許可ビットはCPU2からのみライトでき、CPU2に割込を要求できる。
いわゆるリードモディファイライト命令では、リードとライトの間にバスを解放しないようにするとよい。たとえば、ビットセット命令は、指定されたアドレスのデータをバイトサイズでCPUに取込み、CPU内部で指定された1ビットを“1”にセットし、バイトサイズでデータをライトするものである。
このリードとライトの間はPAB、PDBを他方のCPUに解放しないようにする。このバスの解放を禁止する信号は、CPU1/2がバスコントローラに出力する前記コマンド信号に含めることができる。
次に、図6により内部バスの動作タイミングの一例を説明する。
本実施例のシングルチップマイクロコンピュータは、たとえばシステムクロックφに同期して動作し、IAB1/2はφの反転信号であるφ#に同期して出力され、またCPU1/2のROM1/2およびRAM1/2に対するリードは1ステートで行われる。
まず、IAB1/2はφ#に同期して1ステート出力され、特に制限はされないものの、ROM1/2およびRAM1/2の中でφに同期してラッチされる。これに対応するリードデータはφ#に同期して出力され、φ#が活性状態の期間にCPUに取り込まれる。たとえば、T1のφ#に同期してIAB1/2に出力されたアドレスに対するデータはT2のφ#が活性状態の期間に、それぞれCPU1/2に取り込まれる。
一方、RAMPに対するリード/ライトは2ステート、I/Oに対するリード/ライトは3ステートで行われる。このφ#に同期したIAB1/2は、バスコントローラでφに同期化される。
この場合に、CPU1のプログラムは以下の通りとする。なお、命令の表記方法は、平成元年7月、(株)日立製作所発行『H8/300シリーズ プログラミングマニュアル』に記載のCPUと同様とする。
CMP.B #CODE,R0L
BEQ N1
BTST #0,@PORT
BNE N2
たとえば、CMP、BEQ、BNE命令は2バイト長、TST命令は4バイト長とする。
始めに、アドレスnからCMP命令をリードする。このCMP命令の実行を開始すると、まずアドレスn+2からBEQ命令をリードするとともに、内部でイミディエイトデータCODEと汎用レジスタR0Lの内容を比較して、コンディションコードに反映する。
さらに、BEQ命令の実行を開始すると、まず、アドレスn+4からBTST命令をリードする。次に、分岐先のアドレスN1から命令をリードするとともに、前記比較結果が一致しているかを判定する。一致していなければ、アドレスN1の命令は無視して、すでにリード済みのBTST命令の実行を行う。
続いて、BTST命令の第2ワードをリードする。このBTST命令を実行すると、絶対アドレスPORTで指定されるI/Oから、PAB/PDBを使用して、バイトサイズでデータをリードする。次にアドレスn+6からBNE命令をプリフェッチする。
また、CPU2のプログラムは以下の通りとする。
BCLR #RDRF,@SSR
たとえば、BCLR命令は4バイト長とする。
始めに、アドレスm、アドレスm+2からBCLR命令をリードする。このBCLR命令の実行を開始すると、まず絶対アドレスSSRで指定されるI/Oから、PAB/PDBを使用してバイトサイズでデータをリードする。
続いて、アドレスm+4から次の命令をプリフェッチするとともに、内部でリードデータのイミディエイトデータRDRFで指定されるビットを“0”にクリアする。このデータを、絶対アドレスSSRで指定されるI/Oへ、PAB/PDBを使用してライトする。次の命令の実行を開始し、さらにアドレスm+6から次の命令をプリフェッチする。
T1では、CPU1/2のROM1/2からの命令フェッチが行われ、IAB1/2にアドレスが出力される。
T2では、ROM1/2からIDB1/2に読み出された命令コード(CMP命令、BCLR命令の第1ワード)をCPU1/2がそれぞれ取り込むとともに、次の命令フェッチのアドレスがIAB1/2に出力される。
T3では、ROM1/2からIDB1/2に読み出された命令コード(BEQ命令、BCLR命令の第2ワード)をCPU1/2がそれぞれ取り込むとともに、CPU1は次の命令フェッチのアドレスを、CPU2はアドレスSSRを、それぞれIAB1/2に出力する。
この場合に、PAB/PDBを使用するのがCPU2だけなので、CPU2のPAB/PDBの使用が許可される。ここで、SCIのリードが3ステート必要であるため、CPU2待機信号がハイレベルになる。
T4では、バス権信号がロウレベルになって、CPU2のPAB/PDBの使用を表示する。IAB2の内容がPABに出力されて、SCIのレジスタSSRの内容がリードされる。このリードデータはT6で得られる。
この場合に、ROM1からIDB1に読み出された命令コード(BTST命令の第1ワード)をCPU1が取り込むとともに、CPU1は分岐先アドレスN1をIAB1に出力する(BTST命令の第2ワード)。
T5では、ROM1からIDB1に読み出された命令コードをCPU1が取り込むが、これは分岐条件が不成立で実行されない。先にフェッチ済みのBTST命令の第1ワードが有効になる。この場合に、CPU1は次の命令フェッチのアドレスをそれぞれIAB1に出力する。
T6では、SCIのレジスタSSRから読み出されたデータをPDB、IDB2を介してCPU2が取り込む。また、CPU2待機信号がロウレベルになり、次の命令フェッチのアドレスをIAB2に出力する。
この場合に、CPU1はアドレスPORTをIAB1に出力し、またCPU2のPAB/PDBの使用が終了しているので、CPU1のPAB/PDBの使用が許可される。ここで、PORTのリードが3ステート必要であるため、CPU1待機信号がハイレベルになる。
T7では、バス権信号がハイレベルになって、CPU1のPAB/PDBの使用を表示する。IAB1の内容がPABに出力されて、入出力ポートのレジスタPORTの内容がリードされる。このリードデータはT9で得られる。
この場合に、CPU1待機信号がロウレベルになり、次の命令フェッチのアドレスをIAB1に出力し、またCPU2はアドレスSSRをIAB2に出力する。ここで、PAB/PDBをCPU1が使用しているので、CPU2の動作は保留され、CPU2待機信号がハイレベルになる。
T8では、CPU2はアドレスSSRにライトすべきデータをIDB2に出力する。
T9では、入出力ポートのレジスタPORTから読み出されたデータをPDB、IDB2を介してCPU1が取り込む。このCPU1は次の命令フェッチのアドレスをIAB1に出力する。この場合に、CPU1待機信号がロウレベルになり、次の命令フェッチのアドレスをIAB1に出力する。
T10では、ROM1からIDB1に読み出された命令コード(BNE命令)をCPU1が取り込む。次の命令フェッチのアドレスをIAB1に出力する。この場合に、バス権信号がロウレベルになって、CPU2のPAB/PDBの使用を表示する。IAB2の内容がPABに出力されて、IDB2の内容がSCIのレジスタSSRにライトされる。
T11、T12でライト動作が行われる。この場合に、T12でCPU2待機信号がロウレベルになり、次の命令フェッチのアドレスをIAB2に出力する。また、CPU1は上記同様の動作を繰り返す。
なお、CPU1は、外部CPUとすることもでき、共通部分を外部のCPUが周辺機能としてリード/ライトすることができる。また、CPU2が共通部分をリード/ライトする場合には、外部CPUにウェイト信号を活性状態にして、待機させる。このとき、シングルチップマイクロコンピュータが外部CPUに対する割込信号を出力する。
続いて、データ転送のプログラム例を以下に示す。ここでは、SCIの受信データのチェックサムを行い、結果は内蔵RAM2上に配置した作業用アドレスSUMに格納するものとする。また、受信データ数は内蔵RAM2上に配置した作業用アドレスSUMに格納されているものとする。
その他、転送回数を記憶する作業用アドレスCNT、およびSCIの受信データレジスタRDR、ステータスレジスタSSR、割込コントローラの割込選択レジスタIRQSELを使用する。
PUSH R0 (1)
MOV.B @RDR,R0L (2)
MOV.B @SUM,R0H (3)
ADD.B R0L,R0H (4)
MOV.B R0H,@SUM (5)
MOV.B @CNT,R0H (6)
DEC.B R0H (7)
MOV.B R0H,@CNT (8)
BEQ L1 (9)
BCLR #RDRF,@SSR (10)
BRA L2 (11)
L1:BNOT #RXI,@IRQSEL (12)
L2:RTE (13)
始めに、CPU2に受信完了割込RXIが要求され、割込ルーチンに分岐する。まず、汎用レジスタR0をスタックに退避する(1)。そして、SCIの受信データレジスタRDRの内容を汎用レジスタR0の下位8ビットR0Lにリードする(2)。
また、内蔵RAM2上に配置した作業用アドレスSUMの内容を汎用レジスタR0の上位8ビットR0Hにリードする(3)。そして、R0HとR0Lの内容を加算する(4)。この加算結果をアドレスSUMにライトする(5)。
さらに、内蔵RAM2上に配置した作業用アドレスCNTの内容を汎用レジスタR0Hにリードする(6)。そして、R0Hの内容をデクリメント(−1)する(7)。このデクリメント結果をアドレスCNTにライトする(8)。
この内容が“0”であれば、L1に分岐し(9)、割込選択レジスタIRQSELの受信完了割込RXIに対応するビットを反転する(12)。このとき、割込要求フラグRDRFが“1”にセットされたままなので、CPU1に受信完了割込RXIが要求される。そして、割込ルーチンから復帰する(13)。
また、前記アドレスCNTにライトされた内容が“0”でなければ(9)、割込要求フラグRDRFを“0”にクリアする(10)。そして、分岐命令を実行した(11)後、割込ルーチンから復帰する(13)。
また、以下のプログラム例により、マルチプロセッサ受信のアドレス判定を行うことができる。なお、この場合にはアドレス判定の結果、受信したアドレスが自身のアドレスに一致していれば、受信完了割込の要求先をCPU1に変更するものとする。
PUSH R0 (1)
MOV.B @RDR,R0L (2)
CMP.B #ID,R0L (3)
BEQ L1 (4)
BCLR #RDRF,@SSR (5)
BRA L2 (6)
L1:BNOT #RXI,@IRQSEL (7)
L2:RTE (8)
始めに、CPU2に受信完了割込RXIが要求され、割込ルーチンに分岐する。まず、汎用レジスタR0をスタックに退避する(1)。そして、SCIの受信データレジスタRDRの内容を汎用レジスタR0の下位8ビットR0Lにリードする(2)。
この内容を、マルチプロセッサ受信の自分のIDと比較する(3)。この結果、一致していれば、L1に分岐し(4)、割込選択レジスタIRQSELの受信完了割込RXIに対応するビットを反転する(7)。このとき、割込要求フラグRDRFが“1”にセットされたままなので、CPU1に受信完了割込RXIが要求される。そして、割込ルーチンから復帰する(8)。
また、自分のIDと比較した結果が一致していなければ(4)、割込要求フラグを“0”にクリアする(5)。そして、分岐命令を実行した(6)後、割込ルーチンから復帰する(8)。
なお、この場合に1本の割込で複数の転送を行うことができる。たとえば、ステッピングモータを駆動して、かつこの加速/減速を行うことができる。また、タイマのコンペアマッチ割込OCMI毎に、ポートから出力するデータを更新してモータを駆動する。さらに、コンペアレジスタの内容を更新して、データ出力の周期を変更して加速/減速を行うことができる。
この状態の表示に、内蔵RAM2上に配置した作業用アドレスUPDWの内容を用いる。このビット6が“0”にクリアされているときに定速動作であり、“1”にセットされているときは加速または減速、すなわちビット7が“0”にクリアされているときは減速、“1”にセットされているときには加速動作である。なお、初期値はビット6、7ともに“1”にセットしておく。
また、パルス出力回路のネクストデータレジスタNDRに次の出力パルスを格納するものとし、タイマの定数レジスタOCRにパルス出力周期を設定するものとする。タイマカウンタが定数レジスタの値に一致すると、図示はされないコンペアマッチ信号が発生し、NDRの内容がIOP8と兼用の端子から出力される。同時にタイマカウンタの値は0にクリアされる。このNDRは4ビットとする。
このようなパルス出力については、特願平4−117969号と同様とする。
PUSH R0 (1)
MOV.B @NDR,R0L (2)
ROTL.B R0L (3)
BLD #4、R0L (4)
BST #0,R0L (5)
MOV.B R0L,@NDR (6)
始めに、CPU2にコンペアマッチ割込OCMIが要求され、割込ルーチンに分岐する。まず、汎用レジスタR0をスタックに退避する(1)。そして、ネクストデータレジスタNDRの内容を汎用レジスタR0の下位8ビットR0Lにリードする(2)。
この内容を回転する(3)。ここでは、4ビット単位の回転とするために、回転後のビット4をキャリフラグに格納し(4)、このキャリフラグをビット0に格納する(5)。この4ビット単位の回転が終了した結果をNDRに書き込む(6)。この内容が次のコンペアマッチで端子から出力される。
BTST #6,@UPDW (7)
BEQ L3 (8)
MOV.W @OCR,R0 (9)
BTST #7,@UPDW (10)
BNE L1 (11)
SUB.W #CNST,R0 (12)
BRA L2 (13)
L1:ADD.W #CNST,R0 (14)
L2:MOV.W R0,@OCR (15)
続いて、アドレスUPDWのビット6の内容を検査し(7)、この内容が“0”(定速動作)であれば、L3に分岐し(8)、定数レジスタOCRの内容は保持される。また、“0”でなければ、定数データレジスタOCRの内容を汎用レジスタR0にリードする(9)。
さらに、アドレスUPDWのビット7の内容を検査し(10)、この内容が“0”(減速動作)であれば、L1に分岐し(11)、“0”でなければ(加速動作)、定数値CNSTを汎用レジスタR0から減算し(12)、L2に分岐する(13)。このL1では定数値CNSTを汎用レジスタR0に加算し(14)、L3では汎用レジスタR0の内容を定数レジスタOCRに書き込む(15)。
L3:MOV.B @CNT,R0H (16)
DEC.B R0H (17)
BNE L5 (18)
BTST #6,@UPDW (19)
BEQ L6 (20)
BTST #7,@UPDW (21)
BEQ L4 (22)
BCLR #6,@UPDW (23)
MOV #CNT1,R0H (24)
BRA L5 (25)
L4:BSET #6,@UPDW (26)
BCLR #7,@UPDW (27)
MOV #CNT2,R0H (28)
L5:MOV.B R0H,@CNT (29)
BRA L7 (30)
L6:BNOT #OCMI,@IRQSEL (31)
L7:RTE (32)
続いて、アドレスCNTの内容を汎用レジスタR0Hにリードする(16)。この内容R0Hの内容をデクリメント(−1)する(17)。この内容が“0”でなければ、L5に分岐し(18)、“0”であれば、アドレスUPDWのビット6の内容を検査する(19)。
さらに、この内容が“0”(定速動作)であれば、L6に分岐し(20)、“0”でなければ、ビット7の内容を検査し(21)、さらにこの内容が“0”(減速動作)であれば、L6に分岐し(22)、“0”でなければ(加速動作)、アドレスUPDWのビット6を“0”にクリアして、定速動作に遷移し(23)、低速動作の回転数CNT1をR0Hに設定する(24)。そして、L5に分岐する(25)。
L4では、減速動作に遷移するため、アドレスUPDWのビット6を“1”にセット(26)し、ビット7を“0”にクリアする(27)。また、減速動作の回転数CNT2をR0Hに設定する(28)。
さらに、L5では、汎用レジスタR0Hの内容をアドレスCNTにライトする(29)。そして、分岐命令を実行(30)した後、割込ルーチンから復帰する(32)。
そして、減速動作の終了後、L6では割込選択レジスタIRQSELのにコンペアマッチ割込OCMIに対応するビットを反転する(31)。このとき、割込要求フラグOCMFが“1”にセットされたままなので、CPU1に受信完了割込RXIが要求される。そして、割込ルーチンから復帰する(32)。
また、起動は、前記割込要求レジスタを用いて、CPU1からCPU2に割込を要求して、たとえばRAMP上の所定のアドレスにコマンドを配置して指示をすればよい。
以上により、たとえば特願平4−137954号または特願平4−117969号に記載の方法に比べて、RAMにデータを展開しておく必要がなく、RAMの使用量を節約できる。
また、CPU2を、割込に対応したデータ処理に主として使用すれば、CPU2は常に処理すべきプログラムがあるとは限らない。そこで、1つの割込によるデータ処理が終了した時点で、処理すべきプログラムがなければ、CPU2は低消費電力状態、いわゆるスリープ状態にするのがよい。
このスリープ状態では、専用のSLEEP命令を実行することにより遷移する。そして、CPU2に供給されるクロックが停止される。また、割込が要求されると、スリープ状態は解除される。
次に、図7により低消費電力状態制御回路を詳細に説明する。
なお、この低消費電力状態制御回路は、たとえばクロック発振器内に構成され、この低消費電力状態は3個のフリップフロップSLPF1、SLPF2、SSBYFで制御される。
フリップフロップSLPF1は、CPU1がSLEEP命令を実行すると、セット状態となる。このとき、CPU1はスリープ状態となる。また、CPU1に対する割込要求が発生するとクリア状態となる。
フリップフロップSLPF2は、CPU2がSLEEP命令を実行すると、セット状態となる。このとき、CPU2はスリープ状態となる。また、CPU2に対する割込要求が発生するとクリア状態となる。
フリップフロップSSBYFは、図示はされない制御ビットSSBYを“1”にセットした状態で、一方のCPUがスリープ状態で、他方のCPUがSLEEP命令を実行するとセット状態となる。このソフトウェアスタンバイ状態では、クロック発振器を始め、全ての機能の動作が停止する。内部はリセット状態となる。
ただし、規定の電圧が与えられている限り、RAM1、RAM2、RAMPの内容は保持される。また、入出力ポートの状態も保持される。そして、NMI割込要求が発生するとクリア状態となる。なお、内部はリセット状態となるためにNMI以外の割込要求は発生しない。
このソフトウェアスタンバイ状態に遷移するためには、一方のCPUがSSBYビットを“1”にセットし、SLEEP命令を実行すればよい。他方のCPUの状態に応じて、直ちにソフトウェアスタンバイ状態に遷移するか、一旦スリープ状態に遷移した後、他方のCPUがSLEEP命令を実行した後にソフトウェアスタンバイ状態に遷移するかが自動的に選択される。このため、プログラムを作成する場合に、相互の動作状態を確認する必要がなく、プログラムの作成効率を向上することができる。
また、割込処理を開始したとき、直前が動作中であったか、スリープ状態であったかを示すビットを設けるとよい。この動作中に割込を受け付けた場合には、CPUの内部のレジスタの内容を退避しなければならないが、スリープ中に割込を受け付ければ、CPUの内部のレジスタには作業中のデータはないので退避する必要がない。この退避動作および処理終了時の復帰動作を行わなければ、高速化を行うことができる。
さらに、入出力ポートは、いずれのCPUからライト可能にするか選択可能にする。
次に、図8により入出力ポートのレジスタを詳細に説明する。
この入出力ポートのレジスタは、データディレクションレジスタ(DDR)、データレジスタ(DR)、ポート制御レジスタ(PSEL)からなる。
DDRは、ライト専用レジスタであり、“0”にクリアされているときに入力、“1”にセットされているときには出力となる。
DRは、出力データを格納する。このDDRを“1”にセットすると、DRの内容が出力される。リード時にはDRの内容または端子の状態が読み出される。すなわち、DDRが“0”にクリアされているときは端子の状態、“1”にセットされているときにはDRの内容が読み出される。
PSELが、各入出力端子の制御をいずれのCPUで行うかを選択する。このポート制御レジスタ(PSEL)の制御ビットは、データレジスタ(DR)とデータディレクションレジスタ(DDR)のビットを共通に制御する。PSELが“0”にクリアされているときはCPU1によって、“1”にセットされているときにはCPU2によってライトが行われる。
なお、ポートにプルアップMOSを内蔵したり、2重出力バッファとしたりする場合、これらの制御を行うレジスタも、PSELで共通に制御すればよい。このようなレジスタの例は、前記平成5年3月、(株)日立製作所発行『H8/3003 ハードウェアマニュアル』P263〜P306、P419〜P445に記載されている。
次に、図9により入出力ポートを詳細に説明する。
本実施例の入出力ポートにおいては、データディレクションレジスタ(DDR)、データレジスタ(DR)、ポート制御レジスタ(PSEL)はフリップフロップで構成される。いずれも、内部データバスの所定のビットをデータ入力(D)とし、リセット信号(RESET)をクリア入力(CLR)としている。
DDRの入力クロック(C)は、論理積回路AND1の出力である。この出力(Q)は、出力バッファOBUFの制御信号およびセレクタSEL1の選択信号とされる。
DRの入力クロック(C)は、論理積回路AND2の出力である。この出力(Q)は出力バッファOBUFのデータ入力およびセレクタ1のデータ入力とされる。
PSELの入力クロック(C)は、PSELリード信号WRPSELである。この出力(Q)はセレクタSEL2の選択信号とされる。
出力バッファOBUFは、制御信号としてDDR出力、データ入力はDR出力とされ、出力信号は端子Pに接続される。
入力バッファIBUFは、入力信号が端子Pに接続され、出力信号がセレクタSEL1のデータ入力とされる。
セレクタSEL1は、DDR出力を選択信号、DR出力および入力バッファIBUF出力をデータ入力とする。このDDR出力が“0”のときは入力バッファIBUF出力が選択され、DDR出力が“1”のときにはDR出力が選択される。このセレクタSEL1の出力はDRリードバッファの入力とされる。
セレクタSEL2は、PSEL出力を選択信号、CPU1/2バス権信号をデータ入力とする。この出力はライト許可信号となる。PSELが“0”のときはCPU1バス権で、CPU1がライト許可状態となる。PSELが“1”のときにはCPU2バス権で、CPU2がライト許可状態となる。
DRリードバッファDRBUFは、セレクタSEL1の出力を入力し、DRリード信号RDDRをクロックとし、出力信号は内部データバスの所定のビットに接続される。このRDDRが活性状態のとき、セレクタSEL1の出力を内部データバスに出力する。
PSELリードバッファPSBUFは、PSELフリップフロップの出力を入力し、PSELリード信号RDPSELをクロックとし、出力信号は内部データバスの所定のビットに接続される。このRDPSELが活性状態のとき、PSELフリップフロップの出力を内部データバスに出力する。
論理積回路AND1は、ライト許可信号とDDRライト信号WRDDRを入力とし、出力信号はDDRの入力クロックとなる。
論理積回路AND2は、ライト許可信号とDRライト信号WRDRを入力とし、出力信号はDRの入力クロックとなる。
ROM1およびROM2をPROMとすることができ、このPROMを外部からプログラムするとき、2つのROMを外部から連続したアドレスとするようにするとよい。
次に、図10によりPROMのアドレスマップを説明する。
たとえば、PROM1は64kバイト、PROM2は32kバイトとする。MCUモードでは、PROM1はH’00000000〜H’0000FFFFに、PROM2はH’0000〜H’7FFFに配置される。
また、PROMモードでは、PROM1はH’00000〜H’0FFFFに、PROM2はH’10000〜H’17FFFに配置される。
次に、図11によりPROMモードを詳細に説明する。
このPROMモードは、モード端子MD1、MD0、およびSTBY端子をいずれもロウレベルとすることによって設定される。このとき、図示はされないモード設定回路によって、内部信号EPMが活性状態(ハイレベル)とされる。このPROMモードのときには、CPU1/2はBUFC1/2によって、アドレスバス、データバスから切り離される。
図11において、CS制御回路、バッファBUFC1/2などはバスコントローラに含まれてなる。
PROMは、図1におけるROM1およびROM2とし、メモリアレイ、アドレスデコーダ、入出力回路、制御回路からなる。このアドレスデコーダにはアドレスが入力され、入出力回路はデータの入出力を行い、また制御回路は制御信号を入力し、入出力回路を制御してデータの書込み/読み出しなどを行う。また、メモリアレイは不揮発記憶素子が配列されている。
制御回路には、EPM、CS−1/2#、OE#、PGM#、およびMS−1/2#、リード信号が入力される。このEPMが活性状態のとき、PROMとしての書込み/読み出し動作が、CS−1/2#、OE#、PGM#に基づいて行われる。また、EPMが非活性状態のときには、CPUのアドレス空間上でのROMとしての読み出し動作が、MS−1/2#、リード信号に基づいて行われる。
PROMモードのとき、VPP、CS#、OE#、PGM#で制御される。このような制御は、たとえば1993年3月、(株)日立製作所発行『HITACHI IC Memory Data Book No.2(10th Edition)』P510〜P524に記載されるPROMと同様である。
VPP端子はRES端子と、CS#、OE#、PGM#はP61、P62、P63端子と、アドレスA0−15はP00−07、P10−17端子と、A16はP60端子と、データD7−0はP40−P47端子と兼用にされている。なお、VPPは図示はされないが、PROM1/2に与えられる。
内部信号としては、OE#、PGM#がバッファ回路を介して入力され、PROM1、PROM2に供給される。CS−1#は、アドレス上位信号A16の反転信号との論理積信号、CS−2#は、アドレス上位信号A15の反転信号、およびA16との論理積信号で生成される。このCS−1#、CS−2#が、それぞれPROM1、PROM2に与えられる。
PROMモードのとき、IDB1とIDB2がバッファを介して接続される。PROM2のデータはIDB2、IDB1およびIOP3を介して入出力される。すなわち、CS−2#が活性状態で読み出し動作のとき、PROM2から読み出したIDB2の内容がIDB1に出力される。さらに、読み出し動作のとき、IDB1の内容がIOP3を介して外部に出力される。
また、書込み動作のとき、外部の内容がIOP3を介してIDB1に入力される。CS−2#が活性状態で書込み動作のとき、IDB1の内容がIDB2に出力され、PROM2に与えられる。さらに、IDB1の内容がIOP3を介して外部に出力される。
PROMモードのとき、IAB1とIAB2がバッファを介して接続される。すなわち、IOP1、2を介して入力されたIAB1のアドレスが、IAB2に入力され、PROM2に与えられる。なお、PROM1/2の最大容量が64kバイトであるので、それぞれのPROMに与えられるアドレスは16ビットである。
たとえば、読み出し動作はCS−1/2#、OE#が活性状態、PGM#が非活性状態のときに行われ、書込み動作はCS−1/2#、PGM#が活性状態、OE#が非活性状態のときに行われる。
その他、ベリファイやページ書込みなどが可能とされるが、本発明には直接の関係はないので、詳細な説明は省略する。
1つのPROMモードで、PROM1、PROM2を、外面的には1つのPROMとして一括して書込むことができる。これによって、書込みを効率的に行うことができる。
次に、図12によりテストモードを詳細に説明する。
このテストモードは、モード端子MD1、MD0をいずれもロウレベル、およびSTBY端子をハイレベルとすることによって設定される。このとき、図示はされないモード設定回路によって、内部信号TMが活性状態(ハイレベル)とされる。
図12において、制御回路1/2、バス権調停回路、選択回路、バッファBSBUF、バッファBUFC1/2はバスコントローラに含まれてなる。
バス権調停回路は、CPU1/2のいずれが、PAB/PDBを使用するかを選択して制御信号PAKを出力する。このPAKがハイレベルのときはCPU1、PAKがロウレベルのときにはCPU2がPAB/PDBを使用する。テストモードの場合は、P62端子から与えられる選択信号によってPAK信号は制御される。
テストモードのとき、CPU1/2はBUFC1/2によって、アドレスバス、データバス、リード信号/ライト信号から切り離される。
アドレスはIOP3〜IOP0から、バッファBUFPを介してIAB1に入力され、さらにBSBUFを介してIAB2およびPABに入力される。なお、IAB1は4Gバイトのアドレス空間に対応して32本のアドレスを有するが、IAB2は64kバイトのアドレス空間に対応して16本、PABはRAMP、I/Oのアドレスに対応して10本のアドレスを有する。従って、外部からアドレスを与えるためにはIAB1を利用するのがよい。
データバスは、IOP4によって、バッファBUFPを介してIDB1と入出力される。リード/ライト動作およびアドレスに対応して、IDB2またはPDBの内容がBSBUFを介してIDB1と入出力される。
リード信号、ライト信号は、P60端子、P61端子からBUFPを介して入力される。RD1/2、WR1/2として、ROM1、RAM1/ROM2、RAM2に供給される。また、バス権信号PAKによって選択されてRDP、WRPとなって、RAMP、I/Oに供給される。テストモードにおいては、PAK信号によらず、RD1/2/Pは常に同様の動作となり、WR1/2/Pも常に同様の動作となる。
制御回路1/2は、IAB1/2のアドレスに基づいて、選択信号MSROM1/2、MSRAM1/2、MSRAMP、MSIOを出力する。MSRAMP、MSIOは共通信号であるので、PAK信号に基づいて、一方が出力、他方はハイインピーダンスとなる。たとえば、PAK信号がハイレベルのときは制御回路1が出力し、制御回路2はハイインピーダンスとなる。
また、テストモード時には、MSROM1/2、MSRAM1/2はPAK信号に基づいて一方が禁止される。これは外部から与えるアドレスに基づいて、1つの機能ブロックが選択されるようにするためである。たとえば、PAK信号がハイレベルのときはMSROM1、MSRAM1はIAB1に基づいた出力、MSROM2、MSRAM2は非活性状態とされる。
ROM1/RAM1をテストする場合には、P62端子をハイレベルにして、PAK信号をハイレベルにした状態で、アドレス、リード信号/ライト信号を与えることによってリード/ライトを行うことができる。
また、ROM2/RAM2をテストする場合には、P62端子をロウレベルにして、PAK信号をロウレベルにした状態で、アドレス、リード信号/ライト信号を与えることによってリード/ライトを行うことができる。このアドレスは下位16ビットのみが有効になる。
さらに、RAMP/I/Oをテストする場合には、P62端子をハイレベルにして、PAK信号をハイレベルにした状態で、アドレス、リード信号/ライト信号を与えることによってリード/ライトを行うことができる。
上記によって、CPUによってアドレスが与えられ、かつデータの入出力が行われるべき内部バスに、内蔵の機能ブロックを外部からリード/ライトするためのアドレスデータなどを外部から供給可能にして、この機能ブロックに必要なデータのリード/ライトを外部から直接行うことができるようにし、このシングルチップマイクロコンピュータに内蔵される機能ブロックのテストの容易化、ならびにテスティング効率の向上を実現できる。
また、内蔵RAMをテストする場合、データのテストは独立して行い、アドレスデコーダのテストは並行して行うようにするとよい。このアドレスデコーダのテストを行うには、RAM1/2/Pを同時に選択可能にすることによって同時にテストを行うことができる。
この場合に、図12に対してRAMテストモードを設ければよい。テストモードにした状態で、P63端子をロウレベルとすると前記同様のテストモード、P63端子をハイレベルにするとRAMテストモードとなる。
このRAMテストモードでは、RAM1/2/Pの選択信号MSRAM1、MSRAM2、MSRAMPを同時に活性状態にすることができる。ただし、リードするデータはそれぞれ、ビット0〜1、ビット2〜3、ビット4〜7とする。
CPU1とCPU2は、実質的に同一のCPUであるか、またはCPU1がCPU2を包含するようにし、ソフトウェアの開発環境を共有できるようにするのがよい。このようなCPUには、たとえば特願平4ー226447号がある。
以上のようなシングルチップマイクロコンピュータを評価するエミュレータは、使用者が外部からブレーク条件を設定するとき、いずれのCPUにブレークを設定するかを指定可能にするとよい。また、2つのCPUの条件が両方成立したときにブレークするように指定可能にするとよい。
次に、図13によりエミュレーション用プロセッサの構成を説明する。
エミュレーション用プロセッサは、CPU1、CPU2を含むマイクロコンピュータ部分、および図示はされないバッファ回路などを含むエミュレーション用プロセッサ専用ブロックから構成され、公知の半導体製造技術によって1つの半導体基板上に形成されている。
このエミュレーション用プロセッサは、応用システムと信号の送受信を行うユーザインタフェース、およびマイクロコンピュータ開発装置と信号の送受信を行うエミュレーションインタフェースを有している。
エミュレーション用バスとしては、IAB1およびIDB1、IAB2およびIDB2をエミュレーションインタフェースを介して入出力する。また、PABおよびPDBのいずれのCPUが使用しているかを示すバス権表示信号を出力している。これは図13のPAK信号に相当するものとされる。また、バス権調停によって、CPUが待機状態とされていることを示す信号を出力している。
PAB、PDBのアクセス状態は明示的には表示されないが、バス権表示信号とIAB1およびIDB1、IAB2およびIDB2によるエミュレーション用バスの内容によって判断することができる。このPAB、PDBによるエミュレーション用バスを出力しないことによって、エミュレーション用プロセッサの端子数を削減でき、これによってパッケージサイズを小さくして、ひいてはエミュレータのサイズを縮小できる。
ブレーク要求端子は、BRK1#、BRK2#の2本がエミュレーションインタフェースに含まれてなる。これに基づいてBRK1、BRK2信号によって、それぞれCPU1、CPU2にブレーク割込を要求する。これらは対応するCPU選択ビットを持たず、優先順位判定回路を経て、割込要求信号と並列したCPUへのブレーク要求信号を活性状態にする。また、ベクタ番号信号は一般の割込要求と兼用される。
CPU1、CPU2が、ブレーク割込を受け付けると、それぞれブレークアクノリッジ信号BRKAK1、BRKAK2が活性状態になる。たとえば、CPU2が、前記のようなSCIの受信処理、パルス出力処理を行っている場合、CPU1をブレーク割込によって停止しても、CPU2はユーザの処理を実行するためにSCIの受信を中断してしまい、いわゆるオーバランエラーが発生したり、パルス出力を中断してしまい、たとえばユーザシステムのモータ駆動ができなくなってしまうようなことを回避できる。
次に、図14により、エミュレーション用プロセッサを搭載したエミュレータの構成を説明する。
コネクタ部がシングルチップマイクロコンピュータの代わりに応用システム(ユーザシステム)に装着される。エミュレーション用プロセッサは、このコネクタ部とインタフェースケーブルを介し、ターゲットシステムインタフェースを用いて応用システムと信号の入出力を行う。
また、エミュレーション用プロセッサはエミュレーションインタフェースを用いてエミュレーションバス1/2に接続される。このエミュレーションバス1がIAB1/IDB1に対応し、エミュレーションバス2がIAB2/IDB2に対応する。これらのエミュレーションバスには、図示はされない状態信号、制御信号などを含む。
このエミュレーションバスを用いて、エミュレーション用プロセッサから、応用システムとエミュレーション用プロセッサの内部状態に応じた情報などが出力され、またエミュレーション用プロセッサに対し、エミュレーションのための各種制御信号が入力される。そして、エミュレーション用プロセッサの、図示はされないエミュレートモード端子が電源レベルに固定され、エミュレーション用プロセッサ内部ではエミュレートモードが設定される。
また、エミュレーションバスには、特に制限はされないものの、応用システムまたはターゲットマイクロコンピュータ内蔵のメモリを代行するためのRAMでなるようなエミュレーションメモリと、エミュレーション用プロセッサの制御状態やエミュレーションバスの状態を監視して、その状態が予め設定された状態に達した時に、エミュレータ専用割込を入力して、CPUによるユーザプログラムの実行を停止させ、エミュレーション用プログラム実行状態に遷移させる(ブレーク)ためのブレーク制御回路が接続される。
さらに、このエミュレーションバスには、CPUのリード動作またはライト動作を示す信号、命令リード動作を示す信号などに基づき、エミュレーションバスに与えられるアドレスやデータさらには制御情報を逐次蓄えるリアルタイムトレース回路などが接続される。本実施例においては、エミュレーションバス1/2がエミュレーションメモリ、ブレーク制御回路、リアルタイムトレース回路などにそれぞれ接続される。
従って、エミュレーションメモリは、IAB1/IDB1およびIAB2/IDB2のデータを独立して並立的に入出力する。また、ブレーク制御回路は、IAB1/IDB1およびIAB2/IDB2のアドレス/データ、その他の情報を独立に判定する。このIAB1/IDB1側の条件が成立した後、IAB2/IDB2側の条件が成立したときにブレークを要求することが可能にされる。前記の通り、ブレーク割込はCPU1およびCPU2の両方に同時に要求することもできるし、一方のCPUのみに要求することもできる。
また、リアルタイムトレース回路は、IAB1/IDB1およびIAB2/IDB2のアドレス/データ、その他の情報を独立に蓄積し、一方のCPUがブレークしたときには、他方のCPUのアドレス/データ、その他の情報のみを蓄積する。また、一方のCPUのみのアドレス/データ、その他の情報を選択的に蓄積することもできる。
このエミュレーションメモリ、ブレーク制御回路、リアルタイムトレース回路はコントロールバスに接続され、コントロールバスを介してコントロールプロセッサの制御を受けるようになっている。このコントロールバスは、エミュレーション用プロセッサ制御回路に接続されるとともに、インタフェース回路を介して、特に制限はされないものの、パーソナルコンピュータなどのシステム開発装置に接続される。
たとえば、システム開発装置から入力されたプログラムをエミュレーションメモリに転送し、内蔵ROM上に配置されるべきこのプログラムをCPUがリードすると、エミュレーションメモリ上のプログラムがリードされる。また、ブレーク条件や、リアルタイムトレース条件などもシステム開発装置から与えることができる。
このブレーク条件としては、少なくとも、CPU1とCPU2の条件が独立して設定できるようにされる。また、リアルタイムトレース条件としては、少なくとも、CPU1とCPU2のアドレス/データ、その他の情報を同時に蓄積するか、選択的に一方のCPUのアドレス/データ、その他の情報のみを蓄積するかを選択できるようにする。
従って、本実施例のシングルチップマイクロコンピュータによれば、データ処理装置としてのCPU1,CPU2、バス制御手段としてのバスコントローラ、読み出し可能な記憶手段としてのROM1,ROM2、データ入出力手段としてのIOP0〜IOP11を主要な構成とすることにより、以下の作用効果を得ることができる。
(1)CPU1とROM1を接続するIAB1,IDB1と、CPU2とROM2を接続するIAB2,IDB2とを独立に設け、ROM1にCPU1のプログラムを、ROM2にCPU2のプログラムを格納することにより、CPU1とCPU2が並列動作することを可能にし、またRAMPとIOP0〜IOP11などによる入出力回路を共通のPAB,PDBに接続し、CPU1およびCPU2が利用可能とすることにより、CPU1とCPU2の制御すべきデータを任意に配分して利用することができる。これによって、シングルチップマイクロコンピュータの処理速度を向上し、資源利用効率を向上できる。
(2)1つのシングルチップマイクロコンピュータで2つの処理を同時に行うことにより、従来の複数の半導体集積回路装置を利用していたシステムを代替して、小型化を実現することができる。
(3)CPU1およびCPU2が、相互に割込を要求することを可能にすることにより、容易にCPU1,2の相互の同期を実現することができる。
(4)CPU1およびCPU2の動作によって、ソフトウェアスタンバイのようなシングルチップマイクロコンピュータの全体を停止状態とする場合、SSBYビットを“1”にセットした状態で、一方のCPUがSLEEP命令を実行したときに、他方のCPUの状態に応じて、直ちにソフトウェアスタンバイ状態に遷移するか、一旦スリープ状態に遷移した後、他方のCPUがSLEEP命令を実行した後にソフトウェアスタンバイ状態に遷移するかが自動的に選択することによって、プログラムを作成する場合に、相互の動作状態を確認する必要がなく、プログラムの作成効率を向上することができる。
(5)IOP0〜IOP11をビット単位で、いずれのCPU1,2が利用するかを指定するレジスタDRを設けることにより、1本の入出力ポートを2つのCPU1,2で利用することができ、資源の利用効率をより向上することができる。
(6)割込を、いずれのCPU1,2に要求するかを指定するレジスタを割込許可回路に設けることにより、入出力回路を2つのCPU1,2で任意に配分して利用することができ、資源の利用効率をより向上することができる。
(7)一方のCPUを、主に割込によるデータ転送を行うことに使用することにより、割込時の種々の処理を容易に行うことができる。
(8)ROM1,2をPROMで構成した場合、PROMモード時にはROM1とROM2を連続したアドレスに配置することにより、ROM1とROM2を1つのPROMと互換性を持たせ、PROM書込みを効率化することができる。
(9)1つの物理的アドレスに対応して、CPU1,2毎に異なる論理的アドレスを有する場合、または異なるCPU1,2の1つの論理的アドレスに対応して、異なる物理的アドレスを有する場合に、いずれの論理アドレスを使用するかを選択する制御信号を与えることによって、CPU1,2によってアドレスが与えられ、かつデータの入出力が行われるべき複数の内部バスに、外部から内蔵の機能ブロックをリード/ライトするためのアドレスデータなどを前記内部バスより少ないバッファ回路を介して供給可能にして、この機能ブロックに必要なデータのリード/ライトを外部から直接行うことができるようにし、このシングルチップマイクロコンピュータに内蔵される機能ブロックのテストの容易化、ならびにテスティング効率の向上を実現できる。
(10)CPU1とCPU2の互換性を持たせることにより、開発効率を向上することができ、またサポートツールを共通化することを可能にし、開発装置の開発効率を向上することができる。これにより、使用者が必要とする開発装置の数を低減し、開発装置に必要な費用を低減することができる。
(11)このシングルチップマイクロコンピュータのエミュレータにおいては、2つのCPU1,2を独立に停止する割込を有することにより、デバック効率を向上することができる。
また、本実施例においては、図15に示すように、図1のシングルチップマイクロコンピュータに対して、ダイレクトメモリアクセスコントローラ(DMAC)がCPU1と同様にIAB1,IDB1に接続されて追加されることにより、CPU1とDMACを、バスコントローラのバス権調停に基づいて互いに排他的に動作させることができる。
すなわち、DMACは、起動要因として、CPU1が所定の制御ビットを“1”にセットすることによって、データ転送を行うオートリクエストや、DMA要求端子に所定の信号が与えられたときに、データ転送を行う外部リクエスト機能を持ち、また転送モードとして、オートリクエストのとき、CPU1を停止してバスを専有してデータ転送を行うバーストモードや、1回の転送毎にバス権を解放してCPU1と交互に動作しつつ、データ転送を行うサイクルスチールモードを持つことにより可能となる。
また、割込要求信号を起動要求信号として、データ転送を行うことができ、CPU2が割込でデータ転送を行うより高速のデータ転送が可能である。
さらに、バス調停は、リード/ライトの競合時に行うほか、時分割で動作するようにしてもよい。たとえば、8ステート毎にCPU1およびCPU2にバス権を与える。また、8ステート間にバスが終了しなかった場合には、終了するまで動作する。たとえば、CPU1には4ステート、CPU2には12ステートずつバス権を与えてもよい。
(実施例2)
図16は本発明の他の実施例であるシングルチップマイクロコンピュータを示すブロック図、図17は本実施例のシングルチップマイクロコンピュータにおけるバスの動作タイミング図である。
本実施例のシングルチップマイクロコンピュータは、実施例1に対して、IAB1とIAB2、IDB1とIDB2が共通化されてIAB/IDBとされ、データバス幅を32ビットとし、同様にROM1とROM2、RAM1とRAM2が共通化されてリードオンリメモリ(ROM:読み出し可能な記憶手段)/ランダムアクセスメモリ(RAM)とされ、これらは32ビット同時にリード/ライト可能にしている。
また、CPU1(第1のデータ処理装置)およびCPU2(第2のデータ処理装置)は時分割で、内部アドレスバス(IAB)/内部データバス(IDB)を利用して、ROM/RAMをリード/ライトする。前記の通り、これらのCPU1/2の命令は16ビット単位であり、最小命令を1ステートで実行する。
すなわち、1つのCPU1/2に対して、命令については16ビットを1ステートでリードして、命令リード量と命令実行量が同等となる。32ビットで命令をリードすれば、命令リードの回数を半分にして、IAB/IDBおよびROM/RAMの使用頻度を1/2とすることができる。従って、CPU1およびCPU2が交互にIAB/IDBを利用してROMから命令を読み出すことができ、並列に実行可能とすることができる。
実際には、分岐命令などのように32ビットで命令をリードしても、16ビットが無駄になってしまったり、データアクセスのときには使用頻度を減らせなっかたりして完全な並列動作はできないが、前記の通り命令のリード回数が多く、本実施例によっても、実施例1に対して処理速度をそれほど低下させることがない。また、ROM/RAMを共通化することによって、物理的規模を低下させたり、CPU1/2の使用するメモリ容量を任意に設定したりすることができる。
次に、図17により内部バスの動作タイミングの一例を説明する。
なお、CPU1/2のプログラムは図6と同様であり、バスの使用権は、前回バスを使用していたCPU1/2が非優先とされ、そのほかの場合にはCPU2を優先するものとする。
たとえば、IAB1/2は、φ#に同期して出力され、またCPU1/2のROMおよびRAMに対するリードは、32ビット一括して1ステートで行われる。ただし、これは4の倍数番地から始まる32ビットデータに限定される。
まず、IAB1/2はφ#に同期して、1ステート出力され、特に制限はされないものの、ROMおよびRAMの中でφに同期してラッチされる。これに対応するリードデータはφ#に同期して出力され、φ#が活性状態の期間にCPU1/2に取り込まれる。
また、前記同様に、RAMPに対するリード/ライトは2ステート、I/Oに対するリード/ライトは3ステートで行われる。φ#に同期したIAB1/2は、バスコントローラでφに同期化される。この場合に、先頭命令の存在するアドレスm、nは4の倍数番地とされる。
T1では、CPU1/2のROMからの命令フェッチが要求されるが、CPU2の命令フェッチが優先され、IABにアドレスmが出力される。
T2では、ROMからIDBに読み出された命令コード(BCLR命令の第1、第2ワード)をCPU2が取り込むとともに、CPU1の命令フェッチのアドレスnがIABに出力される。
T3では、ROMからIDBに読み出された命令コード(CMP、BEQ命令)をCPU1が取り込むとともに、CPU2はアドレスSSRをIABに出力する。自動的に、CPU2のPAB/PDBの使用が許可される。この場合に、SCIのリードが3ステート必要であるため、CPU2待機信号がハイレベルになる。
T4では、IABの内容がPABに出力されて、SCIのレジスタSSRの内容がリードされる。このリードデータはT6で得られる。一方、CPU1が命令フェッチを要求するが、CPU2がバスを使用中であるので、保留とされ、CPU1待機信号がハイレベルになる。
T5では、CPU1/2ともに待機状態とされる。
T6では、SCIのレジスタSSRから読み出されたデータをPDB、IDBを介してCPU2が取り込む。また、CPU2は次の命令フェッチを要求するが、CPU1の命令フェッチが優先され、CPU1待機信号がロウレベルとなり、CPU2待機信号ハイレベルのままである。この場合に、CPU1の命令フェッチのアドレスn+4をIABに出力する。
T7では、ROMからIDBに読み出された命令コード(BTST命令の第1ワード)をCPU1が取り込む。この場合に、CPU1は分岐先命令のフェッチを要求するが、CPU2の命令フェッチが優先され、CPU2待機信号がロウレベルとなり、CPU1待機信号ハイレベルになる。
T8では、ROMからIDBに読み出された次の命令コードをCPU2が取り込む。この場合に、CPU1待機信号がロウレベルとなり、CPU1の命令フェッチのアドレスN1をIABに出力する。
T9では、ROMからIDBに読み出された命令コードをCPU1が取り込むが、これは分岐条件が不成立で実行されない。先にフェッチ済みのBTST命令の第1ワードが有効になる。この場合に、CPU1は次の命令フェッチを要求するが、CPU2が優先され、CPU1待機信号ハイレベルになる。
一方、CPU2はアドレスSSRをIABに出力する。自動的に、CPU2のPAB/PDBの使用が許可される。ここで、SCIのリードが3ステート必要であるため、CPU2待機信号がハイレベルになる。
T10では、IABの内容がPABに出力され、CPU2はアドレスSSRにライトすべきデータをIDB経由PDBに出力する。ここで、CPU1は待機状態とされる。
T11では、CPU2待機信号がロウレベルになる。
T12では、CPU1待機信号がロウレベルとなり、CPU1の命令フェッチのアドレスn+6をIABに出力する。
T13では、ROMからIDBに読み出された命令コード(BTST命令の第2ワード)をCPU1が取り込む。この場合に、CPU1はアドレスPORTのリードを要求し、CPU2はROMからの命令フェッチを要求するが、CPU2が優先され、CPU1待機信号ハイレベルになる。ここで、IABにCPU2の命令フェッチのアドレスm+8が出力される。
T14では、ROMからIDBに読み出された次の命令コードをCPU2が取り込む。この場合に、CPU1はアドレスPORTをIABに出力する。ここで、入出力ポートのリードが3ステート必要であるため、CPU1待機信号が再度ハイレベルとなる。
T15では、IABの内容がPABに出力されて、入出力ポートのレジスタPORTの内容がリードされる。このリードデータはT17で得られる。一方、CPU2が命令フェッチを要求するが、CPU1がバスを使用中であるので、保留とされ、CPU2待機信号がハイレベルになる。
以上のように、本実施例においては、図6の実施例1に比較して、実行時間が長くなっているが、少なくとも1つのCPU1/2で実現する場合よりも短くできる。
まず、割込やサブルーチン分岐などでCPU1/2の内部状態を退避したり、復帰したりする作業を除くことができる。また、2つのCPU1/2を単純に交互に動作するよりも短くできる。これは、ROMからCPU1/2が単位時間に実行できるより大きい量の命令を単位時間にリード可能にし、バスを使用しないでよい時間を作り、これを他方のCPU1/2が利用可能としているためである。
これは、内蔵のROMにプログラムを配置する場合に特に有効であり、CPUがリード/ライトする大部分が命令のリードであることと、内部のメモリは外部のメモリに対して読み出し速度を向上しやすいこと、バスの幅を容易に広げられるためである。
このとき、CPU2は、前記DMACやDTCのようなデータ処理装置またはデータ転送装置であっても、同様にCPU1の処理速度を低下することを最小限として、データ転送を行うことができる。特に、データ転送に先立って転送情報をRAMから読み出す必要がある前記DTCに特に有効である。
従って、本実施例のシングルチップマイクロコンピュータによれば、データ処理装置としてのCPU1,CPU2、読み出し可能な記憶手段としてのROMを主要な構成とし、IAB/IDB、ROM/RAMを共通化することにより、実施例1に加えて以下の作用効果を得ることができる。
すなわち、CPU1/2が単位時間に実行できる命令のバイト数より、大きなバイト数を単位時間でリード可能なIAB/IDBに、複数のCPU1/2を接続することにより、複数のCPU1/2が時分割的にIAB/IDBを利用して実質的に並立動作を可能にし、また共通のROM/RAMを任意に配分して利用し、シングルチップマイクロコンピュータの処理速度を向上し、資源利用効率を向上することができる。
以上、本発明者によってなされた発明を実施例1および2に基づき具体的に説明したが、本発明は前記実施例に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
たとえば、バスの具体的な回路構成についても種々変更可能であり、IAB1、IDB1とPAB、PDBを直結してもよい。この場合には、CPU1とCPU2が並立的にプログラムを読み出して実行できるようにすればよく、これによって相互に動作を制約する頻度が高くなるが、物理的規模を縮小できる場合がある。
また、RAM1、RAM2、RAMPを1つの機能ブロックとしてもよい。
さらに、CPUの数も3個以上にすることができ、この場合には複数のCPUを第1のバスに接続して、バスを時分割で利用し、さらに別の単数または複数のCPUを第2のバスに接続してもよい。
また、内蔵のROMはマスクROM、PROMの他、EEPROM、フラッシュメモリなどのCPUが実行すべきプログラムを格納するメモリであればよい。このROM1とROM2が異なっていてもよい。
さらに、タイマ、SCIなどの割込を要求する機能ブロックあるいはパルス出力回路などの割込処理の対象となる機能ブロックの種類、機能、数などには何等制約されない。
以上の説明では、主として本発明者によってなされた発明をその利用分野であるシングルチップマイクロコンピュータに適用した場合について説明したが、これに限定されるものではなく、その他の半導体集積回路装置にも適用可能であり、本発明は、少なくとも複数のデータ処理装置を内蔵した半導体集積回路装置に適用することができる。