(57)【特許請求の範囲】
【請求項１】
レジスタを備えるＣＰＵと、
そのエンディアンがリトルエンディアン及びビッグエンディアンの内の一方に固定され、且つ、その転送信号量がＮビットであり、前記ＣＰＵに接続された一端を備えると共に、データの読み出し及び書き込みが可能な第１メモリ内の命令コードが格納された第１格納領域と信号線を介して接続されている命令バスと、
そのエンディアンが前記リトルエンディアン及び前記ビッグエンディアンの内の何れかに可変に設定された前記データを転送し、且つ、その１回の転送信号量の最大値が前記Ｎビットであり、前記第１メモリ内の、前記データをバイト単位で格納する、ｋ（Ｎ＝８×ｋ：ｋは正の整数）個の番地を有する格納領域の各番地と接続されたｋ本の信号線より構成されているデータバスと、
前記ＣＰＵが出力する制御信号に応じて、前記データバスの前記ｋ本の信号線と、前記レジスタ内の、前記データをバイト単位で格納するｋ個の番地とを接続するアライナとを備えており、
前記ＣＰＵは、その各々のサイズが前記Ｎビットである複数のベクタアドレスを備えるベクタテーブルを記憶する不揮発性の第２メモリの出力端にも電気的に接続されており、前記ベクタテーブルが、リセット信号の受信、或いは、前記リセット信号の受信を除く特定の割り込み処理の要求の受信の何れかを要因として、前記Ｎビットの対応するベクタアドレスを前記ＣＰＵに出力することにより、前記ＣＰＵは、前記第２メモリの前記ベクタテーブルに対してオペランドアクセスするときには、
前記ＣＰＵは、前記対応するベクタアドレスに基づいて命令フェッチを行うと共に、
前記ＣＰＵは、前記第１メモリよりフェッチした命令コードの実行の前に、前記第１メモリに対して最大で前記Ｎビットのデータ量のアクセスを行うときに、前記レジスタ内にデータが、前記命令バスのエンディアンの種類に応じて定まるアドレスと同一のアドレスであって且つ同一のデータアライメントで以って常に格納される様に、前記制御信号によって前記アライナの動作を制御することを特徴とする、
データ処理装置。
【請求項２】
請求項１記載のデータ処理装置であって、
前記第１メモリ及び前記第２メモリは、共に、前記データ処理装置の構成要素として、
前記ＣＰＵと同一又は別個の何れかの半導体チップ上に搭載されていることを特徴とする、
データ処理装置。
【請求項３】
請求項１記載のデータ処理装置であって、
前記ＣＰＵ周辺の各Ｉ／Ｏ装置と前記ＣＰＵ間のデータバスを、リトルエンディアン専用のデータバスとビッグエンディアン専用のデータバスとに分離したことを特徴とする、
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセッサを有するデータ処理装置に関する。
【背景技術】
【０００２】
ＣＰＵ（中央処理装置）又はＤＳＰ（ディジタル・シグナル・プロセッサ）等のプロセッサを有するデータ処理装置、例えば、所謂マイクロコンピュータ（マイクロプロセッサ、マイクロコントローラ、マイコンともいう。）と言われる半導体集積回路装置においては、バイナリ情報のデータの並びにおいて、リトルエンディアン(Ｌｉｔｔｌｅ  Ｅｎｄｉａｎ)と呼ばれるデータの並びと、ビッグエンディアン(Ｂｉｇ  Ｅｎｄｉａｎ)と呼ばれるデータの並びとがある。
【０００３】
マイクロコンピュータで扱うバイナリ情報としては、マイクロコンピュータの動作を制御する命令として処理されるバイナリ情報と、斯かる命令の実行等により処理されるデータとしてのバイナリ情報とがあり、ある特定のマイクロコンピュータにおいては命令及びデータ共に、リトルエンディアン又はビッグエンディアンのいずれか一方を採用して、データ処理を行うことが一般的である。
【０００４】
一方で、特許文献１に記載されるように、マイクロコンピュータの命令およびデータの双方のエンディアンについてリトルエンディアン／ビッグエンディアン両方のエンディアンにも対応可能としたマイクロコンピュータ、または特許文献2に記載されるようにマイクロコンピュータで処理するデータについてリトルエンディアン／ビッグエンディアンを変更可能とするマイクロコンピュータの記載がある。
【０００５】
特許文献２に記載されるマイクロコンピュータでは、格納されているデータがリトルエンディアンであるかビッグエンディアンであるかに応じて、バイト単位でのデータの並びを変更させ、いずれのエンディアンであっても処理可能となるように構成することが記載されている。
【０００６】
又、マイクロコンピュータにおいて、命令やデータを格納するために必要とされるメモリ容量を削減し、適正な消費電力で命令の実行／データの処理効率を向上することも求められる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−８２００９号公報
【特許文献２】特開２００５−１７４２９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
現在、ＣＰＵ（機能としての記載と半導体上に形成される物理的領域としての記載を区別する場合は、前者はＣＰＵ，後者はＣＰＵコアと記載し、区別不要の場合はＣＰＵと記載する。）又はＤＳＰ等のプロセッサを有するデータ処理装置（以下、単にマイクロコンピュータという。）の開発においては、ＣＰＵ自体の機能と共に、ＣＰＵコアとともに各種の周辺機能ブロック(周辺機能ＩＰ又は周辺機能ＩＰコアという。)を半導体基板上に構成し、ＣＰＵの制御の下で各種の周辺機能ブロックを動作させることで、全体として一つの目的に応じた処理を行うようにされる。その場合に、所謂ＩＰコアベンダと呼ばれる特定の周辺機能ブロックの設計開発を専門とする企業から必要とする周辺機能ブロックを購入したり、自社で過去に設計した若しくは別製品で設計している周辺機能ブロックを使用したりして1の半導体基板上に構成することで、目的とするマイクロコンピュータを設計開発することも行われ始めている。
【０００９】
このようなマイクロコンピュータの設計開発体制においては、購入又は自社で設計した周辺機能ブロックのデータのエンディアンがＣＰＵ自体のエンディアンと相違し、また協働すべき周辺機能ブロック同士のエンディアンにおいても相違することも生じえる。
【００１０】
従来はこのようなエンディアンの相違が生じた場合には、ＣＰＵのエンディアンに一致する周辺機能ブロックを選択し、またはＣＰＵのエンディアンに一致するように周辺機能ブロックを再設計することも行われていた。
【００１１】
本願発明者らは、このようなマイクロコンピュータの開発体制を鑑みたところ、特に特許文献２に記載されているようなエンディアンの変換ではＣＰＵおよびマイクロコンピュータ全体としての処理性能を損じることに認識が至った。
【００１２】
本願発明の一つの目的は、好適なエンディアン変換を行うマイクロコンピュータを提供することにある。
【００１３】
本発明の別の目的は、エンディアンの種類に依存せずに、ＣＰＵが共通のプログラム及び共通のベクタアドレスを使用出来るバイエンディアン方式のデータ処理装置を提供することにある。
【課題を解決するための手段】
【００１４】
ＣＰＵが処理するデータは、リトルエンディアン又はビッグエンディアンのどちらか一方を選択可能にされる。ＣＰＵとメモリとの間でデータを転送する際、エンディアンがいずれである場合であっても、ＣＰＵのベクタアドレスのサイズにおいてのデータ転送の並びが一致するようにする。
【００１５】
命令コードのエンディアンを固定することにより同一のプログラムを使用可能とすると共に、データのエンディアンは可変とされ、ベクタテーブルの各ベクタアドレスがＮビットである場合に、ＮビットにアラインされたＮビットサイズのデータをアクセスする際には、データのエンディアンがビッグエンディアン／リトルエンディアンのいずれの場合であってもエンディアンに依存することなく、同一アドレス／同一アライメントでアクセス可能になるよう制御される。一方、ＣＰＵがＮビットと異なる単位のデータをメモリに対してアクセスを行う場合、ＣＰＵ内のデータレジスタのバイト単位での各番地に格納されるデータの番地及びアライメントに適するように、メモリから取得したデータの番地及びアライメントを変更する機構を設ける。
【発明の効果】
【００１６】
ベクタサイズでのデータ転送において、データのエンディアンによらず同じデータ順序でデータ転送を可能としたことで、ベクタアドレスの共通化が可能となる。
【００１７】
命令のエンディアンを固定化したバイエンディアン方式を採用するデータ処理装置に於いて、プログラムを共通して使用することが出来ると共に、ベクタテーブルを共通化することが出来る。
【００１８】
以下、この発明の様々な具体化を、添付図面を基に、その効果・利点と共に、詳述する。
【図面の簡単な説明】
【００１９】
【図１】実施の形態１に係るマイクロコンピュータの一部分の構成を示すブロック図である。
【図２】メモリ領域に格納されているベクタテーブルの構成を模式的に示す図である。
【図３】バイエンディアン方式に於いて、ＣＰＵがデータのリード動作又はライト動作を行う際の信号配線関係を模式的に示すブロック図である。
【図４】３２ビットデータアクセスの場合に於ける、ＣＰＵ内のレジスタの各番地とメモリ内の格納領域の各番地との接続関係を模式的に示すブロック図である。
【図５】メモリ領域に格納されているデータを読み出してレジスタに格納する際のメモリ及びレジスタに於けるバイトオーダを示す図である。
【図６】実施の形態２に於けるＣＰＵとＣＰＵ周辺Ｉ／Ｏ装置との間の接続構成を模式的に示すブロック図である。
【図７】メモリの構成を模式的に示す図である。
【図８】マイクロコンピュータの概略構成を示す図である。
【図９】ＣＰＵの概略構成を示す図である。
【図１０】ＣＰＵとメモリとの間の概略接続関係を示す図である。
【図１１】ＣＰＵが割付けたメモリのアドレス空間を示す図である。
【図１２】メモリとレジスタ間でのデータ転送時のアクセス関係を示す図である。
【図１３】アライナの一例を示す図である。
【図１４】割込みベクタアドレス単位でのデータ転送時のアライナの接続状況の一例を示す図である。
【図１５】エンディアンの異なる周辺機能ブロックを有するマイクロコンピュータの概略構成を示す図である。
【図１６】アライナの一例を示す図である。
【図１７】マイクロコンピュータで実行するプログラムの開発ツールのフローを概略的に示す図である。
【図１８】マイクロコンピュータの処理性能についての評価項目例を示す図である。
【図１９】命令のパイプライン処理の概略を示す図である。
【図２０】ハーバード・アーキテクチャでのバス構成の概略を示す図である。
【図２１】ハーバード・アーキテクチャでのパイプライン処理の概略を示す図である。
【図２２】積和演算器を用いた演算例を示す図である。
【図２３】浮動小数点演算器を用いた演算例を示す図である。
【図２４】積和演算器と浮動小数点演算器とを用いた別の演算例を示す図である。
【図２５】プログラムに出現する命令の出現頻度を示す図である。
【図２６】出現頻度の高い命令のうち、命令サイズを小さくした命令の一例を示す図である。
【図２７】インデックス付レジスタ間接アドレッシングのアドレス演算を示す図である。
【図２８】ポストインクリメント／プリデクリメント機能付のレジスタ間接アドレッシングのアドレス演算を示す図である。
【図２９】３オペランド指定での演算を示す図である。
【図３０】マイクロコンピュータでのレジスタ構成の一例を示す図である。
【図３１】割込み処理の高速化についての一例を示す図である。
【図３２】高速割込み処理でのレジスタの使用例を示す図である。
【図３３】高速割込み処理による割込み処理実行開始までの時間を例示的に示す図である。
【図３４】メモリプロテクションの機能の概略を示す図である。
【図３５】エンディアン変換命令の一例を示す図である。
【図３６】クロックゲーティング設計の概略を示す図である。
【図３７】クリティカルパスでのタイミングバイオレーション解決設計の概略を示す図である。
【図３８】電源ドメイン分割に関する概略を示す図である。
【図３９】マイクロコンピュータにＦｌａｓｈメモリを使用した場合の処理性能の概略を示す図である。
【発明を実施するための形態】
【００２０】
（実施の形態１）
図１は、本実施の形態に係るマイクロコンピュータの一部分の構成を示すブロック図である。尚、図１に於いては、後述するアライナ１１の記載を省略している。
【００２１】
図１に於いて、メモリ４は、リード／ライト可能な記憶媒体であり、例えばＳＲＡＭの様な揮発性メモリ又はフラッシュメモリ（ＥＥＰＲＯＭの一例）の様な不揮発性メモリから成り、ＣＰＵ１と同一の半導体チップ上に搭載されている。或いは、メモリ４は、ＣＰＵ１とは別個の半導体チップ上に搭載されていても良い。或いは、メモリ４は、その実用状態に於いて、例えばＵＳＢメモリの様に、本マイクロコンピュータの外部に存在し、且つ、ＵＳＢ端子の様な接続端子を介して、後述する本マイクロコンピュータのシステムバスに電気的に接続されていても良い。
【００２２】
メモリ４は、（１）命令コード（以下、単に「命令」と言う。）を格納する格納領域４Ｒ１と、（２）プログラムの命令実行時に利用されるデータを格納する格納領域４Ｒ２と、（３）それら以外のデータ等の信号を格納する格納領域４Ｒ３とを、有する。
【００２３】
本実施の形態では、その特徴点の一つとして、命令のエンディアンは、リトルエンディアン又はビッグエンディアンの一方にのみ常に固定されている。従って、ＣＰＵ１が命令をフェッチするときのみ使用可能な命令バス５のエンディアンもまた、リトルエンディアン又はビッグエンディアンの一方にのみ常に固定されている。尚、本例では、命令のエンディアンは、リトルエンディアンに常に固定されているものとする。
【００２４】
これに対して、格納領域４Ｒ２に格納されている命令実行時に使用するデータのエンディアン、従って、ＣＰＵ１がリード動作又はライト動作を実行する際に用いられるデータバス３のエンディアンは可変であり、リトルエンディアン又はビッグエンディアンの何れかに設定され得る。本実施の形態では、アドレスバス２、データバス３及び命令バス５の転送可能な信号のビット量は、何れも、３２ビットである。従って、マルチバイトのバイナリ数値であるデータを転送するバイエンディアン方式に於いて、データバス３は、その各々が８ビット（１バイト）のデータを転送する４組の信号線より構成されている（後述する図３の信号線３０〜３３に相当。）。尚、アドレスバス２、データバス３、及び命令バス５は物理的に異なるバスとして構成されるだけでなく、物理的に１のバスとして構成され時間的に異なるバスとして機能する(所謂スプリットトランザクションバス等)ものであっても、当該バスとして機能している時間を示すものと理解されるべきである。
【００２５】
図２は、メモリ４の領域４Ｒ３に格納されているベクタテーブル６の構成を模式的に示す図である。ベクタテーブル６は、その各々がＮビットのサイズを有する複数のベクタアドレス７がまとめて配置されている領域である。即ち、各ベクタアドレス７は、本マイクロコンピュータの起動時のリセット信号の入力、及び、例えばデバッグ処理のプログラムの実行の様な特定の共通に使用される割り込みプログラムの処理を要求する割り込み信号の入力（両者を「割り込み要因」と言う。）に応じて、各割り込み要因に応じて予め決められた、領域４Ｒ１内の該当割り込み処理プログラムの格納位置を与えるアドレスである。先ず、起動時に於いて、外部より、リセット信号が入力されると、Ｎビットのリセットベクタアドレス８がデータバス３を介して読み出されて、リセットベクタアドレス８は、ＣＰＵ１へ出力される。又、ＣＰＵの動作時にＣＰＵ１に割り込み信号が入力されると、入力した割り込み信号に対応するベクタアドレス７がデータバス３を介して読み出されて、ＣＰＵ１へ出力される。本実施の形態の一例では、リセットベクタアドレス８を含む各ベクタアドレス７のビット単位でのサイズＮは、３２に設定されている（Ｎ＝３２）。尚、このリセット時にＣＰＵ１より与えられるエンディアン信号のレベルにより、データバス３のエンディアンは切り替えられる。即ち、パワーオンリセット時に専用のモード端子の状態及び汎用Ｉ／Ｏポート（外部端子）と兼用のモード端子の状態をマイクロコンピュータに取り込んで、例えばレジスタにラッチし、データがリトルエンディアンかビッグエンディアンのいずれであるかをＣＰＵ１がベクタアドレスをアクセスする前に確定できるようにしている。
【００２６】
ここで、ベクタテーブル６は、命令及びデータを格納するメモリ（第１メモリ）４とは別個のリード／ライト可能なＲＯＭ（第２メモリ）の記憶領域内に格納されていても良い。本実施の形態の一例では、メモリ４の記憶領域の内で命令及びデータを格納する領域４Ｒ１，４Ｒ２が「第１メモリ」に該当しており、ベクタテーブル６を格納する領域４Ｒ３が「第２メモリ」に該当しているとも、定義し得る。
【００２７】
尚、図１に記載のメモリ４をＲＡＭ（第１メモリ）で構成するときには、ＲＡＭ４とは別個に、本マイクロコンピュータ内の半導体チップ上に搭載された第２メモリとして、又は、外部の第２メモリ（ＵＳＢメモリ等）として、ベクタテーブル６を格納するリード／ライト可能なＲＯＭを設けることとなる。
【００２８】
図７は、メモリの概略構成を示す図である。複数のメモリセルがアレイ状に配置され、夫々のメモリセルが対応するワード線とビット線とに接続される。一般的にメモリはＣＰＵ等から供給されるアクセスアドレスに基づき、Ｘデコーダが所定のワード線を活性化し、当該ワード線に接続されるメモリセルに格納されるデータをＹデコーダがビット線を介して読み出す。例えばアクセスアドレスとしてアドレス０を供給された場合は第０ワード線が活性化されるメモリであれば、第０ワード線の第０ビット線からアクセスすべきバイト数のデータがＣＰＵに供給される。即ち、アクセスアドレスとしてＸが供給された場合、第Ｙワード線（Ｙ＝Ｘ'／ｌ，Ｘ'はＸ×８であるＸのビット表現，ｌはワード線当りのメモリセル数）が活性化され、第Ｚビット線(Ｚ＝Ｘ' ｍｏｄ ｌ，ｍｏｄは剰余演算)からデータが読み出される。
【００２９】
図３は、バイエンディアン方式に於いて、ＣＰＵ１がデータのリード動作又はライト動作を行う際の信号配線関係を模式的に示すブロック図である。ＣＰＵ１内に配置されているレジスタ（データレジスタであり、主として汎用レジスタが用いられる。）９は、バイト単位で、４個の番地０，１，２，３で与えられる記憶領域９０，９１，９２，９３を有している。他方、メモリ４の記憶領域４Ｒ２のメモリセルアレイは、バイト単位で、それぞれ番地０，１，２，３で与えられる４個の記憶領域１０Ａ，１０Ｂ，１０Ｃ，１０Ｄを一組とする格納領域１０が行方向及び列方向にアライメントされて成る。又、アライナ１１は、ＣＰＵ１より出力される制御信号ＣＮＴ１に応じて、そのオン／オフ動作を切り替えられる各スイッチより成るスイッチ群（図示せず。）より構成されている。そして、アライナ１１は、格納領域１０の各番地１０Ａ〜１０Ｄに、対応するビット線を通じて接続された各信号線（データバス３の各ライン）３０〜３３と、レジスタ９の各番地９０〜９３に接続された信号線とを、データないしはデータバス３のエンディアンの種類に対応して連結させる機能を呈する。図４は、３２ビットデータアクセスの場合に於ける、ＣＰＵ１内のレジスタの各番地とメモリ内の格納領域の各番地との接続関係を模式的に示すブロック図である。レジスタ９の０番地９０側をＬＳＢ、３番地９３側をＭＳＢとし、メモリ４の０番地１０Ａ側をＬＳＢ、３番地１０Ｄ側をＭＳＢとすると、アライナ１１はデータがリトルエンディアンである場合の接続関係を示している。
【００３０】
ここで、ＣＰＵ１は、３２ビットのデータをメモリ４の格納領域１０(アクセスアドレスＸ)に記憶する場合には、予め、次の通りに３２ビットデータが各番地１０Ａ〜１０Ｄに記憶される様に、メモリ４の領域４Ｒ２のアドレスを規定している。即ち、図５に示す様に、（１）データがリトルエンディアンで記憶されるときには、レジスタに格納されているデータのＬＳＢ側を+０のバイトオーダとし、ＭＳＢ側を+３のバイトオーダとするようにデータのバイトオーダを決定する。またメモリの格納先アドレスにおいて同様に+０〜+３のバイトオーダを決定し、レジスタに格納されているデータのバイトオーダとメモリの格納先アドレスに対して決定したバイトオーダとが一致するようにデータを格納する。他方、（２）データがビッグエンディアンで記憶されるときには、レジスタに格納されているデータのＭＳＢ側を+０のバイトオーダとし、ＬＳＢ側を+３のバイトオーダとするようにデータのバイトオーダを決定し、メモリの格納先アドレスにおいてもバイトオーダを決定して、データをメモリに格納する。メモリの格納先アドレスに対して決定した＋０〜＋３の夫々のバイトオーダが各番地１０Ａ〜１０Ｄに対応する。
【００３１】
今、起動時に於いて外部よりリセット信号が入力されて、ＣＰＵ１が、オペランドアクセスすることによって、図２に示す３２ビットのリセットベクタアドレス８を取得したものとする。この３２ビットのリセットベクタアドレス８は、メモリ４の領域４Ｒ１に格納された命令のアドレスを与える。又、割り込み信号がＣＰＵ１に入力されたときも、ＣＰＵ１は、自動的にオペランドアクセスして、３２ビットのベクタアドレス７を取得する。その上で、ＣＰＵ１は、リセットベクタアドレス８又は割り込み要因に応じたベクタアドレス７に基づいて、命令のフェッチ動作を行い、フェッチした命令をデコードした上で、命令の実行へと、その動作を移す。その際、リセットベクタアドレス８及びベクタアドレス７と同じデータサイズの３２ビットデータをメモリから取得する場合と、ベクタアドレスとは異なるデータサイズの１６ビットデータをメモリから取得する場合とを、以下に記載する。
【００３２】
図５は、データの転送に際して、どのようにデータアライメントの変更が行われるかを示す。アドレス０の矢印が示す箇所をメモリの４バイト境界(第３２ｎビット線)に対応させ、３２ビット分(第３２(ｎ＋１)−１ビット線まで)のメモリセルに３２ビットのデータは格納される。係るデータの格納状態に対して、アライナは当該データのエンディアンに応じてバイトオーダを割付け、レジスタに転送をする。夫々のエンディアンにおいてメモリに格納されているバイトオーダとレジスタに格納する際のバイトオーダとを一致させるように格納することから、４バイト転送時にはエンディアンに関わらずレジスタに格納されたデータ順序は一致する。
【００３３】
又、１６ビットデータ転送を行う場合においては、データアライメントの変更は次のようになる。メモリの４バイト境界から３２ビット分のデータに対してアライナが当該データのエンディアンに応じてバイトオーダを割付ける。夫々のエンディアンの＋０／＋１のバイトオーダに当たるデータをレジスタのＬＳＢから順に格納する。図に示すように、リトルエンディアンではアライナが割付けたバイトオーダの+０がレジスタのＬＳＢに当たることから、メモリに格納されている２バイトのデータとレジスタに格納される２バイトのデータとが一致する。一方でビッグエンディアンではアライナが割付けたバイトオーダの+０はレジスタのＭＳＢに当たることから、４バイト転送時にはレジスタのＭＳＢ側に格納される２バイトのデータがレジスタのＬＳＢ側に格納される。なお、レジスタのＭＳＢ側２バイトに格納される”＊＊”は、'０'又は'１'若しくはデータの符号ビットが拡張して格納されることを示す。
【００３４】
以上の記述は、ＣＰＵ１が８ビットデータアクセスする場合に於いても、妥当する。
【００３５】
尚、上記の一例の動作記載に於いては、データのリード動作が中心に記載されているが、既述した本実施の形態の特徴点をデータのライト動作に於いても、レジスタに格納されているデータのバイトオーダとメモリに格納する際にアライナが割付けるバイトオーダとを同様に対応させることで適用可能である。
【００３６】
以上の通り、データ処理装置の構成として本実施の形態の構成を採用する場合には、ベクタアドレス及びベクタアドレスと同じサイズのデータの転送においては、データのエンディアンの種類に依存すること無く、同一のアドレス及び同一のデータアライメントに於いてデータをメモリに対してリード／ライトすることが出来、その際に共通のプログラムを実行することが出来ると共に、ベクタテーブルを共通化することが可能となる。
【００３７】
（実施の形態２）
本実施の形態の特徴点は、実施の形態１に係るバイエンディアン方式のマイクロコンピュータに於いて、ＣＰＵ周辺の各Ｉ／Ｏ装置とＣＰＵ間のデータバスを、リトルエンディアン専用のデータバスとビッグエンディアン専用のデータバスとに分離した点にある。
【００３８】
図６は、本実施の形態の特徴点を模式的に示すブロック図である。図６に示す様に、ＣＰＵ１と、ＣＰＵ１の周辺Ｉ／Ｏ装置との間のデータの転送を行うデータバスは、ビッグエンディアン専用のデータバス１４と、リトルエンディアン専用のデータバス１７とが設けられている。そして、各ビッグエンディアン専用の周辺Ｉ／Ｏ装置１５，１６は、個々の信号線を介して、ビッグエンディアン用データバス１４に接続されており、他方で、各リトルエンディアン専用の周辺Ｉ／Ｏ装置１８，１９は、個々の信号線を介して、リトルエンディアン用データバス１７に接続されている。各周辺Ｉ／Ｏ装置としては、例えば、割り込み制御回路（ＩＮＴＣ）又はダイレクトメモリアクセスコントローラ（ＤＭＡＣ）又はシリアルコミュニケーションインターフェース（ＳＣＩ）等がある。
【００３９】
ＣＰＵ１は、ＣＰＵ１と、ＣＰＵ１の周辺Ｉ／Ｏ装置１５〜１９との間で転送し合うデータを、Ｉ／Ｏレジスタ１２に格納している。このＩ／Ｏレジスタ１２に格納されているデータのエンディアンは、リトルエンディアン及びビッグエンディアンの何れか一方である。アライナ１３は、ＣＰＵ１が出力する制御信号ＣＮＴ２による制御の下で、Ｉ／Ｏレジスタ１２に格納されているデータのエンディアンの種類に応じて、Ｉ／Ｏレジスタ１２内の当該データのバイトオーダを、ビッグエンディアン用データバス１４及びリトルエンディアン用データバス１７の内の該当するデータバスに割付けられるバイトオーダに一致させるように接続する。周辺Ｉ／Ｏ装置内のレジスタ及びメモリ等がどのアドレス範囲にあるかによって、リトルエンディアンかビックエンディアンであるかが分る様にされている。即ち、ＣＰＵ１がアクセスするアドレスをデコードすることによって、制御信号ＣＮＴ２の状態が決定される様にしている。
【００４０】
以上の構成を採用するときには、周辺Ｉ／Ｏ装置とＣＰＵとの間で転送されるデータのエンディアンが固定化され、周辺Ｉ／Ｏ装置へのアクセス処理に於いては、エンディアンの種類如何に拘らず、共通のプログラムを使用することが可能となる。即ち、アライナ１３によってデータのバイトオーダが夫々の周辺Ｉ／Ｏ装置にとって適合するようにされることから、ビッグエンディアン用周辺Ｉ／Ｏ装置とリトルエンディアン用周辺Ｉ／Ｏ装置との両方を用いてデータの処理を行う場合であっても、ＣＰＵが実行するプログラムにおいてデータのエンディアン変換を行う等の周辺Ｉ／Ｏ装置のデータのエンディアンを考慮した処理が不要とできる。更には、１の半導体基板上に複数のデータ処理モジュール(所謂機能ＩＰと呼ばれ、図６の周辺Ｉ／Ｏ装置に相当)を有するデータ処理装置において、データ処理モジュール自体のデータのエンディアンに応じてバスを分離しアライナを介してＣＰＵと接続されるように構成することにより、データ処理装置の構成においてデータのエンディアンが一致するようにデータ処理モジュールを選択し若しくはデータ処理装置のＣＰＵが実行するプログラムでデータ処理モジュールごとにデータのエンディアンを変換する等の、データ処理装置を構成する際のハードウェア／ソフトウェアに対する負担を軽減することが可能となる。
【００４１】
（実施の形態３）
図８は、マイクロコンピュータＭＣＵの一例の概略を示すブロック図である。
【００４２】
中央処理装置（以下、ＣＰＵという。）１は不揮発性メモリＲＯＭや揮発性メモリＲＡＭ等に格納されている命令をフェッチし実行することで、マイクロコンピュータＭＣＵ全体としての処理制御を行う。ダイレクトメモリアクセスコントローラＤＭＡＣは外部メモリＥＭＥＭ等とメモリ４（不揮発性メモリＲＯＭや揮発性メモリＲＡＭ等から構成される。）間、又はメモリ４と周辺回路群（ＩＰ１，ＩＰ２）との間のデータ転送制御を行う。バスコントローラＢＳＣはＣＰＵ１その他の機能ブロックがバスを介してデータ転送等を行う際に、バス権の付与等の制御を行う。割込みコントローラＩＮＴＣはマイクロコンピュータＭＣＵ内部又は外部で発生する割込みを受付け、ＣＰＵ１に通知等の制御を行う。周辺回路群（ＩＰ１，ＩＰ２）は、マイクロコンピュータＭＣＵの外部に接続される別の半導体集積回路装置との通信を行う通信ＩＦ（ＩｎｔｅｒＦａｃｅ）系(シリアルＩＯ（Ｉｎｐｕｔ/Ｏｕｔｐｕｔ）、パラレルＩＯ等)、専用データ処理系(画像処理ブロック、暗号処理ブロック等)などである。外部バスインタフェースＢＩＦはマイクロコンピュータＭＣＵの外部に接続されるバスを介して外部メモリＥＭＥＭ等に接続される。
【００４３】
図９はＣＰＵ１内の概略を示すブロック図、図１０はＣＰＵ１のメモリアクセス関係を示す図、図１１はＣＰＵ１で割付けたメモリ４のアドレス空間を示す図である。図１１において、アドレスの右側の「Ｈ」は、１６進法でアドレスが表記されていることを示している。なお、図１１では、各領域の先頭アドレスのみのアドレスが表記されている。
【００４４】
図８のＣＰＵ１が他の機能ブロックと接続されるバスは、図１０に示す３２ビット長のアドレスバス２、３２ビット長のデータバス３、３２ビット長の命令バス５から構成される。他のバス構成としては、アドレスとデータ及び命令とが、バス信号線上で、時分割で情報のやり取りを行うスプリットトランザクションバスの構成であっても良い。また、データと命令とが並列にアクセスされない様なアーキテクチャの場合には、データバス３及び命令バス５は、分離されたものではなく、同一のバスで構成されたものであってもよい。さらに、データバス３及び命令バス５は６４ビット長であってもよい。
【００４５】
ＣＰＵ１が命令フェッチを行う場合、３２ビット長のプログラムカウンタＰＣに格納されているフェッチすべき命令のアドレスをアドレスバス２に出力し、アドレスバス２を介して当該アドレスを受信したメモリ４が当該アドレスに対応するバイナリ情報を命令バス５に対して出力する。ＣＰＵ１は命令バス５から受信したバイナリ情報を実行すべき命令として命令レジスタＩＲに格納し、命令デコーダｉＤＥＣで命令をデコードし、デコードした結果に応じた制御信号が算術論理ユニットＡＬＵ、乗算器ＭＬＴ、除算器ＤＩＶ、シフト演算器ＳＨＦＴ、浮動小数点演算器等の演算器に出力され、演算器でレジスタ群ＲＥＧ（汎用レジスタや専用レジスタ）やメモリ４等に格納されているデータに対して該当する演算を実行する。
【００４６】
また、ＣＰＵ１が割込みコントローラＩＮＴＣから割込み通知を受信した場合、ＣＰＵ１は受信した割込み通知に対応する割込み処理を行うために、メモリ４の割込みベクタテーブル領域（図１１のアドレスＦＦＦＦＦＤ００Ｈ〜ＦＦＦＦＦＤＦＦＨ）のアドレスのうち受信した割込み通知に対応するアドレスをアドレスバス２に出力し、メモリ４が当該アドレスに対応するバイナリ情報をデータバス３に対して出力する。ＣＰＵ１はデータバス３から受信したバイナリ情報を割込み処理ルーチンの格納されているアドレス（ベクタアドレスという。）としてプログラムカウンタＰＣに設定し、割込み処理ルーチンの命令を実行するために分岐を行う。ここで、ベクタアドレスは３２ビット（４バイト）長である。なお、割り込みコントローラＩＮＴＣからの割込み通知以外による例外処理（例えば、特権命令例外処理、未定義命令例外処理など）のためのベクタアドレスも割込みベクタテーブル領域に格納されているものとする。
【００４７】
なお、リセットベクタ領域（図１１のアドレスＦＦＦＦＦＥ００Ｈ）は、マイクロコンピュータＭＣＵが電源投入されまたは外部からリセット信号を入力された場合に、リセット期間終了直後に実行すべきプログラムを格納したアドレス（例えば、ブート命令領域の先頭アドレス００００Ｈ）を格納した領域である。割込み処理とリセット処理とは起因が割込みであるかリセットであるかの相違はあるものの、分岐するアドレスの取得においては大凡同じである。
【００４８】
ブート命令領域、第１プログラム領域、第２プログラム領域及び割込み処理ルーチン領域等のプログラム領域に格納される命令のエンディアンは、リトルエンディアン又はビッグエンディアンのいずれかに固定されている。また、リセットベクタ領域及び割込みベクタテーブル等のベクタ領域のデータのエンディアンも、リトルエンディアン又はビッグエンディアンのいずれかに固定されている。これらのエンディアンの固定は、マイクロコンピュータの製造時に固定してもよく、遅くともパワーオンリセット後ベクタ領域をアクセスする前までに固定されていればよい。後者の場合は、パワーオンリセット時に専用のモード端子や汎用Ｉ／Ｏポート（外部端子）と兼用のモード端子の状態をマイクロコンピュータに取り込んで、例えばレジスタにラッチし、データがリトルエンディアンかビッグエンディアンのいずれであるかをＣＰＵ１がベクタアドレスをアクセスする前に確定できるようにすればよい。
【００４９】
第１プログラムは、メモリ４のアドレス１０００Ｈ〜１ＦＦＦＨの範囲の領域に格納されている。第２プログラムは、メモリ４のアドレス３０００Ｈ〜３ＦＦＦＨの範囲の領域に格納されている。第１プログラムと第２プログラムとは、夫々、第１データ領域（アドレス２０００Ｈ〜２ＦＦＦＨ）及び第２データ領域（アドレス４０００Ｈ〜４ＦＦＦＨ）とを有している。第１プログラムは第１データ領域のデータのエンディアンをリトルエンディアンとしてデータ処理をし、第２プログラムは第２データ領域のデータのエンディアンをビッグエンディアンとしてデータ処理をする。例えば第１プログラムがリトルエンディアンでデータ処理をする周辺回路が生成したデータを処理するプログラムで、第２プログラムがビッグエンディアンでデータ処理をする周辺回路が生成したデータを処理するプログラムである場合などが該当する。
【００５０】
ＣＰＵ１のアドレス空間のアドレス範囲によって、予めリトルエンディアン又はビッグエンディアンのどちらのデータを処理するかが決まっている。なお、アドレス範囲によって、リトルエンディアン又はビッグエンディアンのどちらのデータを処理するかをＣＰＵによってレジスタに設定できるようにしてもよい。また、リセット解除後、内蔵の不揮発性メモリに予め格納されたデータが自動的にレジスタに転送されることによってリトルエンディアン又はビッグエンディアンのどちらのデータを処理するかを設定できるようにしてもよい。
【００５１】
ＣＰＵ１が第１プログラムを実行している間に割込みコントローラＩＮＴＣからの割込み通知が発生した場合、割込みベクタテーブル領域(アドレスＦＦＦＦＦＤ００Ｈ〜ＦＦＦＦＦＤＦＦＨ)へのアクセスは、予め固定されたエンディアンでアクセスを行う。
【００５２】
一方で、ＣＰＵ１が第２プログラムを実行している間に割込み通知が発生した場合は、割込みベクタテーブル領域へのアクセスは、予め固定されたエンディアンでアクセスを行う。
【００５３】
図１２はメモリ４とＣＰＵ１のレジスタ９間でデータを転送する際のアクセス関係示す図であり、図１３はアライナ１１の一例を示す図である。
【００５４】
メモリ４からレジスタ９（レジスタ群ＲＥＧのうちの一つのレジスタ）へデータ転送をする場合において、転送すべきデータがメモリ４の１０Ａ乃至１０Ｄに示す領域に格納されている場合、相対的なアドレス変位０番地のデータ(１０Ａ)はデータバス３のうちの付番３０で示す８ｂｉｔの部分バスに出力される。以下同様にアドレス変位１番地〜３番地のデータ(１０Ｂ〜１０Ｄ)は付番３１,３２,３３で示す８ｂｉｔの部分バスに出力される。付番３０〜３３で示す夫々の部分バスに出力されたデータは、レジスタの相対的なアドレス変位０番地〜３番地のどの８ｂｉｔの部分領域に格納されるかが、制御信号ＣＮＴ１の状態に応じてアライナ１１により決定される。制御信号ＣＮＴ１は、リトルエンディアン又はビッグエンディアン、メモリ４へのアクセスサイズ、アクセスバイトアドレス等の情報によって、生成される信号である。
【００５５】
最初に、メモリ４からレジスタへのデータ転送をリセットベクタアドレスや割込みベクタアドレス等のベクタアドレス（以下、割込みベクタアドレスという。）のサイズである4バイトでアクセスをする場合について説明をする。この場合、アライナ１１は図１４に示すような接続状態となるように設定される。図１４は、４バイトでのアクセスの場合に於ける、ＣＰＵ内のレジスタの各番地とメモリ４内の格納領域の各番地との接続関係を模式的に示すブロック図である。レジスタ９の０番地９０側をＬＳＢ、３番地９３側をＭＳＢとし、メモリ４の０番地１０Ａ側をＬＳＢ、３番地１０Ｄ側をＭＳＢとすると、アライナ１１はメモリ４内のデータとＣＰＵ１内のデータとのエンディアンが同一である場合の接続関係を示している。すなわち、ＣＰＵ１内のデータのエンディアンがリトルエンディアンである場合、メモリ４内のデータのエンディアンがリトルエンディアンであることを示している。以下、一例として、ＣＰＵ１内のデータのエンディアンがリトルエンディアンである場合について、記載する。
【００５６】
図１３において、第１データ領域のデータ（リトルエンディアンのデータ）に４バイトアクセスをした場合、部分バス［０：７］（データバス３０）、［８：１５］（データバス３１）、［１６：２３］（データバス３２）、［２４：３１］（データバス３３）に接続される４バイトのデータが出力され、部分バス［２４：３１］に出力されるデータをレジスタのＭＳＢ側となるようにレジスタ９のアドレス変位０番地（９０）、１番地（９１）、２番地（９２）、３番地（９３）に格納される。一方で第２データ領域のデータ（ビッグエンディアンのデータ）にアクセスをした場合、部分バス［２４：３１］に出力されるデータをレジスタのMＳＢ側となるように、部分バス［０：７］、［８：１５］、［１６：２３］、［２４：３１］に接続される夫々のデータがレジスタ９のアドレス変位０番地、１番地、２番地、３番地に格納される。すなわち第１データ領域又は第２データ領域のどちらのデータをアクセスしている際においても、割込みベクタアドレスサイズでのアクセスにおいては、ＣＰＵ１内のレジスタ９に格納される順番が一致するように、アライナ１１のセレクタ１〜４が設定される。セレクタ１〜４はそれぞれ４個の双方向性スイッチで構成され、双方性スイッチはＣＭＯＳトランスファゲートで構成される。制御信号ＣＮＴ１をそのまま、あるいはデコードして双方性スイッチを制御するようにされる。
【００５７】
同様に、第１プログラム又は第２プログラムのどちらを実行中に割込み通知が発生したとしても、割込みベクタアドレスへのアクセスでは、割込みベクタアドレスを格納したアドレスの部分バス［０：７］、［８：１５］、［１６：２３］、［２４：３１］に接続される４バイトのデータが出力され、部分バス［２４：３１］に出力されるデータをレジスタのＭＳＢ側となるようにレジスタのアドレス変位０番地、１番地、２番地、３番地に格納される。
【００５８】
なお、割込みベクタアドレスが格納されるレジスタはプログラムカウンタＰＣであり、プログラムカウンタＰＣに格納されるアドレスが更新されることにより割込み処理ルーチンへ分岐することとなる。
【００５９】
斯かる分岐動作は割込み通知発生時の割込み処理ルーチンへの分岐だけでなく、アドレス修飾分岐命令等のアドレス修飾がなされる命令の実行でも同様である。
【００６０】
アドレス修飾分岐命令としては、例えば、
ｊｍｐ  ＠＃ａｄｒ    （１）
ｊｍｐ  ＠Ｒｎ        （２）
のように、命令が記述される。命令の記述に含まれる“＠”はアドレス修飾が行われることを示し、“＃”は続くバイナリ情報を数値情報として認識し、Ｒｎはレジスタ番号を指定することを示す。
【００６１】
命令（１）では、ａｄｒで示されるメモリ４のアドレスに分岐先アドレスが格納されており、当該命令の実行では、アドレスａｄｒにアクセスをして分岐先アドレスを割込みベクタアドレスと同じサイズで取得し、プログラムカウンタＰＣに転送される。プログラムカウンタＰＣに格納されるアドレスが分岐先アドレスに更新されることにより、命令の実行分岐をすることができる。命令（２）では、命令（１）でのアドレスａｄｒがレジスタに格納されており、レジスタＲｎにアクセスをしてアドレスａｄｒを取得する。その後の動作は命令（１）と同じである。
【００６２】
次に、メモリ４からレジスタへのデータ転送を、割込みベクタアドレスサイズの半分である２バイトで行う場合、及び1バイトで行う場合について記載する。メモリ４からのデータ転送を２バイト又は１バイトで行う場合であっても、メモリ４から４バイトでデータ読出しを行った後、読み出し対象とする２バイト又は１バイトをレジスタに転送する。
【００６３】
第１データ領域のアドレス２０００Ｈから２バイトのデータ転送を指定した場合、アドレス２０００Ｈを先頭として読み出した４バイトデータのうちの部分バス [２４：３１]と [１６：２３]に接続されるデータに対して、セレクタ３は部分バス [２４：３１]をレジスタ９のレジスタ内変位１番地に接続し、セレクタ４は部分バス [１６：２３]をレジスタ内変位０番地に接続する。この場合、セレクタ１及び２は部分バス［０：７］、［８：１５］に接続されるデータはレジスタに格納しないよう制御される。
【００６４】
また、アドレス２００２Ｈから２バイトのデータ転送を指定した場合、アドレス２０００Ｈを先頭として読み出した４バイトデータのうちの部分バス［８：１５］と［０：７］に接続されるデータに対して、セレクタ３は部分バス［２４：３１］をレジスタ内変位１番地に接続し、セレクタ４は部分バス［１６：２３］をレジスタ内変位０番地に接続する。この場合は、セレクタ１及び２は部分バス［０：７］、［８：１５］に接続されるデータはレジスタに格納しないよう制御される。
【００６５】
一方で、第２データ領域のアドレス４０００Ｈから２バイトのデータ転送を指定した場合、アドレス４０００Ｈを先頭として読み出した４バイトデータのうちの部分バス［０：７］と［８：１５］に接続されるデータに対して、セレクタ３は部分バス［０：７］をレジスタ９のレジスタ内変位１番地に接続し、セレクタ４は部分バス［８：１５］をレジスタ９のレジスタ内変位０番地に接続する。この場合、セレクタ１及び２は部分バス［０：７］、［８：１５］に接続されるデータはレジスタに格納しないよう制御される。
【００６６】
また、アドレス４００２Ｈから２バイトのデータ転送を指定した場合、アドレス４０００Ｈを先頭として読み出した４バイトデータのうちの部分バス［１６：２３］と［２４：３１］に接続されるデータに対して、セレクタ３は部分バス［１６：２３］をレジスタ内変位１番地に接続し、セレクタ４は部分バス［２４：３１］をレジスタ内変位０番地に接続する。この場合は、セレクタ１及び２は部分バス［０：７］、［８：１５］に接続されるデータはレジスタに格納しないよう制御される。
【００６７】
次に、メモリ４からレジスタ９へのデータ転送を、割込みベクタアドレスサイズの４分の１である１バイトで行う場合について記載する。
【００６８】
第１データ領域のアドレス２０００Ｈから１バイトのデータ転送を指定した場合、部分バス[０：７]に接続されるデータが出力され、セレクタ４は部分バス[０：７]をレジスタ内変位０番地に接続する。また、アドレス２００１Ｈから１バイトのデータ転送を指定した場合、部分バス[８：１５]に接続されるデータが出力され、セレクタ４は部分バス[８：１５]をレジスタ内変位０番地に接続する。また、アドレス２００２Ｈから１バイトのデータ転送を指定した場合、部分バス[１６：２３]に接続されるデータが出力され、セレクタ４は部分バス[１６：２３]をレジスタ内変位０番地に接続する。また、アドレス２００３Ｈから１バイトのデータ転送を指定した場合、部分バス[２４：３１]に接続されるデータが出力され、セレクタ４は部分バス[２４：３１]をレジスタ内変位０番地に接続する。
【００６９】
一方で、第２データ領域のアドレス４０００Ｈから１バイトのデータ転送を指定した場合、部分バス[２４：３１]に接続されるデータが出力され、セレクタ４は部分バス[２４：３１]をレジスタ内変位０番地に接続する。またアドレス４００１Ｈから１バイトのデータ転送を指定した場合、部分バス[１６：２３]に接続されるデータが出力され、セレクタ４は部分バス[１６：２３]をレジスタ内変位０番地９０に接続する。また、アドレス４００２Ｈから１バイトのデータ転送を指定した場合、部分バス[８：１５]に接続されるデータが出力され、セレクタ４は部分バス[８：１５]をレジスタ内変位０番地９０に接続する。またアドレス４００３Ｈから１バイトのデータ転送を指定した場合、部分バス[０：７]に接続されるデータが出力され、セレクタ４は部分バス[０：７]をレジスタ内変位０番地に接続する。
【００７０】
なお、アライナ１１は、ＣＰＵ１のレジスタ９とデータバス３との間に設けられればよく、例えばＣＰＵ１内に設けられてもよい。また、外部バスインタフェースBIF内に外部メモリＥＭＥＭ用のアライナを設けてもよい。この場合、外部メモリＥＭＥＭ等の外部デバイスのアドレス空間ごとにビッグエンディアンとリトルエンディアンとの切り替えがＣＰＵによってレジスタで設定可能にしてもよい。
【００７１】
以上、メモリ４からレジスタ９へ種々のサイズのデータ転送する場合について説明したが、レジスタ９からメモリ４へデータ転送する場合も同様である。なお、メモリ４からレジスタ９へデータ転送する場合、データサイズが２バイトと１バイトとのときは、転送されない部分のデータは符号拡張される（０拡張または１拡張をしてもよい。）。一方、レジスタ９からメモリ４へデータ転送する場合、データサイズが２バイトと１バイトのときは、転送されない部分は影響を受けない。
【００７２】
以上、実施の形態３では、メモリ４のデータがリトルエンディアンとビッグエンディアンのどちらのエンディアンとなっているかにかかわらず、割込みベクタアドレスのサイズを単位としてメモリ４へのアクセスを行った際に同じデータ順序でレジスタに格納されるようにされることで、割込み通知受領時点で実行しているプログラムのデータのエンディアンに係らず、割り込みベクタアドレス及び割込み処理プログラム等のプログラムを共通化することが可能となる。
【００７３】
実施の形態３では、メモリのアドレス空間によって、ビッグエンディアンとリトルエンディアンの領域を設定可能にしたが、実施の形態１と同様にマイクロコンピュータに内蔵されているメモリ４については全体をビッグエンディアン又はリトルエンディアンのいずれか一方に設定可能にしてもよい。この場合には、実施の形態３と同様に、パワーオンリセット時に専用のモード端子や汎用Ｉ／Ｏポート（外部端子）と兼用のモード端子の状態をマイクロコンピュータに取り込んで、例えばレジスタにラッチし、データがリトルエンディアンかビッグエンディアンのいずれであるかをＣＰＵ１がベクタアドレスをアクセスする前に確定できるようにしてもよい。
【００７４】
（実施の形態４）
図１５はエンディアンの異なる周辺機能ブロックを有するマイクロコンピュータの概略を示し、その他の構成は実施の形態３のマイクロコンピュータＭＣＵ（図８）と同様である。図１５には、ＣＰＵ１、バスコントローラＢＳＣ、バスコントローラＢＳＣに接続されるリトルエンディアンでデータ処理を行うリトルエンディアン用周辺機能ブロック(リトルエンディアン用周辺Ｉ／Ｏ装置１８，１９)、及び、バスコントローラＢＳＣに接続されるビッグエンディアンでデータ処理を行うビッグエンディアン用周辺機能ブロック(ビッグエンディアン用周辺Ｉ／Ｏ装置１５，１６)が、記載されている。リトルエンディアン用周辺機能ブロックはリトルエンディアン用周辺データバス１７を介してバスコントローラ ＢＳＣ内のアライナ１３に接続され、ビッグエンディアン用周辺機能ブロックはビッグエンディアン用周辺データバス１４を介してバスコントローラ ＢＳＣ内のアライナ１３に接続される。本構成において、リトルエンディアン用周辺Ｉ／Ｏ装置１９内の転送バッファＴＢＬ等、ビッグエンディアン用周辺Ｉ／Ｏ装置１５内の転送バッファＴＢＢ等とＣＰＵ１のＩ／Ｏレジスタ１２（レジスタ群ＲＥＧのうちの一つのレジスタである。レジスタ９と同一のものであってもよい。）は、周辺Ｉ／Ｏ装置内の転送バッファやレジスタのサイズに関係なく、ＬＳＢが共通に接続されるようにバスが接続される。リトルエンディアン用周辺Ｉ／Ｏ装置１８、１９かビッグエンディアン用周辺Ｉ／Ｏ装置１５、１６かは、それぞれの転送バッファやレジスタに割り付けられているアドレスによって判別できるようになっている。
【００７５】
リトルエンディアン用周辺Ｉ／Ｏ装置１８，１９は、外部またはリトルエンディアン用周辺データバス１７からリトルエンディアンの並びのデータを受信し、またはデータを処理してリトルエンディアンの並びのデータを生成し、リトルエンディアン用周辺データバス１７に出力する。
【００７６】
ビッグエンディアン用周辺Ｉ／Ｏ装置１５，１６は、外部またはビッグエンディアン用周辺データバス１４からビッグエンディアンの並びのデータを受信し、又はデータを処理してビッグエンディアンの並びのデータを生成し、ビッグエンディアン用周辺データバス１４に出力する。
【００７７】
ＣＰＵ１は、第１プログラムを実行することにより、リトルエンディアン用周辺Ｉ／Ｏ装置１８，１９の動作制御を行い、リトルエンディアン用周辺Ｉ／Ｏ装置１８，１９へのデータ入出力を制御する。例えば、リトルエンディアン用周辺Ｉ／Ｏ装置１８，１９へデータを転送し、処理後のデータをメモリ４へ転送する場合、転送するデータのサイズにあわせて制御信号ＣＮＴ２にアライナ１３の転送設定情報を設定する。ビッグエンディアン用周辺Ｉ／Ｏ装置１５，１６でのデータ転送においても、制御信号ＣＮＴ２の設定は同様である。
【００７８】
アライナ１３は、周辺Ｉ／Ｏ装置内の転送バッファやレジスタのサイズとこれらの転送バッファやレジスタへのアクセスサイズが同じである場合、エンディアンにかかわらず同じデータの並びとなるように構成される。例えば、ＣＰＵ１がリトルエンディアン用周辺Ｉ／Ｏ装置１９の転送バッファＴＢＬに格納されたデータを、メモリ４の第２データ領域（ビッグエンディアン）に転送をする場合、転送バッファの指定されたアドレスを先頭として割込みベクタアドレスサイズ分のデータを、第２データ領域の指定されたアドレスを先頭として格納する。この場合、転送バッファＴＢＬに格納されたデータは、一旦、ＣＰＵ１内のレジスタに取り込まれ、その後、メモリ４の第２データ領域に転送される。
【００７９】
また、リトルエンディアン用周辺Ｉ／Ｏ装置１９からビッグエンディアン用周辺Ｉ／Ｏ装置（１５，１６）や第２データ領域（ビッグエンディアン）へデータ転送をする場合、リトルエンディアン用周辺Ｉ／Ｏ装置１９が転送バッファにデータを格納する際のＬＳＢ側に格納するデータと当該データを処理するＣＰＵ１のＩ／Ｏレジスタ１２やビッグエンディアン用周辺Ｉ／Ｏ装置１６の転送バッファＴＢＢやビッグエンディアン用周辺Ｉ／Ｏ装置１５のレジスタＢＩＲＥＧのＬＳＢ側に格納するデータを同じにすることで、周辺Ｉ／Ｏ装置内の転送バッファやレジスタのサイズとこれらの転送バッファやレジスタへのアクセスサイズが同じである場合にアライナ１３でのデータの並びを変更することが不要にできる。
【００８０】
一方で、周辺Ｉ／Ｏ装置内の転送バッファやレジスタのサイズよりもこれらの転送バッファやレジスタへのアクセスサイズが小さい場合、アライナ１３はデータの並びを変更することが必要となる。
【００８１】
ＣＰＵ１がアライナ１３の転送設定情報を設定する制御信号ＣＮＴ２は、上述の転送するデータのサイズ情報と共に、転送するデータの処理単位に関する情報および転送方向に関する情報も含む。
【００８２】
図１６は、アライナ１３の構成例を示す。セレクタ１Ａ〜４Ａ及び１Ｂ〜４Ｂはそれぞれ制御信号ＣＮＴ２が入力され、入出力の方向および部分バス同士の接続を決定する。周辺Ｉ／Ｏ装置内の転送バッファやレジスタのサイズとこれらの転送バッファやレジスタへのアクセスサイズが同じである場合は、同じビット位置のデータバス (リトルエンディアン用周辺データバス１７とビッグエンディアン用周辺データバス１４とＣＰＵ１／メモリ４用データバス３の部分バス［０：８］) 同士を接続する。
【００８３】
一方で、周辺Ｉ／Ｏ装置内の転送バッファやレジスタのサイズが２バイトまたは４バイトの場合、リトルエンディアン用周辺データバス１７からビッグエンディアン用周辺データバス１４へバイト単位に処理するデータを転送するときは、データの並びが逆になるように(例えば、４バイトの場合は、一方の部分バス[０：７]と他方の部分バス[２４：３１]、一方の部分バス［８：１５］と他方の部分バス［１６：２３］)、部分バスが接続される。
【００８４】
なお、セレクタ１Ａ〜４Ａ及び１Ｂ〜４Ｂは、実施の形態３のセレクタ１〜４と同様な双方性スイッチで構成される。
【００８５】
このようにアライナ１３を構成することにより、処理するエンディアンに応じて周辺機能ブロックを異なるバスに接続し、アライナ１３を介して夫々のバスに接続される周辺機能ブロック間でデータ転送可能とすることが可能となる。
【００８６】
以上、実施の形態４では、周辺機能ＩＰとの間での転送対象となるデータのエンディアン及び周辺機能ＩＰを制御するプログラムでの処理対象のデータのエンディアンによらず同じデータ順序でデータ転送を可能としたことで、周辺機能ＩＰを制御するプログラムの共通化をすることが可能となる。
【００８７】
更に周辺機能ブロックのデータ処理のエンディアンとＣＰＵ１のデータ処理のエンディアンの異同にかかわらず、マイクロコンピュータＭＣＵで必要とされる周辺機能ブロックを採用する自由度を向上させることができる。
【００８８】
（実施の形態５）
図１７は、実施の形態１，２，３，４及び後述する実施の形態６に係るマイクロコンピュータで実行するプログラムの開発ツールのフロー概略を示す。Ｃ言語等の高級言語で記述されたソースプログラムをコンパイラが構文解析等、及び最適化を行ってアセンブリ言語で記述したアセンブリ言語プログラムを出力する。アセンブラはコンパイラから出力されたアセンブリ言語から機械語を生成し機械語プログラムを出力する。1又は複数の機械語プログラムをリンケージエディタで結合(リンク処理)してマイクロコンピュータで実行可能なプログラムが生成される。
【００８９】
コンパイラの出力するアセンブリ言語プログラムは、大きく分けて、マイクロコンピュータのＣＰＵ等が実行する命令コードの集合部であるコードセクション(又はコードセグメント)と、高級言語プログラム中に記述した定数やコンパイラが出力した定数等の集合部であるデータセクション(又はデータセグメント)とを有する。コードセクション中の命令コードは、上述したとおり、リトルエンディアン又はビッグエンディアンのいずれか一方に固定される。一方で、データセクション中の定数等は、リトルエンディアン又はビッグエンディアンのいずれか選択可能となるが、高級言語プログラム中にいずれのエンディアンを使用するかの指定命令を有し、当該指定命令に従い、エンディアン解決が行われる。
【００９０】
高級言語又はアセンブリ言語プログラム中に含まれる定数であれば、コンパイラ又はアセンブラによりエンディアン解決が可能であるが、分岐命令の分岐先アドレス等のアドレス参照値はリンケージエディタでのリンク処理時に決定するため、コンパイラ又はアセンブラでのエンディアン解決が出来ない。斯かるアドレスのエンディアン解決は、リンケージエディタにより行われる。
【００９１】
リンケージエディタは１又は複数の機械語プログラムを結合し、結合前の機械語プログラムでは変数名として参照しているアドレス参照値について、リンク後の配置によりアドレス値を決定し、エンディアン解決を行ってアドレス定数として実行プログラムのデータセクション中に格納される。
【００９２】
上述したフローにより生成された実行可能プログラムは、マイクロコンピュータの半導体基板上に構成されるマスクＲＯＭ又はフラッシュメモリ等に格納され、マイクロコンピュータで実行可能に構成される。
【００９３】
上述した実施の形態３との対応では、データセクションからレジスタへデータ転送を行う際、データ転送サイズに応じてアライナ１１の設定を行う制御信号ＣＮＴ１が出力され、データセクションに格納されているデータの並びが決定される。
【００９４】
また、割込みベクタアドレスを含むアドレス参照値やアドレス定数については、同じデータサイズとなるようにされる。それにより、他の分岐命令やアドレス参照命令の実行において割込みベクタアドレスサイズでのアドレス情報取得では、格納されているデータセクションのエンディアンにかかわらず、適切にアドレス情報を取得することが可能となる。
【００９５】
上述した実施の形態４との対応では、周辺機能ブロック間または周辺機能ブロックとメモリ４やレジスタとの間でデータ転送を行う場合、データ転送サイズと共に当該データの処理単位に応じてアライナ１３の設定を行う制御信号ＣＮＴ２が出力され、データ転送の際のデータの並びが決定される。
【００９６】
（実施の形態６）
以下、マイクロコンピュータＭＣＵでの処理性能の向上、コード効率の向上、及び消費電力の向上について、各々、記載する。尚、コード効率の向上とは、命令を格納するために必要とされるメモリ容量を削減することである。
【００９７】
図１８に、マイクロコンピュータＭＣＵの処理性能についての評価項目を記載する。マイクロコンピュータＭＣＵは使用される用途に応じて必要とされる処理性能に幅が生じるが、図１８は、所謂デジタル家電などの比較的高度な処理を行う機器に組み込まれて用いられるマイクロコンピュータＭＣＵに求められる処理性能の一例である。
【００９８】
斯かる処理性能を実現するために、図１９に示すように、５段パイプライン処理を採用している。パイプライン処理は、一般的に知られている通り、ＣＰＵ１での命令実行を複数の処理ステージに分割し、各処理ステージをクロックの１サイクルで実行するようにされる。
【００９９】
メモリフェッチステージでは、メモリ４から命令レジスタＩＲへ命令をフェッチする。デコードステージでは、命令レジスタＩＲにフェッチした命令をデコードし、続く実行ステージで命令実行する演算器のスケジューリング等を行う。また、デコードステージではＮＯＰ命令等の実行が不要な命令についてパイプラインを終了させるためのバイパス処理や、演算に使用するレジスタの内容をフェッチするレジスタフェッチも行われる。
【０１００】
実行ステージでは、デコードステージでスケジューリングした演算器とフェッチしたレジスタの内容とから演算処理やアドレス計算を行う。メモリアクセスステージでは、命令にメモリアクセスが必要なオペランドがある場合にメモリアクセスを行う。
【０１０１】
ライトバックステージでは、実行ステージでの演算結果をレジスタ等に格納し、当該命令についてのパイプラインの終了処理を行う。
【０１０２】
図２０は、マイクロコンピュータＭＣＵのＣＰＵ１とメモリ４との間のバス構成を示す。図２１に示すように、パイプライン処理を行うことでＣＰＵ１での命令実行の各処理ステージを、複数の命令で異なる処理ステージを実行させて１命令辺りの実効処理性能を向上させる。この場合、メモリアクセスが必要なオペランドを有する命令のメモリアクセスステージと、命令フェッチとが同じタイミングとなり、メモリアクセスの競合が生じる。そのため、命令フェッチを行う命令バス５とオペランド用のメモリアクセスバス（データバス３）とを分離するハーバード・アーキテクチャを採用し、メモリアクセスの競合が発生する機会を減少させる。
【０１０３】
図２０に記載のＩｎｓｔｒｕｃｔｉｏｎ  Ｉｎｔｅｒｆａｃｅは、図９に記載の命令レジスタＩＲ及び命令デコーダｉＤＥＣに相当する。Ｄａｔａ  Ｉｎｔｅｒｆａｃｅはメモリアクセスバスとのインタフェースであり、オペランド用のメモリアクセス制御を行う。
【０１０４】
ＣＰＵ１においてハーバード・アーキテクチャとパイプライン処理を採用したことにより、ＣＰＵ１の行うメモリアクセスの競合(命令フェッチとオペランドフェッチ)回避が可能となり、ＣＰＵ１における命令実行性能を向上させることが可能となる。
【０１０５】
所謂デジタル家電では、ＤＶＤ(高記録密度規格を含む)やデジタルＴＶといった、動画処理を行う機器が少なからず存在する。動画処理では画素毎に積和演算などのＤＳＰ (Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ) 演算を繰返し実行する。
【０１０６】
図２２に記載の通り、ＤＳＰ演算においてメモリ４に格納されている画素毎のデータを演算ごとにレジスタへ読み出し演算を繰返したのでは、データをレジスタへ読み出す処理が実際の演算に対してオーバヘッドとなる。そのため、演算に使用する２つのデータをメモリ４から直接読み出して乗算を行い、既演算結果との加算処理を行うメモリ間積和演算命令を実行可能とした。
【０１０７】
また、レジスタに格納済みのデータに対しても同様に積和演算を行うレジスタ間積和演算命令を実行可能とした。
【０１０８】
メモリ間積和演算命令によりメモリ４に格納された多数のデータを使用した積和演算において、メモリ４からレジスタへデータ転送をする時間を削減することが可能となり演算器の処理効率が向上し、メモリ４からレジスタへデータ転送する転送命令が不要になるため、コード効率が向上する。また、レジスタ間積和演算命令によりレジスタに格納済みのデータを使用した積和演算を高速に実行可能となり、演算器の処理効率が向上する。
【０１０９】
また、座標演算等では、浮動小数点演算を繰返し実行することも必要となる。図２３に記載の通り、浮動小数点演算器では汎用レジスタとは別の専用データレジスタを有し、専用データレジスタを用いて演算を行う。斯かる演算では、汎用レジスタに格納されたデータを専用レジスタに転送する処理がオーバヘッドとなる。そのため、汎用レジスタに格納されたデータを浮動小数点演算器が直接アクセスして演算可能に構成する。かかる構成により、汎用レジスタから専用レジスタへのデータ転送処理を削減することが可能となり演算器の処理効率が向上し、汎用レジスタから専用レジスタへデータ転送する転送命令が不要となるため、コード効率が向上する。
【０１１０】
図２４は、積和演算器と浮動小数点演算器とを用いた他の演算例を示す。
【０１１１】
外部のセンサ等のアナログ信号をＡ／Ｄ変換器によりデジタル変換してメモリ４に格納した後、メモリ４に格納されたデジタル変換されたセンサ情報とメモリ４に格納されているフィルタ演算係数とを用いてメモリ間積和演算命令によるフィルタ演算を行い、デジタル変換されたセンサ情報に含まれるノイズの除去を行うことが可能となる。
【０１１２】
モータにＰＷＭ（Ｐｕｌｓｅ  Ｗａｖｅ  Ｍｏｄｕｌａｔｉｏｎ）波形を供給して回転制御を行うモータ制御において、モータの各位相（Ｕ／Ｖ／Ｗ相）から出力されるモータ電流をＡ／Ｄ変換器によりデジタル変換してレジスタに格納した後、レジスタ間積和演算命令による座標変換を行う。汎用レジスタに格納されている積和演算結果を浮動小数点演算器でＰＩＤ（比例／積分／微分）制御演算を行った後、汎用レジスタの制御演算結果をレジスタ間積和演算命令により再度座標変換を行い、モータ制御信号としてＰＷＭ波形をモータに供給する。斯かる演算により、汎用レジスタを用いた演算を繰返すことが可能となり、専用レジスタを用いた演算に比べて短時間間隔でのモータ制御が可能となる。
【０１１３】
図２５は、ユーザのアプリケーションで出現頻度の高い命令を分析したものである。頻出命令について命令サイズを小さくすることにより、ユーザアプリケーションの実行プログラムサイズを小さくすることが可能となり、コード効率の向上を図ることが可能となる。また、出現頻度の高い命令をユーザにとってより使い易い命令とすることは、ユーザビリティの向上に繋がることとなる。
【０１１４】
図２６は、出現頻度が高く命令サイズを小さくした命令の一例である。
【０１１５】
プログラム中のループ処理や変数の持つ値に応じての多方向分岐で、ループ条件の成立／非成立や変数の値に応じて分岐を行う際に用いられる分岐命令として、相対アドレスで分岐先アドレスを指定するＢＥＱ(条件成立分岐)、ＢＮＥ(条件非成立分岐)、ＢＲＡ(無条件成立分岐)がある。
【０１１６】
これらの命令の動作では、分岐するメモリ４内のアドレス距離は比較的短いものもあり、分岐距離が８バイト以内、２５６バイト以内、６５４３４バイト以内の夫々にあわせて、分岐命令のコードサイズとして、１バイト、２バイト、３バイトの命令を採用可能とした。これにより、分岐距離に応じてのユーザの選択自由度が高くなり、コード効率の向上を図ることができる。
【０１１７】
レジスタに格納したアドレス値を基準として相対変位値を指定するレジスタ間接アドレッシングでの転送命令、即値(イミディエイト値)とレジスタとの間で演算を行う比較命令や加算命令において、レジスタ格納値を基準とする相対変位値及び即値として指定できる値の範囲にあわせて、命令のコードサイズを２バイト〜８バイトを選択可能としている。
若しくは、レジスタ格納値のうちの演算に使用するデータ幅を指定可能な演算命令において、当該データ幅として指定できる値の範囲にあわせて乗算命令においてコードサイズを２バイト〜６バイトを選択可能とし、または、除算命令においてコードサイズを３バイト〜７バイトを選択可能としている。
【０１１８】
また、サブルーチン分岐命令において、プログラムカウンタ格納値＋レジスタ格納値演算による分岐先アドレスを求めるようにすることで、命令のコードサイズを２〜４バイトで選択可能としている。
【０１１９】
図２７は、インデックス付レジスタ間接アドレッシングの例を示す。
【０１２０】
インデックス付レジスタ間接アドレッシングでは、ベースアドレスを格納したレジスタとオフセットアドレスを格納したレジスタとの加算を行い、求まったアドレスに対してデータ転送等を行う。この場合、バイトサイズ指定がある場合には、オフセットアドレスはそのままでベースアドレスとの加算を行い、ロングワードサイズ指定がある場合には、オフセットアドレスを４倍した値とベースアドレスとの加算を行う。斯かるアドレッシング指定を採用することにより、バイトサイズ指定においてはオフセットアドレスとベースアドレスとの加算命令、ロングワードサイズ指定ではオフセットアドレスの４倍化演算(２ビット左シフト演算)命令とオフセットアドレスとベースアドレスとの加算命令との削減を図ることが可能となり、コード効率が向上する。
【０１２１】
図２８は、ポストインクリメント／プリデクリメント機能付きのレジスタ間接アドレッシングの例を示す。
【０１２２】
ポストインクリメント／プリデクリメントは、所定数のエントリを有するテーブルに格納された値に対して演算を行う場合に主に用いられる。ポストインクリメントとプリデクリメントのどちらを使用するかは、テーブルの低位側アドレスから演算を行う場合はポストインクリメント、テーブルの高位側アドレスから演算を行う場合はプリデクリメントを用いる。テーブルの低位側アドレスから演算を行う場合、最初のテーブルエントリに格納された値に対して演算を行った後、次のテーブルエントリの値を参照するアドレスの加算を行う必要がある。ポストインクリメント／プリデクリメント機能によりテーブルエントリを参照するアドレスの加算／減算を、当該テーブルエントリに格納された値に対する演算を行う演算命令で行うことが可能となり、参照アドレスの加算／減算を行う命令の削減を図ることが可能となり、コード効率が向上する。
【０１２３】
図２９は、３オペランド指定可能な演算の例を示す。
【０１２４】
オペランドとして２つのレジスタ等を指定した加算命令を実行する場合、加算値と被加算値とをそれぞれのレジスタに格納しておき、加算結果を、被加算値を格納していたレジスタに格納する。斯かる演算動作では、被加算値を別の演算でも利用する場合は、別のレジスタ又はメモリ４に格納しておき、演算の毎に被加算値を被加算値格納レジスタに転送する必要がある。
【０１２５】
レジスタ等で３オペランドを指定可能とすることにより、演算結果を被加算値格納レジスタとは別のレジスタに格納するように指定可能となり、被加算値格納レジスタへ演算の毎に被加算値を転送する命令の削減を図ることが可能となり、コード効率が向上する。
【０１２６】
図２３は、マイクロコンピュータＭＣＵでのレジスタ構成の例を示す。マイクロコンピュータＭＣＵは、演算に主に用いられる汎用レジスタと、マイクロコンピュータＭＣＵの動作制御に用いられるコントロールレジスタとを有する。
【０１２７】
汎用レジスタは基本となるサイズ(３２ｂｉｔ)に対して、８ｂｉｔデータや１６ｂｉｔデータでの演算に用いる８ｂｉｔレジスタや１６ｂｉｔレジスタとして使用できるように分割されることもある。しかしながら、本実施の形態に係るマイクロコンピュータＭＣＵでは、このようなレジスタの分割は行わず、全てのレジスタを基本となる３２ｂｉｔでのみ使用するようにしている。
【０１２８】
レジスタを分割した場合、演算対象となる部分レジスタと演算対象とならない部分レジスタとのアクセス制御が必要となるため、レジスタ制御回路が複雑になり、レジスタアクセスの時間的オーバヘッドと消費電力の増大とを招くことになる。汎用レジスタは、命令実行においてアクセスされることが非常に多く、レジスタアクセスでの時間的オーバヘッドと消費電力の増大とが１回あたりでは夫々微小であったとしてもプログラム実行全体では時間的オーバヘッドと消費電力とは大きなものとなる。
【０１２９】
レジスタ分割を採用しないことにより、レジスタアクセスの時間的オーバヘッドと消費電力の低減とを図ることができる。また、汎用レジスタのサイズが統一されているため、コンパイラで高級言語からアセンブリ言語へのコンパイル処理において使用できるレジスタの自由度が高くなり、汎用レジスタの使用効率が向上することから、メモリ４へのアクセス頻度を低減することが可能になる。斯かる点においても、命令実行におけるメモリアクセスオーバヘッド及び消費電力の低減化を図ることができる。
【０１３０】
コントロールレジスタには、割込み処理やサブルーチン処理でのスタックポインタ(ＩＳＰ,ＵＳＰ)、割込みテーブルの配置アドレスを示す割込みテーブルレジスタ(ＩＮＴＢ)、実行中の命令アドレスを示すプログラムカウンタ(ＰＣ)と命令実行での状態を示すプロセッサステータスワード(ＰＳＷ)、浮動小数点演算器およびその他のコプロセッサの実行状態を示す浮動小数点ステータスワード(ＦＰＳＷ,ＣＰＥＮ)を有する。更に高速割込み処理を行うための専用レジスタとして、ＰＳＷとＰＣをバックアップするバックアップＰＳＷ（ＢＰＳＷ）とバックアップＰＣ（ＢＰＣ）、高速割込み処理での高速割込みベクタアドレス(ＦＩＮＴＶ)を有する。
【０１３１】
図３１、図３２及び図３３は、割込み処理の高速化の場合を示す。
【０１３２】
図３１は、高速割込み処理のシーケンスを示す。通常の割込み処理では、割込みコントローラＩＮＴＣからの割込み通知に応じて、ＰＳＷとＰＣを夫々スタック領域に退避し、割り込み要因に応じたベクタテーブルの読み出しを行い割込み処理ルーチンのアドレスを取得して当該割込み処理ルーチンに分岐をする。また、割込み通知が複数通知され又は既に割込み処理を行っている状態での別の割込み通知がされた場合には、割込み処理の処理優先順位を判定し、優先処理する割込み処理に応じて割込みマスク等のフラグ設定処理を行う。これらの処理のうち、スタック領域と割込みベクタテーブルとはメモリ４に割り当てられるため、ＰＳＷとＰＣのスタック領域への退避とベクタテーブル読み出しでは、メモリアクセスの時間が必要となる。
【０１３３】
高速割込み処理では、ＰＳＷとＰＣをスタック領域に退避し割込みベクタテーブルへアクセスするのではなく、コントロールレジスタとして準備されるバックアップＰＳＷとバックアップＢＰＣとに夫々退避し、高速割込みベクタアドレスに格納されている割込み処理ルーチンへ分岐する。斯かる処理により、高速割込み処理ではメモリアクセスを削減することが可能となり、割込み処理への分岐を高速化することが可能となる。
【０１３４】
図３２は、割込み処理における汎用レジスタの割り当てを示す。通常の割込み処理では、割込み処理に分岐する前にアプリケーションで使用していた汎用レジスタに格納されているデータが割込み処理中に書き換えられてしまい、割込み処理から復帰した後でのアプリケーションの継続実行において不都合が生じないように、汎用レジスタに格納されているデータをスタック領域に退避し又は割込み処理に分岐する際に使用するレジスタバンクを異なるバンクに切り替えることが行われる。このスタック領域への退避はメモリアクセスを発生し、また、レジスタバンクの切り替えでも実態としてはメモリ４の領域へレジスタに格納しているデータを退避することで実現している。
【０１３５】
割込み処理への分岐を高速化するために、汎用レジスタをアプリケーション用レジスタと割込み用レジスタとに夫々割り当て、アプリケーション実行中はアプリケーション用に割り当てられたレジスタを使用し、割込み処理の実行中は割り込み用レジスタを使用するように制御する。アプリケーション用レジスタと割込み処理用レジスタとはプログラムで割り当て設定可能とすることでレジスタの割り当ての自由度が高まり、また、汎用レジスタの退避が不要となるため、割込み処理の実行開始を高速化することが可能となる。
【０１３６】
図３３に示すとおり、ＰＳＷとＰＣの退避および割込みベクタアドレス取得でのメモリアクセスの削減(高速割込み処理)と、アプリケーション用レジスタから割り込み用レジスタへの汎用レジスタの切り替え(汎用レジスタ割り当て)により、割込み通知がされた後 当該割込み通知に対応した割込み処理の開始までの時間を短縮し、マイクロコンピュータＭＣＵのプログラム実行効率を向上することが可能となる。
【０１３７】
図３４は、メモリプロテクションを示す。アプリケーションＡとアプリケーションＢとが夫々アプリケーションＡ用メモリ領域とアプリケーションＢ用メモリ領域とを割り当てられている場合に、アプリケーションＡが誤ってアプリケーションＢ用メモリ領域にアクセスしてアプリケーションＢで使用するデータを書換え、又は、アプリケーションＡからアプリケーションＢに誤って分岐する、等が生じた場合、アプリケーションＢの実行動作が不安定となり、マイクロコンピュータＭＣＵ全体としての動作も不安定となる。
【０１３８】
斯かる事態の発生を防止するために、メモリプロテクションユニットを有し、アプリケーションＡがアプリケーションＢ用のメモリ領域へアクセスし、または、アプリケーションＡからアプリケーションＢへ分岐する、等を防止する。これにより、アプリケーションＢの実行動作が不安定になることが防止され、マイクロコンピュータＭＣＵ全体としての動作も安定化させることが可能となる。
【０１３９】
図３５は、エンディアン変換命令の例を示す。
【０１４０】
実施の形態３及び実施の形態４としてデータのバイエンディアン処理について記載したが、リトルエンディアンとしてデータ処理されるメモリ領域に格納されているデータを汎用レジスタに読出し所定の演算を行った後、ビッグエンディアンとしてデータ処理されるメモリ領域又はビッグエンディアン用周辺Ｉ／Ｏ装置へデータの転送をすることも生じる。斯かる場合、アライナ１１への制御信号ＣＮＴ１又はアライナ１３への制御信号ＣＮＴ２を設定することにより、アライナ１１又はアライナ１３でデータの並びを変更することも可能である。ある程度連続してデータの変換を行う場合には、アライナ１１又はアライナ１３により、データの並びを変更することが有効である。
【０１４１】
一方で、データをリトルエンディアンとビッグエンディアンとに交互に変換してメモリ領域に格納するような場合では、アライナ１１又はアライナ１３を交互にエンディアン変換するように設定する必要がある。そのような場合には、エンディアン変換命令によりレジスタ内でデータのエンディアンを変換し、アライナ１１及びアライナ１３の設定は変更しないほうが、アライナ１１又はアライナ１３の設定変更に係る消費電力を低減することが可能となる場合もある。
【０１４２】
図３６、図３７及び図３８は、マイクロコンピュータＭＣＵの低消費電力化のための設計方法についての例を示す。
【０１４３】
フリップフロップなどのクロック同期動作をする論理素子やクロック供給経路に配置されるクロックドライバはクロックが供給されている限り電流を流すため、使用しない回路に対してクロックの供給を停止することが必要である。そのため、図３６に示すように、マイクロコンピュータＭＣＵの論理合成を行う時点でクロックゲーティング回路を挿入し、クロック供給を停止できるようにする。
【０１４４】
次に、クロック同期設計において、クロック同期動作をするフリップフロップに挟むようにクロック非同期動作をする論理素子を配置した場合、フリップフロップ間でタイミングバイオレーションを起こした経路(クリティカルパス)が生じ、斯かるタイミングバイオレーションを解消する必要がある。図３７に示すように、最初に低速の高しきい値電圧／低リーク電流の論理素子を用いてクロック同期設計を行い、クリティカルパスに対してのみ、低しきい値電圧／高リーク電流の高速の論理素子を使用し、タイミングバイオレーションの解消を図る。斯かるクロック同期設計を行うことにより、マイクロコンピュータＭＣＵを構成する多数の論理素子は低消費電力の論理素子となり、低消費電力論理素子では、タイミングバイオレーションを生じる経路はより高い消費電力でより高速の論理素子を用い、全体として低消費電力となるマイクロコンピュータＭＣＵのクロック同期設計が可能となる。
【０１４５】
また、図３８に示すように、マイクロコンピュータＭＣＵの内部を複数の電源ドメインに分割し、動作していない電源ドメインに対する電源供給を停止するよう、複数の低消費電力モードを持たせる。この場合、マイクロコンピュータＭＣＵ内部の内蔵レギュレータは電源ドメイン夫々に電源を供給し、内蔵レギュレータから電源ドメインの間に当該電源ドメインへ電源供給し又は停止するスイッチ回路を配置する。
【０１４６】
図３９は、プログラムを格納するＲＯＭとしてＦｌａｓｈメモリを使用した場合の、ＦｌａｓｈメモリのアクセススピードがマイクロコンピュータＭＣＵの処理性能に与える影響を示す図である。３０ＭＨｚで読み出し動作可能なＦｌａｓｈメモリをマイクロコンピュータＭＣＵに使用した場合、マイクロコンピュータＭＣＵを１００ＭＨｚのクロックで動作させたとしても命令フェッチの毎に複数クロックサイクルのウェイト動作が必要となり、プログラムの実効的な実行性能は１００ＭＨｚから大幅に低下することとなる。
【０１４７】
斯かる実行性能の低下を回避するために、ＦｌａｓｈメモリとＣＰＵ１との間に命令キャッシュメモリを配置することが考えられる。命令キャッシュメモリを配置することで、ＣＰＵ１が命令キャッシュメモリに格納されている命令をフェッチする場合(キャッシュヒット)は１クロックサイクルでの命令フェッチが可能であるが、命令が命令キャッシュメモリに格納されていない場合(キャッシュミスヒット)は複数クロックサイクルでのウェイト動作が必要となり、また、命令キャッシュメモリの占める面積が必要となる。
【０１４８】
Ｆｌａｓｈメモリのメモリアレイ構成、アドレスデコーダ等の周辺論理回路の高速化によりＦｌａｓｈメモリは１００ＭＨｚで動作可能となるようになり、ＣＰＵ１は命令キャッシュメモリを有さずに毎クロックサイクル動作が可能となる。また、マイクロコンピュータＭＣＵの動作クロックがより高速化した場合でも、キャッシュミスヒットを生じた場合のウェイトするクロックサイクル数を削減することが可能となる。
【０１４９】
実施の形態６で記載されるマイクロコンピュータＭＣＵやＣＰＵ１の構成、機能、動作等は、実施の形態1〜４のマイクロコンピュータＭＣＵやＣＰＵ１に適用できることはいうまでもない。
【０１５０】
以上、本発明の実施の形態を詳細に開示し記述したが、以上の記述は本発明の適用可能な局面を例示したものであって、本発明はこれに限定されるものではない。即ち、記述した局面に対する様々な修正や変形例を、この発明の範囲から逸脱することの無い範囲内で考えることが可能である。
【符号の説明】
【０１５１】
１ ＣＰＵ、２ アドレスバス、３ データバス、４ メモリ、５ 命令バス、９ レジスタ、１１，１３ アライナ、１４  ビッグエンディアン用周辺データバス、１７  リトルエンディアン用周辺データバス、ＢＳＣ  バスコントローラ、ＩＮＴＣ  割込みコントローラ、ＰＣ  プログラムカウンタ、ＩＲ  命令レジスタ、ｉＤｅｃ  命令デコーダ
【図１】
0005521092.tif 000002
【図２】
0005521092.tif 000003
【図３】
0005521092.tif 000004
【図４】
0005521092.tif 000005
【図５】
0005521092.tif 000006
【図６】
0005521092.tif 000007
【図７】
0005521092.tif 000008
【図８】
0005521092.tif 000009
【図９】
0005521092.tif 000010
【図１０】
0005521092.tif 000011
【図１１】
0005521092.tif 000012
【図１２】
0005521092.tif 000013
【図１３】
0005521092.tif 000014
【図１４】
0005521092.tif 000015
【図１５】
0005521092.tif 000016
【図１６】
0005521092.tif 000017
【図１７】
0005521092.tif 000018
【図１８】
0005521092.tif 000019
【図１９】
0005521092.tif 000020
【図２０】
0005521092.tif 000021
【図２１】
0005521092.tif 000022
【図２２】
0005521092.tif 000023
【図２３】
0005521092.tif 000024
【図２４】
0005521092.tif 000025
【図２５】
0005521092.tif 000026
【図２６】
0005521092.tif 000027
【図２７】
0005521092.tif 000028
【図２８】
0005521092.tif 000029
【図２９】
0005521092.tif 000030
【図３０】
0005521092.tif 000031
【図３１】
0005521092.tif 000032
【図３２】
0005521092.tif 000033
【図３３】
0005521092.tif 000034
【図３４】
0005521092.tif 000035
【図３５】
0005521092.tif 000036
【図３６】
0005521092.tif 000037
【図３７】
0005521092.tif 000038
【図３８】
0005521092.tif 000039
【図３９】
0005521092.tif 000040