(57)【特許請求の範囲】
【請求項１】
ファンクション指定部とオペランド指定部に分けられた命令語を処理するファンクション・オペランド分割型プロセッサにおいて、
（ａ）前記ファンクション指定部をフェッチする命令フェッチユニットと、
（ｂ）前記オペランド指定部をフェッチするオペランドフェッチユニットと、
（ｃ）前記命令フェッチユニットから送られた前記ファンクション指定部を解読し、オペランドを必要とするとき、当該ファンクション指定部と前記オペランドフェッチユニットから送られた前記オペランド指定部を合成して計算ユニットに実行させ、オペランドを必要としないとき、前記オペランドフェッチユニットから送られた前記オペランド指定部をそのまま残し、当該ファンクション指定部によって前記計算ユニットに実行させるレジスタ割り当てオペランド合成ユニットとを備えたことを特徴とするファンクション・オペランド分割型プロセッサ。
【請求項２】
ファンクション指定部と、オペランド指定部に分けられた命令語を処理するファンクション・オペランド分割型プロセッサにおいて、
（ａ）ファンクション指定部が格納された命令メモリと、
（ｂ）プログラムカウンタに基づいて前記命令メモリから前記ファンクション指定部をフェッチする命令フェッチユニットと、
（ｃ）オペランド指定部が格納されたオペランドメモリと、
（ｄ）オペランドカウンタに基づいて前記オペランドメモリから前記オペランド指定部をフェッチするオペランドフェッチユニットと、
（ｅ）前記命令フェッチユニットから送られた前記ファンクション指定部を解読し、オペランドを必要とするとき、当該ファンクション指定部と前記オペランドフェッチユニットから送られた前記オペランド指定部を合成して命令として出力し、オペランドを必要としないとき、前記オペランドフェッチユニットから送られた前記オペランド指定部をそのまま残し、当該ファンクション指定部のみを命令として出力するレジスタ割り当てオペランド合成ユニットと、
（ｆ）前記レジスタ割り当てオペランド合成ユニットから送られた命令を計算ユニットへ送るイシューユニットと、
（ｇ）前記計算ユニットに接続され、途中結果を入れるキューと、
（ｈ）前記計算ユニットに接続され、データが読み出されたり格納されたりするデータメモリとを備えたことを特徴とするファンクション・オペランド分割型プロセッサ。
【請求項３】
請求項１又は２記載のファンクション・オペランド分割型プロセッサにおいて、同時に実行可能なファンクション部を複数個並べて一つのＶＬＩＷ命令とし、かつ、オペランドを複数個集めて一つのＶＬＩＷオペランドとし、前記ＶＬＩＷ命令と前記ＶＬＩＷオペランドを前記命令フェッチユニットと前記オペランドフェッチユニットによってフェッチすることを特徴とするファンクション・オペランド分割型プロセッサ。
【請求項４】
請求項１、２又は３記載のファンクション・オペランド分割型プロセッサにおいて、キュー計算法による計算を行うことを特徴とするファンクション・オペランド分割型プロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ構成技術に関する発明であり、シリアルコンピュータであるＣＩＳＣ、ＲＩＳＣ、並列コンピュータであるＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）コンピュータなどのアーキテクチャ技術分野に関するものである。
【０００２】
【従来の技術】
コンピュータでは、一般に命令長は一定にならないので、（１）異なる命令長の命令をそれぞれ個別に扱うか、（２）命令長を一定にするために命令を一番長い命令長に合わせるか、もしくは（３）長い命令長の一部を削って一定にさせるなどしていた。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記（１）のように異なる命令長の命令をそのまま扱うと、命令部とオペランド部の認識や一命令の切り出し用のハードウェアが複雑になり、それが高速化を阻む原因となってしまう。また、上記（２）のように命令長を一番長い命令長に合わせると、命令に無駄な情報が含まれるようになり、プログラムが大きくなってしまう。さらに、上記（３）のように命令の一部を削って一定にすると、命令構成に無理と無駄が生じ、それがハードウェアを複雑にし、高速化を妨げることになる。
【０００４】
命令長を一定にしたいという要求は、特にＶＬＩＷプロセッサの場合に強い。ＶＬＩＷは同時に実行できる命令を一定数集めて一定長の一つの大きな命令（ＶＬＩＷ命令といい、一般の命令をここではこれと区別して小命令という）として実行するプロセッサであるので、集める命令数が一定で小命令長も一定であることが要求される。
【０００５】
ところが、命令はファンクションと呼ばれる命令指定部とオペランドと呼ばれる処理対象指定部よりなり、オペランドがレジスタであったり、メモリ番地であったり、または不必要であったりするので、命令長はオペランドの種類によって変わらざるを得ない。オペランド長は、オペランドがレジスタである場合には典型的には５ビットを３組、メモリである場合には３２ビット、オペランドが必要でない命令では０ビットである。したがって、命令長は命令の種類によって大きく異なってしまう。
【０００６】
一方、キュー計算原理をもとにしたキュープロセッサやキューＶＬＩＷプロセッサと呼ばれるプロセッサ方式が提案されている。キュー計算方式では、レジスタを暗黙のうちに指定するので、命令レジスタを指定する必要がない。それだけ命令長が短くなるが、この場合でもオペランドとしてメモリを指定する場合とない場合があるので、やはり命令長が変わり、それだけプロセッサの設計を複雑にし遅くしていた。
【０００７】
本発明は、上記状況に鑑みて、電子計算機において、命令長の違いから来る複雑性を取り除き、ハードウェアを簡単化し、高速化することができるファンクション・オペランド分割型プロセッサを提供することを目的とする。
【０００８】
【課題を解決するための手段】
本発明は、上記した目的を達成するために、
〔１〕ファンクション指定部とオペランド指定部に分けられた命令語を処理するファンクション・オペランド分割型プロセッサにおいて、前記ファンクション指定部をフェッチする命令フェッチユニットと、前記オペランド指定部をフェッチするオペランドフェッチユニットと、前記命令フェッチユニットから送られた前記ファンクション指定部を解読し、オペランドを必要とするとき、当該ファンクション指定部と前記オペランドフェッチユニットから送られた前記オペランド指定部を合成して計算ユニットに実行させ、オペランドを必要としないとき、前記オペランドフェッチユニットから送られた前記オペランド指定部をそのまま残し、当該ファンクション指定部によって前記計算ユニットに実行させるレジスタ割り当てオペランド合成ユニットとを備えたことを特徴とする。
【０００９】
〔２〕ファンクション指定部と、オペランド指定部に分けられた命令語を処理するファンクション・オペランド分割型プロセッサにおいて、ファンクション指定部が格納された命令メモリと、プログラムカウンタに基づいて前記命令メモリから前記ファンクション指定部をフェッチする命令フェッチユニットと、オペランド指定部が格納されたオペランドメモリと、オペランドカウンタに基づいて前記オペランドメモリから前記オペランド指定部をフェッチするオペランドフェッチユニットと、前記命令フェッチユニットから送られた前記ファンクション指定部を解読し、オペランドを必要とするとき、当該ファンクション指定部と前記オペランドフェッチユニットから送られた前記オペランド指定部を合成して命令として出力し、オペランドを必要としないとき、前記オペランドフェッチユニットから送られた前記オペランド指定部をそのまま残し、当該ファンクション指定部のみを命令として出力するレジスタ割り当てオペランド合成ユニットと、前記レジスタ割り当てオペランド合成ユニットから送られた命令を計算ユニットへ送るイシューユニットと、前記計算ユニットに接続され、途中結果を入れるキューと、前記計算ユニットに接続され、データが読み出されたり格納されたりするデータメモリとを備えたことを特徴とする。
【００１０】
〔３〕上記〔１〕又は〔２〕記載のファンクション・オペランド分割型プロセッサにおいて、同時に実行可能なファンクション部を複数個並べて一つのＶＬＩＷ命令とし、かつ、オペランドを複数個集めて一つのＶＬＩＷオペランドとし、前記ＶＬＩＷ命令と前記ＶＬＩＷオペランドを前記命令フェッチユニットと前記オペランドフェッチユニットによってフェッチすることを特徴とする。
【００１１】
〔４〕上記〔１〕、〔２〕又は〔３〕記載のファンクション・オペランド分割型プロセッサにおいて、キュー計算法による計算を行うことを特徴とする。
【００１２】
無駄なく命令長を一定にすることは原理的に不可能であるが、取り扱いを命令長が一定の場合に近くし、簡単化してプロセッサを高速化することは可能である。そのために、命令をファンクション部とオペランド部に分け、プログラムのファンクション部をすべて集めて命令プログラムＩＰと呼ばれるプログラムをつくり、一方、プログラムのオペランド部をすべて集めてオペランドプールと呼ばれるプログラムを構成し、それぞれを別々にメモリに格納しておく。
【００１３】
プロセッサには実行すべきファンクション部を指定するプログラムカウンタと、オペランド部を指定するオペランドカウンタを設け、これらの指定に基づいて命令部とオペランド部をフェッチして、必要ならばプロセッサ内で合成して、ファンクションとオペランドからなる命令として実行する。ファンクションがオペランドを必要としないものである場合には、フェッチしたオペランドは必要になるまでプロセッサ内に保たれる。
【００１４】
このようにすることによって、ファンクション部は全命令一定の長さとなり、オペランド部もレジスタを指定する場合と、メモリを指定する場合の２種類になるので取り扱いが容易になり高速化が図れる。特に、キュープロセッサではレジスタを指定する場合がないので、オペランドもメモリ指定だけとなり、より簡素化される。この簡素化はコンピュータを高速化する。
【００１５】
【発明の実施の形態】
以下、本発明をキューＶＬＩＷプロセッサの実施形態を例にとって、図面に従って詳細に説明する。
【００１６】
（１）まず、基本的なキュープロセッサについて説明する。
【００１７】
キュー計算法は計算の途中結果をキューに入れることによって行う計算方法である。よく知られている計算方法として一般のプロセッサが使っているレジスタを用いる方法や、Ｊａｖａ（登録商標）が用いているスタックを使う方法がある。
【００１８】
図１は本発明のデータの流れによって計算方法を示すデータフロープログラムグラフである。
【００１９】
メモリＭにあるデータａ，ｂ，ｃ，ｄがメモリから取り出されて、ｅ＝ａｂ／（ｃ＋ｄ）の計算がなされ、それがメモリに格納されるプログラムとなっている。
【００２０】
図１において、ｌｄやｓｔはロード・ストア命令でメモリからデータを取り出す命令、＊，＋等は計算命令である。
【００２１】
キュー計算法では、命令の実行を図１破線で示す順序で行う。計算には途中結果を入れるアキュムレータとしてキューを用いる。
【００２２】
このプログラムをニモニック形式で書くと以下のようになる。これをシリアルキュープログラムと呼ぶ。
【００２３】
ｌｄ  ａ
ｌｄ  ｂ
ｌｄ  ｃ
ｌｄ  ｄ
ｍｕｌ
ａｄｄ
ｄｉｖ
ｓｔ  ｅ
オペランドが、ｌｄ  ａのようにメモリ指定部だけか、ｍｕｌのように無いことが特徴である。ここでｌｄやｍｕｌはファンクションである。計算は図２に示すように、キューのヘッドからデータを取り出して計算し、その計算結果をキューのテイルに入れる方法で行われる。データは消費型のデータであり、一度取り出されるとそのデータは消滅する。キューの内容は命令の実行に従って図２のように変化する。プログラムは８ステップで終わる。
【００２４】
なお、キュープロセッサは消費型データではなく、参照型データで実現することも可能であるが、複雑になるのでここでは述べない。
【００２５】
（２）キューＶＬＩＷプロセッサの基本原理
ＶＬＩＷプロセッサでは命令長が一定であるので、その取り扱いが簡単なこと（命令長の違いを考慮しなくて良いので命令のフェッチや取り扱いが簡単、小命令の切り出しが簡単）、並列に実行できる命令がＶＬＩＷ命令で示されているので、並列実行可能な命令を探す必要がないことなどからハードウェアの簡単化が図れるなど、多くの特徴を持っている。
【００２６】
一方、ＶＬＩＷ命令を構成するに足る小命令がない場合（並列性がない場合）でも、ＶＬＩＷを構成しなくてはならないので、そこにｎｏｐなどの無駄命令を挿入するので無駄が生じる。
【００２７】
キュー命令は、レジスタ指定部が必要ないので命令長が短くなる。それゆえ、キュー命令を小命令としたＶＬＩＷ命令もその長さが小さくなる。このＶＬＩＷ命令の短縮化はプログラムを小さくするため、今日のようなプログラムやデータをインターネットで交換する時代には通信トラフィックを下げるので好都合である。
【００２８】
図１のプログラムからキューＶＬＩＷプログラムを構成することは容易である。例えば、上記のプログラムを、２並列のＶＬＩＷ命令として実現すると以下のようになる。
【００２９】
ｌｄ  ａ  ｌｄ  ｂ
ｌｄ  ｃ  ｌｄ  ｄ
ｍｕｌ  ａｄｄ
ｄｉｖ  ｎｏｐ
ｓｔ  ｅ  ｎｏｐ
ここで、横に並んだ命令群が一つのＶＬＩＷ命令であり、ｎｏｐは不足した命令を埋めるための何もしない命令である。
【００３０】
キューＶＬＩＷプロセッサを構成するには、命令に対してキューのワードを割り当てる時は、シリアルのキュープログラムの仕様規則に基づいて割り当てる必要があり、実行時には同時にキューにアクセスできるように構成する必要がある。命令はメモリからプロセッサに読み込まれ、各小命令にキューのワードを割り当て、２命令を同時に実行ユニットによって実行することによりなされる。このプログラムの場合、２小命令ずつ実行されるので５ステップで実行が終わる。
【００３１】
（３）ファンクション・オペランド分割型キューＶＬＩＷプロセッサ
図１のプログラムから構成されるニモニックプログラムをファンクション部とオペランド部に分け、すべての命令のファンクション指定部を集めて命令プログラム（ＩＰ：ｉｎｓｔｒｕｃｔｉｏｎ  ｐｒｏｇｒａｍ）として構成し、オペランド指定部を集めてオペランドプール（ＯＰ：ｏｐｅｒａｎｄ  ｐｏｏｌ）として構成する。
【００３２】
命令プログラムＩＰは、
ｌｄ
ｌｄ
ｌｄ
ｌｄ
ｍｕｌ
ａｄｄ
ｄｉｖ
ｓｔ
となり、オペランドプールＯＰは、
ａ
ｂ
ｃ
ｄ
ｅ
となる。
【００３３】
そして、これから命令・オペランド分割型キューＶＬＩＷプログラムを構成すれば以下のようになる。
ＩＰ
ｌｄ    ｌｄ
ｌｄ    ｌｄ
ｍｕｌ    ａｄｄ
ｄｉｖ    ｎｏｐ
ｓｔ    ｎｏｐ
ＯＰ
ａ    ｂ
ｃ    ｄ
ｅ    ｎｏｎ
ファンクション部は一般的に一定であり、オペランド部も一定であるので、このようにすればＩＰ、ＯＰとも長さを一定とすることができる。
【００３４】
このプログラムでは最初のｌｄ  ｌｄ  ＶＬＩＷ命令の時は、ａ，ｂが同時にフェッチされ合成されて使われる。一方、ｍｕｌ  ａｄｄ  ＶＬＩＷ命令フェッチの時には、オペランド指定としてｅ  ｎｏｎがフェッチされるが、ｍｕｌ  ａｄｄ  ｄｉｖ  ｎｏｐはオペランドを必要としないのでそのままプロセッサ内に残され、ｓｔ  ｎｏｐで使われる。フェッチすべきＩＰのファンクション部はプログラムカウンタＰＣで指定され、フェッチすべきＯＰのオペランドはＯＣで指定される。ＰＣは命令実行ごとに次の命令を指定するために増加させられるが、ＯＣはプロセッサにオペランドが残っている限り増加させられることはない。
【００３５】
図３は本発明の実施例を示す命令・オペランド分割型キューＶＬＩＷプロセッサの構成図である。
【００３６】
小命令のファンクション部は８ビット、オペランド部は１６ビットからなる。
【００３７】
この図において、１は命令プログラムを入れる命令メモリ、２は命令フェッチユニット（ＩＦＵ）、４はイシューユニット（Ｉｓｓｕｅ  Ｕｎｉｔ；ＩＵ）、５はキュー、６はＱＨ（キューの先頭ポインタ）、７はＱＴ（キューの最後尾ポインタ）、８は計算ユニットＣＵ（ロードユニット８Ａ，ストアユニット８Ｂ，数値演算ユニット８Ｃ，Ｍｕｌユニット８Ｄ，Ｄｉｖユニット８Ｅ，ＦＰユニット８Ｆ，ブランチユニット８Ｇなど）、９はデータメモリ、１０はオペランドプールを格納するためのオペランドメモリ（Ｏｐｅｒａｎｄ  Ｍｅｍｏｒｙ）、１１はオペランドをフェッチするオペランドフェッチユニットＯＦＵ（Ｏｐｅｒａｎｄ  Ｆｅｔｃｈ  Ｕｎｉｔ）、１２はレジスタ割り当てオペランド合成ユニットＲＡＯＣＵ（Ｒｅｇｉｓｔｅｒ  Ａｌｌｏｃａｔｉｏｎ  ＆  Ｏｐｅｒａｎｄ  Ｃｏｍｐｏｕｎｄ  Ｕｎｉｔ）である。なお、命令メモリ１とオペランドメモリ１０は必ずしも別々のメモリとして構成される必要はない。
【００３８】
ここでキュー５は円形状のレジスタとその一部をキューとして使うためのキュー５の先頭を示すＱＨポインタ６、キュー５の最後尾を示すＱＴポインタ７よりなっている。ＱＨポインタ６とＱＴポインタ７に囲まれたところがキュー５にデータが入っているところである。
【００３９】
その命令・オペランド分割型キューＶＬＩＷプロセッサの動作は以下のようである。
【００４０】
命令フェッチユニット（ＩＦＵ）２はプログラムカウンタが示すキューＶＬＩＷ命令を命令メモリ１から取り出し、オペランドフェッチユニット（ＯＦＵ）１１はＯＣが示しているオペランドプールを取り出しレジスタ割り当てオペランド合成ユニット（ＲＡＯＣＵ）１２に送る。レジスタ割り当てオペランド合成ユニット（ＲＡＯＣＵ）１２は、命令の種類を解読し、必要ならば命令部とオペランド部を接続し、次に、ＱＨポインタ６とＱＴポインタ７を参考にしてキューのワードを割り当てる。図では、ｌｄ  ｃはｌｄ  ２，ｃのようにキューの２番のワードが割り当てられている。ここでもし命令がオペランドを必要としないとき、そのオペランドはレジスタ割り当てオペランド合成ユニット（ＲＡＯＣＵ）１２内に残され、次にフェッチされる命令以降で必要になったときに使われる。
【００４１】
オペランドが残っている限り、オペランドフェッチユニット（ＯＦＵ）１１はそのフェッチを止める。その後、この命令はイシューユニット（ＩＵ）４により計算ユニット（ＣＵ）８に送られ、計算される。このとき必要ならばデータメモリ９からデータが読み出されたり格納されたりする。なお、キューのワードを割り当てるのはキュープロセッサの場合であり、レジスタプロセッサの場合は割り当てない。
【００４２】
以上のように本発明では、ファンクション部の長さが８×２＝１６ビットと一定であり、また、オペランドプールは１６×２＝３２と一定であるので、フェッチに関するハードウェアが簡単になり、また、命令解釈や合成も簡単になるので、それだけクロック周波数を上げることができ、高速なプロセッサとすることができる。
【００４３】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づいて種々の変形が可能であり、これらを本発明の範囲から排除するものではない。
【００４４】
【発明の効果】
以上、詳細に説明したように、本発明では、フェッチするファンクション長とオペランド命令長とを一定になし、フェッチ制御を簡単にすることができる。
【図面の簡単な説明】
【図１】本発明の実施例を示すデータの流れによって計算方法を示すデータフロープログラムグラフである。
【図２】シリアルなキュープロセッサのキューの内容の移り変わりを示す図である。
【図３】本発明の実施例を示す命令・オペランド分割型キューＶＬＩＷプロセッサの構成図である。
【符号の説明】
１    命令メモリ
２    命令フェッチユニット（ＩＦＵ）
４    イシューユニット（ＩＵ）
５    キュー
６    ＱＨ（キューの先頭ポインタ）
７    ＱＴ（キューの最後尾ポインタ）
８    計算ユニット（ＣＵ）
９    データメモリ
１０    オペランドメモリ
１１    オペランドフェッチユニット（ＯＦＵ）
１２    レジスタ割り当てオペランド合成ユニット（ＲＡＯＣＵ）
【図１】
0003634292.tif 000002
【図２】
0003634292.tif 000003
【図３】
0003634292.tif 000004