図1には本発明の一実施例に係るマイクロコンピュータ1の全体的なブロック図が示される。同図に示されるマイクロコンピュータは半導体集積回路製造技術によって単結晶シリコンのような1個の半導体基板に形成されている。マイクロコンピュータ1は、セントラルプロセッシングユニットとしてのCPUコア(CPU Core)2、ディジタル信号処理ユニットとしてのDSPエンジン(DSP Engine)3、X-ROM4、Y-ROM5、X-RAM6、Y-RAM7、割り込みコントローラ(Interrupt Controller)8、バスステートコントローラ(Bus State Controller)9、内蔵周辺回路(Peripheral Circuit)10、11、外部メモリインターフェース(External Memory Interface)12、クロックパルスジェネレータ(CPG)13より構成されている。前記X-ROM4,Y-ROM5は命令若しくは定数データ等を格納するための読み出し専用又は電気的に書き換え可能なリード・オンリ・メモリであり、X-RAM6,Y-RAM7はデータの一時格納若しくはCPUコア2とDSPエンジン3の作業領域などとして利用されるランダム・アクセス・メモリである。前記X-ROM4とX-RAM6を内部命令/データ用のXメモリ(Internal Instruction/Data X Mem.)と総称し、Y-ROM5とY-RAM7を内部命令/データ用のYメモリ(Internal Instruction/Data Y Mem.)と総称する。
本実施例のマイクロコンピュータ1はそのバス構成として、外部メモリインタフェース12に結合される内部アドレスバスIAB及び内部データバスIDB、外部メモリインタフェース12に結合されない内部アドレスバスXAB及び内部データバスXDB、外部メモリインタフェース12に結合されない内部アドレスバスYAB及び内部データバスYDB、そして内蔵周辺回路10,11のための周辺アドレスバスPAB及び周辺データバスPDBを備える。尚、コントロールバスについては図示を省略してあるが、アドレスバス及びデータバスの対に対応してそれぞれ設けられている。
CPUコア2には、外部メモリインターフェース12を通してチップ外部に接続可能なデータバスIDBが接続され、割り込みコントローラ8からの割り込み信号80が与えられる。CPUコア2はDSPエンジン3を制御するための制御信号20をDSPエンジン3に供給する。さらにCPUコア2は、外部メモリインターフェース12を通してチップ外部に接続可能なアドレスバスIABと外部メモリインターフェース12には接続されていないアドレスバスXAB,YABにアドレス信号を出力する。CPUコア2は、クロックパルスジェネレータ(CPG)13から出力されるノンオーバーラップ2相のクロック信号Clock1,Clock2を動作基準クロック信号として動作される。CPUコア2についてはその詳細を後述するが、図1のCPUコア2には、レジスタファイル21、算術論理演算器(ALU)22、アドレス加算器(Add-ALU)23、デコーダ24、命令レジスタ(IR)25が代表的に図示されている。レジスタファイル21はアドレスレジスタやデータレジスタとして任意に利用され、また、プログラムカウンタ、そしてコントロールレジスタなどを含む。デコーダ24は命令レジスタ25にフェッチされた命令をデコードして内部制御信号(図1には図示を省略)及び制御信号20を生成する。命令レジスタ(IR)25は、それぞれ16ビットの上位側領域(UIR)と下位側領域(LIR)から成る。詳細については後述するが、下位側領域(LIR)の値は選択的に上位側領域(UIR)にシフト可能にされている。尚、割込み等の例外発生時の命令実行手順を制御したり、例外発生に対する内部状態の退避復帰をハードウェア的に制御したりするためのシーケンス制御回路は図示を省略してある。
DSPエンジン3は前記データバスIDB,XDB,YDBに接続され、クロック信号Clock1,Clock2を動作基準クロック信号として動作される。DSPエンジン3についてはその詳細を後述するが、図1のDSPエンジン3には、データレジスタファイル31、算術論理演算器及びシフタ(ALU/Shifter)32、乗算器(MAC)33、及びデコーダ34が代表的に図示されている。データレジスタファイル31は積和演算等に利用される。デコーダ34はCPUコア2から与えられる制御信号20をデコードして、DSPエンジン3の内部制御信号(図1には図示を省略)を生成する。
X-ROM4及びX-RAM6はアドレスバスIAB,XABとデータバスIDB,XDBに接続されている。Y-ROM5及びY-RAM7はアドレスバスIAB,YABとデータバスIDB,YDBに接続されている。内蔵メモリは、DSPエンジン3による積和演算を考慮してXメモリ4,6とYメモリ5,7に2面化され、内部バスXAB,XDBとYAB,YDBによってそれぞれ並列的にアクセス可能にされている。さらに、内部バスXAB,XDBとYAB,YDBは外部にインタフェースされるバスIAB,IDBとも個別化されているので、Xメモリ4,6とYメモリ5,7のアクセスに並行して外部メモリアクセスも可能にされる。Xメモリ4,6及びYメモリ5,7はDSPエンジン3による積和演算のためのデータ一時記憶領域、定数データの記憶領域などとして利用される。尚、X−RAM,Y−RAMはCPUコア2のデータ一時記憶領域若しくはワーク領域としても利用可能であることは言うまでもない。
前記割り込みコントローラ8は、内蔵周辺回路10,11などからの割り込み要求信号(Interrupts)81を入力し、各種割込み要求に対する優先順位付けや割込み要求に対するマスキングのための情報に従って割込み要求を調停して受け付け、受け付けた割込み要求に応ずる割り込みベクタ(Interrupt Vector)82をアドレスバスIABに出力し、さらに割り込み信号80をCPUコア2に出力する。
バスステートコントローラ9はアドレスバスIAB,PABとデータバスIDB,PDBに接続され、アドレスバスPAB及びデータバスPDBに接続されている内蔵周辺回路10,11とCPUコア2とのインタフェース制御を行う。
外部メモリインターフェース12は、アドレスバスIABとデータバスIDBに接続され、マイクロコンピュータ1のチップ外部の図示を省略したアドレスバスとデータバスに接続され、外部とのインタフェース制御を行う。
図2にマイクロコンピュータ1のアドレスマップの一例が示される。本実施例のマイクロコンピュータ1は32ビットで規定されるアドレス空間を管理する。前記アドレスバスIABはビット幅が32ビットとされる。そのアドレス空間の中には、例外処理ベクタ領域、X-ROM空間(X−ROM4に割り当てられたアドレス空間)、X-RAM空間(X−RAM7に割り当てられたアドレス空間)、Y-ROM空間(Y−ROM5に割り当てられたアドレス空間)、Y-RAM空間(Y−RAM7に割り当てられたアドレス空間)、内蔵周辺回路割付け空間(内蔵周辺回路10,11が割り当てられたアドレス空間)などが存在する。図2の例はX-ROM4は24KB、X-RAM6は4KB、Y-ROM5は24KB、Y-RAM7は4KBが割り当てられている。
図2に従えば、16進数表記でH'00000000〜H'000003FFの空間の256B領域には例外処理ベクタ領域が割り付けられている。H'00000400〜H'01FFFFFFにはユーザによって使用可能な通常空間が割り付けられている。通常空間はマイクロコンピュータ1の外部に接続可能なメモリ領域とされる。H'02000000〜H'02005FFFには、X-ROM空間が割り付けられている。H'02006000〜H'02006FFFには、X-RAM空間が割り付けられている。H'02007000〜H'02007FFFはX-RAM_Mirror空間となっており、ここをアクセスすると実際にはH'02006000〜H'02006FFFのX-RAM空間をアクセスすることになる。H'02008000〜H'0200FFFFは、X-RAM,RAM_Mirror空間となっており、ここをアクセスすると実際にはH'02000000〜H'02007FFFのX-ROM空間およびX-RAM空間をアクセスすることになる。H'02010000〜H'02015FFFには、Y-ROM空間が割り付けられている。H'02016000〜H'02016FFFには、Y-RAM空間が割り付けられている。H'02017000〜H'02017FFFはY-RAM_Mirror空間となっており、ここをアクセスすると実際にはH'02016000〜H'02016FFFのY-RAM空間をアクセスすることになる。H'02018000〜H'0201FFFFは、Y-ROM,RAM_Mirror空間となっており、ここをアクセスすると実際にはH'02010000〜H'02017FFFのY-ROM空間およびY-RAM空間をアクセスすることになる。H'02020000〜H'07FFFFFFFには、通常空間が割り付けられている。H'08000000〜H'1FFFFFFFFには、予約領域が割り付けられている。この予約領域は、ユーザチップ(実チップ)の場合にはアクセス不可能になっており、エバチップ(エミュレーションなどに利用される評価用チップ)の場合にはASE空間(エミュレーション用の制御空間)領域として割り当てられる。H'20000000〜H'27FFFFFFFには、通常空間が割り付けられている。H'28000000〜H'FFFFFDFFには、予約領域が割り付けられている。H'FFFFFE00〜H'FFFFFFFFには 内蔵周辺回路のレジスタアドレス値を割り付ける内蔵周辺回路割り付け領域が割り付けられている。
図3にはモジュロアドレス出力部を詳細に示したCPUコア2のブロック図が示される。図3において破線で囲った部分がモジュロアドレス出力部200である。モジュロアドレス出力部200は、モジュロアドレスレジスタ(例えばA0X)より出力した値をバッファ(例えばMABX)を通してアドレスバス(例えばXAB)に出力すると同時に、モジュロアドレスレジスタ(A0X)より出力した値を加算手段(例えばALU)で加算して再びモジュロアドレスレジスタ(A0X)に格納するアドレス更新出力動作などを行う回路ブロックであり、積和演算のような繰返し演算のためのデータアクセスアドレスを順次更新して生成する。ランダムロジック回路(Random Logic Circuit)201と記載された回路ブロックは、図1のデコーダ24や前記シーケンス制御回路、そしてコントロールレジスタやステータスレジスタなどを含む回路ブロックである。
図3においてC1,C2,DR,A1,B1,A2,B2,DWはそれぞれCPUコア2内部の代表的に示されたバスである。CPUコア2とデータバスIDBとのインタフェースは前記命令レジスタ(IR)25及びデータバッファ(Data Buffer)203にて行われる。命令レジスタ(IR)25にフェッチされた命令はランダムロジック回路(Random Logic Circuit)201に含まれる前記デコーダ24等に供給される。CPUコア2とアドレスバスIABとのインタフェースはプログラムカウンタ(PC)204及びアドレスバッファ(Address Buffer)205で行われる。CPUコア2とアドレスバスXABとのインタフェースはメモリアドレスバッファ(MABX)206で行われ、CPUコア2とアドレスバスYABとのインタフェースはメモリアドレスバッファ(MABY)207で行われる。アドレスバッファ205へのアドレス情報の入力経路は、バスC1,A1,A2の中から選択可能にされ、メモリアドレスバッファ206,207へのアドレス情報の入力経路は、バスC1,C2,A1,A2の中から選択可能にされる。算術演算器(AU)208はプログラムカウンタ204の値のインクリメントに利用される。209は汎用レジスタ(Reg.)、210はアドレスのインデックス修飾に利用されるインデックスレジスタ(Ix)、211は同じくインデックス修飾に利用されるインデックスレジスタ(Iy)、212はアドレス演算専用の加算器(PAU)、213は算術論理演算器(ALU)である。
制御ビットMXYはアドレスバスXAB又はアドレスバスYABのどちらのアドレスに対しモジュロ演算を行うかを指定し、論理値”1”によってアドレスバスXABを、論理値”0”によってアドレスバスYABを指定する。制御ビットDMはモジュロ演算を行うか否かを指示し、論理値”1”によってモジュロ演算を行うことを指示し、論理値”0”によってモジュロ演算を行わないことを指示する。モジュロスタートアドレスレジスタ(MS)214はモジュロ演算開始アドレスを格納し、モジュロエンドアドレスレジスタ(ME)215はモジュロ演算終了アドレスを格納する。
モジュロアドレスレジスタ(A0x,A1x)216は現在のモジュロアドレスを格納するカレントアドレスレジスタ、217はモジュロエンドアドレスレジスタ(ME)215の値とモジュロアドレスレジスタ(A0x,A1x)216の値とを比較するコンパレータ(CMP)、218はコンパレータ217の出力と制御ビットMXY,DMの3入力に対して論理積を採るアンドゲート、219はバスC1の値とモジュロスタートアドレスレジスタ(MS)214の値とを選択するセレクタであり、それらはアドレスバスXABに関するモジュロ演算に利用される。セレクタ219はアンドゲート218の論理値”1”出力によってレジスタ(MS)214の値を選択し、選択した値をモジュロアドレスレジスタ(A0x,A1x)216に与える。モジュロアドレスレジスタ216はA0x又はA1xの何れかが選択されて利用される。
モジュロアドレスレジスタ(A0y,A1y)226は現在のモジュロアドレスを格納するカレントアドレスレジスタ、227はモジュロエンドアドレスレジスタ(ME)215の値とモジュロアドレスレジスタ(A0y,A1y)216の値とを比較するコンパレータ(CMP)、228はコンパレータ227の出力と制御ビットMXYの反転ビットと制御ビットDMとの3入力に対して論理積を採るアンドゲート、229はバスC2の値とモジュロスタートアドレスレジスタ(MS)214の値とを選択するセレクタであり、それらはアドレスバスYABに関するモジュロ演算に利用される。セレクタ229はアンドゲート228の論理値”1”出力によってレジスタ(MS)214の値を選択し、選択した値をモジュロアドレスレジスタ(A0y,A1y)226に与える。モジュロアドレスレジスタ226はA0y又はA1yの何れかが選択されて利用される。
尚、ランダムロジック回路201に記載されたOP Codeは命令レジスタ25から供給される命令コードを意味し、CONSTは定数値を意味する。
ここで、CPUコア2におけるモジュロ演算動作として、例えば、モジュロアドレスレジスタ(A0x)216を用いて、アドレスバスXABへ供給すべきアドレス情報をモジュロ演算にて生成する動作を説明する。
先ず、モジュロ演算開始アドレスがモジュロスタートアドレスレジスタ(MS)214に、モジュロ演算終了アドレスがモジュロエンドアドレスレジスタ(ME)215にそれぞれ書き込まれる。モジュロアドレスレジスタ(A0x)にはモジュロ演算を開始するアドレス値が書き込まれる。次にアドレスバスXABのアドレスに対しモジュロ演算を行うので、XAB、YABのどちらのアドレスに対しモジュロ演算を行うかを決定する制御ビットMXYに対し論理値”1”が書き込まれる(アドレスバスYABに対しモジュロ演算を行う場合は、制御ビットMXYに論理値”0”が書き込まれる)。最後にモジュロ演算を行うか否かを判定する制御ビットDMに論理値”1”が書き込まれる。
モジュロ演算命令は例えば、MOVS.W @Ax, Dxとされる。この命令記述において、Axはモジュロアドレスレジスタ(A0x)216又はモジュロアドレスレジスタ(A1x)216とされ、DxはDSPエンジン3内のレジスタに対応する。図3にはDxは図示されていない。上記モジュロ演算命令が実行されると、モジュロアドレスレジスタ(A0x)216より値が読み出され、メモリアドレスバッファ(MABX)206及び算術論理演算器(ALU)213に入力される。メモリアドレスバッファ(MABX)206に入力された値はそのままアドレスバスXABに出力されて、XROM4またはXRAM6のアドレスを指定する。一方、算術論理演算器(ALU)213に入力されたモジュロアドレスレジスタ(A0x)216の値は、インデックスレジスタ(Ix)210の値又は定数(Const)が加算される。インデックスレジスタ(Ix)210との加算を行なう場合は、命令MOVS.W @(Ax, Ix), Dx等を実行したときであり、定数加算される場合は命令MOVS.W @Ax, Dx等を実行したときである。その加算結果は算術論理演算器(ALU)213より出力される。算術論理演算器(ALU)213より出力された値は、セレクタ219に入る。このセレクタ219のもう一方の入力は、モジュロスタートアドレスレジスタ(MS)214に格納されているモジュロ演算開始アドレスである。
セレクタ219の出力が算術論理演算器(ALU)213の出力になるか、モジュロスタートアドレスレジスタ(MS)214の値になるかは、次のようにして決定される。モジュロアドレスレジスタ(A0x)216の値とモジュロエンドアドレスレジスタ(ME)215の値は、コンパレータ(CMP)217で常に比較されており、一致すればコンパレータ(CMP)217より論理値”1”が出力され、不一致ならば論理値”0”が出力される。コンパレータ(CMP)217より出力された値は、制御ビットDM,MXYと共にアンドゲート218で論理積が採られ(この例の場合、DM、MXY共に論理値”1”なので、コンパレータ217の値がそのままアンドゲート218から出力される。)、セレクタ219に入力される。セレクタ219は、アンドゲート218より入力される値が論理値”1”の場合にモジュロスタートアドレスレジスタ(MS)214の値を選択し、論理値”0”の場合には算術論理演算器(ALU)213からの出力値を選択する。
アンドゲート218より入力される値が論理値”0”の間は、算術論理演算器(ALU)213からの出力値を選択し続けるため、アドレスバスXABに出力される値は、順次更新されていく。モジュロエンドアドレスレジスタ(ME)215の値とモジュロアドレスレジスタ(A0x)216の値とが一致すると、アンドゲート218からセレクタ219に入力される値が論理値”1”になり、モジュロスタートアドレスレジスタ(MS)214の値を選択する。それによって、モジュロアドレスレジスタ(A0x)216はモジュロスタートアドレスレジスタ(MS)214の値によって初期化される。
上記モジュロ演算の説明では、モジュロアドレスレジスタ(A0x)216を利用したときの動作を説明をしたが、モジュロ演算命令MOVS.W @Ax, DxにおけるAxをモジュロアドレスレジスタ(A1x)216に指定することも可能である。また制御ビットMXYに論理値”0”を指定すれば、アドレスバスYABに対してモジュロ演算が可能になる。この場合、モジュロ演算命令MOVS.W @Ax, DxにおけるAxを、モジュロアドレスレジスタ(A0y)226又は(A1y)226を指定するための値Ayに変更しなければならない。また制御ビットDMに0を指定すれば、モジュロ演算の実行を禁止することもできる。
図4にはDSPエンジン3の一例ブロック図が示される。ランダムロジック回路(Random Logic Circuit)301と記載された回路ブロックは、図1のデコーダ34や制御回路、そしてコントロールレジスタやステータスレジスタなどを含む回路ブロックである。その他にDSPエンジン3は、算術論理演算器(ALU)302、シフタ(SFT)303、乗算器(MAC)304、レジスタ(Reg.)305、レジスタ(A0,A1)306、レジスタ(Y0,Y1)307、レジスタ(X0,X1)308、メモリデータバッファ(MDBI)309、メモリデータバッファ(MDBX)310、メモリデータバッファ(MDBY)311を備える。メモリデータバッファ(MDBY)311はデータバスYDBとバスD2を接続する。メモリデータバッファ(MDBX)310はデータバスXDBとバスD1を接続する。メモリデータバッファ(MDBI)309はデータバスIDBとバスC1,D1,A1,B1に接続している。乗算器(MAC)304はバスA1及びB1よりデータを入力し、それに対する乗算結果をバスC1及びD1に出力する。シフタ(SFT)303はバスA2よりデータを入力し、シフト演算結果をバスC2に出力する。算術論理演算器(ALU)302はバスA2及びB2よりデータを入力し、演算結果をバスC2に出力する。
図5にはマイクロコンピュータ1の命令セットに含まれる命令のフォーマット及び命令コードの一例が示される。マイクロコンピュータ1は、CPU命令とDSP命令の2種類の命令をサポートしている。CPU命令の全てとDSP命令の一部は、16ビット長の命令コードであり、残りのDSP命令は32ビット長の命令コードになっている。CPU命令とは、DSPエンジン3を動作させることなく専らCPUコア2によって実行される命令である。DSP命令とは、アドレス演算若しくはオペランドアクセスなどの一部の処理をCPUコア2に負担させてDSPエンジン3が実行する命令である。
CPU命令は命令コードの最上位側の4ビットが”0000”〜”1110”までの空間に命令が割り当てられている。DSP命令は、命令コードの最上位側の4ビットが”1111”に全て割り当てられている。さらに命令コードの最上位側の6ビットが”111100”及び”111101”に割り当てられた命令は、DSP命令でも16ビット長の命令コードになっている。命令コードの最上位側の6ビットが”111110”の命令は、32ビット長の命令コードになっている。命令コードの最上位側の6ビットが”111111”の空間には命令を割り当てておらず、未使用領域(未定義命令領域)となっている。将来この領域を利用して命令コードを更に拡張することができる。この命令フォーマットより明らかなように、各命令コードの最上位側の6ビットをデコードすれば、当該命令がCPU命令であるか、16ビット長のDSP命令であるか、32ビット長のDSP命令であるか、未定義命令であるかの判定を、小さな論理規模のデコーダで行うことができる。図5のCPU命令フォーマットにおいて、nnnnはディスティネーションオペランドの指定領域、ssssはソースオペランドの指定領域、ddddはディスプレースメントの指定領域、iiiiiiiiはイミディエイト値の指定領域である。尚、ADD命令などの場合は、nnnnもソースオペランドの指定領域とされ、演算結果はnnnnに格納される。また、図3に基づいて説明した前記モジュロ演算命令は、図5の命令MOVS.W @R2,A0に対応されるが、図5における命令記述はオペランド指定の記述形態が図3で説明した内容と相違されている。これは単なる形式の相違であり、実質は同じである。
図6にはCPUコア2のデコーダ24とDSPエンジン3のデコーダ34との接続構成例が示される。マイクロコンピュータ1による命令フェッチは32ビット単位で命令レジスタ(IR)25に行われる。デコーダ24は第1のデコード回路240、第2のデコード回路241、及びコード変換回路242を備える。第1のデコード回路240は命令レジスタ(IR)25の上位側16ビットの領域(UIR)の値をデコードして、当該命令がCPU命令か、16ビットのDSP命令か、32ビットのDSP命令かに応じて、CPUデコード信号243、DSPデコード信号244、コード変換制御信号245、及びシフト制御信号246を生成する。第2のデコード回路241はCPUデコード信号243をデコードして、CPUコア2内部の演算器やレジスタ選択などを行う各種内部制御信号(CPU制御信号)247を生成する。コード変換回路242は、コード変換制御信号245にて活性化されると、命令レジスタ(IR)25の下位側16ビットの領域(LIR)が保持する情報のビット数を圧縮し若しくはそのまま出力し、コード変換制御信号245にて非活性化されると、その出力の無効を意味する情報(ノンオペレーションコード)を出力する。コード変換回路242は、信号245が非活性状態のとき下位側16ビットの領域(LIR)の値に代えてノンオペレーションコードを出力するという意味では、セレクタによって実現することも可能である。DSPデコード信号244とコード変換回路242の出力は、前記DSP制御信号20としてDSPエンジン3のデコーダ34に供給される。前記第1のデコード回路240は、命令レジスタ(IR)25の上位側16ビットの領域(UIR)に格納された最上位側の6ビットをデコードすることにより、当該命令コードがCPU命令か、16ビットのDSP命令か、32ビットのDSP命令かを判定することができる。
デコードされた命令が16ビット命令である場合、コード変換制御信号245は非活性状態とされ、それによってコード変換回路242は出力の無効を意味するノンオペレーションコードを出力する。また、デコードされた命令が16ビット命令である場合にはシフト制御信号246が活性化され、それを受ける命令レジスタ(IR)25はその下位側16ビットの領域(LIR)の値を上位側16ビットの領域(LIR)にシフトさせ、シフトされた命令を次に実行すべき命令の全部若しくは一部として利用する。例えば命令レジスタIRの上位側16ビット領域UIRに16ビットCPU命令が格納され、下位側ビット領域LIRに32ビットDSP命令の上位16ビットの命令コードが格納された場合について説明する。まず、上位側16ビット領域UIRに格納された16ビットCPU命令が第1デコード回路240にてデコードされ、その結果に従ってCPUコア2はその命令を実行し、下位側16ビット領域LIRに格納された32ビットDSP命令の上位16ビットの命令コードデータは、上位側16ビット領域UIRに転送される。このときランダムロジック回路201は、算術演算器AU208に対し、プログラムカウンタPCに格納されるべきアドレスのアドレス演算を実行させる。プログラムカウンタPCは、算術演算器AU208によって演算されたアドレス演算結果に従うアドレスを格納する。プログラムカウンタPCに格納されたアドレスに従って、上記32ビットDSP命令の下位16ビットの命令コードデータが、それを格納する命令メモリから命令レジスタIRの下位側16ビット領域LIRに転送される。これにより、32ビットDSP命令が命令レジスタIRに格納される。そして、この命令レジスタIRに格納された32ビットDSP命令は、デコーダ24を介してDSPエンジン3のデコーダ34に供給される。また、他の方法として、図示していないが、複数の命令プリフェッチバッファがCPUコア2内に設けられている。複数の命令プリフェッチバッファは、現在実行されている命令から数サイクル先に実行されるべき命令をプリフェッチする。このようなプリフェッチバッファが設けられている場合において、上述のように32ビットDSP命令の上位16ビットの命令コードデータが下位側領域LIRから上位側16ビット領域UIRに転送されるとき、ランダムロジック回路201は、上記32ビットDSP命令の下位16ビットの命令コードデータがプリフェッチされている命令プリフェッチバッファを選択する。その選択された命令プリフェッチバッファから32ビットDSP命令の下位16ビットの命令コードデータが読み出され、命令レジスタIRの下位側16ビット領域LIRに格納される。
デコードされた命令が16ビットのCPU命令である場合、DSPデコード信号244はノンオペレーションを意味するコードとされる。デコードされた命令が16ビットのDSP命令である場合には、CPU制御信号247はCPUデコード信号243に基づいて第2のデコード回路241が生成し、DSPエンジン3内部の制御信号は実質的にDSPデコード信号244をデコーダ34が解読して生成する。デコードされた命令が32ビットのDSP命令である場合、CPU制御信号247はCPUデコード信号243に基づいて第2のデコード回路241が生成し、DSPエンジン3内部の制御信号はDSPデコード信号244とコード変換回路242の出力をデコーダ34が解読して生成する。
マイクロコンピュータ1の命令セットには命令コード長が、16ビットのものと32ビットのものがあり、上述のように16ビット長命令と32ビット長命令では処理が異なるので、それぞれの場合を分けてその動作を詳述する。
始めに16ビット長命令の場合について説明する。第1のデコード回路240は命令レジスタ(IR)25にフェッチされた32ビットの命令コードの内、上位16ビットをデコードする。第1のデコード回路240では、命令コードの最上位6ビットのコードが”111110”、”11111”以外のときは16ビット長命令であることがわかるので、このときはCPUデコード信号243とDSPデコード信号244の出力と共に、命令レジスタ(IR)25の下位16ビット領域LIRの命令コードデータを上位16ビット領域UIRにシフトさせるシフト制御信号246を活性化する。活性化されたシフト制御信号246を受けた命令レジスタ(IR)25は、下位16ビット領域LIRに格納されている命令コードを上位16ビット領域UIRにシフトする。シフトされた命令コードは、その次に第1のデコード回路240でデコードされることになる。デコーダ24より出力されるCPUデコード信号243は、第2デコード回路241に出力され、DSPデコード信号244は、DSPエンジン3に供給される。また、第1のデコード回路240は16ビット長命令であることがわかると、コード変換制御信号245を非活性とし、これによってコード変換回路242は、下位16ビットの命令コードが無効であることを示すコードをDSP制御信号20の一部として生成する。DSPエンジン3側では第1のデコード回路240より出力されたDSPデコード信号244とコード変換回路242より出力されたコード信号とをDSP制御信号20として入力すると、デコーダ34が当該DSP制御信号20のデコードを行なう。16ビットのDSP命令の場合、コード変換回路242より出力されたDSP制御信号は無効を表わす信号になっているので、デコーダ34はDSPデコード信号244に着目して、DSPエンジン3内にある乗算器(MAC)304、算術論理演算器(ALU)302、及びシフタ(SFT)303等の制御信号を出力する。DSPエンジン3はそれら制御信号に従って演算処理を行なう。
次に32ビット長命令の場合について説明する。CPUコア2内部にある第1のデコード回路240では、命令レジスタ(IR)25に32ビットの命令コードを格納する。そして上位16ビットを第1のデコード回路240でデコードし、デコード信号243,244を出力する。第1のデコード回路240では、命令コードの最上位6ビットのコードが”111110”のときは32ビット長命令であることがわかるので、コード変換制御信号245を活性化し、これによってコード変換回路242は、命令レジスタ(IR)25の下位16ビットの命令コードをコード変換する。コード変換された情報はDSPデコード信号244と共にDSPエンジン3にDSP制御信号20として供給される。デコーダ34はDSP制御信号20をデコードしてDSPエンジン3内部の制御信号を生成する。尚、デコーダ24,34は例えばランダムロジック回路で実現することができる。
図17には図6に対応される別の実施例が示される。図6の実施例では、命令レジスタ25の下位領域LIRの命令データが上位領域UIRにシフトされるものとして説明した。図17の実施例は、前記命令レジスタ25と内部データバスIDBとの間に、命令プリフェッチキューを構成する直列2段の命令プリフェッチバッファ250,251を供え、命令プリフェッチバッファ250,251の保持データをセレクタ252で選択して命令レジスタ25に与えるようになっている。命令プリフェッチバッファ250,251及び命令レジスタ25の夫々は、32ビット単位でデータを保持し、その保持動作は、制御信号φ1〜φ3(CLK1に同期)によって制御される。特に図示されないが、命令プリフェッチバッファ250,251及び命令レジスタ25の夫々は、マスタ・スレーブの構成を有し、マスタ段は対応される制御信号の立ち上がりに同期して入力のラッチ動作を行い、スレーブ段は対応される制御信号の立ち下がりに同期して入力のラッチ動作を行う。これによって、直列2段の命令プリフェッチバッファ250,251には、プリフェッチされた前後の命令データが格納される。
前記セレクタ252は、選択制御信号φ4に従って、ポートPaに供給される32ビットの命令データ又はポートPb供給される32ビットの命令データを選択して命令レジスタ25に与える。前記ポートPaには、命令プリフェッチバッファ250の上位16ビット領域UPB1を下位側とし、命令プリフェッチバッファ251の下位16ビット領域LPB2を上位側とする32ビットの命令データが供給される。ポートPbには命令プリフェッチバッファ251に格納されている32ビットの命令データがそのまま供給される。
これにより、命令プリフェッチバッファ251が32ビットのDSP命令を保持しているとき、セレクタ252は、ポートPbの出力を選択することによって当該32ビットのDSP命令を命令レジスタ25にセットすることができる。命令プリフェッチバッファ251が16ビットのDSP命令又は16ビットのCPU命令を上位領域UPB2に保持しているとき、セレクタ252は、ポートPbの出力を選択することによって当該16ビットの命令を命令レジスタ25の上位領域UIRにセットすることができる。命令プリフェッチバッファ251が16ビットのDSP命令又は16ビットのCPU命令を下位領域LPB2に保持しているときは、セレクタ252が、ポートPaの出力を選択することによって当該16ビットの命令を命令レジスタ25の上位領域UIRにセットすることができる。命令プリフェッチバッファ251が32ビットDSP命令の上位側16ビット命令コードを下位領域LPB2に保持し、命令プリフェッチバッファ250がその上位領域UPB1に当該32ビットDSP命令の下位側16ビット命令コードを保持しているときは、セレクタ252が、ポートPaの出力を選択することによって当該32ビットDSP命令を命令レジスタ25にセットすることができる。
図17において253は、前記命令プリフェッチバッファのラッチ制御信号φ1,φ2、命令レジスタ25のラッチ制御信号φ3、及び前記選択制御信号φ4を生成する制御ロジックである。この制御ロジック253は、16ビット命令か32ビット命令かを示す制御信号248と命令プリフェッチバッファ250,251の各領域に実行されないまま残っている命令コードの状態に従って、前記制御信号φ1〜φ4を生成する。この制御ロジック253は命令フェッチのための制御論理の一部を構成する。尚、前記制御信号248は、第1のデコード回路240が命令レジスタ25の上位領域UIRから供給される命令コードデータの上位側6ビットをデコードして生成されるものであり、その詳細については後述する。
前記制御論理253による命令レジスタ25への命令コードデータのセットは以下のようにされる。外部からの命令フェッチは、CPUコア2の命令フェッチタイミング(例えば後述する複数段のパイプラインステージにおける命令フェッチステージIF)において、命令プリフェッチバッファ250に32ビットの命令コードデータを新たに格納する余地がある場合に行われる。そのタイミングで命令フェッチが行われるときは、命令プリフェッチバッファ251にはまだ実行されていない命令が残っている。命令プリフェッチバッファ251の領域UPB2,LPB2に格納されている命令コードの双方がまだ実行されていない第1の状態の場合には、命令プリフェッチバッファ251の32ビットの出力がポートPbを介してセレクタ252で選択されて命令レジスタ25にセットされる。一方、命令プリフェッチバッファ251の下位領域LPB2に格納されている命令コードだけがまだ実行されていない第2の状態の場合には、命令プリフェッチバッファ250にプリフェッチした上位領域UPB1と命令プリフェッチバッファ251の下位領域LPB2の命令コードデータがポートPaを介して命令レジスタ25にセットされる。
前記第1の状態において、命令レジスタ25の上位領域UIRにセットされた命令コードデータをデコード回路240がデコードした結果、それが32ビット命令を構成するものである場合には、そのとき、命令プリフェッチバッファ250にプリフェッチされた32ビットの命令コードデータがそのまま命令プリフェッチバッファ251に転送される。一方、デコード結果によって16ビット命令であることが検出されたときは、命令プリフェッチバッファ250から次段のバッファ251へのデータシフトは行われない。
前記第2の状態では、ポートPaを介する命令レジスタ25へのデータセットの後、命令プリフェッチバッファ250にプリフェッチされている32ビットの命令コードデータは、そのまま命令プリフェッチバッファ251にシフトされてセットされる。このシフトセット後、命令プリフェッチバッファ250に未だ実行されていない命令コードデータが存在しないならば、命令プリフェッチバッファ250には、次の命令フェッチタイミングで命令コードデータがプリフェッチされる。
このような制御により、命令フェッチタイミングの後には、まだ処理されていない命令コードデータが命令レジスタ25にセットされる。このとき、実行されるべき命令が、16ビットCPU命令、16ビットDSP命令又は32ビットDSP命令の何れであっても、その上位側16ビットは必ず第1のデコード回路240に供給されることになる。
図6で説明したコード変換回路242は、図17ではセレクタ242Aとコード変換ロジック242Bによって構成される。また、第1のデコード回路240は、図6の説明ではそれがデコードした命令コードが16ビット命令であるか否かによってそのレベルが制御される制御信号245,246を生成したが、図17の例では、それがデコードした命令コードが16ビット命令であるのか32ビット命令(本実施例において32ビット命令はDSP命令である)であるのかを識別するための制御信号248を出力する。セレクタ242Aは、制御信号248が16ビット命令を意味するときは、ノーオペレーションコードNOPを選択してコード変換ロジック242Bに供給し、制御信号248が32ビットDSP命令であることを意味するときは、命令レジスタ25の下位領域LIRの命令コードをコード変換ロジック242Bに供給する。コード変換ロジック242Bは、特に制限されないが、命令レジスタ25の下位領域LIRの命令コードデータの一部例えばレジスタ選択のためのコード情報をDSPエンジン3のデコーダ34に適する形態に修正して出力する。
図17の実施例において第1のデコード回路240は命令レジスタ25の上位領域UIRが保持する16ビットの命令コードデータを解読し、これによって得られたCPUデコード信号243を第2のデコード回路243に与え、また、DSPデコード信号244をデコーダ34に与える。CPUデコード信号243は、CPU命令及びDSP命令の何れにおいても有意とされ、第2のデコード回路241に供給される。第2のデコード回路241は、CPUデコード信号243をデコードして、CPUコア2が行うべきアドレス演算やデータ演算のための制御情報、及び内部メモリX−ROM4,Y−ROM5,X−RAM,Y−RAMそして外部メモリをアクセスしたりするためのアドレスバスやデータバスの選択制御情報等を出力する。前述の通り、DSP命令に対しても、それに必要なアドレス演算やデータパスの選択はCPUコア2が行う。
前記DSPデコード信号244は、前述の通り、第1のデコード回路240に供給される命令コードがDSP命令のためのコードデータである場合に有意とされるデコード信号である。有意DSPデコード信号244は、例えば、CPUコア2で行われるアドレス演算に従ってアクセスされるメモリとの間でデータの受け渡しを行うDSPエンジン3内のレジスタ等の指定情報を含んでいる。第1のデコード回路240に供給される命令コードがCPU命令である場合には、DSPデコード信号244は無効を意味するコードにされる。
ここで、マイクロコンピュータ1の命令セットに含まれる前記DSP命令のコードを更に詳述する。図18及び図19は夫々16ビットのDSP命令の命令コードが示され、図20及び図21には32ビットのDSP命令の命令コードが示される。前述のように、DSP命令は、命令コードの最上位側の4ビットが”1111”に割り当てられ、命令コードの最上位側の6ビットが”111100”及び”111101”は16ビットのDSP命令、命令コードの最上位側の6ビットが”111110”の命令は32ビットのDSP命令とされる。
図18の第1欄(X Side of Data Transfer)に示される16ビットDSP命令の命令フォーマットはXメモリ(X−ROM4,X−RAM6)とDSPエンジン3の内蔵レジスタとの間におけるデータ転送命令であり、第2欄(Y Side of Data Transfer)に示される命令フォーマットはYメモリ(Y−ROM5,Y−RAM7)とDSPエンジン3の内蔵レジスタとの間におけるデータ転送命令である。上記命令フォーマットにおいて、Ax,AyはCPUコア2に含まれるレジスタアレイ209(図3参照)に含まれるレジスタを指定し、Ax=”0”はレジスタR4を指定し、Ax=”1”はレジスタR5を指定し、Ay=”0”はレジスタR6を指定し、Ay=”1”はレジスタR7を指定する。Dx,Dy,DaはDSPエンジンに含まれるレジスタを指定し、Dx=”0”はレジスタX0、Dx=”1”はレジスタX1、Dy=”0”はレジスタY0、Dy=”1”はレジスタY1、Da=”0”はレジスタA0、Da=”1”はレジスタA1を夫々指定する。Ix,Iyはイミディエイト値を意味する。
図19に示される16ビットDSP命令の命令フォーマットは、マイクロコンピュータ1の外部に接続された図示しないメモリとDSPエンジン3の内蔵レジスタとの間におけるデータ転送命令である。AsはCPUコア2に内蔵されたレジスタアレイ209(図3参照)に含まれるレジスタを指定し、DsはDSPエンジンに内蔵されるレジスタX1,X0,Y1,Y0,A1,A0やレジスタアレイ305(図4参照)に含まれるレジスタを指定する。
32ビットDSP命令のフォーマットは、32ビットDSP命令であることを示すコード”111110”の領域(ビット31〜ビット26)、Aフィールド(ビット25〜ビット16)及びBフィールド(ビット15〜ビット0)に大別される。図20はAフィールドに着目した場合の当該フィールドのコードとそれに対応されるにニーモニックを示し、図21はBフィールドに着目した場合の当該フィールドのコードとそれに対応されるにニーモニックを示す。
図20に示されるAフィールドのコードは、図18に示される16ビットDSP命令のビット9〜ビット0のコードと同一であり、第20図の第1欄(X Side of Data Transfer)に示されるAフィールドのコードはXメモリ(X−ROM4,X−RAM6)とDSPエンジン3の内蔵レジスタとの間におけるデータ転送を規定し、第2欄(Y Side of Data Transfer)に示されるAフィールドのコードはYメモリ(Y−ROM5,Y−RAM7)とDSPエンジン3の内蔵レジスタとの間におけるデータ転送を規定する。当該Aフィールドに含まれるビットAx,Ay,Dx,Dy,Daが指定する内容は図18と全く同じである。
図21に示されるBフィールドのコードは、DSPエンジン3の内部で行われる算術演算、論理演算、シフト演算、レジスタ間のロード/ストアなどの処理を規定する。例えば、DSPエンジン3の内部で行われる乗算(PMULS)、減算(PSUB)、加算(PADD)、丸め(PRND)、シフト(PSHL)、論理積(PAND)、排他的論理和(XOR)、論理和(OR)、インクリメント(PINC)、ディクリメント(PDEC)、クリア(CLR)等の演算や、DSPエンジン3の内部で行われるロード(PLDS)及びストア(PSTS)等を規定する。図21の第3欄(3 Operand Operation with Condition)は、条件付きのコードであり、その条件(if cc)としては、DC(データコンプリート)ビット(データの処理完了を示すビット)の論理値又は無視を選択することができる。
実際の32ビットDSP命令は、BフィールドのコードとAフィールドのコードとが任意に組み合わされて記述される。即ち、32ビットのDSP命令は、マイクロコンピュータ1の内部又は外部から演算対象とされるオペランドをフェッチし、それをDSPエンジン3の内部で演算する処理を規定する。上述の説明から明らかなように、オペランドフェッチのためのアドレス演算やデータパスの選択はCPU2によって行われる。32ビットDSP命令においてオペランドフェッチを規定するAフィールドのコードは16ビットのDSP命令と同じである。16ビットDSP命令は、DSPエンジン3内部のレジスタに対する初期設定などに利用される。
図17等に示される構成を参照しても明らかなように、32ビットDSP命令のAフィールドのコードデータは命令レジスタ25における上位領域UIRにセットされる。また、Aフィールドと同一のフォーマットを有する16ビットDSP命令も上位領域UIRにセットされる。したがって、その何れにおいても、CPUコア2は、必要なアドレス演算及びデータフェッチ(若しくはオペランドフェッチ)に必要なデータパスの選択を同様に行えばよい。換言すれば、32ビットDSP命令を実行するためのデータフェッチ(若しくはオペランドフェッチ)と16ビットDSP命令を実行するためのデータフェッチ(若しくはオペランドフェッチ)とに必要とされるデコード回路240、241が共通化され、この点においても、マイクロコンピュータ1の論理規模の縮小に寄与する。32ビットDSP命令のAフィールドが指定するDSPエンジン3の内部レジスタの指定情報や16ビットDSP命令が指定するDSPエンジン3の内部レジスタの指定情報は、前記DSPデコード信号244としてDSPエンジン3に与えられる。DSPデコード信号244を有意とするか否かは、前記第1のデコード回路240が上位領域UIRの最上位側の4ビットをデコードして決定する。
次に、本実施例のマイクロコンピュータにおける演算制御の内容を図7乃至図16の命令実行タイミングチャートを参照しながら説明する。本実施例のマイクロコンピュータ1は、IF,ID,EX,MA,WB/DSPステージの5段パイプライン動作を行なっている。IFは命令フェッチステージ、IDは命令デコードステージ、EXは演算実行ステージ、MAはメモリアクセスステージ、WB/DSPはメモリから取得したデータをCPUコア2のレジスタに取り込むステージまたはDSPエンジン3がDSP命令を実行するステージである。各図においてInstruction/Data Accessは内部バスIAB,IDBを介するメモリアクセスを意味し、アクセス対象は内蔵メモリ4〜7の他にマイクロコンピュータ1の外部メモリも可能にされる。X,Y Mem. Accessは内部バスXAB,XDBやYAB,YDBを介するメモリアクセスを意味し、アクセス対象は内蔵メモリ4〜7に限られる。Isnt.Fetchは命令レジスタ(IR)25への命令フェッチタイミング、Fetch.Regは命令レジスタ(IR)25、Source Data Outはソースデータ出力、Destination Inはディスティネーションデータの入力タイミング、Destination Registerはディスティネーションレジスタ、をそれぞれ意味する。Pointer Reg.はポインターレジスタ、Address Calc.はアドレス演算、Data Fetchはデータフェッチ、DSP Control signal Decord Timingはデコーダ34によるDSP制御信号20のデコードタイミングを意味する。
図7はCPUコア2内部のALU演算命令の実行タイムチャートを示す。ここではALU演算命令として、ADD Rm, Rn を一例とする。
IFステージ直前におけるクロック信号Clock2の立ち上がりのタイミングに同期して、実行すべき命令(ADD Rm, Rn )が格納されているアドレスがアドレスバスIABに出力される。Instruction/Data Mem. Accessでは、IFステージでメモリアクセス動作が行われる。具体的にはクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間でアドレスバスIABで指定されたアドレスのデコードが行われ、IFステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間で命令アクセスが行われる。そのためIFステージのクロック信号Clock2の立ち上がりからデータバスIDBに命令が出力される。データバスIDBに出力された命令は、IDステージのクロック信号Clock1の立ち上がりのタイミングに同期して命令レジスタ(IR)25に取り込まれる。IDステージでは命令レジスタ(IR)25に取り込まれたデータのデコードが行なわれる。EXステージのクロック信号Clock1の立ち上がりのタイミングに同期して、ソースデータが格納されているレジスタがアクセスされ、CPUコア2の内部バスA1,B1にレジスタの値が出力される。命令ADD Rm, Rnでは、RmとRnに指定したレジスタがソースレジスタとされる。RmとRnはCPUコア2の内部の任意のレジスタ(図3では、レジスタ209内の任意のレジスタ、A0x,A1x,Ix,A0y,A1y,Iy、RmおよびRnとして指定可能)を指定できる。CPUコア2の内部バスA1,B1に出力されたデータは算術論理演算器(ALU)213で加算演算が行われ、その結果はCPUコア2の内部バスC1に出力される。CPUコア2の内部バスC1に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してディステネーションレジスタ(ディステネーションレジスタは、ADD Rm, Rn 命令でRnに指定したレジスタとされる)に格納される。このように、CPUコア2の内部のALU演算命令では、IF,ID,EXの3段のパイプラインステージで命令実行動作が完了する。
図8はメモリからCPUコア2へのデータ読み込み動作のタイムチャートを示す。メモリからCPUコア2へのデータ読み込み動作命令の一例として、MOV.L @Rm, Rnを例にとって動作説明をする。命令フェッチ(IF)、命令デコード(ID)までの動作は図7と同じなのでその部分の詳細な説明は省略する。
EXステージのクロック信号Clock1の立ち上がりのタイミングに同期して、アドレスポインタとなるレジスタのデータはCPUコア2の内部バスA1に出力される。この例では、アドレスポインタとなるレジスタは、Rmで指定したレジスタになる。Rmに指定できるレジスタは、CPUコア2に含まれる任意のレジスタ(図3では、Reg.に含まれる任意のレジスタ、A0x,A1x,Ix,A0y,A1y,IyがRmとして指定可能)である。CPUコア2の内部バスA1に出力されたデータは、アドレスバッファ205に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスIABに出力される。一方CPUコア2の内部バスA1に出力されたデータは算術論理演算器(ALU)213で演算が行なわれる。この場合、算術論理演算器(ALU)213は0加算演算を行なう。その結果はCPUコア2の内部バスC1に出力される。CPUコア2の内部バスC1に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してポインタレジスタ(この場合、Rmで指定されレジスタ)に格納される。Instruction/Data Mem. Accessでは、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期して、アドレスバスIABに出力したアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間でデータアクセスを行なう。そのためMAステージのクロック信号Clock2の立ち上がりからデータバスIDBにデータが出力される。データバスIDBに出力されたデータは、WB/DSPステージのクロック信号Clock1の立ち上がりのタイミングに同期してCPUコア2に取り込まれ、CPUコア2の内部バスDWにデータが出力される。WB/DSPステージのクロック信号Clock2の立ち上がりのタイミングに同期してCPUコア2の内部バスDW上のデータがディステネーションレジスタに格納されて、動作を終了する。この例では、ディステネーションレジスタはRnに指定したレジスタになる。Rnに指定できるレジスタは、CPUコア2に含まれる任意のレジスタ(図3では、Reg.内の任意のレジスタ、A0x,A1x,Ix,A0y,A1y,IyがRnとして指定可能)である。以上のようにメモリからCPUコア2へのデータ読み込み動作命令では、IF,ID,EX,MA,WB/DSPの5段のパイプラインステージで命令実行動作が完了する。
図9はCPUコア2からメモリへのデータ書込み動作命令のタイムチャートを示す。CPUコア2からメモリへのデータ書込み動作命令の一例として、MOV.L Rm, @Rnを例にとって動作を説明する。命令フェッチ(IF)、命令デコード(ID)の動作は図8と同じなので、その部分の詳細な説明は省略する。
EXステージのクロック信号Clock1の立ち上がりのタイミングに同期して、アドレスポインタとなるレジスタのデータがCPUコア2の内部バスA1に出力される。この例では、アドレスポインタとなるレジスタは、Rnで指定したレジスタになる。Rnに指定できるレジスタは、CPUコア2に含まれる任意のレジスタ(図3では、Reg.内の任意のレジスタ,A0x,A1x,Ix,A0y,A1y,IyがRnとして指定可能)である。CPUコア2の内部バスA1に出力されたデータは、アドレスバッファ205に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスIABに出力される。一方CPUコア2の内部バスA1に出力されたデータは算術論理演算器(ALU)213で演算が行われる。この場合、算術論理演算器(ALU)213は0加算演算を行なう。その演算結果はCPUコア2の内部バスC1に出力される。CPUコア2の内部バスC1に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してポインタレジスタ(この場合、Rnで指定したレジスタ)に格納される。命令 MOV.L Rm, @Rnの場合、EXステージでアドレス演算を行なうと同時に、メモリへ書き込むべきデータをデータバスIDBに出力する準備が行われる。EXステージのクロック信号Clock1の立ち上がりのタイミングに同期して、メモリへ書き込むべきデータが格納されているレジスタよりCPUコア2の内部バスDRへ値が出力される。この例の場合、メモリへ書き込むべきデータが格納されているレジスタは、Rmで指定したレジスタになる。Rmに指定できるレジスタは、CPUコア2に含まれる任意のレジスタ(図3では、Reg.内の任意のレジスタ,A0x,A1x,Ix,A0y,A1y,IyがRmとして指定可能)である。CPUコア2の内部バスDRへ出力された値は、MAステージのクロック信号Clock2の立ち上がりのタイミングに同期してデータバスIDBに出力される。Instruction/Data Mem. Accessでは、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスIABに出力されたアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりのタイミングに同期してデータバスIDBに出力されたデータが書込まれて、動作を終了する。メモリからCPUコア2へのデータ書込み動作命令では、CPUコア2としてはデータバスIDBにデータを出力した時点で動作が終了するので、IF,ID,EX,MAの4段のパイプラインステージで動作が完了する。
図10はDSP命令を実行するときのタイムチャートを示す。DSP命令の一例として、PADDC Sx, Sy, Dz NOPX NOPY を例にとって動作説明を行う。この命令は、DSPエンジン3内のレジスタに格納されているデータの加算を行ない、DSPエンジン3とX-ROM4やX-RAM6、及びY-ROM5やY-RAM7との間でのデータ転送は行なわないという命令である。
命令フェッチの動作は図7と同じなのでその部分の詳細な説明は省略する。IDステージでは、クロック信号Clock1からクロック信号Clock2の期間でCPUコア2で取り込んだ命令コードのデコードが行なわれ、IDステージのクロック信号Clock2のタイミングで命令コードをデコードした結果がDSP制御信号20としてDSPエンジン3に出力される。DSPエンジン3では、CPUコア2よりDSP制御信号20を入力すると、MAステージまでの期間で入力したDSP制御信号20をデコードする。WB/DSPステージのクロック信号Clock1の立ち上がりのタイミングに同期して、ソースデータが格納されているレジスタがアクセスされ、DSPエンジン3の内部バスA2,B2にレジスタの値が出力される。この例では、ソースデータが格納されているレジスタは、SxおよびSyで指定したレジスタになる。SxおよびSyに指定できるレジスタは、DSPエンジン3内部の任意のレジスタ(図4では、Reg.内の任意のレジスタがSxおよびSyとして指定可能)である。DSPエンジン3の内部バスA2,B2に出力されたデータは算術論理演算器(ALU)302で演算が行なわれ、その結果はDSPエンジン3の内部バスC2に出力される。DSPエンジン3の内部バスC2に出力された演算結果は、WB/DSPステージのクロック信号Clock2の立ち上がりのタイミングに同期してディステネーションレジスタに格納される。この例では、ディステネーションレジスタは、Dzで指定されたレジスタになる。Dzに指定できるレジスタは、DSPエンジン3内部の任意のレジスタ(図4では、Reg.内の任意のレジスタ)である。以上のようなDSP命令では、IF,ID,EX,MA,WB/DSPの5段のパイプラインステージで動作が完了する。
図11はX,Yメモリ4〜7からDSPエンジン3へのデータ読み込み動作命令のタイムチャートを示す。X,Yメモリ4〜7からDSPエンジン3へのデータ読み込み動作命令の一例として、MOVX.W @Ax, Dx MOVY.W @Ay, Dy を例にとってその動作を説明する。この命令は、AxおよびAyで指定したアドレスに格納されているデータをDxおよびDyで指定したレジスタに転送するという命令である。命令フェッチ、命令デコードの動作は図10と同じなのでその部分の詳細な説明は省略する。
X,Yメモリ4〜7からDSPエンジン3へのデータ読み込み動作命令を実行する場合、アクセスするメモリのアドレスはCPUコア2が生成する。そのためEXステージにおけるクロック信号Clock1の立ち上がりのタイミングに同期して、アクセスすべきアドレスが格納されているレジスタがアクセスされ、CPUコア2の内部バスA1〜A2にレジスタの値が出力される。この例では、アクセスすべきアドレスが格納されているレジスタは、Ax,Ayで指定したレジスタになる。Axに指定できるレジスタはCPUコア2に含まれるレジスタA0x,A1xであり、Ayに指定できるレジスタはCPUコア2に含まれるレジスタA0y,A1yである。CPUコア2の内部バスA1〜A2に出力されたデータは、メモリアドレスバッファ(MABX,MABY)に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスXAB,YABに出力される。一方CPUコア2の内部バスA1〜A2に出力されたデータはALU213,PAU212でアドレス演算が行なわれる。この場合、ALU213およびPAU212は0加算演算を行なう。その演算結果はCPUコア2の内部バスC1及びC2に出力される。CPUコア2の内部バスC1及びC2に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してポインタレジスタ(この場合、AxおよびAyで指定したレジスタ)に格納される。X,Yメモリ4〜7では、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージクロック信号Clock2の立ち上がりのタイミングでアドレスバスXAB,YABに出力されたアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間でデータアクセスが行なわれる。そのためMAステージのクロック信号Clock2の立ち上がりからデータバスXDB,YDBにデータが出力される。データバスXDB,YDBに出力されたデータは、WB/DSPステージのクロック信号Clock1の立ち上がりのタイミングに同期してDSPエンジン3に取り込まれ、DSPエンジン3の内部バスD1,D2にデータが供給される。WB/DSPステージのクロック信号Clock2の立ち上がりのタイミングに同期してDSPエンジン3の内部バスD1,D2上のデータがディステネーションレジスタに格納されて、動作を終了する。この例では、ディステネーションレジスタはDxおよびDyに指定したレジスタになる。Dxに指定できるレジスタは、DSPエンジン3に含まれるレジスタX0,X1であり、Dyに指定できるレジスタは、DSPエンジン3に含まれるレジスタY0,Y1である。以上のようにメモリからDSPエンジン3へのデータ読み込み動作命令では、IF,ID,EX,MA,WB/DSPの5段のパイプラインステージで動作が完了する。斯る並列的なデータ読込み動作は、相互に独立したバスXAB,XDBとYAB,YDBとを介してCPUコア2がX,Yメモリ4〜7をアクセスできるようになっているからである。
図12はDSPエンジン3からX,Yメモリ6,7へのデータ書込み動作のタイムチャートを示す。DSPエンジン3からX,Yメモリ6,7へのデータ書込み動作命令の一例として、MOVX.W Da, @Ax MOVY.W Da, @Ay を例にとってその動作を説明をする。この命令は、Daで指定したレジスタに格納されているデータをAxおよびAyで指定したレジスタに格納されているアドレスに転送するという命令である。
命令フェッチ、命令デコードの動作は図11と同じなのでその部分の詳細な説明は省略する。DSPエンジン3からX,Yメモリ6,7へのデータ書込み動作命令を実行する場合、アクセスされるべきメモリアドレスはCPUコア2が生成する。そのためEXステージにおけるクロック信号Clock1の立ち上がりのタイミングに同期して、アクセスすべきアドレスが格納されているレジスタがアクセスされ、CPUコア2の内部バスA1〜A2にレジスタの値が出力される。この例では、アクセスすべきアドレスが格納されているレジスタは、Ax,Ayで指定したレジスタになる。Axに指定できるレジスタはCPUコア2に含まれるレジスタA0x,A1xであり、Ayに指定できるレジスタはCPUコア2に含まれるレジスタA0y,A1yである。CPUコア2の内部バスA1,A2に出力されたデータは、メモリアドレスバッファ(MABX,MABY)に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスXAB,YABに出力される。
MAステージのクロック信号Clock1の立ち上がりのタイミングに同期して、転送されるべきデータが格納されているDSPエンジン3の内部レジスタがアクセスされ、DSPエンジン3の内部バスD1,D2に当該レジスタの値が出力され、それらがメモリデータバッファ(MDBX,MDBY)に格納される。この例の場合、転送されるべきデータが格納されているDSPエンジン3の内部レジスタはDaで指定されたレジスタになる。Daで指定できるレジスタは、DSPエンジン3に含まれるレジスタA0及びA1である。MAステージのクロック信号Clock2の立ち上がりのタイミングに同期して、メモリデータバッファ(MDBX,MDBY)に格納されたデータはデータバスXDB,YDBに出力される。X,Yメモリ6,7では、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージクロック信号Clock2の立ち上がりのタイミングでアドレスバスXAB,YABに出力されたアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間でデータアクセスが行なわれる。そのため、データバスXDB,YDBに出力されたデータはMAステージのクロック信号Clock2の立ち上がりから書込まれる。以上のようにDSPエンジン3からX,Yメモリ6,7へのデータ書込み動作命令では、IF,ID,EX,MAの4段のパイプラインステージで動作が完了する。斯る並列的なデータ書込み動作は、相互に独立したバスXAB,XDBとTAB,YDBとを介してCPUコア2がX,Yメモリ4,6をアクセスできるようになっているからである。
図13はメモリからDSPエンジン3へのデータ読み込み動作のタイムチャートを示す。メモリからDSPエンジン3へのデータ読み込み動作命令の一例として、MOVS.L @As, Ds を例にとってその動作を説明をする。この命令は、Asで指定したアドレスに格納されているデータをDsで指定したレジスタに転送するという命令である。
基本動作は、図11に示したX,Yメモリ4〜7からDSPエンジン3へのデータ読み込み動作と同じである。図11と図13の違いは、図11では対象となるメモリがX,Yメモリ4〜7なのでXバス,Yバスを使用するのに対し、図13では対象となるメモリはマイクロコンピュータ1がサポートする空間に接続されているメモリなので、バスIAB,IDBを使用するということである。EXステージクロック信号Clock1の立ち上がりのタイミングに同期して、アクセスすべきアドレスを保有しているレジスタがアクセスされ、CPUコア2の内部バスA1にレジスタの値が出力される。この例では、アクセスすべきアドレスが格納されているレジスタは、Asで指定したレジスタになる。Asで指定可能なレジスタはCPUコア2に含まれるReg.内の任意のレジスタである。CPUコア2の内部バスA1に出力されたデータは、アドレスバッファ205に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスIABに出力される。一方CPUコア2の内部バスA1に出力されたデータは算術論理演算器(ALU)213でアドレス演算が行なわれる。この場合、算術論理演算器(ALU)213は0加算演算を行なう。その演算結果はCPUコア2の内部バスC1に出力される。CPUコア2の内部バスC1に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してポインタレジスタ(この場合、Asで指定したレジスタ)に格納される。アクセス対象となるメモリでは、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージクロック信号Clock2の立ち上がりのタイミングでアドレスバスIABに出力されたアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間でデータアクセスが行なわれる。そのためMAステージのクロック信号Clock2の立ち上がりからデータバスIDBにデータが出力される。データバスIDBに出力されたデータは、WB/DSPステージのクロック信号Clock1の立ち上がりのタイミングに同期してDSPエンジン3に取り込まれ、当該データがDSPエンジン3の内部バスD1に供給される。WB/DSPステージのクロック信号Clock2の立ち上がりのタイミングに同期してDSPエンジン3の内部バスD1上のデータがディステネーションレジスタに格納されて、動作を終了する。この例では、ディステネーションレジスタはDsに指定したレジスタになる。Dsに指定できるレジスタは、DSPエンジン3内の任意のレジスタである。以上のようにメモリからDSPエンジン3へのデータ読み込み動作命令では、IF,ID,EX,MA,WB/DSPの5段のパイプラインステージで動作が完了する。
図14はDSPエンジン3からメモリへのデータ書込み動作のタイムチャートを示す。DSPエンジン3からメモリへのデータ書込み動作命令の一例として、MOVS.L Ds, @Asを例にとってその動作を説明する。この命令は、Dsで指定したレジスタに格納されているデータをAsで指定したアドレスに転送するという命令である。
基本動作は図12に示したDSPエンジン3からX,Yメモリへのデータ書込み動作と同じである。図12と図14の違いは、図12では対象となるメモリがX,YメモリであるのでバスXAB,XDB、バスYAB,YDBを使用するのに対し、図14では対象となるメモリがマイクロコンピュータ1がサポートする空間に接続されているメモリなので、バスIAB,IDBを使用するということである。
EXステージクロック信号Clock1の立ち上がりのタイミングに同期して、転送先のアドレスを保有しているレジスタがアクセスされ、CPUコア2の内部バスA1にレジスタの値が出力される。この例では、アクセスすべきアドレスが格納されているレジスタは、Asで指定したレジスタになる。Asで指定可能なレジスタはCPUコア2に含まれるレジスタReg.内の任意のレジスタである。CPUコア2の内部バスA1に出力されたデータは、アドレスバッファ205に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスIABに出力される。一方CPUコア2の内部バスA1に出力されたデータは算術論理演算器(ALU)213でアドレス演算が行なわれる。この場合、算術論理演算器(ALU)213は0加算演算を行なう。その演算結果はCPUコア2の内部バスC1に出力される。CPUコア2のバスC1に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してポインタレジスタ(この場合、Asで指定したレジスタ)に格納される。
MAステージのクロック信号Clock1の立ち上がりのタイミングに同期して、転送すべきデータを格納しているDSPエンジン3内部のレジスタの値がDSPエンジン3の内部バスD1に出力され、メモリデータバッファ(MDBI)に格納される。MAステージのクロック信号Clock2の立ち上がりのタイミングに同期して、メモリデータバッファ(MDBI)に格納されたデータがデータバスIDBに出力される。この例では、転送すべきデータを格納しているDSPエンジン3内部のレジスタはDsに指定したレジスタになる。Dsに指定できるレジスタは、DSPエンジン3内の任意のレジスタである。アクセス対象となるメモリでは、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージクロック信号Clock2の立ち上がりのタイミングでアドレスバスIABに出力したアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間でデータアクセスが行なわれる。そのためMAステージのクロック信号Clock2の立ち上がりタイミングで、DSPエンジン3より出力されたデータがメモリに書込まれる。以上のようにDSPエンジン3から外部メモリへのデータ書込み動作命令では、IF,ID,EX,MAの4段のパイプラインステージで動作が完了する。
次に、DSP演算命令の一例として、PADD Sx, Sy, Du PMUL Se, Sf, Dg MOVX.W @Ax, Dx MOVY.W @Ay, Dy を例にとり、図15を用いてその動作説明をする。この命令は、DSPエンジン3内のレジスタに格納されているデータの加算、乗算を行ない、X-ROM4やX-RAM6及びY-ROM5やY-RAM7からDSPエンジン3へのデータ転送を行なうという命令であり、図10と図11の動作を合わせた動作である。命令フェッチ、命令デコードの動作は図10と同じなのでその部分の詳細な説明は省略する。
X,YメモリからDSPエンジン3へのデータ読み込み動作命令を実行する場合、アクセスすべきメモリのアドレスはCPUコア2が生成する。そのためEXステージにおけるクロック信号Clock1の立ち上がりのタイミングに同期して、アクセスすべきアドレスを保有するレジスタがアクセスされ、CPUコア2の内部バスA1,A2にレジスタの値が出力される。この例では、アクセスすべきアドレスが格納されているレジスタは、Ax,Ayで指定したレジスタになる。Axに指定できるレジスタはCPUコア2に含まれるレジスタA0x,A1xであり,Ayに指定できるレジスタはCPUコア2に含まれるレジスタA0y,A1yである。CPUコア2の内部バスA1,A2に出力されたデータは、メモリアドレスバッファ(MABX,MABY)に格納され、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してアドレスバスXAB,YABに出力される。一方CPU内部バスA1,A2に出力されたデータはALU213,PAU212でアドレス演算が行なわれ(この場合、ALU213およびPAU212は0加算演算を行なう)、その結果はCPUコア2の内部バスC1及びC2に出力される。CPUコア2の内部バスC1及びC2に出力された演算結果は、EXステージのクロック信号Clock2の立ち上がりのタイミングに同期してポインタレジスタ(この場合、AxおよびAyで指定したレジスタ)に格納される。X,Yメモリでは、MAステージのクロック信号Clock1の立ち上がりからクロック信号Clock2の立ち上りの期間で、EXステージのクロック信号Clock2の立ち上がりのタイミングでアドレスバスXAB,YABに出力されたアドレスのデコードが行なわれ、MAステージのクロック信号Clock2の立ち上がりから次のクロック信号Clock1の立ち上がりの期間でデータアクセスが行なわれる。そのためMAステージのクロック信号Clock2の立ち上がりからデータバスXDB,YDBにデータが出力される。データバスXDB,YDBに出力されたデータは、WB/DSPステージのクロック信号Clock1の立ち上がりのタイミングに同期してDSPエンジン3に取り込まれ、DSPエンジン3の内部バスD1,D2にデータが出力される。WB/DSPステージのクロック信号Clock2の立ち上がりのタイミングに同期してDSPエンジン3の内部バスD1,D2上のデータがディステネーションレジスタ(Destination Reg.)に格納されて、動作を終了する。この例では、ディステネーションレジスタはDxおよびDyに指定したレジスタになる。Dxに指定できるレジスタは、DSPエンジン3内のX0,X1、Dyに指定できるレジスタは、DSPエンジン3内のY0,Y1である。
上記データ転送に並行して、DSP演算動作も同時に行なわれる。WB/DSPステージのクロック信号Clock1の立ち上がりのタイミングに同期して、ソースデータが格納されているレジスタがアクセスされ、DSPエンジン3の内部バスA1,A2、B1,B2にレジスタの値が出力される。この例では、ソースデータが格納されているレジスタは、ADD(加算)動作の場合はSxおよびSyで指定したレジスタになり、MUL(乗算)動作の場合はSeおよびSfで指定したレジスタになる。Sx,Sy,Se及びSfに指定できるレジスタは、DSPエンジン3内部の任意のレジスタである。DSPエンジン3の内部バスA1,B1に出力されたデータはMAC304で乗算演算が行なわれ、その結果はDSPエンジン3内部バスC1に出力される。DSPエンジン3の内部バスA2,B2に出力されたデータはALU302で加算演算が行なわれ、その結果はDSPエンジン3内部バスC2に出力される。DSPエンジン3の内部バスC1およびC2に出力された演算結果は、WB/DSPステージのクロック信号Clock2の立ち上がりのタイミングに同期してディステネーションレジスタに格納される。この例のディステネーションレジスタは、ADD動作の場合はDu,MUL動作の場合はDgで指定したレジスタになる。DuおよびDgに指定できるレジスタは、DSPエンジン3内部の任意のレジスタである。
以上のように、DSPエンジン3内のレジスタに格納されているデータの加算、乗算を行ない、X-ROM4やX-RAM6及びY-ROM5やY-RAM7からDSPエンジン3へのデータ転送を行なう命令では、IF,ID,EX,MA,WB/DSPの5段のパイプラインステージで動作が完了する。
DSP演算命令の第2の例として、
Inst1: PADD A0, M0, A0 PMUL A1, X0, A1 MOVX.W @R4, X1 MOVY.W @R6, Y0
Inst2: ADD R8, R9
Inst3: ADD R10, R11
Inst4: ADD R12, R13
の4つの連続する命令を例にとり、図16を用いてその動作説明をする。この4つの命令は、アドレスバスIAB,XAB、及びYABを同時に使用することで、同一クロックサイクルに異なる動作を実現する例である。Inst1からInst4までの命令動作は、図7及び図15と同じなのでその部分の詳細な説明は省略する。
始めにInst1のIFステージで、Inst1の命令フェッチが行われる。Inst1のIDステージ時に、Inst2ではIFステージになるため、命令フェッチが行われる。
Inst1のEXステージでは、X,Yメモリへのアクセスを行うためのアドレス演算を行っているときに、Inst2ではIDステージのため命令デコードを行い、Inst3ではIFステージのため命令フェッチを行う。
Inst1のMAステージでは、EXステージで演算されたアドレスがアドレスバスXAB、およびYABに出力され(実際にアドレスを出力するタイミングは、EXステージのクロック信号Clock2の立ち上がりのタイミングからである)、データバスXDB及びYDBよりデータが取り込まれる。このときInst2ではEXステージのためR8とR9のADD演算を行って動作が完了され、Inst3はIDステージのため命令デコードを行う。そしてInst4はIFステージのため、Inst4が格納されているアドレスをアドレスバスIABへ出力する。実際にアドレスバスIABへ出力するタイミングは、Inst4のIFステージの半サイクル前のクロック信号Clock2の立ち上がりのタイミングからである。このタイミングは、Inst1においてアドレスバスXAB,YABにアドレスを出力するタイミング(EXステージの後半及びMAステージの前半)と同じタイミングである。すなわちアドレスバスXAB及びYABはデータ転送のために使用され、アドレスバスIABでは命令フェッチのために使用される。マイクロコンピュータ1では、それぞれCPUコア2に接続された内部アドレスバスIAB,XAB,YABと内部データバスIDB,XDB,YDBがあるために、当該3種類の内部バスを使用して同一クロックサイクルで異なるメモリアクセス動作を実行することが可能である。
この後Inst1は、WB/DSPステージにおいてDSP演算を行って動作を完了し、Inst2はすでに動作完了、Inst3はEXステージのためR10とR11のADD演算を行って動作完了し、Inst4ではIDステージのため命令デコードを行う。
次のサイクルでは、Inst4のEXステージのみが行われ、R12とR13のADD演算を行い動作を完了する。
本実施例によれば以下の作用効果を得る。内蔵メモリは、DSPエンジン3による積和演算を考慮してYメモリ5,7とXメモリ4,6に2面化され、CPUコア2がYメモリ5,7とXメモリ4,6を内部バスXAB,XDBと内部バスYAB,YDBによってそれぞれ並列的にアクセス可能にされている。これにより、内蔵メモリ4〜7から2個のデータを同時にDSPエンジン3に転送可能にされる。さらに、内部バスXAB,XDBと内部バスバスYAB,YDBは、外部にインタフェースされる内部バスIAB,IDBとも個別化されているので、CPUコア2はXメモリ4,6とYメモリ5,7のアクセスに並行して外部メモリアクセスも可能にされる。このように、それぞれCPUコア2に接続された3種類のアドレスバスIAB,XAB,YAB及びデータバスIDB,XDB,YDBがあるために、当該3種類の内部バスを使用して同一クロックサイクルで異なるメモリアクセス動作を実行することが可能である。したがって、プログラムやデータが外部メモリに存在する場合にも容易に対応して演算処理の高速化を実現できる。
前記Xメモリ4,6とYメモリ5、7の夫々をRAMとROMから構成することにより、マイクロコンピュータの使い勝手を更に向上させることができる。
上述のように、内蔵メモリはXメモリ4、6とYメモリ5,7に2面化され、2面化された各メモリはROMとRAMを供え、RAMをデータメモリ、ROMをプログラムメモリとすることにより、データメモリとプログラムメモリの分離も可能になり、DSPエンジン3に2個のデータを並列的に転送し、また、命令フェッチ、データ転送、及び演算を並列パイプライン処理にて能率的に行うことができる。
CPUコア2がモジュロアドレス出力部200を備えることにより、CPUコア2における積和演算などの繰返し演算のためのアドレス生成を高速化することができる。
CPU命令は命令コードの最上位4ビットが”0000”〜”1110”までの空間に命令が割り当てられている。DSP命令は、命令コードの最上位4ビットが”1111”に全て割り当てられている。さらに命令コードの最上位6ビットが”111100”及び”111101”の空間に割り当てられた命令は、DSP命令でも16ビット長の命令コードになっている。命令コードの最上位6ビットが”111110”の命令は、32ビット長の命令コードになっている。命令コードの最上位6ビットが”111111”の空間には命令を割り当てておらず、未使用領域となっている。このように、最大32ビットの命令に対するコード割り当てに上記のような規則を設けることにより、命令コードの最上位側6ビットをデコードすれば、当該命令がCPU命令であるか、16ビット長のDSP命令であるか、32ビット長のDSP命令であるかを、小さな論理規模のデコーダで判定することができ、常に32ビット全部を一度にデコードすることを要しない。
図17に基づいて説明したように、命令フェッチタイミングの後には、まだ処理されていない命令コードデータが命令レジスタ25にセットされ、このとき、実行されるべき命令が、16ビットCPU命令、16ビットDSP命令又は32ビットDSP命令の何れであっても、その上位側16ビットを必ず第1のデコード回路240に供給することができる。
32ビットDSP命令のAフィールドのコードは命令レジスタ25における上位領域UIRにセットされ、Aフィールドと同一のフォーマットを有する16ビットDSP命令も上位領域UIRにセットされる。したがって、その何れにおいても、CPUコア2は、必要なアドレス演算及びデータフェッチに必要なデータパスの選択を同様に行うことができる。すなわち、32ビットDSP命令を実行するためのデータフェッチと16ビットDSP命令を実行するためのデータフェッチとのためにデコード回路240、241を共通化でき、この点においても、マイクロコンピュータ1の論理規模を縮小することができる。
以上本発明者によってなされた発明を実施例に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。例えばCPU命令、16ビットDSP命令、32ビットDSP命令の識別は命令の最上位6ビットを利用することに限定されず、命令コードの数に応じて増減できる。また、命令レジスタに対する下位16ビットを上位へシフトさせる機能は別の機能に置き換え可能である。また、CPUコアやDSPエンジンに含まれるレジスタ本数や演算器の種類は上記実施例に限定されず適宜変更可能である。また、メモリの数を2個に限定せずに増加させることが可能である。そしてメモリの数に合わせてメモリに接続されるアドレスバス、データバスの本数を増加させることは可能である。例えば、X,Yメモリの他に新たにZメモリを設ける。それに合わせてCPUとZメモリの間にアドレスバスZAB,DSPエンジンとZメモリの間にデータバスZDBを接続する。このような構成にすれば、積和演算時にX,YメモリからデータをDSPエンジンに取り込むだけでなく、現在実行中の命令以前に演算終了しているデータをZバスを介してZメモリ回路に同時に書き込むことが可能となる。1つの命令で演算データの取り込み、メモリへの書き込みが可能となるのでマイクロコンピュータ全体のスループットがさらに向上する。本発明は、移動体通信機器における情報の圧縮伸張処理やフィルタリング処理、サーボ制御、プリンタにおける画像処理等に適用される機器組み込み制御用マイクロコンピュータとしての利用に最適である。