(実施の形態1)
図1は、本実施の形態に係るマイクロコンピュータの一部分の構成を示すブロック図である。尚、図1に於いては、後述するアライナ11の記載を省略している。
図1に於いて、メモリ4は、リード/ライト可能な記憶媒体であり、例えばSRAMの様な揮発性メモリ又はフラッシュメモリ(EEPROMの一例)の様な不揮発性メモリから成り、CPU1と同一の半導体チップ上に搭載されている。或いは、メモリ4は、CPU1とは別個の半導体チップ上に搭載されていても良い。或いは、メモリ4は、その実用状態に於いて、例えばUSBメモリの様に、本マイクロコンピュータの外部に存在し、且つ、USB端子の様な接続端子を介して、後述する本マイクロコンピュータのシステムバスに電気的に接続されていても良い。
メモリ4は、(1)命令コード(以下、単に「命令」と言う。)を格納する格納領域4R1と、(2)プログラムの命令実行時に利用されるデータを格納する格納領域4R2と、(3)それら以外のデータ等の信号を格納する格納領域4R3とを、有する。
本実施の形態では、その特徴点の一つとして、命令のエンディアンは、リトルエンディアン又はビッグエンディアンの一方にのみ常に固定されている。従って、CPU1が命令をフェッチするときのみ使用可能な命令バス5のエンディアンもまた、リトルエンディアン又はビッグエンディアンの一方にのみ常に固定されている。尚、本例では、命令のエンディアンは、リトルエンディアンに常に固定されているものとする。
これに対して、格納領域4R2に格納されている命令実行時に使用するデータのエンディアン、従って、CPU1がリード動作又はライト動作を実行する際に用いられるデータバス3のエンディアンは可変であり、リトルエンディアン又はビッグエンディアンの何れかに設定され得る。本実施の形態では、アドレスバス2、データバス3及び命令バス5の転送可能な信号のビット量は、何れも、32ビットである。従って、マルチバイトのバイナリ数値であるデータを転送するバイエンディアン方式に於いて、データバス3は、その各々が8ビット(1バイト)のデータを転送する4組の信号線より構成されている(後述する図3の信号線30〜33に相当。)。尚、アドレスバス2、データバス3、及び命令バス5は物理的に異なるバスとして構成されるだけでなく、物理的に1のバスとして構成され時間的に異なるバスとして機能する(所謂スプリットトランザクションバス等)ものであっても、当該バスとして機能している時間を示すものと理解されるべきである。
図2は、メモリ4の領域4R3に格納されているベクタテーブル6の構成を模式的に示す図である。ベクタテーブル6は、その各々がNビットのサイズを有する複数のベクタアドレス7がまとめて配置されている領域である。即ち、各ベクタアドレス7は、本マイクロコンピュータの起動時のリセット信号の入力、及び、例えばデバッグ処理のプログラムの実行の様な特定の共通に使用される割り込みプログラムの処理を要求する割り込み信号の入力(両者を「割り込み要因」と言う。)に応じて、各割り込み要因に応じて予め決められた、領域4R1内の該当割り込み処理プログラムの格納位置を与えるアドレスである。先ず、起動時に於いて、外部より、リセット信号が入力されると、Nビットのリセットベクタアドレス8がデータバス3を介して読み出されて、リセットベクタアドレス8は、CPU1へ出力される。又、CPUの動作時にCPU1に割り込み信号が入力されると、入力した割り込み信号に対応するベクタアドレス7がデータバス3を介して読み出されて、CPU1へ出力される。本実施の形態の一例では、リセットベクタアドレス8を含む各ベクタアドレス7のビット単位でのサイズNは、32に設定されている(N=32)。尚、このリセット時にCPU1より与えられるエンディアン信号のレベルにより、データバス3のエンディアンは切り替えられる。即ち、パワーオンリセット時に専用のモード端子の状態及び汎用I/Oポート(外部端子)と兼用のモード端子の状態をマイクロコンピュータに取り込んで、例えばレジスタにラッチし、データがリトルエンディアンかビッグエンディアンのいずれであるかをCPU1がベクタアドレスをアクセスする前に確定できるようにしている。
ここで、ベクタテーブル6は、命令及びデータを格納するメモリ(第1メモリ)4とは別個のリード/ライト可能なROM(第2メモリ)の記憶領域内に格納されていても良い。本実施の形態の一例では、メモリ4の記憶領域の内で命令及びデータを格納する領域4R1,4R2が「第1メモリ」に該当しており、ベクタテーブル6を格納する領域4R3が「第2メモリ」に該当しているとも、定義し得る。
尚、図1に記載のメモリ4をRAM(第1メモリ)で構成するときには、RAM4とは別個に、本マイクロコンピュータ内の半導体チップ上に搭載された第2メモリとして、又は、外部の第2メモリ(USBメモリ等)として、ベクタテーブル6を格納するリード/ライト可能なROMを設けることとなる。
図7は、メモリの概略構成を示す図である。複数のメモリセルがアレイ状に配置され、夫々のメモリセルが対応するワード線とビット線とに接続される。一般的にメモリはCPU等から供給されるアクセスアドレスに基づき、Xデコーダが所定のワード線を活性化し、当該ワード線に接続されるメモリセルに格納されるデータをYデコーダがビット線を介して読み出す。例えばアクセスアドレスとしてアドレス0を供給された場合は第0ワード線が活性化されるメモリであれば、第0ワード線の第0ビット線からアクセスすべきバイト数のデータがCPUに供給される。即ち、アクセスアドレスとしてXが供給された場合、第Yワード線(Y=X'/l,X'はX×8であるXのビット表現,lはワード線当りのメモリセル数)が活性化され、第Zビット線(Z=X' mod l,modは剰余演算)からデータが読み出される。
図3は、バイエンディアン方式に於いて、CPU1がデータのリード動作又はライト動作を行う際の信号配線関係を模式的に示すブロック図である。CPU1内に配置されているレジスタ(データレジスタであり、主として汎用レジスタが用いられる。)9は、バイト単位で、4個の番地0,1,2,3で与えられる記憶領域90,91,92,93を有している。他方、メモリ4の記憶領域4R2のメモリセルアレイは、バイト単位で、それぞれ番地0,1,2,3で与えられる4個の記憶領域10A,10B,10C,10Dを一組とする格納領域10が行方向及び列方向にアライメントされて成る。又、アライナ11は、CPU1より出力される制御信号CNT1に応じて、そのオン/オフ動作を切り替えられる各スイッチより成るスイッチ群(図示せず。)より構成されている。そして、アライナ11は、格納領域10の各番地10A〜10Dに、対応するビット線を通じて接続された各信号線(データバス3の各ライン)30〜33と、レジスタ9の各番地90〜93に接続された信号線とを、データないしはデータバス3のエンディアンの種類に対応して連結させる機能を呈する。図4は、32ビットデータアクセスの場合に於ける、CPU1内のレジスタの各番地とメモリ内の格納領域の各番地との接続関係を模式的に示すブロック図である。レジスタ9の0番地90側をLSB、3番地93側をMSBとし、メモリ4の0番地10A側をLSB、3番地10D側をMSBとすると、アライナ11はデータがリトルエンディアンである場合の接続関係を示している。
ここで、CPU1は、32ビットのデータをメモリ4の格納領域10(アクセスアドレスX)に記憶する場合には、予め、次の通りに32ビットデータが各番地10A〜10Dに記憶される様に、メモリ4の領域4R2のアドレスを規定している。即ち、図5に示す様に、(1)データがリトルエンディアンで記憶されるときには、レジスタに格納されているデータのLSB側を+0のバイトオーダとし、MSB側を+3のバイトオーダとするようにデータのバイトオーダを決定する。またメモリの格納先アドレスにおいて同様に+0〜+3のバイトオーダを決定し、レジスタに格納されているデータのバイトオーダとメモリの格納先アドレスに対して決定したバイトオーダとが一致するようにデータを格納する。他方、(2)データがビッグエンディアンで記憶されるときには、レジスタに格納されているデータのMSB側を+0のバイトオーダとし、LSB側を+3のバイトオーダとするようにデータのバイトオーダを決定し、メモリの格納先アドレスにおいてもバイトオーダを決定して、データをメモリに格納する。メモリの格納先アドレスに対して決定した+0〜+3の夫々のバイトオーダが各番地10A〜10Dに対応する。
今、起動時に於いて外部よりリセット信号が入力されて、CPU1が、オペランドアクセスすることによって、図2に示す32ビットのリセットベクタアドレス8を取得したものとする。この32ビットのリセットベクタアドレス8は、メモリ4の領域4R1に格納された命令のアドレスを与える。又、割り込み信号がCPU1に入力されたときも、CPU1は、自動的にオペランドアクセスして、32ビットのベクタアドレス7を取得する。その上で、CPU1は、リセットベクタアドレス8又は割り込み要因に応じたベクタアドレス7に基づいて、命令のフェッチ動作を行い、フェッチした命令をデコードした上で、命令の実行へと、その動作を移す。その際、リセットベクタアドレス8及びベクタアドレス7と同じデータサイズの32ビットデータをメモリから取得する場合と、ベクタアドレスとは異なるデータサイズの16ビットデータをメモリから取得する場合とを、以下に記載する。
図5は、データの転送に際して、どのようにデータアライメントの変更が行われるかを示す。アドレス0の矢印が示す箇所をメモリの4バイト境界(第32nビット線)に対応させ、32ビット分(第32(n+1)−1ビット線まで)のメモリセルに32ビットのデータは格納される。係るデータの格納状態に対して、アライナは当該データのエンディアンに応じてバイトオーダを割付け、レジスタに転送をする。夫々のエンディアンにおいてメモリに格納されているバイトオーダとレジスタに格納する際のバイトオーダとを一致させるように格納することから、4バイト転送時にはエンディアンに関わらずレジスタに格納されたデータ順序は一致する。
又、16ビットデータ転送を行う場合においては、データアライメントの変更は次のようになる。メモリの4バイト境界から32ビット分のデータに対してアライナが当該データのエンディアンに応じてバイトオーダを割付ける。夫々のエンディアンの+0/+1のバイトオーダに当たるデータをレジスタのLSBから順に格納する。図に示すように、リトルエンディアンではアライナが割付けたバイトオーダの+0がレジスタのLSBに当たることから、メモリに格納されている2バイトのデータとレジスタに格納される2バイトのデータとが一致する。一方でビッグエンディアンではアライナが割付けたバイトオーダの+0はレジスタのMSBに当たることから、4バイト転送時にはレジスタのMSB側に格納される2バイトのデータがレジスタのLSB側に格納される。なお、レジスタのMSB側2バイトに格納される”**”は、'0'又は'1'若しくはデータの符号ビットが拡張して格納されることを示す。
以上の記述は、CPU1が8ビットデータアクセスする場合に於いても、妥当する。
尚、上記の一例の動作記載に於いては、データのリード動作が中心に記載されているが、既述した本実施の形態の特徴点をデータのライト動作に於いても、レジスタに格納されているデータのバイトオーダとメモリに格納する際にアライナが割付けるバイトオーダとを同様に対応させることで適用可能である。
以上の通り、データ処理装置の構成として本実施の形態の構成を採用する場合には、ベクタアドレス及びベクタアドレスと同じサイズのデータの転送においては、データのエンディアンの種類に依存すること無く、同一のアドレス及び同一のデータアライメントに於いてデータをメモリに対してリード/ライトすることが出来、その際に共通のプログラムを実行することが出来ると共に、ベクタテーブルを共通化することが可能となる。
(実施の形態2)
本実施の形態の特徴点は、実施の形態1に係るバイエンディアン方式のマイクロコンピュータに於いて、CPU周辺の各I/O装置とCPU間のデータバスを、リトルエンディアン専用のデータバスとビッグエンディアン専用のデータバスとに分離した点にある。
図6は、本実施の形態の特徴点を模式的に示すブロック図である。図6に示す様に、CPU1と、CPU1の周辺I/O装置との間のデータの転送を行うデータバスは、ビッグエンディアン専用のデータバス14と、リトルエンディアン専用のデータバス17とが設けられている。そして、各ビッグエンディアン専用の周辺I/O装置15,16は、個々の信号線を介して、ビッグエンディアン用データバス14に接続されており、他方で、各リトルエンディアン専用の周辺I/O装置18,19は、個々の信号線を介して、リトルエンディアン用データバス17に接続されている。各周辺I/O装置としては、例えば、割り込み制御回路(INTC)又はダイレクトメモリアクセスコントローラ(DMAC)又はシリアルコミュニケーションインターフェース(SCI)等がある。
CPU1は、CPU1と、CPU1の周辺I/O装置15〜19との間で転送し合うデータを、I/Oレジスタ12に格納している。このI/Oレジスタ12に格納されているデータのエンディアンは、リトルエンディアン及びビッグエンディアンの何れか一方である。アライナ13は、CPU1が出力する制御信号CNT2による制御の下で、I/Oレジスタ12に格納されているデータのエンディアンの種類に応じて、I/Oレジスタ12内の当該データのバイトオーダを、ビッグエンディアン用データバス14及びリトルエンディアン用データバス17の内の該当するデータバスに割付けられるバイトオーダに一致させるように接続する。周辺I/O装置内のレジスタ及びメモリ等がどのアドレス範囲にあるかによって、リトルエンディアンかビックエンディアンであるかが分る様にされている。即ち、CPU1がアクセスするアドレスをデコードすることによって、制御信号CNT2の状態が決定される様にしている。
以上の構成を採用するときには、周辺I/O装置とCPUとの間で転送されるデータのエンディアンが固定化され、周辺I/O装置へのアクセス処理に於いては、エンディアンの種類如何に拘らず、共通のプログラムを使用することが可能となる。即ち、アライナ13によってデータのバイトオーダが夫々の周辺I/O装置にとって適合するようにされることから、ビッグエンディアン用周辺I/O装置とリトルエンディアン用周辺I/O装置との両方を用いてデータの処理を行う場合であっても、CPUが実行するプログラムにおいてデータのエンディアン変換を行う等の周辺I/O装置のデータのエンディアンを考慮した処理が不要とできる。更には、1の半導体基板上に複数のデータ処理モジュール(所謂機能IPと呼ばれ、図6の周辺I/O装置に相当)を有するデータ処理装置において、データ処理モジュール自体のデータのエンディアンに応じてバスを分離しアライナを介してCPUと接続されるように構成することにより、データ処理装置の構成においてデータのエンディアンが一致するようにデータ処理モジュールを選択し若しくはデータ処理装置のCPUが実行するプログラムでデータ処理モジュールごとにデータのエンディアンを変換する等の、データ処理装置を構成する際のハードウェア/ソフトウェアに対する負担を軽減することが可能となる。
(実施の形態3)
図8は、マイクロコンピュータMCUの一例の概略を示すブロック図である。
中央処理装置(以下、CPUという。)1は不揮発性メモリROMや揮発性メモリRAM等に格納されている命令をフェッチし実行することで、マイクロコンピュータMCU全体としての処理制御を行う。ダイレクトメモリアクセスコントローラDMACは外部メモリEMEM等とメモリ4(不揮発性メモリROMや揮発性メモリRAM等から構成される。)間、又はメモリ4と周辺回路群(IP1,IP2)との間のデータ転送制御を行う。バスコントローラBSCはCPU1その他の機能ブロックがバスを介してデータ転送等を行う際に、バス権の付与等の制御を行う。割込みコントローラINTCはマイクロコンピュータMCU内部又は外部で発生する割込みを受付け、CPU1に通知等の制御を行う。周辺回路群(IP1,IP2)は、マイクロコンピュータMCUの外部に接続される別の半導体集積回路装置との通信を行う通信IF(InterFace)系(シリアルIO(Input/Output)、パラレルIO等)、専用データ処理系(画像処理ブロック、暗号処理ブロック等)などである。外部バスインタフェースBIFはマイクロコンピュータMCUの外部に接続されるバスを介して外部メモリEMEM等に接続される。
図9はCPU1内の概略を示すブロック図、図10はCPU1のメモリアクセス関係を示す図、図11はCPU1で割付けたメモリ4のアドレス空間を示す図である。図11において、アドレスの右側の「H」は、16進法でアドレスが表記されていることを示している。なお、図11では、各領域の先頭アドレスのみのアドレスが表記されている。
図8のCPU1が他の機能ブロックと接続されるバスは、図10に示す32ビット長のアドレスバス2、32ビット長のデータバス3、32ビット長の命令バス5から構成される。他のバス構成としては、アドレスとデータ及び命令とが、バス信号線上で、時分割で情報のやり取りを行うスプリットトランザクションバスの構成であっても良い。また、データと命令とが並列にアクセスされない様なアーキテクチャの場合には、データバス3及び命令バス5は、分離されたものではなく、同一のバスで構成されたものであってもよい。さらに、データバス3及び命令バス5は64ビット長であってもよい。
CPU1が命令フェッチを行う場合、32ビット長のプログラムカウンタPCに格納されているフェッチすべき命令のアドレスをアドレスバス2に出力し、アドレスバス2を介して当該アドレスを受信したメモリ4が当該アドレスに対応するバイナリ情報を命令バス5に対して出力する。CPU1は命令バス5から受信したバイナリ情報を実行すべき命令として命令レジスタIRに格納し、命令デコーダiDECで命令をデコードし、デコードした結果に応じた制御信号が算術論理ユニットALU、乗算器MLT、除算器DIV、シフト演算器SHFT、浮動小数点演算器等の演算器に出力され、演算器でレジスタ群REG(汎用レジスタや専用レジスタ)やメモリ4等に格納されているデータに対して該当する演算を実行する。
また、CPU1が割込みコントローラINTCから割込み通知を受信した場合、CPU1は受信した割込み通知に対応する割込み処理を行うために、メモリ4の割込みベクタテーブル領域(図11のアドレスFFFFFD00H〜FFFFFDFFH)のアドレスのうち受信した割込み通知に対応するアドレスをアドレスバス2に出力し、メモリ4が当該アドレスに対応するバイナリ情報をデータバス3に対して出力する。CPU1はデータバス3から受信したバイナリ情報を割込み処理ルーチンの格納されているアドレス(ベクタアドレスという。)としてプログラムカウンタPCに設定し、割込み処理ルーチンの命令を実行するために分岐を行う。ここで、ベクタアドレスは32ビット(4バイト)長である。なお、割り込みコントローラINTCからの割込み通知以外による例外処理(例えば、特権命令例外処理、未定義命令例外処理など)のためのベクタアドレスも割込みベクタテーブル領域に格納されているものとする。
なお、リセットベクタ領域(図11のアドレスFFFFFE00H)は、マイクロコンピュータMCUが電源投入されまたは外部からリセット信号を入力された場合に、リセット期間終了直後に実行すべきプログラムを格納したアドレス(例えば、ブート命令領域の先頭アドレス0000H)を格納した領域である。割込み処理とリセット処理とは起因が割込みであるかリセットであるかの相違はあるものの、分岐するアドレスの取得においては大凡同じである。
ブート命令領域、第1プログラム領域、第2プログラム領域及び割込み処理ルーチン領域等のプログラム領域に格納される命令のエンディアンは、リトルエンディアン又はビッグエンディアンのいずれかに固定されている。また、リセットベクタ領域及び割込みベクタテーブル等のベクタ領域のデータのエンディアンも、リトルエンディアン又はビッグエンディアンのいずれかに固定されている。これらのエンディアンの固定は、マイクロコンピュータの製造時に固定してもよく、遅くともパワーオンリセット後ベクタ領域をアクセスする前までに固定されていればよい。後者の場合は、パワーオンリセット時に専用のモード端子や汎用I/Oポート(外部端子)と兼用のモード端子の状態をマイクロコンピュータに取り込んで、例えばレジスタにラッチし、データがリトルエンディアンかビッグエンディアンのいずれであるかをCPU1がベクタアドレスをアクセスする前に確定できるようにすればよい。
第1プログラムは、メモリ4のアドレス1000H〜1FFFHの範囲の領域に格納されている。第2プログラムは、メモリ4のアドレス3000H〜3FFFHの範囲の領域に格納されている。第1プログラムと第2プログラムとは、夫々、第1データ領域(アドレス2000H〜2FFFH)及び第2データ領域(アドレス4000H〜4FFFH)とを有している。第1プログラムは第1データ領域のデータのエンディアンをリトルエンディアンとしてデータ処理をし、第2プログラムは第2データ領域のデータのエンディアンをビッグエンディアンとしてデータ処理をする。例えば第1プログラムがリトルエンディアンでデータ処理をする周辺回路が生成したデータを処理するプログラムで、第2プログラムがビッグエンディアンでデータ処理をする周辺回路が生成したデータを処理するプログラムである場合などが該当する。
CPU1のアドレス空間のアドレス範囲によって、予めリトルエンディアン又はビッグエンディアンのどちらのデータを処理するかが決まっている。なお、アドレス範囲によって、リトルエンディアン又はビッグエンディアンのどちらのデータを処理するかをCPUによってレジスタに設定できるようにしてもよい。また、リセット解除後、内蔵の不揮発性メモリに予め格納されたデータが自動的にレジスタに転送されることによってリトルエンディアン又はビッグエンディアンのどちらのデータを処理するかを設定できるようにしてもよい。
CPU1が第1プログラムを実行している間に割込みコントローラINTCからの割込み通知が発生した場合、割込みベクタテーブル領域(アドレスFFFFFD00H〜FFFFFDFFH)へのアクセスは、予め固定されたエンディアンでアクセスを行う。
一方で、CPU1が第2プログラムを実行している間に割込み通知が発生した場合は、割込みベクタテーブル領域へのアクセスは、予め固定されたエンディアンでアクセスを行う。
図12はメモリ4とCPU1のレジスタ9間でデータを転送する際のアクセス関係示す図であり、図13はアライナ11の一例を示す図である。
メモリ4からレジスタ9(レジスタ群REGのうちの一つのレジスタ)へデータ転送をする場合において、転送すべきデータがメモリ4の10A乃至10Dに示す領域に格納されている場合、相対的なアドレス変位0番地のデータ(10A)はデータバス3のうちの付番30で示す8bitの部分バスに出力される。以下同様にアドレス変位1番地〜3番地のデータ(10B〜10D)は付番31,32,33で示す8bitの部分バスに出力される。付番30〜33で示す夫々の部分バスに出力されたデータは、レジスタの相対的なアドレス変位0番地〜3番地のどの8bitの部分領域に格納されるかが、制御信号CNT1の状態に応じてアライナ11により決定される。制御信号CNT1は、リトルエンディアン又はビッグエンディアン、メモリ4へのアクセスサイズ、アクセスバイトアドレス等の情報によって、生成される信号である。
最初に、メモリ4からレジスタへのデータ転送をリセットベクタアドレスや割込みベクタアドレス等のベクタアドレス(以下、割込みベクタアドレスという。)のサイズである4バイトでアクセスをする場合について説明をする。この場合、アライナ11は図14に示すような接続状態となるように設定される。図14は、4バイトでのアクセスの場合に於ける、CPU内のレジスタの各番地とメモリ4内の格納領域の各番地との接続関係を模式的に示すブロック図である。レジスタ9の0番地90側をLSB、3番地93側をMSBとし、メモリ4の0番地10A側をLSB、3番地10D側をMSBとすると、アライナ11はメモリ4内のデータとCPU1内のデータとのエンディアンが同一である場合の接続関係を示している。すなわち、CPU1内のデータのエンディアンがリトルエンディアンである場合、メモリ4内のデータのエンディアンがリトルエンディアンであることを示している。以下、一例として、CPU1内のデータのエンディアンがリトルエンディアンである場合について、記載する。
図13において、第1データ領域のデータ(リトルエンディアンのデータ)に4バイトアクセスをした場合、部分バス[0:7](データバス30)、[8:15](データバス31)、[16:23](データバス32)、[24:31](データバス33)に接続される4バイトのデータが出力され、部分バス[24:31]に出力されるデータをレジスタのMSB側となるようにレジスタ9のアドレス変位0番地(90)、1番地(91)、2番地(92)、3番地(93)に格納される。一方で第2データ領域のデータ(ビッグエンディアンのデータ)にアクセスをした場合、部分バス[24:31]に出力されるデータをレジスタのMSB側となるように、部分バス[0:7]、[8:15]、[16:23]、[24:31]に接続される夫々のデータがレジスタ9のアドレス変位0番地、1番地、2番地、3番地に格納される。すなわち第1データ領域又は第2データ領域のどちらのデータをアクセスしている際においても、割込みベクタアドレスサイズでのアクセスにおいては、CPU1内のレジスタ9に格納される順番が一致するように、アライナ11のセレクタ1〜4が設定される。セレクタ1〜4はそれぞれ4個の双方向性スイッチで構成され、双方性スイッチはCMOSトランスファゲートで構成される。制御信号CNT1をそのまま、あるいはデコードして双方性スイッチを制御するようにされる。
同様に、第1プログラム又は第2プログラムのどちらを実行中に割込み通知が発生したとしても、割込みベクタアドレスへのアクセスでは、割込みベクタアドレスを格納したアドレスの部分バス[0:7]、[8:15]、[16:23]、[24:31]に接続される4バイトのデータが出力され、部分バス[24:31]に出力されるデータをレジスタのMSB側となるようにレジスタのアドレス変位0番地、1番地、2番地、3番地に格納される。
なお、割込みベクタアドレスが格納されるレジスタはプログラムカウンタPCであり、プログラムカウンタPCに格納されるアドレスが更新されることにより割込み処理ルーチンへ分岐することとなる。
斯かる分岐動作は割込み通知発生時の割込み処理ルーチンへの分岐だけでなく、アドレス修飾分岐命令等のアドレス修飾がなされる命令の実行でも同様である。
アドレス修飾分岐命令としては、例えば、
jmp @#adr (1)
jmp @Rn (2)
のように、命令が記述される。命令の記述に含まれる“@”はアドレス修飾が行われることを示し、“#”は続くバイナリ情報を数値情報として認識し、Rnはレジスタ番号を指定することを示す。
命令(1)では、adrで示されるメモリ4のアドレスに分岐先アドレスが格納されており、当該命令の実行では、アドレスadrにアクセスをして分岐先アドレスを割込みベクタアドレスと同じサイズで取得し、プログラムカウンタPCに転送される。プログラムカウンタPCに格納されるアドレスが分岐先アドレスに更新されることにより、命令の実行分岐をすることができる。命令(2)では、命令(1)でのアドレスadrがレジスタに格納されており、レジスタRnにアクセスをしてアドレスadrを取得する。その後の動作は命令(1)と同じである。
次に、メモリ4からレジスタへのデータ転送を、割込みベクタアドレスサイズの半分である2バイトで行う場合、及び1バイトで行う場合について記載する。メモリ4からのデータ転送を2バイト又は1バイトで行う場合であっても、メモリ4から4バイトでデータ読出しを行った後、読み出し対象とする2バイト又は1バイトをレジスタに転送する。
第1データ領域のアドレス2000Hから2バイトのデータ転送を指定した場合、アドレス2000Hを先頭として読み出した4バイトデータのうちの部分バス [24:31]と [16:23]に接続されるデータに対して、セレクタ3は部分バス [24:31]をレジスタ9のレジスタ内変位1番地に接続し、セレクタ4は部分バス [16:23]をレジスタ内変位0番地に接続する。この場合、セレクタ1及び2は部分バス[0:7]、[8:15]に接続されるデータはレジスタに格納しないよう制御される。
また、アドレス2002Hから2バイトのデータ転送を指定した場合、アドレス2000Hを先頭として読み出した4バイトデータのうちの部分バス[8:15]と[0:7]に接続されるデータに対して、セレクタ3は部分バス[24:31]をレジスタ内変位1番地に接続し、セレクタ4は部分バス[16:23]をレジスタ内変位0番地に接続する。この場合は、セレクタ1及び2は部分バス[0:7]、[8:15]に接続されるデータはレジスタに格納しないよう制御される。
一方で、第2データ領域のアドレス4000Hから2バイトのデータ転送を指定した場合、アドレス4000Hを先頭として読み出した4バイトデータのうちの部分バス[0:7]と[8:15]に接続されるデータに対して、セレクタ3は部分バス[0:7]をレジスタ9のレジスタ内変位1番地に接続し、セレクタ4は部分バス[8:15]をレジスタ9のレジスタ内変位0番地に接続する。この場合、セレクタ1及び2は部分バス[0:7]、[8:15]に接続されるデータはレジスタに格納しないよう制御される。
また、アドレス4002Hから2バイトのデータ転送を指定した場合、アドレス4000Hを先頭として読み出した4バイトデータのうちの部分バス[16:23]と[24:31]に接続されるデータに対して、セレクタ3は部分バス[16:23]をレジスタ内変位1番地に接続し、セレクタ4は部分バス[24:31]をレジスタ内変位0番地に接続する。この場合は、セレクタ1及び2は部分バス[0:7]、[8:15]に接続されるデータはレジスタに格納しないよう制御される。
次に、メモリ4からレジスタ9へのデータ転送を、割込みベクタアドレスサイズの4分の1である1バイトで行う場合について記載する。
第1データ領域のアドレス2000Hから1バイトのデータ転送を指定した場合、部分バス[0:7]に接続されるデータが出力され、セレクタ4は部分バス[0:7]をレジスタ内変位0番地に接続する。また、アドレス2001Hから1バイトのデータ転送を指定した場合、部分バス[8:15]に接続されるデータが出力され、セレクタ4は部分バス[8:15]をレジスタ内変位0番地に接続する。また、アドレス2002Hから1バイトのデータ転送を指定した場合、部分バス[16:23]に接続されるデータが出力され、セレクタ4は部分バス[16:23]をレジスタ内変位0番地に接続する。また、アドレス2003Hから1バイトのデータ転送を指定した場合、部分バス[24:31]に接続されるデータが出力され、セレクタ4は部分バス[24:31]をレジスタ内変位0番地に接続する。
一方で、第2データ領域のアドレス4000Hから1バイトのデータ転送を指定した場合、部分バス[24:31]に接続されるデータが出力され、セレクタ4は部分バス[24:31]をレジスタ内変位0番地に接続する。またアドレス4001Hから1バイトのデータ転送を指定した場合、部分バス[16:23]に接続されるデータが出力され、セレクタ4は部分バス[16:23]をレジスタ内変位0番地90に接続する。また、アドレス4002Hから1バイトのデータ転送を指定した場合、部分バス[8:15]に接続されるデータが出力され、セレクタ4は部分バス[8:15]をレジスタ内変位0番地90に接続する。またアドレス4003Hから1バイトのデータ転送を指定した場合、部分バス[0:7]に接続されるデータが出力され、セレクタ4は部分バス[0:7]をレジスタ内変位0番地に接続する。
なお、アライナ11は、CPU1のレジスタ9とデータバス3との間に設けられればよく、例えばCPU1内に設けられてもよい。また、外部バスインタフェースBIF内に外部メモリEMEM用のアライナを設けてもよい。この場合、外部メモリEMEM等の外部デバイスのアドレス空間ごとにビッグエンディアンとリトルエンディアンとの切り替えがCPUによってレジスタで設定可能にしてもよい。
以上、メモリ4からレジスタ9へ種々のサイズのデータ転送する場合について説明したが、レジスタ9からメモリ4へデータ転送する場合も同様である。なお、メモリ4からレジスタ9へデータ転送する場合、データサイズが2バイトと1バイトとのときは、転送されない部分のデータは符号拡張される(0拡張または1拡張をしてもよい。)。一方、レジスタ9からメモリ4へデータ転送する場合、データサイズが2バイトと1バイトのときは、転送されない部分は影響を受けない。
以上、実施の形態3では、メモリ4のデータがリトルエンディアンとビッグエンディアンのどちらのエンディアンとなっているかにかかわらず、割込みベクタアドレスのサイズを単位としてメモリ4へのアクセスを行った際に同じデータ順序でレジスタに格納されるようにされることで、割込み通知受領時点で実行しているプログラムのデータのエンディアンに係らず、割り込みベクタアドレス及び割込み処理プログラム等のプログラムを共通化することが可能となる。
実施の形態3では、メモリのアドレス空間によって、ビッグエンディアンとリトルエンディアンの領域を設定可能にしたが、実施の形態1と同様にマイクロコンピュータに内蔵されているメモリ4については全体をビッグエンディアン又はリトルエンディアンのいずれか一方に設定可能にしてもよい。この場合には、実施の形態3と同様に、パワーオンリセット時に専用のモード端子や汎用I/Oポート(外部端子)と兼用のモード端子の状態をマイクロコンピュータに取り込んで、例えばレジスタにラッチし、データがリトルエンディアンかビッグエンディアンのいずれであるかをCPU1がベクタアドレスをアクセスする前に確定できるようにしてもよい。
(実施の形態4)
図15はエンディアンの異なる周辺機能ブロックを有するマイクロコンピュータの概略を示し、その他の構成は実施の形態3のマイクロコンピュータMCU(図8)と同様である。図15には、CPU1、バスコントローラBSC、バスコントローラBSCに接続されるリトルエンディアンでデータ処理を行うリトルエンディアン用周辺機能ブロック(リトルエンディアン用周辺I/O装置18,19)、及び、バスコントローラBSCに接続されるビッグエンディアンでデータ処理を行うビッグエンディアン用周辺機能ブロック(ビッグエンディアン用周辺I/O装置15,16)が、記載されている。リトルエンディアン用周辺機能ブロックはリトルエンディアン用周辺データバス17を介してバスコントローラ BSC内のアライナ13に接続され、ビッグエンディアン用周辺機能ブロックはビッグエンディアン用周辺データバス14を介してバスコントローラ BSC内のアライナ13に接続される。本構成において、リトルエンディアン用周辺I/O装置19内の転送バッファTBL等、ビッグエンディアン用周辺I/O装置15内の転送バッファTBB等とCPU1のI/Oレジスタ12(レジスタ群REGのうちの一つのレジスタである。レジスタ9と同一のものであってもよい。)は、周辺I/O装置内の転送バッファやレジスタのサイズに関係なく、LSBが共通に接続されるようにバスが接続される。リトルエンディアン用周辺I/O装置18、19かビッグエンディアン用周辺I/O装置15、16かは、それぞれの転送バッファやレジスタに割り付けられているアドレスによって判別できるようになっている。
リトルエンディアン用周辺I/O装置18,19は、外部またはリトルエンディアン用周辺データバス17からリトルエンディアンの並びのデータを受信し、またはデータを処理してリトルエンディアンの並びのデータを生成し、リトルエンディアン用周辺データバス17に出力する。
ビッグエンディアン用周辺I/O装置15,16は、外部またはビッグエンディアン用周辺データバス14からビッグエンディアンの並びのデータを受信し、又はデータを処理してビッグエンディアンの並びのデータを生成し、ビッグエンディアン用周辺データバス14に出力する。
CPU1は、第1プログラムを実行することにより、リトルエンディアン用周辺I/O装置18,19の動作制御を行い、リトルエンディアン用周辺I/O装置18,19へのデータ入出力を制御する。例えば、リトルエンディアン用周辺I/O装置18,19へデータを転送し、処理後のデータをメモリ4へ転送する場合、転送するデータのサイズにあわせて制御信号CNT2にアライナ13の転送設定情報を設定する。ビッグエンディアン用周辺I/O装置15,16でのデータ転送においても、制御信号CNT2の設定は同様である。
アライナ13は、周辺I/O装置内の転送バッファやレジスタのサイズとこれらの転送バッファやレジスタへのアクセスサイズが同じである場合、エンディアンにかかわらず同じデータの並びとなるように構成される。例えば、CPU1がリトルエンディアン用周辺I/O装置19の転送バッファTBLに格納されたデータを、メモリ4の第2データ領域(ビッグエンディアン)に転送をする場合、転送バッファの指定されたアドレスを先頭として割込みベクタアドレスサイズ分のデータを、第2データ領域の指定されたアドレスを先頭として格納する。この場合、転送バッファTBLに格納されたデータは、一旦、CPU1内のレジスタに取り込まれ、その後、メモリ4の第2データ領域に転送される。
また、リトルエンディアン用周辺I/O装置19からビッグエンディアン用周辺I/O装置(15,16)や第2データ領域(ビッグエンディアン)へデータ転送をする場合、リトルエンディアン用周辺I/O装置19が転送バッファにデータを格納する際のLSB側に格納するデータと当該データを処理するCPU1のI/Oレジスタ12やビッグエンディアン用周辺I/O装置16の転送バッファTBBやビッグエンディアン用周辺I/O装置15のレジスタBIREGのLSB側に格納するデータを同じにすることで、周辺I/O装置内の転送バッファやレジスタのサイズとこれらの転送バッファやレジスタへのアクセスサイズが同じである場合にアライナ13でのデータの並びを変更することが不要にできる。
一方で、周辺I/O装置内の転送バッファやレジスタのサイズよりもこれらの転送バッファやレジスタへのアクセスサイズが小さい場合、アライナ13はデータの並びを変更することが必要となる。
CPU1がアライナ13の転送設定情報を設定する制御信号CNT2は、上述の転送するデータのサイズ情報と共に、転送するデータの処理単位に関する情報および転送方向に関する情報も含む。
図16は、アライナ13の構成例を示す。セレクタ1A〜4A及び1B〜4Bはそれぞれ制御信号CNT2が入力され、入出力の方向および部分バス同士の接続を決定する。周辺I/O装置内の転送バッファやレジスタのサイズとこれらの転送バッファやレジスタへのアクセスサイズが同じである場合は、同じビット位置のデータバス (リトルエンディアン用周辺データバス17とビッグエンディアン用周辺データバス14とCPU1/メモリ4用データバス3の部分バス[0:8]) 同士を接続する。
一方で、周辺I/O装置内の転送バッファやレジスタのサイズが2バイトまたは4バイトの場合、リトルエンディアン用周辺データバス17からビッグエンディアン用周辺データバス14へバイト単位に処理するデータを転送するときは、データの並びが逆になるように(例えば、4バイトの場合は、一方の部分バス[0:7]と他方の部分バス[24:31]、一方の部分バス[8:15]と他方の部分バス[16:23])、部分バスが接続される。
なお、セレクタ1A〜4A及び1B〜4Bは、実施の形態3のセレクタ1〜4と同様な双方性スイッチで構成される。
このようにアライナ13を構成することにより、処理するエンディアンに応じて周辺機能ブロックを異なるバスに接続し、アライナ13を介して夫々のバスに接続される周辺機能ブロック間でデータ転送可能とすることが可能となる。
以上、実施の形態4では、周辺機能IPとの間での転送対象となるデータのエンディアン及び周辺機能IPを制御するプログラムでの処理対象のデータのエンディアンによらず同じデータ順序でデータ転送を可能としたことで、周辺機能IPを制御するプログラムの共通化をすることが可能となる。
更に周辺機能ブロックのデータ処理のエンディアンとCPU1のデータ処理のエンディアンの異同にかかわらず、マイクロコンピュータMCUで必要とされる周辺機能ブロックを採用する自由度を向上させることができる。
(実施の形態5)
図17は、実施の形態1,2,3,4及び後述する実施の形態6に係るマイクロコンピュータで実行するプログラムの開発ツールのフロー概略を示す。C言語等の高級言語で記述されたソースプログラムをコンパイラが構文解析等、及び最適化を行ってアセンブリ言語で記述したアセンブリ言語プログラムを出力する。アセンブラはコンパイラから出力されたアセンブリ言語から機械語を生成し機械語プログラムを出力する。1又は複数の機械語プログラムをリンケージエディタで結合(リンク処理)してマイクロコンピュータで実行可能なプログラムが生成される。
コンパイラの出力するアセンブリ言語プログラムは、大きく分けて、マイクロコンピュータのCPU等が実行する命令コードの集合部であるコードセクション(又はコードセグメント)と、高級言語プログラム中に記述した定数やコンパイラが出力した定数等の集合部であるデータセクション(又はデータセグメント)とを有する。コードセクション中の命令コードは、上述したとおり、リトルエンディアン又はビッグエンディアンのいずれか一方に固定される。一方で、データセクション中の定数等は、リトルエンディアン又はビッグエンディアンのいずれか選択可能となるが、高級言語プログラム中にいずれのエンディアンを使用するかの指定命令を有し、当該指定命令に従い、エンディアン解決が行われる。
高級言語又はアセンブリ言語プログラム中に含まれる定数であれば、コンパイラ又はアセンブラによりエンディアン解決が可能であるが、分岐命令の分岐先アドレス等のアドレス参照値はリンケージエディタでのリンク処理時に決定するため、コンパイラ又はアセンブラでのエンディアン解決が出来ない。斯かるアドレスのエンディアン解決は、リンケージエディタにより行われる。
リンケージエディタは1又は複数の機械語プログラムを結合し、結合前の機械語プログラムでは変数名として参照しているアドレス参照値について、リンク後の配置によりアドレス値を決定し、エンディアン解決を行ってアドレス定数として実行プログラムのデータセクション中に格納される。
上述したフローにより生成された実行可能プログラムは、マイクロコンピュータの半導体基板上に構成されるマスクROM又はフラッシュメモリ等に格納され、マイクロコンピュータで実行可能に構成される。
上述した実施の形態3との対応では、データセクションからレジスタへデータ転送を行う際、データ転送サイズに応じてアライナ11の設定を行う制御信号CNT1が出力され、データセクションに格納されているデータの並びが決定される。
また、割込みベクタアドレスを含むアドレス参照値やアドレス定数については、同じデータサイズとなるようにされる。それにより、他の分岐命令やアドレス参照命令の実行において割込みベクタアドレスサイズでのアドレス情報取得では、格納されているデータセクションのエンディアンにかかわらず、適切にアドレス情報を取得することが可能となる。
上述した実施の形態4との対応では、周辺機能ブロック間または周辺機能ブロックとメモリ4やレジスタとの間でデータ転送を行う場合、データ転送サイズと共に当該データの処理単位に応じてアライナ13の設定を行う制御信号CNT2が出力され、データ転送の際のデータの並びが決定される。
(実施の形態6)
以下、マイクロコンピュータMCUでの処理性能の向上、コード効率の向上、及び消費電力の向上について、各々、記載する。尚、コード効率の向上とは、命令を格納するために必要とされるメモリ容量を削減することである。
図18に、マイクロコンピュータMCUの処理性能についての評価項目を記載する。マイクロコンピュータMCUは使用される用途に応じて必要とされる処理性能に幅が生じるが、図18は、所謂デジタル家電などの比較的高度な処理を行う機器に組み込まれて用いられるマイクロコンピュータMCUに求められる処理性能の一例である。
斯かる処理性能を実現するために、図19に示すように、5段パイプライン処理を採用している。パイプライン処理は、一般的に知られている通り、CPU1での命令実行を複数の処理ステージに分割し、各処理ステージをクロックの1サイクルで実行するようにされる。
メモリフェッチステージでは、メモリ4から命令レジスタIRへ命令をフェッチする。デコードステージでは、命令レジスタIRにフェッチした命令をデコードし、続く実行ステージで命令実行する演算器のスケジューリング等を行う。また、デコードステージではNOP命令等の実行が不要な命令についてパイプラインを終了させるためのバイパス処理や、演算に使用するレジスタの内容をフェッチするレジスタフェッチも行われる。
実行ステージでは、デコードステージでスケジューリングした演算器とフェッチしたレジスタの内容とから演算処理やアドレス計算を行う。メモリアクセスステージでは、命令にメモリアクセスが必要なオペランドがある場合にメモリアクセスを行う。
ライトバックステージでは、実行ステージでの演算結果をレジスタ等に格納し、当該命令についてのパイプラインの終了処理を行う。
図20は、マイクロコンピュータMCUのCPU1とメモリ4との間のバス構成を示す。図21に示すように、パイプライン処理を行うことでCPU1での命令実行の各処理ステージを、複数の命令で異なる処理ステージを実行させて1命令辺りの実効処理性能を向上させる。この場合、メモリアクセスが必要なオペランドを有する命令のメモリアクセスステージと、命令フェッチとが同じタイミングとなり、メモリアクセスの競合が生じる。そのため、命令フェッチを行う命令バス5とオペランド用のメモリアクセスバス(データバス3)とを分離するハーバード・アーキテクチャを採用し、メモリアクセスの競合が発生する機会を減少させる。
図20に記載のInstruction Interfaceは、図9に記載の命令レジスタIR及び命令デコーダiDECに相当する。Data Interfaceはメモリアクセスバスとのインタフェースであり、オペランド用のメモリアクセス制御を行う。
CPU1においてハーバード・アーキテクチャとパイプライン処理を採用したことにより、CPU1の行うメモリアクセスの競合(命令フェッチとオペランドフェッチ)回避が可能となり、CPU1における命令実行性能を向上させることが可能となる。
所謂デジタル家電では、DVD(高記録密度規格を含む)やデジタルTVといった、動画処理を行う機器が少なからず存在する。動画処理では画素毎に積和演算などのDSP (Digital Signal Processing) 演算を繰返し実行する。
図22に記載の通り、DSP演算においてメモリ4に格納されている画素毎のデータを演算ごとにレジスタへ読み出し演算を繰返したのでは、データをレジスタへ読み出す処理が実際の演算に対してオーバヘッドとなる。そのため、演算に使用する2つのデータをメモリ4から直接読み出して乗算を行い、既演算結果との加算処理を行うメモリ間積和演算命令を実行可能とした。
また、レジスタに格納済みのデータに対しても同様に積和演算を行うレジスタ間積和演算命令を実行可能とした。
メモリ間積和演算命令によりメモリ4に格納された多数のデータを使用した積和演算において、メモリ4からレジスタへデータ転送をする時間を削減することが可能となり演算器の処理効率が向上し、メモリ4からレジスタへデータ転送する転送命令が不要になるため、コード効率が向上する。また、レジスタ間積和演算命令によりレジスタに格納済みのデータを使用した積和演算を高速に実行可能となり、演算器の処理効率が向上する。
また、座標演算等では、浮動小数点演算を繰返し実行することも必要となる。図23に記載の通り、浮動小数点演算器では汎用レジスタとは別の専用データレジスタを有し、専用データレジスタを用いて演算を行う。斯かる演算では、汎用レジスタに格納されたデータを専用レジスタに転送する処理がオーバヘッドとなる。そのため、汎用レジスタに格納されたデータを浮動小数点演算器が直接アクセスして演算可能に構成する。かかる構成により、汎用レジスタから専用レジスタへのデータ転送処理を削減することが可能となり演算器の処理効率が向上し、汎用レジスタから専用レジスタへデータ転送する転送命令が不要となるため、コード効率が向上する。
図24は、積和演算器と浮動小数点演算器とを用いた他の演算例を示す。
外部のセンサ等のアナログ信号をA/D変換器によりデジタル変換してメモリ4に格納した後、メモリ4に格納されたデジタル変換されたセンサ情報とメモリ4に格納されているフィルタ演算係数とを用いてメモリ間積和演算命令によるフィルタ演算を行い、デジタル変換されたセンサ情報に含まれるノイズの除去を行うことが可能となる。
モータにPWM(Pulse Wave Modulation)波形を供給して回転制御を行うモータ制御において、モータの各位相(U/V/W相)から出力されるモータ電流をA/D変換器によりデジタル変換してレジスタに格納した後、レジスタ間積和演算命令による座標変換を行う。汎用レジスタに格納されている積和演算結果を浮動小数点演算器でPID(比例/積分/微分)制御演算を行った後、汎用レジスタの制御演算結果をレジスタ間積和演算命令により再度座標変換を行い、モータ制御信号としてPWM波形をモータに供給する。斯かる演算により、汎用レジスタを用いた演算を繰返すことが可能となり、専用レジスタを用いた演算に比べて短時間間隔でのモータ制御が可能となる。
図25は、ユーザのアプリケーションで出現頻度の高い命令を分析したものである。頻出命令について命令サイズを小さくすることにより、ユーザアプリケーションの実行プログラムサイズを小さくすることが可能となり、コード効率の向上を図ることが可能となる。また、出現頻度の高い命令をユーザにとってより使い易い命令とすることは、ユーザビリティの向上に繋がることとなる。
図26は、出現頻度が高く命令サイズを小さくした命令の一例である。
プログラム中のループ処理や変数の持つ値に応じての多方向分岐で、ループ条件の成立/非成立や変数の値に応じて分岐を行う際に用いられる分岐命令として、相対アドレスで分岐先アドレスを指定するBEQ(条件成立分岐)、BNE(条件非成立分岐)、BRA(無条件成立分岐)がある。
これらの命令の動作では、分岐するメモリ4内のアドレス距離は比較的短いものもあり、分岐距離が8バイト以内、256バイト以内、65434バイト以内の夫々にあわせて、分岐命令のコードサイズとして、1バイト、2バイト、3バイトの命令を採用可能とした。これにより、分岐距離に応じてのユーザの選択自由度が高くなり、コード効率の向上を図ることができる。
レジスタに格納したアドレス値を基準として相対変位値を指定するレジスタ間接アドレッシングでの転送命令、即値(イミディエイト値)とレジスタとの間で演算を行う比較命令や加算命令において、レジスタ格納値を基準とする相対変位値及び即値として指定できる値の範囲にあわせて、命令のコードサイズを2バイト〜8バイトを選択可能としている。
若しくは、レジスタ格納値のうちの演算に使用するデータ幅を指定可能な演算命令において、当該データ幅として指定できる値の範囲にあわせて乗算命令においてコードサイズを2バイト〜6バイトを選択可能とし、または、除算命令においてコードサイズを3バイト〜7バイトを選択可能としている。
また、サブルーチン分岐命令において、プログラムカウンタ格納値+レジスタ格納値演算による分岐先アドレスを求めるようにすることで、命令のコードサイズを2〜4バイトで選択可能としている。
図27は、インデックス付レジスタ間接アドレッシングの例を示す。
インデックス付レジスタ間接アドレッシングでは、ベースアドレスを格納したレジスタとオフセットアドレスを格納したレジスタとの加算を行い、求まったアドレスに対してデータ転送等を行う。この場合、バイトサイズ指定がある場合には、オフセットアドレスはそのままでベースアドレスとの加算を行い、ロングワードサイズ指定がある場合には、オフセットアドレスを4倍した値とベースアドレスとの加算を行う。斯かるアドレッシング指定を採用することにより、バイトサイズ指定においてはオフセットアドレスとベースアドレスとの加算命令、ロングワードサイズ指定ではオフセットアドレスの4倍化演算(2ビット左シフト演算)命令とオフセットアドレスとベースアドレスとの加算命令との削減を図ることが可能となり、コード効率が向上する。
図28は、ポストインクリメント/プリデクリメント機能付きのレジスタ間接アドレッシングの例を示す。
ポストインクリメント/プリデクリメントは、所定数のエントリを有するテーブルに格納された値に対して演算を行う場合に主に用いられる。ポストインクリメントとプリデクリメントのどちらを使用するかは、テーブルの低位側アドレスから演算を行う場合はポストインクリメント、テーブルの高位側アドレスから演算を行う場合はプリデクリメントを用いる。テーブルの低位側アドレスから演算を行う場合、最初のテーブルエントリに格納された値に対して演算を行った後、次のテーブルエントリの値を参照するアドレスの加算を行う必要がある。ポストインクリメント/プリデクリメント機能によりテーブルエントリを参照するアドレスの加算/減算を、当該テーブルエントリに格納された値に対する演算を行う演算命令で行うことが可能となり、参照アドレスの加算/減算を行う命令の削減を図ることが可能となり、コード効率が向上する。
図29は、3オペランド指定可能な演算の例を示す。
オペランドとして2つのレジスタ等を指定した加算命令を実行する場合、加算値と被加算値とをそれぞれのレジスタに格納しておき、加算結果を、被加算値を格納していたレジスタに格納する。斯かる演算動作では、被加算値を別の演算でも利用する場合は、別のレジスタ又はメモリ4に格納しておき、演算の毎に被加算値を被加算値格納レジスタに転送する必要がある。
レジスタ等で3オペランドを指定可能とすることにより、演算結果を被加算値格納レジスタとは別のレジスタに格納するように指定可能となり、被加算値格納レジスタへ演算の毎に被加算値を転送する命令の削減を図ることが可能となり、コード効率が向上する。
図23は、マイクロコンピュータMCUでのレジスタ構成の例を示す。マイクロコンピュータMCUは、演算に主に用いられる汎用レジスタと、マイクロコンピュータMCUの動作制御に用いられるコントロールレジスタとを有する。
汎用レジスタは基本となるサイズ(32bit)に対して、8bitデータや16bitデータでの演算に用いる8bitレジスタや16bitレジスタとして使用できるように分割されることもある。しかしながら、本実施の形態に係るマイクロコンピュータMCUでは、このようなレジスタの分割は行わず、全てのレジスタを基本となる32bitでのみ使用するようにしている。
レジスタを分割した場合、演算対象となる部分レジスタと演算対象とならない部分レジスタとのアクセス制御が必要となるため、レジスタ制御回路が複雑になり、レジスタアクセスの時間的オーバヘッドと消費電力の増大とを招くことになる。汎用レジスタは、命令実行においてアクセスされることが非常に多く、レジスタアクセスでの時間的オーバヘッドと消費電力の増大とが1回あたりでは夫々微小であったとしてもプログラム実行全体では時間的オーバヘッドと消費電力とは大きなものとなる。
レジスタ分割を採用しないことにより、レジスタアクセスの時間的オーバヘッドと消費電力の低減とを図ることができる。また、汎用レジスタのサイズが統一されているため、コンパイラで高級言語からアセンブリ言語へのコンパイル処理において使用できるレジスタの自由度が高くなり、汎用レジスタの使用効率が向上することから、メモリ4へのアクセス頻度を低減することが可能になる。斯かる点においても、命令実行におけるメモリアクセスオーバヘッド及び消費電力の低減化を図ることができる。
コントロールレジスタには、割込み処理やサブルーチン処理でのスタックポインタ(ISP,USP)、割込みテーブルの配置アドレスを示す割込みテーブルレジスタ(INTB)、実行中の命令アドレスを示すプログラムカウンタ(PC)と命令実行での状態を示すプロセッサステータスワード(PSW)、浮動小数点演算器およびその他のコプロセッサの実行状態を示す浮動小数点ステータスワード(FPSW,CPEN)を有する。更に高速割込み処理を行うための専用レジスタとして、PSWとPCをバックアップするバックアップPSW(BPSW)とバックアップPC(BPC)、高速割込み処理での高速割込みベクタアドレス(FINTV)を有する。
図31、図32及び図33は、割込み処理の高速化の場合を示す。
図31は、高速割込み処理のシーケンスを示す。通常の割込み処理では、割込みコントローラINTCからの割込み通知に応じて、PSWとPCを夫々スタック領域に退避し、割り込み要因に応じたベクタテーブルの読み出しを行い割込み処理ルーチンのアドレスを取得して当該割込み処理ルーチンに分岐をする。また、割込み通知が複数通知され又は既に割込み処理を行っている状態での別の割込み通知がされた場合には、割込み処理の処理優先順位を判定し、優先処理する割込み処理に応じて割込みマスク等のフラグ設定処理を行う。これらの処理のうち、スタック領域と割込みベクタテーブルとはメモリ4に割り当てられるため、PSWとPCのスタック領域への退避とベクタテーブル読み出しでは、メモリアクセスの時間が必要となる。
高速割込み処理では、PSWとPCをスタック領域に退避し割込みベクタテーブルへアクセスするのではなく、コントロールレジスタとして準備されるバックアップPSWとバックアップBPCとに夫々退避し、高速割込みベクタアドレスに格納されている割込み処理ルーチンへ分岐する。斯かる処理により、高速割込み処理ではメモリアクセスを削減することが可能となり、割込み処理への分岐を高速化することが可能となる。
図32は、割込み処理における汎用レジスタの割り当てを示す。通常の割込み処理では、割込み処理に分岐する前にアプリケーションで使用していた汎用レジスタに格納されているデータが割込み処理中に書き換えられてしまい、割込み処理から復帰した後でのアプリケーションの継続実行において不都合が生じないように、汎用レジスタに格納されているデータをスタック領域に退避し又は割込み処理に分岐する際に使用するレジスタバンクを異なるバンクに切り替えることが行われる。このスタック領域への退避はメモリアクセスを発生し、また、レジスタバンクの切り替えでも実態としてはメモリ4の領域へレジスタに格納しているデータを退避することで実現している。
割込み処理への分岐を高速化するために、汎用レジスタをアプリケーション用レジスタと割込み用レジスタとに夫々割り当て、アプリケーション実行中はアプリケーション用に割り当てられたレジスタを使用し、割込み処理の実行中は割り込み用レジスタを使用するように制御する。アプリケーション用レジスタと割込み処理用レジスタとはプログラムで割り当て設定可能とすることでレジスタの割り当ての自由度が高まり、また、汎用レジスタの退避が不要となるため、割込み処理の実行開始を高速化することが可能となる。
図33に示すとおり、PSWとPCの退避および割込みベクタアドレス取得でのメモリアクセスの削減(高速割込み処理)と、アプリケーション用レジスタから割り込み用レジスタへの汎用レジスタの切り替え(汎用レジスタ割り当て)により、割込み通知がされた後 当該割込み通知に対応した割込み処理の開始までの時間を短縮し、マイクロコンピュータMCUのプログラム実行効率を向上することが可能となる。
図34は、メモリプロテクションを示す。アプリケーションAとアプリケーションBとが夫々アプリケーションA用メモリ領域とアプリケーションB用メモリ領域とを割り当てられている場合に、アプリケーションAが誤ってアプリケーションB用メモリ領域にアクセスしてアプリケーションBで使用するデータを書換え、又は、アプリケーションAからアプリケーションBに誤って分岐する、等が生じた場合、アプリケーションBの実行動作が不安定となり、マイクロコンピュータMCU全体としての動作も不安定となる。
斯かる事態の発生を防止するために、メモリプロテクションユニットを有し、アプリケーションAがアプリケーションB用のメモリ領域へアクセスし、または、アプリケーションAからアプリケーションBへ分岐する、等を防止する。これにより、アプリケーションBの実行動作が不安定になることが防止され、マイクロコンピュータMCU全体としての動作も安定化させることが可能となる。
図35は、エンディアン変換命令の例を示す。
実施の形態3及び実施の形態4としてデータのバイエンディアン処理について記載したが、リトルエンディアンとしてデータ処理されるメモリ領域に格納されているデータを汎用レジスタに読出し所定の演算を行った後、ビッグエンディアンとしてデータ処理されるメモリ領域又はビッグエンディアン用周辺I/O装置へデータの転送をすることも生じる。斯かる場合、アライナ11への制御信号CNT1又はアライナ13への制御信号CNT2を設定することにより、アライナ11又はアライナ13でデータの並びを変更することも可能である。ある程度連続してデータの変換を行う場合には、アライナ11又はアライナ13により、データの並びを変更することが有効である。
一方で、データをリトルエンディアンとビッグエンディアンとに交互に変換してメモリ領域に格納するような場合では、アライナ11又はアライナ13を交互にエンディアン変換するように設定する必要がある。そのような場合には、エンディアン変換命令によりレジスタ内でデータのエンディアンを変換し、アライナ11及びアライナ13の設定は変更しないほうが、アライナ11又はアライナ13の設定変更に係る消費電力を低減することが可能となる場合もある。
図36、図37及び図38は、マイクロコンピュータMCUの低消費電力化のための設計方法についての例を示す。
フリップフロップなどのクロック同期動作をする論理素子やクロック供給経路に配置されるクロックドライバはクロックが供給されている限り電流を流すため、使用しない回路に対してクロックの供給を停止することが必要である。そのため、図36に示すように、マイクロコンピュータMCUの論理合成を行う時点でクロックゲーティング回路を挿入し、クロック供給を停止できるようにする。
次に、クロック同期設計において、クロック同期動作をするフリップフロップに挟むようにクロック非同期動作をする論理素子を配置した場合、フリップフロップ間でタイミングバイオレーションを起こした経路(クリティカルパス)が生じ、斯かるタイミングバイオレーションを解消する必要がある。図37に示すように、最初に低速の高しきい値電圧/低リーク電流の論理素子を用いてクロック同期設計を行い、クリティカルパスに対してのみ、低しきい値電圧/高リーク電流の高速の論理素子を使用し、タイミングバイオレーションの解消を図る。斯かるクロック同期設計を行うことにより、マイクロコンピュータMCUを構成する多数の論理素子は低消費電力の論理素子となり、低消費電力論理素子では、タイミングバイオレーションを生じる経路はより高い消費電力でより高速の論理素子を用い、全体として低消費電力となるマイクロコンピュータMCUのクロック同期設計が可能となる。
また、図38に示すように、マイクロコンピュータMCUの内部を複数の電源ドメインに分割し、動作していない電源ドメインに対する電源供給を停止するよう、複数の低消費電力モードを持たせる。この場合、マイクロコンピュータMCU内部の内蔵レギュレータは電源ドメイン夫々に電源を供給し、内蔵レギュレータから電源ドメインの間に当該電源ドメインへ電源供給し又は停止するスイッチ回路を配置する。
図39は、プログラムを格納するROMとしてFlashメモリを使用した場合の、FlashメモリのアクセススピードがマイクロコンピュータMCUの処理性能に与える影響を示す図である。30MHzで読み出し動作可能なFlashメモリをマイクロコンピュータMCUに使用した場合、マイクロコンピュータMCUを100MHzのクロックで動作させたとしても命令フェッチの毎に複数クロックサイクルのウェイト動作が必要となり、プログラムの実効的な実行性能は100MHzから大幅に低下することとなる。
斯かる実行性能の低下を回避するために、FlashメモリとCPU1との間に命令キャッシュメモリを配置することが考えられる。命令キャッシュメモリを配置することで、CPU1が命令キャッシュメモリに格納されている命令をフェッチする場合(キャッシュヒット)は1クロックサイクルでの命令フェッチが可能であるが、命令が命令キャッシュメモリに格納されていない場合(キャッシュミスヒット)は複数クロックサイクルでのウェイト動作が必要となり、また、命令キャッシュメモリの占める面積が必要となる。
Flashメモリのメモリアレイ構成、アドレスデコーダ等の周辺論理回路の高速化によりFlashメモリは100MHzで動作可能となるようになり、CPU1は命令キャッシュメモリを有さずに毎クロックサイクル動作が可能となる。また、マイクロコンピュータMCUの動作クロックがより高速化した場合でも、キャッシュミスヒットを生じた場合のウェイトするクロックサイクル数を削減することが可能となる。
実施の形態6で記載されるマイクロコンピュータMCUやCPU1の構成、機能、動作等は、実施の形態1〜4のマイクロコンピュータMCUやCPU1に適用できることはいうまでもない。
以上、本発明の実施の形態を詳細に開示し記述したが、以上の記述は本発明の適用可能な局面を例示したものであって、本発明はこれに限定されるものではない。即ち、記述した局面に対する様々な修正や変形例を、この発明の範囲から逸脱することの無い範囲内で考えることが可能である。