JP2004038327A - データ処理装置 - Google Patents

データ処理装置 Download PDF

Info

Publication number
JP2004038327A
JP2004038327A JP2002191339A JP2002191339A JP2004038327A JP 2004038327 A JP2004038327 A JP 2004038327A JP 2002191339 A JP2002191339 A JP 2002191339A JP 2002191339 A JP2002191339 A JP 2002191339A JP 2004038327 A JP2004038327 A JP 2004038327A
Authority
JP
Japan
Prior art keywords
instruction
bits
read
bus
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2002191339A
Other languages
English (en)
Other versions
JP4073721B2 (ja
Inventor
Naomiki Mitsuishi
三ッ石 直幹
Shinichi Shibahara
芝原 真一
Takahiro Okubo
大久保 貴裕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Technology Corp
Original Assignee
Renesas Technology Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Technology Corp filed Critical Renesas Technology Corp
Priority to JP2002191339A priority Critical patent/JP4073721B2/ja
Priority to US10/457,920 priority patent/US7376819B2/en
Publication of JP2004038327A publication Critical patent/JP2004038327A/ja
Application granted granted Critical
Publication of JP4073721B2 publication Critical patent/JP4073721B2/ja
Priority to US12/105,188 priority patent/US20080201564A1/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Memory System (AREA)

Abstract

【課題】データ処理動作の高速化を図る。
【解決手段】CPUの命令リードを16ビット(第1の語数)で行うか、32ビット(第2の語数)で行うかを選択する手段(FF)を設ける。16ビット/32ビットの命令リードに応じて、プログラムカウンタ(PC)のインクリメント値を(+2/+4)切替える。データのリード/ライトは前記選択手段にかかわらず、所要のデータサイズで行う。バスコントローラは、CPU(2)が16ビット/32ビットで命令リードまたはデータのリード/ライトを発行すると、そのアドレスに示される資源に指定されたバス幅に対応して、所定の回数のリード/ライトを行い、CPUが発行した16ビット/32ビットの命令(リードデータ)が用意されるまで、CPUにウェイトを要求する。
【選択図】    図1

Description

【0001】
【発明の属する技術分野】
本発明は、データ処理装置に関し、例えば中央処理装置(CPU)、これを搭載するマイクロコンピュータ若しくはデータプロセッサ等に利用して有効な技術に関するものである。
【0002】
【従来の技術】
半導体集積回路でなるマイクロコンピュータは、アドレス空間の拡張や、命令セットの拡大、高速化などが図られてきた。オブジェクトレベルで互換性を保ちつつ、アドレス空間の拡張や、命令セット拡大を実現した例として、例えば、特開平5−241826号又は特開平6−51981号に記載されたものがある。
【0003】
また、2ステートで基本命令を実行していたCPUとの互換性を保ちつつ1ステートで基本命令を実行するように高速化し、さらに、CPUとは独立した乗算器を内蔵して高速化を図った例として、特開平8−263290号に記載のものがある。
【0004】
高速化によって、マイクロコンピュータによって制御される機器の高速化や高機能化、或は、従来複数の半導体集積回路で構成したものを、統合したりすることによる小型化などを図ることができる。
【0005】
本発明者は先の出願(特開2000−357089)において、以下の提案を行った。すなわち、内部データバス幅を、少なくとも命令の基本単位(例えばワード)よりも大きくし、リードした命令を複数単位保持する命令レジスタを持ち、この命令レジスタに存在する命令の量を監視する手段を設け、命令を、実行の基本単位時間(ステート)にしたがって、命令のリードとプログラムカウンタ(PC)インクリメントのみの制御を行うステートと、実効アドレスの計算やデータの演算処理の制御を含むステートに分割し、命令のリードのみの制御を行うステートを省略可能にした。即ち、前記監視手段の指示に従い、前記命令レジスタに存在する命令量に従って、前記命令のリードのみの制御を行うステートを省略(スキップ)するようにした。これによって、各命令の実行時における命令リードの量を、自命令の命令長に対して、多くしたり、少なくしたりすることによって、実行ステート数を短縮し、高速化を図ろうとする。
【0006】
【発明が解決しようとする課題】
本発明者らは、マイクロコンピュータなどにおいて高速化を実現するためのハードウェアについて検討した。その検討過程では以下の点を考慮した。
【0007】
シングルチップ型のマイクロコンピュータ、ないしは機器制御においては、割込み応答時間を短縮することが重要であると認識している。制御対象やマイクロコンピュータ内部の各種のイベントを割込みとして、CPUが認識し、これに対応した所定のプログラムを実行することで、マイクロコンピュータの各種の資源を用いて、所望の制御を実現するとき、所定のイベントの発生に対して、所望の制御を、所定の時間内に実行するリアルタイム性を向上することが必要だからである。
【0008】
論理的・物理的規模を最小限にすることが望ましいことにも着目した。プログラム用のメモリであるROM(Read Only Memory)を内蔵した、シングルチップ型のものにあっては、内蔵ROMの容量が、外部にメモリを接続するのに比較して少ないため、プログラム容量を削減することが望ましい。
【0009】
また、近年、シングルチップ型のマイクロコンピュータのROMとして、電気的に書込み消去が可能なフラッシュメモリ、EEPROM(電気的に書込み消去可能なROM)が用いられることが多い。これらの電気的に書込み消去が可能なメモリは、記憶素子が大きく、また、書込み消去用の高電圧発生回路などが必要であって、その物理的規模が大きくなってしまうため、より一層、プログラム容量の削減が望ましい。内蔵RAM(Random Access Memory )についても同様であり、使用するデータの容量を小さくできる方が望ましい。
【0010】
マイクロコンピュータのプログラムを、C言語などの高級言語で記述することが増えてきている。高級言語で記述する場合、アセンブリ言語で記述する場合に比較して、プログラム容量および使用するデータの容量が大きくなり易い。 本発明者は、上記観点より、高速化に関し、ハードウェアの点より、以下の点を実現することが重要であることを見出した。
【0011】
(1)[バスモード]
内部バスを32ビット化して、高速化する手段については、内蔵ROMなどのようにバス幅を広げられる場合は有効であるが、マイクロコンピュータの応用範囲は広く、外部メモリにプログラムを格納して使用する場合も多く、外部メモリの場合、32ビットバスは、配線領域・マイクロコンピュータのピン数・使用するメモリの価格といった面で制約が大きいことを見出した。そこで、CPUが、32ビットで命令リードを要求して、これを2回の16ビットリードとして実現することは可能である。しかし、CPUは要求した32ビットがリードされるのを待つことになる。命令リードは、分岐命令などがあると余分にリードしても無駄になってしまう(使用されない)ことがある。この間、CPUがウェイトされることになり、二重の無駄になるとともに、割込みも受付けられなくなってしまい、いわゆる割込み応答時間が増加してしまう。なお、特開昭56−132624号にはI/Oからバス幅指定信号を入力し、動作を切替える例が記載されている。命令については、考慮されていない。
【0012】
(2)[遅延分岐]
RISC型のマイクロコンピュータなどのようにパイプラインが固定化されたものにあっては、分岐命令を高速化し、かつ内部論理構成を簡単にするために、遅延分岐を行うものがある。分岐命令とその前の命令を入れ替えて実行するようにし、入れ替えた分岐命令を遅延分岐命令、入れ替えたその前の命令を遅延スロット命令と呼ぶ。可変長の命令コードに対して、遅延分岐を適用する例に、特開平10−21074号がある。この例では、ハーバードバスを前提にしており、パイプラインステージは均一になっている。また、同一の分岐を行う命令が遅延分岐しかないと、遅延スロットに配置可能な命令がなく、NOP命令を配置することになり、不所望な命令増加、プログラム容量の増加を招く。
【0013】
(3)[複数ビットシフト]
複数ビットシフトを行う場合、いわゆるバレルシフタを用いることが知られている。バレルシフタについては、例えば、特開平10−198550号に記載されている。
【0014】
一方、CPUの演算の種類は複数あり、これに対応した演算器を持つ必要がある。例えば、シフト演算のほか、算術演算、論理演算等がある。これらは、直列に配置する(加算結果をシフトする、など)必要がないので、並列に配置するとよい。CPUの動作周波数を向上するためには、これらの最大の遅延を持つ演算器を高速化する必要がある。換言すれば、最大の遅延を持つ演算器に相当する遅延を、他の演算器が許容できることになる。一般に算術演算器は桁上がりを有するために遅延が大きくなり易い。
【0015】
複数ビットシフトを行なう場合に、バレルシフタを用いない場合は、1ビットのシフト命令を必要個数配置するか、プログラムループ処理を行うことになる。5ビットシフトを行う場合、前者の例は、
Figure 2004038327
となり、また、後者の例は、
Figure 2004038327
となる。出現頻度は高くないにしても、プログラム容量の増加を招く。
【0016】
(4)[乗算器]
乗算器を内蔵する場合、8ビット×8ビットの積が16ビットといったように積が拡張されるものよりも、C言語ソースプログラム上のデータ型に応じて、16ビット×16ビットの積が16ビットのように、乗数、被乗数、積が夫々同じサイズである場合が多い。また、定数除算の代わりに、乗算を用いるプログラム手法が、特開2000−357096で知られている。
【0017】
本発明の目的は、ハードウェアの観点よりデータ処理の高速化を図ることにある。詳しくは、同一の動作周波数での高速化、換言すれば、所定の処理を行うのに必要な実行ステート数を短縮することにある。
【0018】
本発明の別の目的は、資源の利用効率を向上させることができるデータ処理装置を提供すること、使い勝手を向上させることができるデータ処理装置を提供すること、プログラム容量を低減することができるデータ処理装置を提供することにある。
【0019】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【0020】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0021】
(1)[バスモード]
CPUの命令リードを例えば16ビット(第1の語数)で行うか、32ビット(第2の語数)で行うかを選択する手段を設ける。16ビット/32ビットの命令リードに応じて、プログラムカウンタのインクリメント値を(+2/+4)切替える。データのリード/ライトは前記選択手段にかかわらず、所要のデータサイズで行う。即ち、バスモードに関する本願発明に係るデータ処理装置は、命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段(CPU)を有する。前記命令実行手段は、データまたはアドレスを格納可能なレジスタと、命令リードを行なう語数を選択する選択手段と、前記選択手段によって選択された語数の命令リードのためのバス制御信号(BCMD)を生成すると共に、前記選択された語数に応じて命令のプリフェッチカウンタ(pfc)のインクリメント値(+2/+4)を切替える制御手段(DEC)と、を有し、データのリード及びライトは前記選択手段にかかわらず、所要の語数で行う。例えば、バスコントローラは、CPUが16ビット/32ビットで命令リードまたはデータのリード/ライトを発行すると、そのアドレスに示される資源に指定されたバス幅に対応して、所定の回数のリード/ライトを行い、CPUが発行した16ビット/32ビットの命令(リードデータ)が用意されるまで、CPUにウェイトを要求する。
【0022】
分岐命令の実行開始時などのように必要な命令リードの量が少ないときには、強制的に16ビット(少ない語数)で命令リードを行うようにする。分岐命令や割込み例外処理などの場合、最低限1ワード分のプリフェッチが完了した時点で、分岐先の先頭命令のデコードを開始し、実行するようにCPUを構成する。
【0023】
データは所要量のデータリード/ライトを発行するようにし、無駄が生じることがない。
【0024】
前記制御手段は、分岐命令の命令コードをデコードして実行する際に、分岐先の命令のリードを行い、分岐先の命令のリード内容を入力した時点で、前記分岐先の命令リード内容の解読を行う。
【0025】
データ処理装置は内蔵ROMと、外部に接続したメモリをアクセス可能な外部バス手段とを更に有してよい。このとき、前記内蔵ROMのバス幅よりも、前記外部バス手段のバス幅を狭くする選択が可能である。或は、前記内蔵ROMのバス幅は前記外部バス手段のバス幅よりも広い。
【0026】
本発明の望ましい一つの態様では、前記選択手段は、前記語数選択のための制御情報が命令の実行によって選択可能にされ、制御情報の初期値は相対的に大きな方の語数であるのがよい。
【0027】
(2)[遅延分岐]
遅延分岐命令での分岐先命令は、一旦、第2保持手段としての専用のレジスタ(IR)に保持するようにする。遅延スロット命令の終了時に、第1保持手段としての命令バッファ(FB)のクリアを行うようにする。即ち、データ処理装置は命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、前記命令実行手段は、命令コードを保持する第1の保持手段(FB)と第2の保持手段(IR)を持ち、遅延分岐命令でリードした分岐先命令は、前記第2の保持手段(IR)に保持し、前記第1の保持手段(FB)は、それ以前の内容を保持し、遅延スロット命令の終了時に、前記第1の保持手段(FB)のクリアを行う。
【0028】
同様に、分岐アドレスを示しているプリフェッチカウンタ(pfc)を、一旦、一時的なレジスタ手段(TR)に保持することで、遅延スロットの命令の命令コード長が長い場合も、プリフェッチカウンタに基づいて、継続して命令リードを行うことができる。遅延スロットの命令は複数ステートで実行可能であってよい。これにより、遅延スロットに配置する命令を増やし、遅延分岐を利用し易くし、使い勝手を向上し、資源の利用効率を向上するとともに、高速化を実現できる。即ち、前記命令実行手段は、プリフェッチカウンタ(pfc)と、一時的な情報保持に利用される一時レジスタ手段(TR)とを更に有し、遅延分岐命令で、分岐先アドレスまたはこれをインクリメントした値を、前記一時レジスタ手段(TR)に保持し、前記プリフェッチカウンタは、分岐先命令リード以前に命令リードを行ったアドレスに続く内容を保持し、遅延スロット命令実行には、前記プリフェッチカウンタを利用可能とし、遅延スロット命令の終了時に、前記一時レジスタ手段(TR)の内容またはこれをインクリメントした値を前記プリフェッチカウンタにプリセットする。 パイプラインの乱れを抑止する課題とは別に、分岐時に分岐命令リードのレイテンシを隠蔽する意味で、複数ステートで実行する命令を遅延スロットに配置することによって、実行ステート数を短縮することができる。
【0029】
遅延スロットに配置された命令では、自命令の命令コードのリードデータを待つステートや実効アドレス計算のためのステートは命令リードを抑止する。これにより、利用されない命令リード(プリフェッチ)を抑止できる。ウェイトが挿入されたりして、実行ステート数が増加することを回避することができる。
【0030】
前記命令実行手段は、前記遅延分岐命令と、前記遅延分岐命令と同一のアドレッシングモードである遅延分岐の無い分岐命令をともに実行可能である。要するに、同一のアドレッシングモードで分岐命令と遅延分岐命令を持つ。遅延スロットに配置可能な命令がない場合に、不所望なNOP(無操作)命令などを配置する必要がないようにする。
【0031】
(3)[複数ビットシフト]
2の累乗といった固定的なビット数のシフタを、2段直列に配置し、直列配置された第1シフタ及び第2シフタを算術論理演算器と並列に配置する。例えば、32ビット演算を可能にする場合、第1のシフタは、第1、第2のビット数(1、2)の左右シフトを行い、第2のシフタは、第3、第4、第5のビット数(4、8、16)の左右シフトを行う動作を可能にし、かつ、シフトしない動作も選択可能にする。
【0032】
制御部によって、2段のシフタの制御を行う。制御部は、命令実行時に、シフトビット数を判定して、第1方向のシフト及び第2方向へのシフト動作の指示、第1シフタ又は第2シフタの一方のみ、或いは両方のシフト動作を指示する。制御部は、命令実行時に、第1シフタ、第2シフタの1回の操作では十分でない場合、残りのシフトビット数を指示(sftcnt)して、次のステートで引続きシフトを行うように構成する。この間、割り込みは禁止する。例えば、出現頻度の高いシフトビット(1、2、4、8、16ビット)は1ステートで実行可能にし、32ビットの演算の場合、最大でも、第1、第2、第3、第4、第5のビット数(1、2、4、8、16)を1回ずつ、3ステートの動作を行うことにより、任意ビットのシフトを行うことができる。
【0033】
バレルシフタは、左右64選択のセレクタを有するのに対して、上記手段に係る複数ビットシフト回路では、シフト方向を含めたシフトビット数の選択及びシフトしない選択も含めて、第1シフタは5選択のセレクタがあればよく、第2シフタは7選択のセレクタがあればよい。これによって論理規模を縮小することができる。また、算術演算器と並列であって、上記手段に係る複数ビットシフト回路の遅延時間をその算術演算器の遅延時間と均等にして、遅延時間の増加を抑止できる。上記手段に係る複数ビットシフト回路は、前記1ビットのシフト命令を必要個数配置するか、プログラムループ処理を行う場合より、プログラム容量を削減することができる。
【0034】
(4)[乗算器]
本発明に係るデータ処理装置は命令実行手段を有し、前記命令実行手段は、第1のビット数の被乗数と第1のビット数の乗数とを乗算して第2のビット数の積を得る乗算手段を有し、この乗算手段を使用して、第1のビット数の被乗数と第1のビット数の乗数とから第1のビット数の積の下位を得る第1乗算命令(MUL.W)と、第2のビット数の被乗数と第2のビット数の乗数とから第2のビット数の積の下位を得る第2乗算命令(MUL.L)と、第2のビット数の被乗数と第2のビット数の乗数とから第2のビット数の積の上位を得る第3乗算命令(MUL/UP)とを実行可能である。例えば、16ビット×16ビットの積32ビットを1ステートで実行可能な乗算論理を持つ乗算器で、16ビット×16ビットの乗算命令を1ステートで実行可能にするとともに、32ビット×32ビットの積の下位の32ビットを得る乗算命令を4ステートで、32ビット×32ビットの積の上位の32ビットを得る乗算命令5ステートで実行可能にする。
【0035】
乗算器は、スタート信号(start)と、乗算のサイズを示す制御信号(mul_long)と、乗算器の上位演算結果を採る制御信号(upper)を得て動作するようにし、状態遷移を行う。32ビット×32ビットの積の上位の32ビットを得る乗算命令を除算に用いることにより、除算の効率化に寄与する。
【0036】
【発明の実施の形態】
図2には本発明に係るデータ処理装置が適用されたシングルチップマイクロコンピュータのブロック図が例示される。
【0037】
同図に示されるシングルチップマイクロコンピュータ1は、全体の制御を司るCPU2、バスコントローラ(BSC)3、割込コントローラ(INT)4、CPU2の処理プログラムなどを格納するメモリであるROM5、CPU2の作業領域並びにデータの一時記憶用のメモリであるRAM6、タイマ7、シリアルコミュニケーションインタフェース(SCI)8、A/D変換器9、第1乃至第9入出力ポート(IOP1〜IOP9)10A〜10I、クロック発振器(CPG)11の機能ブロック若しくはモジュールから構成され、公知の半導体集積回路製造技術により1つの半導体基板(半導体チップ)上に形成される。
【0038】
前記シングルチップマイクロコンピュータ1は、電源端子として、グランドレベル(Vss)、電源電圧レベル(Vcc)、アナロググランドレベル(AVss)、アナログ電源電圧レベル(AVcc)、の印加端子を有し、更に専用制御端子として、リセット(RES)、スタンバイ(STBY)、モード制御(MD0、MD1)、クロック入力(EXTAL、XTAL)の各端子を有する。
【0039】
各入出力ポート10A〜10Iは、アドレスバス、データバス、バス制御信号あるいはタイマ7、SCI8、A/D変換器9の入出力端子と兼用されている。
【0040】
CPG11の端子EXTAL、XTALに接続される水晶発振子またはEXTAL端子に入力される外部クロックに基づいて生成される基準クロック(システムクロック)に同期して、シングルチップマイクロコンピュータ1は動作を行う。この基準クロック1周期をステートと呼ぶ。
【0041】
シングルチップマイクロコンピュータ1の機能ブロックは、内部バス12によって相互に接続さる。内部バス12はアドレスバス、データバス、及びコントロールバスから成る。コントロールバスは、リード信号・ライト信号・バスサイズ信号をエンコードしたバスコマンド等を伝達する。
【0042】
上記機能ブロック若しくはモジュールは内部バス12を介して、CPU2によってリード/ライトさる。内部バス12のデータバス幅は、例えば32ビットとする。内蔵ROM5、RAM6は1ステートでリード/ライト可能とされる。尚、バスコントローラ3、割込みコントローラ4、タイマ7、SCI8、A/D変換器9、入出力ポート10A〜10I、及びCPG11が有する制御レジスタを総称して、内部I/Oレジスタと呼ぶ。
【0043】
前記バスコントローラ(BSC)3は、CPU2からバスコマンドBCMD、アドレスバスIABからアドレス信号を入力して、所要のバス制御を行う。アドレスバスIABで指定されるアドレスに対して、それぞれ固有若しくは選択されたバス幅、アクセスステート数が与えられるので、これに対応して、CPU2が要求した命令リードまたはデータリード/ライトを実現する。このとき、CPU2が要求した命令リードまたはデータリード/ライト(バスコマンド)に対する応答信号して、レディ信号readyを返す。即ち、レディ信号readyが非活性の場合は、CPU2はウェイトされる。
【0044】
前記バスコントローラ3は、内部I/Oレジスタとして、制御ビットbmode16を持つ。bmode16=0のとき、32ビット命令フェッチモード、bmode16=1のとき、16ビット命令フェッチモードであり、制御信号bmode16がCPU2に与えられる。制御ビットbmode16は、リセット後に0にクリアされるようにする。32ビット命令フェッチモードにおいて、16ビットバスで接続されたメモリをリードしても、分岐命令や割込みなどでプログラムの流れを変えなければ、無駄は生じない。通常、リセット後には割込みはマスク或は禁止されているため、初期化処理に先立って、前記制御ビットbmode16を設定すればよい。
【0045】
上記シングルチップマイクロコンピュータ1にリセット信号RESが与えられると、CPU2を始めとし、シングルチップマイクロコンピュータ1はリセット状態になる。このリセットが解除されると、CPU2は所定のアドレス(リセットベクタ)からスタートアドレスをリードして、このスタートアドレスから命令のリードを開始するリセット例外処理を行う。この後、CPU2は逐次、ROM5などから命令をリードし、解読して、その解読内容に基づいてデータの処理或はRAM5、タイマ7、SCI8、入出力ポート10A〜10I等とのデータ転送を行う。
【0046】
タイマ7、SCI8、外部信号などの状態を割込み信号として、CPU2に伝達することができる。即ち、割込信号13は、A/D変換器9、タイマ7、SCI8、入出力ポート10A〜10Iの所定の回路が出力し、割込コントローラ4はその割込信号13を入力して、所定のレジスタなどの指定に基づいて、CPU2に割込要求信号intfと受付けた割込みに対応したベクタvecを与える。割込要因が発生すると、CPU2割込要求が発生され、CPU2は実行中の処理を中断して、例外処理状態を経て、前記ベクタvecに対応したアドレスから、分岐先アドレスをリードして、所定の処理ルーチンに分岐し、所望の処理を行い、割込要因をクリアしたりする。所定の処理ルーチンの最後には、通常復帰命令が置かれ、この命令を実行することによって前記中断した処理を再開する。
【0047】
図3にはCPU2に内蔵されている汎用レジスタ及び制御レジスタの構成例(プログラミングモデル)が示される。
【0048】
CPU2は、32ビット長の8本の汎用レジスタER0〜ER7を持っている。汎用レジスタER0〜ER7は、全て同じ機能を持っており、アドレスレジスタとしてもデータレジスタとしても使用することができる。
【0049】
データレジスタとしては32ビット、16ビットおよび8ビットレジスタとして使用きる。アドレスレジスタおよび32ビットレジスタとしては、一括して汎用レジスタER(ER0〜ER7)として使用する。16ビットレジスタとしては、汎用レジスタERを分割して汎用レジスタE(E0〜E7)、汎用レジスタR(R0〜R7)として使用する。これらは同等の機能を持っており、16ビットジスタを最大16本まで使用することができる。8ビットレジスタとしては、汎用レジスタRを分割して汎用レジスタRH(R0H〜R7H)、汎用レジスタRL(R0L〜R7L)として使用する。これらは同等の機能を持っており、8ビットレジスタを最大16本まで使用することができる。各レジスタ独立に使用方法を選択することができる。
【0050】
汎用レジスタER7には、汎用レジスタとしての機能に加えて、スタックポインタ(SP)としての機能が割り当てられており、例外処理やサブルーチン分岐などで暗黙的に使用される。例外処理は前記割込み処理を含む。
【0051】
プログラムカウンタPCは32ビットのカウンタで、CPU2が実行中の命令のアドレスを示す。特に制限されないもののCPU2の命令は、全て2バイト(ワード)を単位としているため、最下位ビットは無効であり、命令リード時には最下位ビットは0とみなされる。
【0052】
コンディションコードレジスタCCRは8ビットのレジスタで、CPU2の内部状態を示している。割込みマスクビット(I)とハーフキャリ(H)、ネガティブ(N)、ゼロ(Z)、オーバフロー(V)、キャリ(C)の各フラグを含む8ビットで構成されている。
【0053】
ベクタベースレジスタVBRは32ビットのレジスタで、下位12ビットは0とされ、上位20ビットが例外処理ベクタ等とされる。
【0054】
図4にはCPUのアドレス空間が例示される。CPU2のアドレス空間は4ギガ(G)バイトあり、8つのエリアに分割されている。これらのエリアは、バスコントローラ3の設定によって、独立して、バス幅、アクセスステート数を設定可能にされている。
【0055】
一方、マイクロコンピュータ2内部のROM5、RAM6、内部I/Oレジスタは、前記バスコントローラ3の設定にかかわらず、固有のバス幅、アクセスステート数で動作する。前記の通り、内蔵ROM5、RAM6は、32ビットバスで接続され、1ステートでリード/ライトを行う。かかるアドレス空間やエリアの設定については、特開平5−307519号などに記載されている。
【0056】
また、図4には、バスモードの切替えの好適な例が示される。16ビットバスで接続され、2ステートでアクセス可能な外部ROM5が、エリア1に接続されている場合の例である。内蔵ROM5上でプログラムを実行している場合、32ビットバスで接続されているため、32ビットモードで動作すればよく、bmode16=0とし、命令リードをロングワード単位で行う。単位リードサイクルでロングワード(2ワード)の命令をリードできるので、後の命令を実行しないことになっても、無駄は生じない。内蔵ROM5上の分岐命令によって、外部ROMに分岐し、外部ROM上のプログラム実行によって前記制御ビットbmode16を1にセットする。以降、命令リードをワード単位で行う。
【0057】
制御ビットbmode16=0であっても、分岐命令や割込みなどプログラムの流れを変えなければ、無駄は生じないので、制御ビットbmode16の切替えは、外部ROMに分岐してから行えばよい。割込みが発生する可能性があり、割込み応答時間の増加が許容できない場合には、外部ROMへの分岐の直前に、制御ビットbmode16を1にセットすればよい。
【0058】
外部ROMから内蔵ROM5へ分岐する場合は逆の動作を行えばよい。
【0059】
図4では、内蔵ROM5上のプログラム実行後、外部ROMへ分岐し、外部ROMのプログラム実行後、内蔵ROM5に分岐するように表記しているが、分岐は随時行うことができる。メインプログラムを外部ROMに配置し、高速処理が必要なサブルーチンプログラム(関数)を内蔵ROM5に配置して、外部ROMと内蔵ROM5の間を随時、サブルーチン分岐/サブルーチンリターンすればよい。高速処理が必要なサブルーチンプログラム(関数)を内蔵RAM6に配置することも可能である。また、内蔵RAM、外部RAMにおいても同様の動作が可能となる。
【0060】
図5にはCPU2の機械語の命令フォーマットの一例が示される。CPU2の命令は、2バイト(ワード)を単位にしている。各命令はオペレーションフィード(op)、レジスタフィールド(r)、EA拡張部(EA)、およびコンディションフィールド(cc)を含む。
【0061】
オペレーションフィールド(op)は、命令の機能を表し、アドレッシングモードの指定オペランドの処理内容を指定する。命令の先頭4ビットを必ず含む。2つのオペレーションフィールドを持つ場合もある。
【0062】
レジスタフィールド(r)は汎用レジスタを指定する。レジスタフィールド(r)はアドレスレジスタのとき3ビット、データレジスタのとき3ビット(32ビットレジスタ)または4ビット(8または16ビットレジスタ)である。2つのレジスタフィールドを持つ場合、またはレジスタフィールドを持たない場合もある。
【0063】
EA拡張部(EA)は、イミディエイトデータ、絶対アドレスまたはディスプレースメントを指定する。8ビット、16ビット、または32ビットである。コンディションフィールド(cc)は条件分岐命令(Bcc命令)の分岐条件を指定する。
【0064】
図6には本発明の命令フォーマットの例(後述する命令)を示す。
【0065】
[MOV命令]
MOV.W @rs,rdは、1ワードの命令で、ビット6〜4でアドレスレジスタ(rs)を、ビット3〜0でデータレジスタ(rd)を指定する。MOV.W @aa:16,rdは、2ワードの命令で、第1ワードのビット3〜0でデータレジスタ(rd)を指定し、第2ワードに絶対アドレス(aa)を含む。
【0066】
[JMP命令]
JMP @aa:32は、3ワードの命令で、第2、第3ワードに絶対アドレス(aa)を含む。
【0067】
[通常分岐命令/遅延分岐命令]
通常分岐命令BRA d:8、遅延分岐命令BRA/S d:8は、1ワードの命令で、ビット6〜1でディスプレースメント(d)を指定する。ディスプレースメント(d)は最下位ビットを0とし、上位を符号拡張して使用される。命令コードのビット0が0のとき、通常分岐命令とされ、命令コードのビット0が1のとき、遅延分岐命令とされる。
【0068】
[シフト命令]
SHLL.L #xx,rdは、1ワードの命令で、ビット8〜4でシフトビット数を示すイミディエイト(xx)を、ビット3〜0でデスティネーションレジスタ(rd)を指定する。
【0069】
[乗算命令]
16ビット×16ビットで積の下位16ビットを得る命令MULU.W rs,rd、32ビット×32ビットで積の下位32ビットを得る命令MULU.Lrs,rd、32ビット×32ビットで積の上位32ビットを得る命令MULU/UP.L rs,rd、は、夫々1ワードの命令で、ビット7〜4でソースレジスタ(rs)を、ビット3〜0でデスティネーションレジスタ(rd)を指定する。同様に、ソースレジスタの代わりにイミディエイト4ビットを乗数として使用する、MULU.W #x:4,rd、MULU.L #x:4,rd、MULU/UP.L #x:4,rd、は、1ワードの命令で、ビット7〜4でイミディエイトデータ(xx)を、ビット3〜0でデスティネーションレジスタ(rd)を指定する。
【0070】
図1にはCPU2の詳細な一例が示される。CPU2は制御部(CNT)2Aと実行部(EXEC)2Bを有する。制御部2Aは、命令バッファ部IBUF、命令変更部CHG、命令デコーダDEC、レジスタセレクタRESL、割込み制御部INTCを含む。
【0071】
前記レディ信号readyは、CPU2が要求した命令リードまたはデータリード/ライト(バスコマンド)に対する、バスコントローラ3からの応答信号であり、CPU2の状態遷移のイネーブル信号とされる。
【0072】
前記命令バッファ部IBUFは、リードした命令を一旦格納する回路であって、8ワード分のFIFOバッファFBと2ワード分の命令レジスタIRを持つ。命令レジスタIRは、分岐命令時に使用する。命令デコーダDECから初期化信号clrFIFOを入力する。
【0073】
実行すべき命令は、前記命令バッファ部IBUFから命令デコーダDECに出力される。命令リード直後に実行する場合には、命令バッファ部IBUFのFIFOバッファFBを使用せず、直接データバスIDBからの入力が命令デコーダDECに供給される。
【0074】
前記命令変更部CHGは、リードした命令以外の命令コードを、命令デコーダDECに与える場合に動作し、そのほかの場合は、命令バッファ部IBUFの内容を命令デコーダDECに与える。リードした命令以外の命令コードは、割込み制御部INTCの指示によって、割込みなどの例外処理を実行するとき、などに用いる。
【0075】
割込み制御部INTCは、図2の割込みコントローラ4の出力する割込み要求信号intfを受付ける。また、命令デコーダDECの出力する割込みマスク信号(図示せず)を参照して、割込みがマスクされていなければ、命令変更部CHGに制御信号intrqによって、割込みを指示する。後述の遅延分岐と遅延スロット命令の間、複数ビットシフト命令実行時は割り込みを禁止する。割り込み例外処理を実行する信号chg_intの論理記述は、
assign chg_int=intrq & 〜(|sftcnt) & 〜mod_dbである。ここで、|sftcntはsftcntの全ビットの論理和、&は論理積記号、〜は反転記号である。制御信号sftcnt、修飾信号mod_dbの論理記述については後述する。
【0076】
命令デコーダDECは、例えば、マイクロROM或はPLA(Programmable Logic Array)または布線論理で構成され、制御信号を出力する。制御信号は第1乃至第3の3種類に大別され、それぞれ、有効となるタイミングが異なる。第1の制御信号(制御信号A)は当該ステートで有効になる。第2の制御信号(制御信号B)は次のステートで、第3の制御信号(制御信号C)は次の次のステートで、それぞれ有効になる。
【0077】
命令デコーダDECの出力の一部(第2の制御信号)が命令デコーダDECにフィードバックされている。これは各命令コード内の遷移に用いるステージコード(tmg)と複数ビットシフト制御信号sftcnt、遅延スロットを示す修飾信号mod_dbを含む。
【0078】
CPU2には、バスモードを示す信号bmode16が与えられる。この信号はフリップフロップFFに入力され、その出力信号mode16は命令デコーダDECに供給される。
【0079】
命令デコーダDECは、実行シーケンスの制御部SCNT、バスアクセスの制御(バスコマンドBCMD:第1の制御信号)部BCNTと実行部の制御部ECNTなどを有する。バスアクセスの制御部BCNTの命令リードに関する論理記述は概略以下のようにできる。即ち実行シーケンスの制御部SCNTで命令フェッチを示す制御信号if又はifwを活性状態にしたとき、図7の論理記述(ケース文)に従って、バスコマンドが与えられる。図7の論理記述は、RTL(Register Transfer Level)若しくはHDL(Hardware Description Language)記述と呼ばれ、公知の論理合成ツールによって、論理回路に論理展開できる。HDLはIEEE1364として標準化されている。これに示される論理記述の構文は、ケース(case)文に準拠しており、always@の次の()内で定義された値若しくは信号に変化が有ったとき、それ以下の記述行の処理を行う、という記述内容になっている。「4’b1000」は4ビット長のバイナリコード1000を意味する。制御信号ifはロングワードまたはワードの命令リードを示す。制御信号ifwは強制的なワードの命令リードを意味する。`longread、`wordreadは別に定義された定数である。iab1はアドレスバスIABのビット1である。命令はワード(16ビット)単位であり、必ず、偶数番地に配置されるから、iab1=0のときは、4の倍数番地であり、ロングワードアクセスが1回で実行可能であることになる。即ち、命令フェッチのとき、16ビットバスモードでなく、4の倍数番地であれば、バスコマンドBCMDを、ロングワードリード`longreadにする。命令フェッチで、16ビットバスモードか、4の倍数番地でないとき、バスコマンドBCMDを、ワードリード`wordreadにする。
【0080】
図8には同様に、後述のインクリメンタINCによるプリフェッチカウンタpfcの制御内容が論理記述で示される。`inc4、`inc2は別に定義された定数である。
【0081】
入力(条件)はBCMDと同様であり、ロングワードで命令リードを行ったとき、制御信号c_incは+4を意味する`inc4状態になる。ワードで命令リードを行ったとき、制御信号c_incは+2を意味する`inc2状態になる。
【0082】
特に制限はされないものの、制御信号ifwの場合は、分岐が行われることを前提にし、プリフェッチカウンタpfcのインクリメントを行わないものとする。ここで、前記図7及び図8の論理記述(ケース文)の入力(条件)は適宜増やすことができ、例えば、ポストインクリメントレジスタ間接のアドレッシングモードによるデータアクセス時と共通化できる。データサイズによって、+1/+2/+4を選択する制御を、含めればよい。例えば、ポストインクリメントレジスタ間接の実行を示す制御信号pstincとデータサイズを示す制御信号size(バイト:01、ワード:10、ロングワード:11)を用いて、図9の論理記述のようにすればよい。
【0083】
シフタの制御は、第1のシフタの制御、第2のシフタの制御、制御信号sftcntの出力を含む。複数ビットシフト命令は、最大3ステート(S1〜S3)で実行されるが、第1ステート(S1)では、命令コード上のシフトビットフィールドを参照してシフトを行う。第2、第3ステート(S2、S3)は、制御信号Bであるsftcntを参照する。
【0084】
第1のシフタの制御は図10に例示される論理記述に従って実現することができる。ここでopcodeは、命令デコーダDECに入力されている命令コード(16ビット)である。図10において`S1、`S2は複数ビットシフト命令の第1、第2ステートを示す別に定義された定数または制御信号である。即ち、第1のシフタの制御は、第1ステート(S1)では、1ビットまたは2ビットまたはシフトなしを、この順序で判定して制御信号sft1、sft2を生成する。第1ステートで1ビットシフトを実行した場合で、第2ステート(S2)で、2ビットシフトが必要であれば、2ビットの制御信号sft2を生成する。
【0085】
同様に、第2のシフタの制御は図11に例示される論理記述に従って実現することができる。制御信号sftcntの機能は、上位3ビットと下位2ビットに分けて、図12に例示された論理記述で特定することができる。sftcntが全ビット0となったとき、終了と判定される。
【0086】
レジスタセレクタRESLは、命令デコーダDECの指示と、命令コード中に含まれるレジスタフィールドの情報に基づいて、レジスタ選択信号rdgb[n]、wbrd[n]などを出力し、汎用レジスタの入出力を制御する。[n]は汎用レジスタに対応した0〜7の番号を意味する。
【0087】
実行部2Bには、汎用レジスタER0〜ER7、プログラムカウンタPC、プリフェッチカウンタpfc、コンディションコードレジスタCCR、テンポラリレジスタTR、算術論理演算器ALU、インクリメンタINC、リードデータバッファDBR、ライトデータバッファDBW、アドレスバッファAB、乗算器MULTを含む。これらのブロックは内部バスab、gb、db、wb1、wb2によって相互に接続されている。
【0088】
算術論理演算器ALUは、命令によって指定される各種の演算や実効アドレスの計算などに用いる。インクリメンタINCは、主にプログラムカウンタPCの加算に用いられる。インクリメンタINCには、前記の通り、制御信号c_incによって、プリフェッチカウンタpfcに対する+1/+2/+4の指示が与えられる。
【0089】
図3に示される汎用レジスタER0〜ER7、プログラムカウンタPC、コンディションコードレジスタCCR以外は、プログラミング上は参照できず、マイクロコンピュータ1内部の動作にのみ用いられる。即ち、リードデータバッファDBR、ライトデータバッファDBW、アドレスバッファABなどは、内部アドレスバスIAB及び内部データバスIDBとのインタフェースをとるために、一時的にデータをラッチしたり、バッファリングしたりする。テンポラリレジスタTRは、マイクロコンピュータ1内部の動作に適宜用いられる。前記内部アドレスバスIAB及び内部データバスIDBは前記内部バス12に含まれる。
【0090】
リードデータバッファDBRは、ROM5、RAM6、内部I/Oレジスタ、或は図示はされない外部メモリから、リードしたデータを一時的に格納する。ライトデータバッファDBWはROM5、RAM6、内部I/Oレジスタ、或は外部メモリへのライトデータをバッファリングする。アドレスバッファABは、CPU2がリード/ライトするアドレスを一時的に格納するほか、ベクタや分岐テーブルリードアドレスを生成する。アドレスバッファABは、割込みコントローラから入力されたベクタ、および内部バスabから情報を入力して、アドレスバスIABにアドレス出力を行う。通常は、内部バスabの内容が選択される。乗算器MULTは、命令デコーダDECから制御信号、内部バスgb、dbからデータを入力し、乗算結果を内部バスwb2に出力する。
【0091】
図13には前記命令バッファ部IBUFの詳細が例示される。命令バッファ部IBUFは、命令コードを保持する為に第1の保持手段としてのFIFOバッファFBと第2の保持手段である命令レジスタIRを有する。
【0092】
前記命令レジスタIRはIDBLに接続する下位側命令レジスタIRL、IDBHに接続する上位側命令レジスタIRHから構成される。IR/WはIRHが有効であることを示すためのワードイネーブルレジスタ、IR/LはIRH、IRLの双方が有効であることを示すためのロングワードイネーブルレジスタである。
【0093】
前記FIFOバッファFBは、特に制限されないが、16ビット×8段の記憶エリアBUF0〜BUF7を有する。記憶エリアBUF0〜BUF7には内部データバスIDB上の命令又は前記命令レジスタIRからの命令を格納可能にされる。IDBHは上位16ビット、IDBLは下位16ビットを意味する。TLPはデータが格納されている後尾の記憶エリアを指す2ビットの後尾ポインタ(リードポインタ)、HDPはデータが格納されている先頭の記憶エリアを指す2ビットの先頭ポインタ(ライトポインタ)、NBPはFIFOバッファFBに格納されているデータ数を計数するデータ数ポインタである。記憶エリアに格納すべき命令コードの入力経路は信号IRHenb、IRLenb、Henb、Lenbによって選択される。信号IRHenbはIRHからの入力を選択指示し、IRLenbはIRLからの入力を選択指示し、HenbはIDBHからの入力を選択し、LenbはIDBLからの入力を選択指示する。前記記憶エリアBUF0〜BUF7の出力に対する選択はマルチプレクサMUXが行なう。マルチプレクサMUXは後尾ポインタTLPが指す記憶エリアのデータをout0に、後尾ポインタTLPが指す次の記憶エリアのデータをout1に、後尾ポインタTLPから3番目の記憶エリアのデータをout2に出力する。
【0094】
前記出力out0、IDBL,IDBH、IRH,IRLはセレクタISELによって選択されたものが出力rslt0とされ、変更回路CHGを経て命令デコーダDECに供給される。前記出力out1はrslt1、前記出力out2はrslt2として、実効アドレス等の演算に供される。
【0095】
バッファ制御回路FCNTは前記命令バッファ部IBUFを全体的に制御する。clkはクロック信号、rstはリセット信号である。LIR/Wはワード長読み出し指示信号、LIR/Lロングワード長読み出し指示信号、LIDは命令実行完了信号、LID_NUMは実行完了した命令のワード長を示すデータ、stkIRは内部データバスIDBの命令を命令レジスタIRに退避することを指示する信号、pfb(clrFIFOと等価)は分岐することを示す信号である。前記信号stkIRは遅延分岐命令実行中に分岐先命令が内部データバスIDBに出力されたとき論理値“1”に活性化される。バッファ制御回路FCNTは、stkIRが活性化されると、内部データバスIDBの命令を命令レジスタIRに退避する。その後、信号pfbが活性化されるとFIFOバッファFBをクリアする。FIFOバッファFBのクリアはポインタTIPとHDPを初期値にリセットすることで行われる。前記信号LIR/W、LIR/L、LID、LID_NUM、stkIR、pfbは命令デコーダDECから出力される。
【0096】
上記命令バッファ部IBUFにおいて、遅延分岐命令での分岐先命令は、一旦、レジスタIRに保持される。遅延スロット命令の終了時に、FIFOバッファFBのクリアが行われる。このとき、分岐アドレスは一旦、一時的なレジスタ手段例えばテンポラリレジスタTRに保持し、プリフェッチカウンタpfcの値を保存するようにし、遅延スロットの命令の命令コード長が長い場合も、プリフェッチカウンタpfcに基づいて、継続して命令リードを行うことができるようにしている。遅延スロットの命令は複数ステートでよいようにする。遅延スロットに配置する命令を増やし、遅延分岐を利用し易くし、使い勝手を向上し、資源の利用効率を向上するとともに、高速化を実現できる。
【0097】
パイプラインの乱れを抑止する課題とは別に、分岐時に分岐命令リードのレイテンシを隠蔽する意味で、複数ステートで実行する命令を遅延スロットに配置することによって、実行ステート数を短縮することができる。
【0098】
遅延スロットに配置された命令では、自命令の命令コードのリードデータを待つステートや実効アドレス計算のためのステートは命令リードを抑止することにより、利用されない命令リード(プリフェッチ)を抑止できる。ウェイトが挿入されたりして、実行ステート数が増加することを回避することができる。
【0099】
図14には算術論理演算器ALUの詳細が例示される。ここでは、算術演算器20、シフタ21及び出力セレクタ22を示すが、そのほかに、図示はされない、論理演算や、ビット操作命令用などの付加的な機能を含むことは妨げられない。
【0100】
算術演算器20は内部バスgb、dbに入力が接続され、シフタ21は内部バスgbに入力が接続される。算術演算器20による演算結果とシフタ21による演算結果は出力セレクタ22で選択されて、内部バスwb2、必要に応じて内部バスabに出力される。
【0101】
前記算術演算器20は、入力セレクタ25とフルアダー26からなる。入力セレクタ25は、内部バスdbの入力とキャリ入力を反転する。公知の通り、減算を2の補数の加算として実行するためである。
【0102】
前記シフタ21は第1シフタ27及び第2のシフタ28から成り、内部バスgbと、制御信号sftl、sftr、sft1、sft2、sft4、sft8、sft16を入力し、結果を、出力セレクタ22を介して、内部バスwb2に出力する。sftlは左シフト、sftrは右シフト、sft1は1ビットシフト、sft2は2ビットシフト、sft4は4ビットシフト、sft8は8ビットシフト、sft16は16ビットシフト、を夫々指示する制御信号とされる。
【0103】
第1のシフタ27の論理記述は図15に例示される。この論理記述によれば、制御信号sft1、sft2が何れも非活性の場合はシフトを行わない。そのほかの場合は、制御信号sftl、sftr、sft1,sft2の組合せで1または2ビットの左右シフトを行う。
【0104】
同様に、第2のシフタ28の論理記述は図16に例示される。
【0105】
シフタ21の図15及び図16の論理記述において、例えば、制御信号sftl=1、sft1=1、sft4=1、sftr=0、sft2=0、sft8=0、sft16=0の場合は、第1シフタ27及び第2のシフタ28により左5ビットシフトが行われる。
【0106】
上記論理記述では、第1シフタ27、第2シフタ28に複数のシフトビットの指定が行われないように、その制御部が構成されているものとする。或いは、第1シフタ27、第2シフタ28の論理記述に優先順位を付けて、これに対応して制御部の論理を構成してもよい。
【0107】
また、シフタの論理記述においてシフトの記述を演算子「<<」などを使用しないで記述することもできる。例えば、第2シフタ28の第1ケース、第2ケースを図17に例示されるように記述してもよい。そのほか、算術シフトやローテートなどを含んだり、バイトサイズ、ワードサイズのシフトを行ったりする場合も適宜、変更が可能である。
【0108】
前記出力セレクタ22は、制御信号sftlまたはsftrの何れかが活性状態の場合には、シフタの出力を選択するようにする。
【0109】
算術演算器20の場合は、桁上がりがあるのに加えて、減算の場合に、一方の入力を反転するなどの処理も必要であって、論理段数が多くなってしまうから、第1シフタ27及び第2のシフタ28を直列に配置しても、算術演算の遅延より大きくはならず、最大動作周波数向上の制約にはなり難い。バレルシフタが左右64選択のセレクタ回路を要するところ、シフタ21では、シフトしない選択も含めて、第1シフタ27が5選択のセレクタ回路、第2シフタ28が7選択のセレクタ回路を採用すればよく、これによって論理規模も格段に縮小することができる。
【0110】
図18には前記乗算器MULTの詳細が例示される。MULは16ビット×16ビットの演算を行なう並列乗算回路、reg1,reg2は部分積を一時的に格納するデータレジスタ、ADDは加算回路、MAC(MACH,MACL)は乗算結果が累積される積和回路(Multiply And Accumulate)、regcは出力データレジスタ、MUXはマルチプレクサである。データaは内部バスgbへ、データbは内部バスdbへ供給され、データcは内部バスwb2に供給される。乗算器MULTは状態遷移制御によりその演算動作が制御される。状態遷移制御ロジックは図示を省略するが、乗算器MULTに設けられている。
【0111】
図19には図18の乗算器MULTにおける乗算演算制御の状態遷移図が例示される。状態(ステート)はtmg=0乃至tmg=8とされる。
【0112】
tmg=0は待機状態(ノン・オペレーション)とされる。乗算器MULTは制御部2Aから演算要求が無い限り演算を開始しない。演算要求は制御信号start=1で可能になる。start=1と同時に演算種類を選択する信号が活性化されることで、tmgが各種演算種類に応じた値に更新可能にされて、演算が開始される。32ビット乗算を示す制御信号mul_long=1のとき、tmg=1に遷移し、そのほかのときtmg=8に遷移する。
【0113】
tmg=1では、a[15:0]×b[15:0]を演算し、その結果をレジスタreg2に格納する動作が行われる。演算が符号付きのときは図示はされない制御信号sign=1、符号無しのときは制御信号sign=0とする。a[15:0]はデータaの下位側16ビットを意味する。
【0114】
tmg=2では、a[31:16]×b[15:0]を演算し、その結果をレジスタreg1に格納する動作が行われる。演算が符号付きのときは制御信号sign=1、符号無しのときは制御信号sign=0とする。ここで、32ビット×32ビットによる上位32ビットが必要なときは図示はされない制御信号upper=1とし、32ビット×32ビットによる下位32ビットが必要なときは制御信号upper=0とする。次のステートは、upper=1のときはtmg=3、upper=0のときはtmg=6になる。
【0115】
tmg=3では、{16‘h0000,reg2[31:16]}+reg1を演算し、その結果をreg2に格納し、a[15:0]×b[31:16]を演算し、その結果をレジスタreg1に格納する。演算が符号付きのときは制御信号sign=1、符号無しのときは制御信号sign=0とする。次のステートはtmg4となる。{16‘h0000,reg2[31:16]}は上位側16ビットが0000、下位側がreg2[31:16]の32ビットデータであることを意味する。
【0116】
tmg=4では、reg2+reg1を演算し、その結果をreg2に格納し、a[31:16]×b[31:16]を演算し、その結果をレジスタreg1に格納する。次のステートはtmg5となる。演算が符号付きのときは制御信号sign=1、符号無しのときは制御信号sign=0とする。
【0117】
tmg=5では、制御信号sign=1のとき、{16{reg2[15]},reg2[15:0]}+reg1を演算し、その結果をレジスタregcに保持し、制御信号sign=0のとき、{16‘h0000,reg2[15:0]}+reg1を演算し、その結果をレジスタregcが保持する。演算が符号付きのときは制御信号sign=1、符号無しのときはフラグsign=0とする。制御信号start=1のとき,tmg=0のときの状態遷移図にしたがってtmgが更新され、次の演算が実行される。次のステートでレジスタregcの内容が演算結果としてcから出力され、ディスティネーションレジスタに格納される。16{reg2[15]}は、reg2[15]を16ビット繰返したデータである。
【0118】
tmg=6では、reg2+{reg1[15:0],16‘h0000}を演算し、その結果をreg2に格納し、a[15:0]×b[31:16]を演算し、その結果をレジスタreg1に格納する。演算が符号付きのときは制御信号sign=1、符号無しのときは制御信号sign=0とする。次ステートはtmg=7である。
【0119】
tmg=7では、reg2+{reg1[15:0],16‘h0000}を演算し、その結果をregcに格納する。次ステートは制御信号start=0のときtmg=0、start=1のとき、tmg=0のときの状態遷移図にしたがってtmgが更新され、次の演算が実行される。次ステートで演算結果がcに出力される。
【0120】
tmg=8では、a[15:0]×b[15:0]を演算し、その結果をレジスタregcに格納する。その他に、8ビット×8ビットを演算して16ビット、16ビット×16ビットを演算して16ビット、16ビット×16ビットを演算して32ビットを得る演算を行なう。演算が符号付きのときは制御信号sign=1、符号無しのときは制御信号sign=0とする。8ビット乗算を行なうときは制御信号leg=1、16ビット乗算を行なうときは制御信号leg=0とする。次ステートは制御信号start=0のときtmg=0、制御信号start=1のときはtmg=0のときの状態遷移図にしたがってtmgが更新されて演算が実行される。次ステート時にその演算結果がレジスタregcに格納される。
【0121】
図19の状態遷移制御によって乗算が制御される乗算器MULTは、32ビット×32ビットの乗算による上位32ビットの結果を、tmg=1,2,3,4,5,8の順序による制御で得ることができる。また、32ビット×32ビットの乗算による下位32ビットの結果を、tmg=1,2,6,7,8の順序による制御で得ることができる。例えば前者は乗算命令MULU.Lによって実行され、後者は乗算命令MULU/UP.Lによって実行される。当該後者の乗算処理では、逆数を乗算して上位を得ることで、実質的に除算結果を得ることになり、除算処理の高速化を実現することができる。
【0122】
なお、状態遷移には、適宜そのほかの演算(積和演算など)を実現するための状態を追加することもできる。
【0123】
図20乃至図22には命令バッファ部IBUFの状態を主体に命令実行のフローチャートを示す。それら実行フローで示される制御内容は命令デコーダDECによる制御内容と等価と把握してよい。
【0124】
図20の命令実行フローは転送命令(MOV.W @aa:16,Rd)を一例とする。図においてskipの判別は、FIFOバッファFBがフルか否かの判別であり、Yesは判別結果がフル状態であることを意味する。mod_dbの判別は現在遅延スロットにいるか否かの判別であり、Yesは判別結果が遅延スロットにいることを意味する。FIFOバッファがフル状態のとき、遅延スロットにいるとき、命令フェッチは行なわない。
【0125】
第1ステート(S1)では、制御信号Aで、次命令の命令リード(if)とpfcインクリメントを行う。制御信号Bで、リードした命令を命令バッファIFIFOに格納する。
【0126】
遅延スロット命令として実行する場合(mod_db=yes)は、第1ステート(S1‘)は無操作(nop)とされる。命令プリフェッチを実行しても利用されないためである。
【0127】
第2ステート(S2)では、制御信号Aで、命令バッファ部IBUFの出力rslt1に基づいて、本命令のEA拡張部(aa)を符号拡張して、内部バスab、アドレスバッファAB経由で、内部アドレスバスIABに出力する。同時に、データリードのためのバスコマンドを発行する。制御信号Bで、第2ステートでリードしたデータを、第3ステートで、内部データバスIDBからリードデータバッファDBRに格納する。更に、制御信号Cで、次のステートで、リードデータバッファDBRから内部バスwb2経由で汎用レジスタに転送するとともに、データを検査し、結果をフラグレジスタCCRにセットする。
【0128】
第3ステート(S3)では、制御信号Aで、次の次の命令の命令リード(if)とプリフェッチカウンタpfcのインクリメントを行う。制御信号Bで、リードした命令を命令バッファ部IBUFに格納する。
【0129】
遅延スロット命令として実行する場合(mod_db=yes)は、第3ステート(S3‘)では、プリフェッチカウンタpfcの代わりに、テンポラリレジスタTRの内容を読み出す。また、FIFOバッファFBの残量に依存せず、命令リード(ifa)を発行する。
【0130】
第1ステートと第3ステートは、リード済みの(FIFOに存在している)命令の量に従って、省略(スキップ)される。リード済みの命令が少なければ、第1、第3ステートを実行し、本命令の命令長(2ワード)より多い命令をリードする。リード済みの命令の量が適切であれば、第1または第3ステートの一方を実行し、本命令の命令長(2ワード)と同じ量の命令をリードする。リード済みの命令が多ければ、第1、第3ステートを実行せず、命令をリードしない。
【0131】
具体的には、本命令の実行開始時の命令バッファの残量deltaが本命令の命令コード長numに対し、“delta>num”の関係があれば、第1ステートを省略する。EA拡張部も含めて、自命令がリード済みで直ちに実行可能であり、命令リードのレイテンシも考慮して、次の命令も用意されているからである。また、“delta−num>2”の関係であれば、第3ステートを省略する。次の命令の第1ワードがリード済みであり、実行開始可能であり、更に、次の命令が1ステートで終了しても、命令リードのレイテンシも考慮して、更に1ワードが用意されているからである。
【0132】
前記の通り、S1では、命令バッファをオーバフローさせないために、命令の命令リード(if)とプリフェッチカウンタpfcのインクリメントは、適宜抑止されるが、これは前の命令と共通であるため、各命令については、この記述は省略されている。命令リード(ifa)は、FIFOバッファFBの残量に依存せず、抑止されない。
【0133】
図21には分岐命令(JMP @aa:32)の実行フローが例示される。第1ステート(S1)では、制御信号Aで、次命令の命令リード(ifw)とプリフェッチカウンタpfcのインクリメントを行う。制御信号Bで、リードした命令を命令バッファ部IBUFに格納する。
【0134】
第2ステート(S2)では、リードした命令が命令バッファ部IBUFに格納されるのを待つ。
【0135】
第3ステートでは、制御信号Aで、命令バッファ部IBUFの出力rslt1,rslt2に基づいて、本命令のEA拡張部(aa)を、内部バスab、アドレスバッファAB経由で内部アドレスバスIABに出力する。この内容はインクリメンタINCでインクリメントされて、プリフェッチカウンタpfcに格納される。同時に、命令リードのためのバスコマンドを発行する。制御信号Bで、リードした命令を命令バッファ部IBUFに格納する。
【0136】
第4ステートでは、制御信号Aで、次の次の命令の命令リード(if)とプリフェッチカウンタpfcのインクリメントを行う。制御信号Bで、リードした命令を命令バッファ部IBUFに格納する。
【0137】
第1ステートと第2ステートは、リード済みの(FIFOバッファFBに存在している)命令の量に従って、省略(スキップ)される。
【0138】
本命令の実行開始時の命令バッファの残量deltaが本命令の残量numに対し、“delta≧num”の関係であれば、第1、第2ステートを省略する。EA拡張部も含めて、自命令がリード済みで直ちに実行可能であるからである。また、本命令実行開始時に命令リード中の命令コード量ifnumも考慮して、“delta+ifnum≧num”の関係であれば、第1ステートを省略する。自命令がリード発行済みで、1ステート待てば、実行可能になり、追加で命令をリードする必要がないからである。
【0139】
第1ステートを実行する場合、前記の通り、前命令が、少なくとも自命令の2ワード目までをリードしているから、不足しているのは1ワードのみである。プログラムが16ビットバスで接続されている場合には、ワードで命令をリードするのがよい。32ビットで命令リードを発行すれば、不要なワードも待ってウェイトが挿入されてしまうからである。このため、制御信号ifwを活性化して、強制的にワードの命令リードを行うようにする。
【0140】
図22には複数ビットシフト命令(SHLL #xx,Rd)の実行フローが例示される。第1〜第3ステート(S1〜S3)では、制御信号Aで、命令の命令リード(if)とプリフェッチカウンタpfcのインクリメントを行う。制御信号Bで、リードした命令を命令バッファ部IBUFに格納する。制御信号Bで、更にシフタ21の演算を行う。これをdo_sftで総称している。具体的には以下の通りである。制御信号rdgb[n]で、指定されたデスティネーションレジスタRdを内部バスgbにリードし、シフタ21に供給するとともに、制御信号sftl、sftr、sft1、sft2、sft4、sft8、sft16を発行して、シフト演算を行わせる。制御信号wbrd[n]で結果をデスティネーションレジスタRdに格納する。コンディションコードレジスタCCRの所定のフラグのセットが行われる。制御信号sftcntを生成する。
【0141】
前記の通り、制御信号sftcntが全ビット0となったとき、終了と判定される。制御信号sftcntが全ビット0でない場合は、割込みの挿入が抑止(図1のINTCの出力する割り込み指示信号intrqが受付けられない)される。この動作を、最大3ステート実行して、31ビットまでの任意のシフトを実行する。
【0142】
前記の通り、命令バッファをオーバフローさせないために、命令の命令リード(if)とプリフェッチカウンタpfcのインクリメントは、適宜抑止されるが、これは前の命令と共通であるため、各命令については、この記述は省略されている。
【0143】
図23〜図25には各バスモードによる、命令の実行タイミングが例示される。分岐命令で分岐した先で、次に示すプログラム
Figure 2004038327
を実行した場合のタイミング図である。条件分岐命令BEQ、BMIは共に固有の分岐条件が成立したものとする。外部メモリは、16ビットバスで接続され、2ステートアクセスが可能であるものとする。なお、レディ信号readyは、CPUが要求した命令リードまたはデータリード/ライト(バスコマンド)に対する、バスコントローラから応答信号であり、CPUの状態遷移のイネーブル信号とされる。
【0144】
図23には内蔵ROM上での実行タイミングを示す。つまり内蔵ROMから命令BTST(ビット操作命令)、BEQ(条件分岐命令)、BMI(条件分岐命令)をフェッチして実行する場合である。
【0145】
T0で、直前の分岐命令の実行によって、CPU2のアドレスバッファABからアドレスが内部アドレスバスIABに出力される。また、命令デコーダDECから、ロングワードサイズの命令フェッチ(if−long)を示す、バスコマンドBCMDが出力される。if−longは前記`longreadと同じでよい。
【0146】
T1で、T0のバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードが実行され、ロングワードのリードデータが内部データバスIDBに得られる。このリードデータの先行するワード(BTST命令)は、T2で命令デコーダDECに入力されて、命令の内容が解読される。後行するワード(BEQ命令)は命令バッファ部IBUFのFIFOバッファFBに格納される。
【0147】
解読結果に従って、所要の制御信号が出力されて、BTST命令の実行が行われるが、詳細は省略する。T2で、ロングワードサイズの命令フェッチを行う。
【0148】
一方、T2で、T1のバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードが実行され、ロングワードのリードデータが内部データバスIDBに得られる。T3で、命令バッファ部IBUFから次の命令(BEQ命令)が命令デコーダDECに入力されて、命令の内容が解読される。
【0149】
解読結果に従って、実効アドレスの計算が行われて、T3およびT4で、分岐先(t1、t1+4)のロングワードサイズの命令フェッチが行われる。
【0150】
同様に、T3のバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードデータ(BMI命令)は、T5で命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、実効アドレスの計算が行われて、T5およびT6で、分岐先(t2、t2+4)のロングワードサイズの命令フェッチを行う。
【0151】
図24には16ビットバスモードで外部メモリからフェッチした命令を実行する動作が例示される。T0〜T1で、直前の分岐命令の実行によって、CPU2のアドレスバッファABからアドレス信号が内部アドレスバスIABに出力される。また、命令デコーダDECから、ワードサイズの命令フェッチ(if−word)を示す、バスコマンドBCMDが出力される。if−wordは前記`wordreadと同じでよい。
【0152】
T2〜T3で、T0〜T1におけるバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードが外部バス(EXA、EXD)上で実行され、リードデータが内部データバスIDBに得られる。このリードデータ(BTST命令)は、T4で命令デコーダDECに入力されて、命令の内容が解読される。
【0153】
解読結果に従って、所要の制御信号が出力されて、BTST命令の実行が行われるが、詳細は省略する。T4〜T5で、ワードサイズの命令フェッチを行う。
【0154】
一方、T4〜T5で、T2〜T3におけるIAB上のアドレス信号とバスコマンドBCMDに従ったリードが外部バス(EXA、EXD)上で実行され、リードデータが内部データバスIDBに得られる。このリードデータ(BEQ命令)は、T6で命令デコーダDECに入力されて、命令の内容が解読される。
【0155】
解読結果に従って、実効アドレスの計算が行われて、T6〜T7およびT8〜T9で、分岐先(t1、t1+2)のワードサイズの命令フェッチを行う。同様に、T8〜T9で、T6〜T7におけるバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードデータ(BMI命令)は、T8で命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、実効アドレスの計算が行われて、T10〜T11およびT12〜T13で、分岐先(t2、t2+2)のワードサイズの命令フェッチを行う。
【0156】
図24から明らかなように、図23の内蔵ROM上での実行に比べてクロック周波数は遅いが、16ビットバスモードを採用しているから、バスサイクルの数は図23と同等になっている。
【0157】
図25には32ビットバスモードで外部メモリからフェッチした命令を実行する動作が例示される。T0〜T3で、直前の分岐命令の実行によって、CPU2のアドレスバッファABからアドレスがアドレスバスIABに出力される。また、命令デコーダDECから、ロングワードサイズの命令フェッチ(if−long)を示す、バスコマンド(BCMD)が出力される。
【0158】
T4〜T7で、T0〜T3におけるバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードが外部バス(EXA、EXD)上で、2回のワードサイズリードに分割されて実行され、T6〜T7でロングワードのリードデータが内部データバスIDBに得られる。このリードデータの先行するワード(BTST命令)は、T8で命令デコーダDECに入力されて、命令の内容が解読される。後行するワード(BEQ命令)は命令バッファ部IBUFのFIFOバッファFBに格納される。解読結果に従って、所要の制御信号が出力されて、BTST命令の実行が行われるが、詳細は省略する。T8〜T11で、ロングワードサイズの命令フェッチを行う。
【0159】
一方、T8〜T11で、T4〜T7における内部アドレスバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードが外部バス(EXA、EXD)上で、2回のワードサイズリードに分割されて実行され、T10〜T11でロングワードのリードデータが内部データバスIDBに得られる。T12で、命令バッファ部IBUFから次の命令(BEQ命令)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、実効アドレスの計算が行われて、T12〜T15およびT16〜T19で、分岐先(t1、t1+4)のロングワードサイズの命令フェッチを行う。
【0160】
同様に、T18〜T19で、T12〜T15におけるバスIAB上のアドレス信号とバスコマンドBCMDに従ったリードデータ(BMI命令)は、T20で命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、実効アドレスの計算が行われて、T20〜T23およびT24〜T27で、分岐先(t2、t2+4)のロングワードサイズの命令フェッチを行う。
【0161】
32ビットバスモードは、16ビットバスモードに比較して、T10〜T15、T20〜T23で実行される5回分の、外部バス上のワードリードでフェッチした命令は使用されず、無駄になっている。これに伴って、実行ステート数も増えている。このプログラムの実行が、分岐命令後でない場合は、命令バッファの残量によって命令リードが抑止される場合があるから、T4〜T5のバスコマンドは抑止(NOP:ノーオペレーション)され、T12〜T15の外部バス上のワードリードは実行されず、1ステートで完了する場合もある。また、BEQ命令、BMI命令で分岐条件が不成立だったりして、分岐が行われず、割込みも要求されていない場合は、命令リードをした命令コードは使用され、無駄になることはない。
【0162】
図26には通常分岐命令の第1の例の実行タイミングが示される。通常分岐命令とは遅延分岐命令でないという意味である。ここで示すプログラムの例は、
Figure 2004038327
である。
【0163】
前記同様に、T2で、MOV命令が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、汎用レジスタER1の内容が、実効アドレスとして内部アドレスバスIABに出力され、ワードリードのバスコマンド(data−read)が発行される。同時に、レジスタ選択信号を含むデータリード制御信号が生成され、順次、T3、T4の制御を行う。具体的には、T3で、リードデータバッファDBRへの取り込み制御が指示される。T5では、リードデータバッファDBRの内容がデスティネーションレジスタR0への転送が指示される。
【0164】
リードデータは、T3で内部データバスIDBに得られ、前記の通り、T4でリードデータバッファDBRに取り込まれ、T5で、汎用レジスタR0へ転送される。同時に、転送データの内容に従って、コンディションコードレジスタCCRの所定のフラグが更新される。また、T4では命令リードが行われる。プリフェッチカウンタpfcの内容が内部アドレスバスIABに出力され、また、インクリメンタINCでインクリメントされる。
【0165】
BRA命令は、T4で命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、実効アドレスの計算が行われて、T4で、分岐先(target)のロングワードサイズ(targetが4の倍数でないときはワードサイズ)の命令フェッチを行う。この分岐先アドレスはインクリメンタINCでインクリメントされ、プリフェッチカウンタpfcに格納する。また、T5で、制御信号clrFIFO(制御信号pfbと等価)を活性状態にして、FIFOバッファFBの初期化を行うと共に、分岐先の命令を命令デコーダDECに供給する。
【0166】
図27には通常分岐命令の第2の例の実行タイミングが示される。ここで示すプログラムの例は、
Figure 2004038327
である。
【0167】
前記同様に、T2で、MOV命令が命令デコーダDECに入力されて、命令の内容が解読される。解読結果により、T2の第1ステート(図20のS1)は命令リードを行い、EA拡張部が入力されるのを待つ。T3の第2ステートで、命令バッファ部IBUFのout1から本命令のEA拡張部(aa)が出力され、符号拡張されて、実効アドレスとしてアドレスバッファABから内部アドレスバスIABに出力され、また、ワードリードのバスコマンド(data−read)が発行される。同時に、レジスタ選択信号を含むデータリード制御信号が生成され、順次、T4、T5の制御を行う。具体的には、T4で、リードデータバッファDBRへの取り込み制御が指示される。T5では、リードデータバッファDBRの内容をデスティネーションレジスタR0へ転送する指示が行われる。
【0168】
リードデータは、T4で内部データバスIDBに得られ、前記の通り、T5でリードデータバッファDBRに取り込まれ、T6で、レジスタR0へ転送される。同時に、転送データの内容に従って、コンディションコードレジスタCCRの所定のフラグが更新される。また、T4では命令リードが行われる。
【0169】
BRA命令は、T5で命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、前記同様に、T5で、分岐先(target)のロングワードサイズの命令フェッチを行う。この分岐先アドレスはインクリメンタINCでインクリメントされ、プリフェッチカウンタpfcに格納する。また、T6で、制御信号clrFIFO(pfbと等価)を活性状態にして、FIFOバッファFBの初期化を行うと共に、命令レジスタIRに格納した分岐先の命令を命令デコーダDECに供給する。
【0170】
図28には遅延分岐命令の第1の例の実行タイミングが示される。ここで示すプログラムの例は、
Figure 2004038327
であり、実質的な処理は、図26と同じである。BRA/Sは遅延スロット付きの分岐命令、即ち遅延分岐命令を意味する。
【0171】
T2で、遅延分岐命令(BRA/S命令)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、実効アドレスの計算が行われて、T3で、分岐先(target)のロングワードサイズ(targetが4の倍数でないときはワードサイズ)の命令フェッチを行う。この分岐先アドレスはインクリメンタINCでインクリメントされ、テンポラリレジスタTRに格納する。また、制御信号mod_db(当該命令が遅延スロットの命令であることを示す信号)を出力し、遅延スロット命令の修飾を行う。遅延スロット命令(この例ではMOV命令)は、T3で命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、汎用レジスタER1の内容が、実効アドレスとして内部アドレスバスIABに出力され、ワードリードのバスコマンド(data−read)が発行される。同時に、レジスタ選択信号を含むデータリード制御信号が生成され、順次、T4、T5の制御を行う。具体的には、T4で、リードデータバッファDBR取り込み制御が指示される。T5では、リードデータバッファDBRの内容をデスティネーションレジスタR0へ転送する指示が行われる。
【0172】
リードデータは、T4で内部データバスIDBに得られ、前記の通り、T5でリードデータバッファDBRに取り込まれ、T6で、レジスタR0へ転送される。同時に、転送データの内容に従って、コンディションコードレジスタCCRの所定のフラグが更新される。
【0173】
また、T4では命令リードが行われる。このとき、制御信号mod_dbにより修飾されることにより、プリフェッチカウンタpfcの代わりに、テンポラリレジスタTRの内容を使用する。このアドレスはインクリメンタINCでインクリメントされ、プリフェッチカウンタpfcに格納する。また、T3で制御信号stkIRを活性状態にして、分岐先の命令を命令バッファ部IBUF内の命令レジスタIRに格納する。T4で、制御信号clrFIFO(pfbと等価)を活性状態にして、FIFIバッファFBの初期化を行うとともに、命令レジスタIRに格納した分岐先の命令を命令デコーダDECに供給する。
【0174】
遅延分岐命令と遅延スロットの命令を組合せることによって、分岐先の命令リードのレイテンシを隠蔽し、実効的に遅延分岐命令を1ステートで実行できる。BRA命令とBRA/S命令の第1ステートの動作は基本的に同一である。インクリメンタINCの出力をプリフェッチカウンタpfcに格納するか、テンポラリレジスタTRに格納するかが相違される。
【0175】
図29には遅延分岐命令の第2の例の実行タイミングが示される。ここで示すプログラムの例は、
Figure 2004038327
であり、実質的な処理は、図27と同じである。
【0176】
T2で、遅延分岐命令(BRA/S命令)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、前記同様に、T3で、分岐先(target)のロングワードサイズの命令フェッチを行う。この分岐先アドレスはインクリメンタINCでインクリメントされ、テンポラリレジスタTRに格納する。また、制御信号mod_dbを出力し、遅延スロット命令の修飾を行う。遅延スロット命令(MOV命令)は、命令デコーダDECに入力されて、命令の内容が解読される。解読結果と、制御信号mod_dbにより修飾されることにより、T4の第1ステート(図20のS1)は命令リードを行わず、EA拡張部が入力されるのを待つ。要するに、リード開始済みのEA拡張部がFIFOバッファFBに入力される。T4の第2ステートで、命令バッファ部IBUFの出力out1から本命令のEA拡張部(aa)を出力し、これを符号拡張して、実効アドレスとしてアドレスバッファABから内部アドレスバスIABに出力され、更に、ワードリードのバスコマンドBCMD(data−read)が発行される。同時に、レジスタ選択信号を含むデータリード制御信号が生成され、順次、T5、T6の制御を行う。具体的には、T5で、リードデータバッファDBRへの取り込み制御が指示される。T6では、リードデータバッファDBRの内容をデスティネーションレジスタR0へ転送する指示が行われる。
【0177】
リードデータは、T5で内部データバスIDBに得られ、前記の通り、T6でリードデータバッファDBRに取り込まれ、T7で、レジスタR0へ転送される。同時に、転送データの内容に従って、コンディションコードレジスタCCRの所定のフラグが更新される。
【0178】
また、T5では命令リードが行われる。このとき、制御信号mod_dbにより修飾されることにより、プリフェッチカウンタpfcの代わりに、テンポラリレジスタTRの内容を使用する。このアドレスはインクリメンタINCでインクリメントされ、プリフェッチカウンタpfcに格納する。
【0179】
また、T3で制御信号stkIRを活性状態にして、分岐先の命令を命令バッファ部IBUF内の命令レジスタIRに格納する。T5で、制御信号clrFIFO(pfbと等価)を活性状態にして、FIFOバッファFBの初期化を行うとともに、命令レジスタIRに格納した分岐先の命令を命令デコーダDECに供給する。T6でFIFOバッファFBを初期化するので、それまでの遅延スロット命令実行中に、例えばT4のEA拡張部(ea)等をFIFOバッファFBから任意に出力して使用することができる。
【0180】
MOV命令の第1ステート(S1)の命令リードは抑止されて、無駄な命令リードを回避することができる。
【0181】
図30にはシフト命令の第1の例の実行タイミングが示される。ここでは、SHLL #4,ER3による実行タイミングを示す。この命令は4ビット左シフトを指示する。
【0182】
T2で、命令コード(shll4)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、T3で、デスティネーションレジスタER3の内容が内部バスgbに出力され、算術論理演算器ALUに入力される。制御信号sftl、sft4が活性状態になって、第1のシフタ27はシフトをせず、第2のシフタ28が4ビットシフト演算を行い、演算結果が内部バスwb2に出力される。同時に、内部バスwb2の内容がデスティネーションレジスタである汎用レジスタER3に格納される。また、シフト結果を判定して、コンディションコードレジスタCCRの所定のビットが更新される。例えば、演算結果が全ビットゼロであれば、Zフラグが1にセットされる。また、シフトアウトしたgb[28]の内容がCフラグに格納される。命令リードについての詳細な説明は省略する。
【0183】
図31にはシフト命令の第2の例の実行タイミングが示される。ここでは、SHLL #31,ER3による実行タイミングを示す。この命令は31ビット左シフトを指示する。
【0184】
T2で、命令コード(shll31)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、T3〜T5で、デスティネーションレジスタER3の内容が内部バスgbに出力され、算術論理演算器ALUに入力される。T3では、制御信号sftl(左シフト指示)、sft1(1ビットシフト指示)、sft4(4ビットシフト指示)が活性状態になって、第1のシフタ27は1ビットシフト、第2のシフタ28が4ビットシフト演算を行い(合わせて左へ5ビットシフト)、演算結果(途中結果result’)が内部バスwb2に出力される。同時に、内部バスwb2の内容がデスティネーションレジスタである汎用レジスタER3に格納される。また、シフト結果を判定して、コンディションコードレジスタCCRの所定のビットが更新される。
【0185】
T4では、制御信号sftl(左シフト)、sft2(2ビットシフト)、sft8(8ビットシフト)が活性状態になって、第1のシフタ27は2ビットシフト、第2のシフタ28が8ビットシフト演算を行い(T3と合わせて、左へ15ビットシフト)、演算結果(途中結果result’ ’)が内部バスwb2に出力される。同時に、内部バスwb2の内容がデスティネーションレジスタである汎用レジスタER3に格納される。また、シフト結果を判定して、コンディションコードレジスタCCRの所定のビットが更新される。
【0186】
T5では、制御信号sftl(左シフト)、sft16(16ビットシフト)が活性状態になって、第1のシフタ27はシフトをせず、第2のシフタ28が16ビットシフト演算を行い(T3、T4と合わせて、左へ31ビットシフト)、演算結果(result)が内部バスwb2に出力される。同時に、内部バスwb2の内容がデスティネーションレジスタである汎用レジスタER3に格納される。また、最終的なシフト結果を判定して、コンディションコードレジスタCCRの所定のビットが更新される。尚、命令のリードは、FIFOバッファFBの残量によって、T3、T4の命令リードが抑止されたものとして図示されている。
【0187】
図32には乗算命令の第1の例の実行タイミングが示される。ここでは、MULU.L ER1,ER2の実行タイミングを示す。この命令は、32ビット×32ビットの乗算による下位32ビットの結果を得る処理を実行させる。
【0188】
T2で、命令コード(mulu)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、T2で乗算器MULTにスタート信号startを与える。乗算器MULTの状態遷移が開始される。T3で、ソースレジスタER1の内容が内部バスdbに出力され、デスティネーションレジスタER2の内容が内部バスgbに出力され、乗算器MULTに入力される。T3〜T5の間、32ビット×32ビットの乗算を示すため、制御信号mul_long信号が活性化され、乗算器MULTの制御が行われる。T7では、制御信号mul_rdに従って、乗算結果が内部バスwb2に出力されると共に、内部バスwb2の内容が、T8でデスティネーションレジスタである汎用レジスタER2に格納される。また、この結果を判定して、コンディションコードレジスタCCRの所定のビットが更新される。
【0189】
図33には乗算命令の第2の例の実行タイミングが示される。ここでは、MULU/UP.L #12,ER2の実行タイミングを示す。この命令は、32ビット×32ビットの乗算による上位32ビットの結果を得る処理を実行させる。
【0190】
T2で、命令コード(mulu)が命令デコーダDECに入力されて、命令の内容が解読される。解読結果に従って、T2で乗算器MULTにスタート信号startを与える。乗算器MULTの状態遷移が開始される。T3で、イミディエイトデータ(12)がゼロ拡張されて、内部バスdbに出力され、デスティネーションレジスタER2の内容が内部バスgbに出力され、乗算器MULTに入力される。T3〜T8の間、32ビット×32ビットの乗算を示すために制御信号mul_long信号が活性化され、上位を取るための制御信号upperが活性化されて、乗算器MULTの制御が行われる。
【0191】
T8では、制御信号mul_rdに従って、乗算結果が内部バスwb2に出力されると共に、T9で内部バスwb2の内容がデスティネーションレジスタである汎用レジスタER2に格納される。また、この結果を判定して、コンディションコードレジスタCCRの所定のビットが更新される。
【0192】
図34には前記制御ビットbmode16を生成する構成が例示される。制御ビットbmode16はフリップフロップFFbcで生成され、リセット状態(信号rstb=0、末尾のbはリセット信号rstの反転信号を示す)で初期化される。内部I/Oレジスタのライト信号iowrと、制御ビットbmode16を有する内部I/Oレジスタの選択信号bs_rselの論理積(iowr&bs_rsel)をイネーブル信号として、データバスIDBの所定のビット、例えばビット0を入力する。前記フリップフロップFFbcは前記バスコントローラ3に含まれている。図1のフリップフロップFFは前記フリップフロップFFbcの出力を受けることになる。
【0193】
図35には前記制御ビットbmode16を生成する別のフリップフロップFFbcの構成が例示される。イネーブル信号は、前記に加えて、分岐の実行を示す制御信号clrFIFO(pfbと等価)との論理和((iowr&bs_rsel)|clrFIFO)とする。制御信号clrFIFOが活性状態のときは、データ入力(d)を、そのときの内部アドレスバスIABをバスコントローラが判定し、当該アドレスが16ビットバスであることを示す信号sel_b16としている。このため、分岐の実行毎に分岐先のバス幅を判定して、バスモードを自動的に切替えることができる。尚、分岐を示す信号としては前記clrFIFOのほか、専用のものを生成することもできる。
【0194】
図36には前記CPU2のプログラム等の開発環境の概略を示す。開発者は、各種エディタなどを用いて、C言語乃至アセンブリ言語でプログラムを作成する。これは通常、複数のモジュールに分割して作成される。Cコンパイラ30は、開発者の作成したそれぞれのC言語ソースプログラムを入力し、アセンブリ言語ソースプログラム乃至オブジェクトモジュールを出力する。アセンブラ31は、アセンブリ言語ソースプログラムを入力し、オブジェクトモジュールを出力する。リンケージエディタ32は、上記Cコンパイラやアセンブラの生成した、複数のオブジェクトモジュールを入力して、各モジュールの外部参照や相対アドレスなどの解決を行い、1つのプログラムに結合して、ロードモジュールを出力する。ロードモジュールは、シミュレータ/デバッガ33に入力して、パーソナルコンピュータなどのシステム開発装置上で、CPUの動作をシミュレーションし、実行結果を表示し、プログラムの解析や評価を行うことができる。また、エミュレータ34に入力して、実際の応用システム上などで動作する、いわゆるインサーキットエミュレーションを行い、マイクロコンピュータ全体としての、実動作の解析や評価を行うことができる。さらに、ロードモジュールをPROMライタ35に入力して、マイクロコンピュータの内蔵ROMがフラッシュメモリなどの場合や、外部のフラッシュメモリなどに、作成したプログラムを格納することができる。必要に応じて、オブジェクトコンバータなどによって、所望のフォーマットに変換する。このほかに、ライブラリアンとして、汎用的なサブルーチンなどを提供することもできる。
【0195】
Cコンパイラ30やリンケージエディタ32の最適化やオプションなどとして、遅延分岐命令の利用などを行うことができる。プログラムを解析して、分岐命令と置き換え可能な命令を解析することになるが、複数ワード命令、複数ステート実行命令も、遅延スロットに配置できれば、有効利用が可能になる。
【0196】
上記各種の実施形態によれば、以下の作用効果を得るものである。
【0197】
(1)[バスモード(図4)]
内部I/Oレジスタ等の設定により、16ビット命令リードと32ビット命令リードを切替え可能にすることにより、外部バスのデータバス幅が内蔵ROMのバス幅より狭い場合、マイクロコンピュータの使用方法、例えば、プログラムを内蔵ROMのみとするとき、外部ROMのみとするとき、内蔵ROMまたはRAMと外部ROMを切替えて使用するとき、などに対応し、処理性能を高くすることができる。初期値を32ビット命令リードにし、リセット後のプログラム実行が、32ビットバス、16ビットバスの何れであっても、リセット後の初期化時の処理速度を低下させることがない。
【0198】
データのリード/ライトは、所要量のリード/ライトを行うようにし、選択に必要な論理を不要とするとともに、プログラムは外部ROM、データは内蔵RAMといった場合に、処理性能を高くすることができる。
【0199】
(2)[バスモード(図1)]
バスコントローラ3とCPU2のモジュール間制御信号bmode16をCPU2への入力時にFFで受けて利用することにより、バスコマンドBCMDの遅延を抑止することができる。
【0200】
バスモードに応じて、インクリメンタINCの加算値を制御することは、ポストインクリメントレジスタ間接などのアドレッシングモードの操作と共通化でき、資源の有効利用と論理規模の増加の抑止を図ることができる。
【0201】
分岐命令が、自命令の命令コードの一部をリードする場合、必要に応じて、必ず16ビットで命令リードするようにすることにより、利用されない命令リード(プリフェッチ)を抑止できる。ウェイトが挿入されたりして、実行ステート数が増加することを回避することができる。
【0202】
(3)[遅延分岐(図28、図29)]
遅延分岐のとき、分岐アドレスリード後、分岐アドレスのインクリメント結果をテンポラリレジスタTRに保持することにより、遅延スロット命令の命令コード長が長い場合も継続して命令リードを行うことができる。また、自命令の命令コードのリードデータを待つステートや実効アドレス計算のためのステートは命令リードを抑止することにより、利用されない命令リード(プリフェッチ)を抑止できる。ウェイトが挿入されたりして、実行ステート数が増加することを回避することができる。FIFOバッファFBのクリアを、遅延スロット命令がEA拡張部など、命令バッファの出力を不要とした時点で行うことにより、遅延スロットの命令実行を複数ステートにすることができる。ハーバードバスなどを利用することなく、種々の命令セットやハードウェア構成に適用できる。
【0203】
(4)[遅延分岐(図6、図26〜図29)]
遅延分岐と通常分岐の命令コードを、命令コードの最下位ビットで切替えることにより、実効アドレスの計算などを共通にできる。
【0204】
(5)[複数ビットシフト(図14)]
1、2、4、8、16ビットシフトを行うシフタ21を用いることにより、出現頻度の高いシフトを1ステートで実行可能にするとともに、組合せて(直列に、或いは、繰り返し使用して)任意ビットのシフトを可能にすることができ、論理規模の増加も抑止できる。
【0205】
ビットシフトしない及び左右シフトビット数の組み合わせに対する5選択、7選択といったシフタのセレクタは、論理合成などで容易に実現可能である。多選択のセレクタは、論理合成によって、論理ゲートが多段に構成される場合が多いから、第1シフタ27と第2シフタ28を直列にしても大きな不都合は生じない。
【0206】
(6)[複数ビットシフト(図22)]
制御信号sftcntの状態で、次命令への遷移と、次のシフトビットの制御を行うことにより、論理記述を容易にし、資源の利用効率を向上することができる。
【0207】
(7)[乗算器(図18)]
32ビット×32ビットの積の上位の32ビットを得る乗算命令を除算に用いることにより、除算の効率化に寄与する。
【0208】
以上本発明者等によってなされた発明を実施例に限定されるものではなく、その要旨を逸しない範囲において種々変更可能である。
【0209】
命令コードは、簡単化のために、複数ビットシフトや、上位を取る乗算命令も1ワードとしているが、これらは複数ワード命令にすることができる。動作フローや動作タイミングもこれに伴って変更すればよい。簡単には、プリフィックスコードを付して、実質的な動作フローや動作タイミングを変えないで実現することもできる。そのほか、命令体系や命令セット即ち、命令の種類やアドレッシングモードの種類及びこれらの組合せなども任意にできる。命令フォーマットは任意に変形できる。
【0210】
プログラムカウンタのビット数や、アドレス空間の大きさやエリア分割、そのほかの制御レジスタの構成なども任意にできる。
【0211】
16ビット命令リードと32ビット命令リードの切替えは、内部I/Oレジスタの設定によるもののほか、モード信号としてのモード制御(MD0、MD1)で設定可能にしてもよい。初期値を設定可能にしてもよい。
【0212】
命令バッファ部のFIFOバッファの容量も8ワードに限定されない。最小限2ワード以上あればよい。容量が大きければ、省略可能なステートを持たない命令が存在した場合にも、蓄積された命令を、続く命令実行で省略するステートを大きくして、命令の量のバランスを採ることができる。ただし、容量を大きくしても、分岐命令実行時にはリードした命令が無駄になってしまうから、通常、若しくは定常的な状態で、FIFOに存在する命令の量はあまり大きくしない方がよい。
【0213】
シフタ21は2段に限定されず、3段以上でもよい。個々のシフタで実行可能なシフトビット数も任意に設定できる。シフトビット数は、命令コード中に含まれるイミディエイトデータで指定するほか、汎用レジスタの内容で指定可能にしてもよい。
【0214】
乗算器の詳細な構成や、制御信号入力、状態遷移なども変形可能である。また、外部バスのバス幅は内部バスのバス幅よりも狭く固定されても良い。また、外部バスのバス幅は内部バスのバス幅よりも狭い範囲で選択可能であってもよい。そのような選択制御はCPU2によるバスコントローラ3の条件設定で行なえばよい。
【0215】
以上の説明では主として本発明者によってなされた発明をその背景となった利用分野であるシングルチップマイクロコンピュータに適用した場合について説明したが、本発明はそれに限定されるものではなく、データプロセッサ、マイクロプロセッサ、システムLSI等と称される種々のデータ処理装置に広く適用することができる。本発明は少なくとも、命令を解読して処理し、演算処理を行う条件のものに適用することができる。
【0216】
【発明の効果】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【0217】
すなわち、ハードウェアの観点より、同一の動作周波数での高速化、換言すれば、所定の処理を行うのに必要な実行ステート数を短縮することができ、データ処理の高速化を図ることができる。更に、データ処理装置もしくはこれを適用するデータ処理システムにおける資源の利用効率を向上させることに寄与できる。データ処理装置の使い勝手を向上させ、また、プログラム容量を低減させることに寄与できる。
【図面の簡単な説明】
【図1】本発明に係るデータ処理装置の一例であるCPUの詳細を示すブロック図である。
【図2】本発明に係るデータ処理装置が適用されたシングルチップマイクロコンピュータのブロック図である。
【図3】CPUに内蔵されている汎用レジスタ及び制御レジスタの構成を例示する説明図である。
【図4】CPUのアドレス空間を例示する説明図である。
【図5】CPUの機械語の命令フォーマットの一例を示す説明図である。
【図6】本発明に関する代表的な幾つかの命令の具体的なフォーマットを例示する説明図である。
【図7】バスアクセスの制御部BCNTの命令リードに関する論理記述を例示する説明図である。
【図8】インクリメンタINCによるプリフェッチカウンタpfcの制御内容に関する論理記述を例示する説明図である。
【図9】図7及び図8の論理記述の入力条件を適宜増やすためにデータサイズによって+1/+2/+4を選択する制御を含めたときの論理記述を例示する説明図である。
【図10】第1のシフタの制御内容に関する論理記述を例示する説明図である。
【図11】第2のシフタの制御内容に関する論理記述を例示する説明図である。
【図12】制御信号sftcntの機能に関する論理記述を例示する説明図である。
【図13】命令バッファ部の詳細を例示するブロック図である。
【図14】算術論理演算器の詳細を例示するブロック図である。
【図15】第1のシフタの論理記述を例示する説明図である。
【図16】第2のシフタの論理記述を例示する説明図である。
【図17】図16の論理記述の第1ケース、第2ケースに関する別の記述を示す説明図である。
【図18】乗算器の詳細を例示するブロック図である。
【図19】図18の乗算器における乗算演算制御の状態遷移図である。
【図20】命令バッファ部の状態を主体に転送命令(MOV.W @aa:16,Rd)の実行フローを示すフローチャートである。
【図21】命令バッファ部の状態を主体に分岐命令(JMP @aa:32)の実行フローを示すフローチャートである。
【図22】命令バッファ部の状態を主体に複数ビットシフト命令(SHLL #xx,Rd)の実行フローを示すフローチャートである。
【図23】内蔵ROM上での命令実行タイミングを示すタイミングチャートである。
【図24】16ビットバスモードで外部メモリからフェッチした命令を実行する動作タイミングを示すタイミングチャートである。
【図25】32ビットバスモードで外部メモリからフェッチした命令を実行する動作タイミングを示すタイミングチャートである。
【図26】通常分岐命令の第1の例の実行タイミングを示すタイミングチャートである。
【図27】通常分岐命令の第2の例の実行タイミングを示すタイミングチャートである。
【図28】遅延分岐命令の第1の例の実行タイミングを示すタイミングチャートである。
【図29】遅延分岐命令の第2の例の実行タイミングを示すタイミングチャートである。
【図30】シフト命令の第1の例の実行タイミングを示すタイミングチャートである。
【図31】シフト命令の第2の例の実行タイミングを示すタイミングチャートである。
【図32】乗算命令の第1の例の実行タイミングを示すタイミングチャートである。
【図33】乗算命令の第2の例の実行タイミングを示すタイミングチャートである。
【図34】制御ビットbmodを生成する構成を例示するブロック図である。
【図35】
制御ビットbmodを生成する別の構成を例示するブロック図である。
【図36】CPUのプログラム等の開発環境の概略を示す説明図である。
【符号の説明】
1 シングルチップマイクロコンピュータ
2 中央処理装置(CPU)
2A 制御部
2B 実行部
DEC 命令デコーダ
UBUF 命令バッファ部
IR 命令レジスタ
FB FIFOバッファ
FF フリップフロップ
ER0〜ER7 汎用レジスタ
AB アドレスバッファ
ALU 算術論理演算器
INC インクリメンタ
MULT 乗算器
DBR リードデータバッファ
DBW ライトデータバッファ
IAB 内部アドレスバス
IDB 内部データバス
3 バスコントローラ(BSC)
4 割り込みコントローラ(INT)
5 ROM
6 RAM
20 算術演算器
21 シフタ
27 第1シフタ
28 第2シフタ

Claims (17)

  1. 命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、
    前記命令実行手段は、データまたはアドレスを格納可能なレジスタと、
    命令リードを行なう語数を選択する選択手段と、
    前記選択手段によって選択された語数の命令リードのためのバス制御信号を生成すると共に、前記選択された語数に応じて命令のプリフェッチカウンタのインクリメント値を切替える制御手段と、を有し、
    データのリード及びライトは前記選択手段にかかわらず、所要の語数で行うことを特徴とするデータ処理装置。
  2. 前記選択手段で選択可能な語数は16ビット又は32ビットであることを特徴とする請求項1記載のデータ処理装置。
  3. 前記制御手段は、命令リードの量が少ないときには、前記選択手段にかかわらず、相対的に少ない語数で命令リードを行うことを特徴とする請求項1記載のデータ処理装置。
  4. 前記制御手段は、分岐命令の命令コードをデコードして実行する際に、分岐先の命令のリードを行い、分岐先の命令のリード内容を入力した時点で、前記分岐先の命令リード内容の解読を行うことを特徴とする請求項1又は3記載のデータ処理装置。
  5. 内蔵ROMと、外部に接続したメモリをアクセス可能な外部バス手段とを更に有し、
    前記内蔵ROMのバス幅よりも、前記外部バス手段のバス幅を狭くする選択が可能であることを特徴とする請求項1又は3記載のデータ処理装置。
  6. 内蔵ROMと、外部に接続したメモリをアクセスする外部バス手段とを更に有し、
    前記内蔵ROMのバス幅は前記外部バス手段のバス幅よりも広いことを特徴とする請求項1又は3記載のデータ処理装置。
  7. 前記選択手段は、前記語数選択のための制御情報が命令の実行によって設定可能にされ、制御情報の初期値は相対的に大きな方の語数であることを特徴とする請求項1又は3記載のデータ処理装置。
  8. 命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、
    前記命令実行手段は、命令コードを保持する第1の保持手段と第2の保持手段を持ち、遅延分岐命令でリードした分岐先命令は、前記第2の保持手段に保持し、前記第1の保持手段は、それ以前の内容を保持し、遅延スロット命令の終了時に、前記第1の保持手段のクリアを行うことを特徴とするデータ処理装置。
  9. 前記命令実行手段は、プリフェッチカウンタと、一時的な情報保持に利用される一時レジスタ手段とを更に有し、
    遅延分岐命令で、分岐先アドレスまたはこれをインクリメントした値を、前記一時レジスタ手段に保持し、前記プリフェッチカウンタは、それ以前の内容を保持し、遅延スロット命令実行には、前記プリフェッチカウンタを利用可能とし、遅延スロット命令の終了時に、前記一時レジスタ手段の内容またはこれをインクリメントした値を前記プリフェッチカウンタにプリセットすることを特徴とする請求項8記載のデータ処理装置。
  10. 前記命令実行手段は、遅延スロット命令の実行を制御するとき、自命令の命令コードのリードデータを待つステート及び実効アドレス計算のためのステートにおいて命令リードを抑止することを特徴とする請求項8記載のデータ処理装置。
  11. 前記命令実行手段は、前記遅延分岐命令と同一のアドレッシングモードを有する遅延分岐の無い分岐命令を実行可能であることを特徴とする請求項8記載のデータ処理装置。
  12. 命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、
    前記命令実行手段は、異なるシフトビット数の第1シフタと第2シフタを直列に接続したシフタと、前記シフタと並列に接続された算術演算器とを有することを特徴とするデータ処理装置。
  13. 前記命令実行手段は、前記第1シフタと第2シフタのシフト動作を独立にシフト動作の可否を選択可能であることを特徴とする請求項12記載のデータプロセッサ。
  14. 前記命令実行手段は、第1のステートで、第1シフタ及び第2シフタの少なくとも一方で、所定のシフト動作を実行し、残りのシフトビット数を示す情報を生成し、前記情報に基づいて、第2のステートで、第1のステートで実行したシフト動作と異なるシフト動作を、第1シフタ又は第2シフタの少なくとも一方で実行することを特徴とする請求項13記載のデータ処理装置。
  15. 前記命令実行手段は、前記情報に基づいて、割り込みを抑止することを特徴とする請求項14記載のデータ処理装置。
  16. 命令を読み込んで解読し、その解読結果に従って命令を実行する命令実行手段を有し、
    前記命令実行手段は、第1のビット数の被乗数と第1のビット数の乗数とを乗算して第2のビット数の積を得る乗算手段を有し、この乗算手段を使用して、
    第1のビット数の被乗数と第1のビット数の乗数とから第1のビット数の積の下位を得る第1乗算命令と、
    第2のビット数の被乗数と第2のビット数の乗数とから第2のビット数の積の下位を得る第2乗算命令と、
    第2のビット数の被乗数と第2のビット数の乗数とから第2のビット数の積の上位を得る第3乗算命令とを実行可能であることを特徴とするデータ処理装置。
  17. 第1のビット数は16ビット、第2のビット数は32ビットであることを特徴とする請求項16記載のデータ処理装置。
JP2002191339A 2002-06-28 2002-06-28 データ処理装置 Expired - Fee Related JP4073721B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2002191339A JP4073721B2 (ja) 2002-06-28 2002-06-28 データ処理装置
US10/457,920 US7376819B2 (en) 2002-06-28 2003-06-11 Data processor with selectable word length
US12/105,188 US20080201564A1 (en) 2002-06-28 2008-04-17 Data processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002191339A JP4073721B2 (ja) 2002-06-28 2002-06-28 データ処理装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2006286810A Division JP4382076B2 (ja) 2006-10-20 2006-10-20 データ処理装置

Publications (2)

Publication Number Publication Date
JP2004038327A true JP2004038327A (ja) 2004-02-05
JP4073721B2 JP4073721B2 (ja) 2008-04-09

Family

ID=29774398

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002191339A Expired - Fee Related JP4073721B2 (ja) 2002-06-28 2002-06-28 データ処理装置

Country Status (2)

Country Link
US (2) US7376819B2 (ja)
JP (1) JP4073721B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005348808A (ja) * 2004-06-08 2005-12-22 Samii Kk 遊技機
JP2009526300A (ja) * 2006-02-10 2009-07-16 イマジネイション テクノロジーズ リミテッド マイクロプロセッサ用の命令セット

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7836285B2 (en) * 2007-08-08 2010-11-16 Analog Devices, Inc. Implementation of variable length instruction encoding using alias addressing
US7861070B2 (en) * 2008-06-12 2010-12-28 National Tsing Hua University Trace compression method for debug and trace interface wherein differences of register contents between logically adjacent registers are packed and increases of program counter addresses are categorized
JP5261738B2 (ja) * 2009-01-15 2013-08-14 国立大学法人広島大学 半導体装置
US8069339B2 (en) * 2009-05-20 2011-11-29 Via Technologies, Inc. Microprocessor with microinstruction-specifiable non-architectural condition code flag register
JP2015219643A (ja) * 2014-05-15 2015-12-07 キヤノン株式会社 画像処理装置、情報処理方法及びプログラム
CN111124497B (zh) * 2018-10-11 2022-03-29 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
CN112612519B (zh) * 2020-12-11 2022-06-21 成都海光微电子技术有限公司 一种取指方法、装置、电子设备及存储介质
CN112486848A (zh) * 2020-12-22 2021-03-12 上海金卓科技有限公司 一种测试数据的生成方法、装置、芯片及存储介质
CN116151187B (zh) * 2023-02-14 2024-01-19 芯华章科技(北京)有限公司 处理触发条件的方法、装置和存储介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56132624A (en) 1980-03-19 1981-10-17 Toshiba Corp Information processor
DE3176290D1 (en) * 1980-03-19 1987-08-06 Toshiba Kk Information processing system incorporating 1-chip arithmetic control unit of very large scale integrated semiconductor element
US5150469A (en) * 1988-12-12 1992-09-22 Digital Equipment Corporation System and method for processor pipeline control by selective signal deassertion
DE69030648T2 (de) * 1990-01-02 1997-11-13 Motorola Inc Verfahren zum sequentiellen Vorabruf von 1-Wort-, 2-Wort oder 3-Wort-Befehlen
JP3432532B2 (ja) 1992-08-03 2003-08-04 株式会社日立製作所 データ処理装置
US5666510A (en) * 1991-05-08 1997-09-09 Hitachi, Ltd. Data processing device having an expandable address space
JP3154542B2 (ja) 1992-02-27 2001-04-09 株式会社日立製作所 データ処理装置
KR100272622B1 (ko) * 1991-05-08 2000-11-15 가나이 쓰도무 데이타 처리장치
JPH05307519A (ja) 1992-04-30 1993-11-19 Hitachi Ltd データ処理装置
US5696958A (en) * 1993-01-11 1997-12-09 Silicon Graphics, Inc. Method and apparatus for reducing delays following the execution of a branch instruction in an instruction pipeline
JPH08263290A (ja) 1995-03-20 1996-10-11 Hitachi Ltd データ処理装置
JP2803788B2 (ja) 1995-04-18 1998-09-24 インターナショナル・ビジネス・マシーンズ・コーポレーション パリテイ予測およびストリング制御を有する高速パイプライン・シフタ要素
US5699537A (en) * 1995-12-22 1997-12-16 Intel Corporation Processor microarchitecture for efficient dynamic scheduling and execution of chains of dependent instructions
US5669537A (en) * 1996-06-03 1997-09-23 Ford Global Technologies, Inc. Portable multi-position vehicle storage unit
JP3439033B2 (ja) * 1996-07-08 2003-08-25 株式会社日立製作所 割り込み制御装置及びプロセッサ
JP3474384B2 (ja) 1997-01-09 2003-12-08 株式会社東芝 シフタ回路及びマイクロプロセッサ
JP3344316B2 (ja) * 1998-05-01 2002-11-11 ヤマハ株式会社 ディジタル信号処理装置及び信号処理システム
US6430674B1 (en) * 1998-12-30 2002-08-06 Intel Corporation Processor executing plural instruction sets (ISA's) with ability to have plural ISA's in different pipeline stages at same time
JP3740321B2 (ja) 1999-06-15 2006-02-01 株式会社ルネサステクノロジ データ処理装置
JP2000357096A (ja) 1999-06-16 2000-12-26 Sony Corp プログラム変換方法及び装置、並びに、プログラム提供媒体
US6574651B1 (en) 1999-10-01 2003-06-03 Hitachi, Ltd. Method and apparatus for arithmetic operation on vectored data

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005348808A (ja) * 2004-06-08 2005-12-22 Samii Kk 遊技機
JP4618667B2 (ja) * 2004-06-08 2011-01-26 サミー株式会社 遊技機
JP2009526300A (ja) * 2006-02-10 2009-07-16 イマジネイション テクノロジーズ リミテッド マイクロプロセッサ用の命令セット

Also Published As

Publication number Publication date
US20040003212A1 (en) 2004-01-01
JP4073721B2 (ja) 2008-04-09
US7376819B2 (en) 2008-05-20
US20080201564A1 (en) 2008-08-21

Similar Documents

Publication Publication Date Title
US6539467B1 (en) Microprocessor with non-aligned memory access
TWI541658B (zh) 資料處理裝置及半導體積體電路裝置
US8612726B2 (en) Multi-cycle programmable processor with FSM implemented controller selectively altering functional units datapaths based on instruction type
US20080201564A1 (en) Data processor
JP2008530642A (ja) 低レイテンシーの大量並列データ処理装置
JP2001256038A (ja) 柔軟な乗算ユニットを有するデータ・プロセッサ
US6453405B1 (en) Microprocessor with non-aligned circular addressing
US6574724B1 (en) Microprocessor with non-aligned scaled and unscaled addressing
JPH0766324B2 (ja) データ処理装置
JP2581236B2 (ja) データ処理装置
KR20000076310A (ko) 리스크 구조를 갖는 8 비트 마이크로콘트롤러
JP4004915B2 (ja) データ処理装置
US6986028B2 (en) Repeat block with zero cycle overhead nesting
JP2006313561A (ja) データ処理装置
US6012138A (en) Dynamically variable length CPU pipeline for efficiently executing two instruction sets
JPS6014338A (ja) 計算機システムにおける分岐機構
JP3786575B2 (ja) データ処理装置
JP4382076B2 (ja) データ処理装置
KR19980018071A (ko) 멀티미디어 신호 프로세서의 단일 명령 다중 데이터 처리
Rodrigues Configurable RISC-V softcore processor for FPGA implementation
JP2009134745A (ja) データ処理装置
JP4545777B2 (ja) データ処理装置
Eyre et al. Carmel Enables Customizable DSP
JP4498338B2 (ja) データ処理装置
JP2005353105A (ja) データ処理装置及びマイクロコンピュータ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050609

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060817

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060822

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061020

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070417

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070618

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080123

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110201

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 4073721

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110201

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110201

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110201

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120201

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130201

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140201

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees