(57)【特許請求の範囲】
【請求項１】
処理デバイスに命令ストリームを供給するための回路であって、
第１の命令値のセットを供給するために外部命令ストリームを受信する入力部と、
第２の命令値のセットを含むように構成されたメモリと、
前記処理デバイスに出力命令ストリームを供給するための複数の出力部と、
制御入力部と、
前記制御入力部により前記複数の出力部間に、前記第１の命令値のセットと前記第２の命令値のセットを分配するように構成された選択手段とからなる回路。
【請求項２】
処理デバイスに命令ストリームを供給するための回路であって、
第１の命令値のセットを供給するために外部命令ストリームを受信する入力部と、
第２の命令値のセットを含んでいるメモリと、
前記処理デバイスに出力命令ストリームを供給する複数の出力部と、
制御入力部と、
前記制御入力部に基づいて、前記複数の出力部の間に、前記第１の命令値のセットと前記第２の命令値のセットを分配する選択手段と、を備えており、
前記選択手段は、前記第１の命令値のセットと前記第２の命令値のセットの間で、ビット毎に選択された値を供給しており、
選択された各値において、前記第１の命令値のセット及び前記第２の命令値のセットからのいずれかの１ビットは前記複数の出力部の１つに送られており、前記第１の命令値のセット及び前記第２の命令値のセットからの他の対応するビットは前記複数の他の出力部に送られており、
前記制御入力部は前記外部命令ストリームと同数のビットを有する値を供給しており、前記ビット毎に選択された値は、前記外部命令ストリームに等しく重要なビットに対応する制御入力値のビットに関連して行われることを特徴とする回路。
【請求項３】
前記出力命令ストリームは、全体として前記外部命令ストリームよりも多くのビットを含んでいることを特徴とする請求項２の回路。
【請求項４】
前記複数の出力部の１つは前記処理デバイスに命令入力を供給しており、
前記複数の他の出力部は、前記処理デバイスの周辺回路に入力を供給することを特徴とする請求項２の回路。
【請求項５】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力を許可又は禁止にする回路を備えていることを特徴とする請求項４の回路。
【請求項６】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力に演算定数を供給する回路を備えていることを特徴とする請求項４の回路。
【請求項７】
前記命令及びデータと同じデータパスの幅を有する処理デバイスを利用することを特徴とする請求項２の回路。
【請求項８】
前記選択手段に前記第１の命令値のセットを供給することを禁止する手段を備えており、それによって前記処理デバイスが前記第２の命令値のセットに基づいて制御されることを特徴とする請求項２の回路。
【請求項９】
前記選択手段に前記第２の命令値のセットを供給することを禁止する手段を備えており、それによって前記処理デバイスが前記第１の命令値のセットに基づいて制御されることを特徴とする請求項２の回路。
【請求項１０】
前記処理デバイスは、単一の集積回路における複数の処理ユニットの１つであることを特徴とする請求項２の回路。
【請求項１１】
前記第２の命令値のセットは、前記第１の命令値のセットが命令ストリームに供給されるよりも少ない頻度でアップデートされることを特徴とする請求項２の回路。
【請求項１２】
前記メモリは、読出し専用メモリを備えていることを特徴とする請求項２の回路。
【請求項１３】
読出し専用メモリは、論理値源に対するハードワイヤード接続を備えていることを特徴とする請求項１２の回路。
【請求項１４】
制御入力部は、第２のメモリによって供給されることを特徴とする請求項２の回路。
【請求項１５】
回路は、レジスタの使用が命令機能から独立して指定されるように、処理デバイスとともに使用されていることを特徴とする請求項２の回路。
【請求項１６】
前記選択手段に制御入力を供給することを禁止する手段を備えており、それによって処理デバイスが第１の命令値のセットに基づいて制御されることを特徴とする請求項２の回路。
【請求項１７】
第２の命令値のセットの命令値のそれぞれは、定常命令値、変化可能値、データ依存命令値及び構成可能命令値のいずれか一つを備えていることを特徴とする請求項２の回路。
【請求項１８】
集積回路であって、
複数の処理デバイスと、
命令ストリームを１つ又は複数の処理デバイスに供給する回路と、を備えており、
前記回路は、第１の命令値のセットを供給するために外部命令ストリームを受信する入力部と、第２の命令値のセットを含んでいるメモリと、前記処理デバイスに出力命令ストリームを供給する複数の出力部と、制御入力部と、前記制御入力部に基づいて前記複数の出力部の間に、前記第１の命令値のセットと前記第２の命令値のセットを分配する選択手段を有しており、
前記選択手段は、前記第１の命令値のセットと前記第２の命令値のセットの間でビット毎に選択された値を供給しており、選択された各値において、前記第１の命令値のセット及び前記第２の命令値のセットからのいずれかの１ビットは前記複数の出力部の１つに送られており、前記第１の命令値のセット及び前記第２の命令値のセットからの他の対応する１ビットは前記複数の他の出力部に送られており、
前記制御入力部は、前記外部命令ストリームと同数のビットを有する値を供給しており、前記ビット毎に選択された値は、前記外部命令ストリームに等しく重要なビットに対応する前記制御入力値のビットに関連して行われていることを特徴とする集積回路。
【請求項１９】
複数の処理デバイスは、構成可能ワイヤリングネットワークによって他の処理デバイスに接続されていることを特徴とする請求項１８の集積回路。
【請求項２０】
処理デバイスは、フィールドプログラマブルアレイの処理要素であることを特徴とする請求項１８の集積回路。
【請求項２１】
処理デバイスは、ALUsであることを特徴とする請求項２０の集積回路。
【請求項２２】
処理デバイスは、４ビットALUsであり、４ビット幅は命令とデータに要求されていることを特徴とする請求項２１の集積回路。
【請求項２３】
前記第２の命令値のセットの命令値のそれぞれは、定常命令値、変化可能値、データ依存命令値及び構成可能命令値のいずれか一つを備えていることを特徴とする請求項１８の回路。
【請求項２４】
命令ストリームを処理デバイスに供給する回路であって、
部分入力命令ストリームを受信しており、その部分入力命令ストリームは複数の第１部分入力命令を有しており、部分第１入力命令のそれぞれは第１の複数の入力命令値を有している入力部と、
第２部分入力命令を受信しており、その第２部分入力命令は第２の複数の入力命令値を有している命令値入力部と、
入力命令ストリームを受信するとともに、出力命令ストリームを生成する選択装置と、
処理デバイスに出力命令ストリームを供給する複数の出力部と、
命令マスクを選択装置に供給する制御入力部と、を備えており、
前記入力命令ストリームは、第２部分入力命令と複数の第１部分入力命令の一つを備えている複数の入力命令を備えており、
前記出力命令ストリームは、第１部分出力命令と第２部分出力命令を備えている複数の出力命令を備えており、
第１部分出力命令は、第１の複数の出力命令値と第２の複数の出力命令値を有する第２部分出力命令を備えており、
前記第２部分入力命令は、第１入力命令セット内のそれぞれの入力命令に共通する部分入力命令を備えており、
複数の第１部分入力命令のそれぞれは、第１入力命令セット内の第１及び第２入力命令の間で変化可能な部分入力命令を備えており、
選択装置は、複数の出力部の間で、入力マスクに基づいて、第１の複数の入力命令値と第２の複数の入力命令値を分配することによって、出力命令ストリームを生成していることを特徴とする回路。
【請求項２５】
命令マスクは、処理デバイスによって再構成されることを特徴とする請求項２４の回路。
【請求項２６】
命令マスクは、複数の第１部分入力命令が入力部によって受信されるよりも少ない頻度で受信される外部信号によって、再構成されることを特徴とする請求項２４の回路。
【請求項２７】
命令マスクは再構成段階において再構成されており、入力部は処理段階において部分入力命令ストリームを受信することを特徴とする請求項２４の回路。
【請求項２８】
命令マスクを第２命令マスクに取り替えることによって、処理デバイスに第２出力命令ストリームを供給するように再構成されることを特徴とする請求項２４の回路。
【請求項２９】
複数の出力命令のそれぞれは、複数の出力命令の一つを生成するために利用されている複数の第１部分入力命令よりも大きいことを特徴とする請求項２４の回路。
【請求項３０】
第１の複数の出力命令値と第２の複数の出力命令値は共に、第１及び第２の複数の出力命令値を生成するために利用されている第１の複数の入力命令値よりも大きい命令値を含むことを特徴とする請求項２４の回路。
【請求項３１】
選択装置は、第１の複数の入力命令値と第２の複数の入力命令値の間でビット毎に選択された出力命令値によって、第１の複数の入力命令値と第２の複数の入力値を複数の出力部の間に分配しており、
選択された出力命令値において、第１の複数の入力命令値又は第２の複数の入力命令値のいずれかからの１ビットは複数の出力部の一つに送られており、他の第１の複数の入力命令値、又は他の第２の複数の入力命令値からの対応するビットは複数の他の出力部に送られていることを特徴とする請求項２４の回路。
【請求項３２】
前記命令マスクは、前記第１の複数の入力命令値と同数のビットを有する値を備えており、前記ビット毎の選択は、前記第１の複数の入力値に等しく重要なビットに対応する前記命令マスクのビットを参照することによって行われていることを特徴とする請求項３１の回路。
【請求項３３】
複数の出力部の一つは、処理デバイスに命令入力を供給しており、
他の複数の出力部の一つは、処理デバイスの周辺回路に入力を供給することを特徴とする請求項３１の回路。
【請求項３４】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力を許可又は禁止する回路を備えていることを特徴とする請求項３３の回路。
【請求項３５】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力に演算定数を供給する回路を備えていることを特徴とする請求項３３の回路。
【請求項３６】
命令及びデータと同じデータパスの幅を有する処理デバイスを利用することを特徴とする請求項２４の回路。
【請求項３７】
処理デバイスが第２の複数の命令値に基づいて制御されるように、選択装置に第１の複数の命令値を供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項２４の回路。
【請求項３８】
処理デバイスが第１の複数の命令値に基づいて制御されるように、選択装置に命令マスクの供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項２４の回路。
【請求項３９】
処理デバイスが命令マスクに基づいて制御されるように、選択装置に第１の複数の命令値を供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項２４の回路。
【請求項４０】
選択装置は複数のマルチプレクサを備えていることを特徴とする請求項２４の回路。
【請求項４１】
選択装置は、複数のANDゲート及びORゲートの組合せを備えており、
ANDゲート及びORゲートの組合せのそれぞれは、第１の複数の入力命令値からのビットと命令マスクからの対応するビットを受信していることを特徴とする請求項２４の回路。
【請求項４２】
第１部分出力命令は複数の出力部の一つに供給されており、
第２部分出力命令は他の複数の出力部に供給されていることを特徴とする請求項２４の回路。
【請求項４３】
命令値はビットを備えていることを特徴とする請求項２４の回路。
【請求項４４】
命令マスクは第２部分入力命令を備えていることを特徴とする請求項２４の回路。
【請求項４５】
命令マスクはメモリに保存されていることを特徴とする請求項２４の回路。
【請求項４６】
回路は、レジスタの利用が命令機能から独立して指定されるために、処理デバイスとともに利用されていることを特徴とする請求項２４の回路。
【請求項４７】
第２の複数の入力命令値のそれぞれは、定常命令値、変化可能命令値、データ依存命令値及び構成可能命令値のいずれかを備えていることを特徴とする請求項２４の回路。
【請求項４８】
フィールドプログラマブルアレイであって、
複数の処理デバイスと、
構成可能ワイヤリングネットワークと、
一つ又は複数の処理デバイスに命令ストリームを供給する一つ又は複数の回路を備えており、
前記回路は、
部分入力命令ストリームを受信する入力部と、
第２部分入力命令を受信する命令値入力と、
入力命令ストリームを受信するとともに、出力命令ストリームを生成する選択装置と、
処理デバイスに出力命令ストリームを供給する複数の出力部と、
命令マスクを選択装置に供給する制御入力を備えており、
前記部分入力命令ストリームは複数の第１部分入力命令を備えており、それぞれの第１部分入力命令は第１の複数の入力命令値を備えており、
前記第２部分入力命令は第２の複数の入力命令値を備えており、
前記入力命令ストリームはそれぞれが第２部分入力命令と複数の第１部分入力命令の一つを備えている複数の入力命令を備えており、出力命令ストリームはそれぞれが第１部分出力命令と第２部分出力命令を備えている複数の出力命令を備えており、
第１部分出力命令は第１の複数の出力命令値と第２の複数の出力命令値を有する第２部分出力命令を備えており、
前記第２部分入力命令は、第１入力命令セット内のそれぞれの入力命令に共通する部分入力命令を備えており、
複数の第１部分入力命令のそれぞれは、第１入力命令セット内の第１及び第２入力命令の間で変化可能な部分入力命令を備えており、
選択装置は、複数の出力部の間で、入力マスクに基づいて、第１の複数の入力命令値と第２の複数の入力命令値を分配することによって、出力命令ストリームを生成していることを特徴とするフィールドプログラマブルアレイ。
【請求項４９】
処理デバイスはALUsを備えていることを特徴とする請求項４８のフィールドプログラマブルアレイ。
【請求項５０】
ALUsは、４ビットALUsを備えており、
そのALUsは４ビット幅の命令及びデータ入力を備えていること特徴とする請求項４９のフィールドプログラマブルアレイ。
【請求項５１】
命令値はビットを備えていることを特徴とする請求項４８のフィールドプログラマブルアレイ。
【請求項５２】
処理デバイスに命令ストリームを供給するための回路であって、
第１の命令値のセットを供給するために外部命令ストリームを受信する入力部と、
第２の命令値のセットを供給する命令値入力と、
命令マスクを含むように構成されたメモリと
処理デバイスに出力命令ストリームを供給する複数の出力部と、
メモリからの命令マスクを受信する制御信号パスと、
制御信号パスから命令マスクを受信するとともに、その命令マスクに基づいて複数の出力の間で第１の命令値のセットと第２の命令値のセットを分配する選択装置と、を備えており、
前記選択装置は、前記第１の命令値のセットと前記第２の命令値のセットの間で、ビット毎に値を選択するものであり、
選択された各値について、前記第１の命令値のセット及び前記第２の命令値のセットのいずれかからの１ビットは前記複数の出力部の１つに送られており、他の前記第１の命令値のセット、及び他の前記第２の命令値のセットからの対応する１ビットは前記複数の他の出力部に送られており、
前記命令セットは前記第１の命令値のセットと同数のビットを有する値を備えており、前記ビット毎の値の選択は、前記第１の命令値のセットの等しく重要なビットに対応する前記命令マスクのビットに関連して行われることを特徴とする回路。
【請求項５３】
出力命令ストリームは、全体として外部命令ストリームよりも大きなビットを備えていることを特徴とする請求項５２の回路。
【請求項５４】
複数の出力部の一つは、処理デバイスに命令入力を供給しており、他の複数の出力部は処理デバイスの周辺回路に供給していることを特徴とする請求項５２の回路。
【請求項５５】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力を許可又は禁止する回路を備えていることを特徴とする請求項５４の回路。
【請求項５６】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力に演算定数を供給するための回路を備えていることを特徴とする請求項５４の回路。
【請求項５７】
前記命令及びデータに同じデータパスの幅を有する処理デバイスを利用することを特徴とする請求項５２の回路。
【請求項５８】
回路は、レジスタの利用が命令機能から独立して指定されるように、処理デバイスとともに用いられることを特徴とする請求項５２の回路。
【請求項５９】
処理デバイスが第２の命令値のセットに基づいて制御されるように、選択装置に第１の命令値のセットを供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項５２の回路。
【請求項６０】
処理デバイスが第１の命令値のセットに基づいて制御されるように、選択装置に命令マスクの供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項５２の回路。
【請求項６１】
処理デバイスは、単一集積回路内の複数の処理デバイスの一つであることを特徴とする請求項５２の回路。
【請求項６２】
命令マスクは、第１の命令値のセットが命令ストリームに供給されるよりも少ない頻度でアップデートされることを特徴とする請求項５２の回路。
【請求項６３】
命令マスクは、処理デバイスによってアップデートされることを特徴とする請求項５２の回路。
【請求項６４】
第２の命令値のセットの要素のそれぞれは、定常命令値、変化可能命令値、データ依存命令値及び構成可能命令値のいずれかを備えていることを特徴とする請求項５２の回路。
【請求項６５】
命令マスクは第２の命令値のセットを備えていることを特徴とする請求項５２の回路。
【請求項６６】
処理デバイスに命令ストリームを供給する回路であって、
第１の命令値のセットを供給するために外部命令ストリームを受信する入力部と、
複数のマスク値を有する命令マスクを備えているメモリと、
処理デバイスに出力命令ストリームを供給する複数の出力部と、
メモリからの命令マスクを受信する制御信号パスと、
制御信号パスからの命令マスクを受信しており、命令マスクに基づいて複数の出力部の間で第１の命令値のセットと複数のマスク値を受信する選択装置と、を備えており、
前記選択装置は、前記第１の命令値のセットと複数のマスク値との間で選択されたビット毎の値を供給しており、ここで、選択された各値について、前記第１の命令値のセット及び前記複数のマスク値のいずれかからの１ビットは前記複数の出力部の１つに送られており、他の前記第１の命令値のセット、及び他の前記複数のマスク値からの対応する１ビットは前記複数の出力部の他に送られており、
前記命令マスクは、前記第１の命令値のセットと同数のビットを有する値を備えており、前記ビット毎の値の選択は、前記第１の命令値のセットの等しく重要なビットに対応する前記命令マスクのビットに関連して行われることを特徴とする回路。
【請求項６７】
出力命令ストリームは、全体として外部命令ストリームよりも大きなビットを備えていることを特徴とする請求項６６の回路。
【請求項６８】
複数の出力部の一つは、処理デバイスに命令入力を供給しており、他の出力部は処理デバイスの周辺回路に入力を供給することを特徴とする請求項６６の回路。
【請求項６９】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力を許可又は禁止する回路を備えていることを特徴とする請求項６８の回路。
【請求項７０】
前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力に演算定数を供給するための回路を備えていることを特徴とする請求項６８の回路。
【請求項７１】
前記命令及びデータと同じデータパスの幅を有する処理デバイスを利用することを特徴とする請求項６６の回路。
【請求項７２】
回路は、レジスタの利用が命令機能から独立して指定されるように、処理デバイスとともに用いられることを特徴とする請求項６６の回路。
【請求項７３】
処理デバイスが複数のマスク値に基づいて制御されるように、選択装置に第１の命令値のセットを供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項６６の回路。
【請求項７４】
処理デバイスが第１の命令値のセットに基づいて制御されるように、選択装置に命令マスクの供給することを禁止する禁止装置をさらに備えていることを特徴とする請求項６６の回路。
【請求項７５】
処理デバイスは、単一集積回路内の複数の処理デバイスの一つであることを特徴とする請求項６６の回路。
【請求項７６】
命令マスクは、第１の命令値のセットが命令ストリームに供給されるよりも少ない頻度でアップデートされることを特徴とする請求項６６の回路。
【請求項７７】
命令マスクは、処理デバイスによってアップデートされることを特徴とする請求項６６の回路。
【請求項７８】
複数のマスク値のそれぞれは、定常命令値、変化可能命令値、データ依存命令値及び構成可能命令値のいずれかを備えていることを特徴とする請求項６６の回路。
【請求項７９】
選択装置は、複数のANDゲート及びORゲートの組合せを備えており、
ANDゲート及びORゲートの組合せのそれぞれは、第１の複数の入力命令値からのビット及び命令マスクからのビットに対応するビットを受信することを特徴とする請求項６６の回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、処理デバイス（または処理装置）に対する命令ストリームの供給に関する。好ましい実施形態では、本発明は、処理デバイスに利用することができる命令ストリームを拡張し、それによって命令サイズを縮小することを可能にする方法に関する。
【０００２】
【従来の技術】
一般に、プログラマブル（プログラム可能な）デバイスは、命令のストリームによって制御される演算を行う。このようなストリームは、一般に、命令ストリームと呼ばれる。こういったプログラマブルデバイスは、複数のマイクロプロセッサを含むが、それに限定されるものではない。ストリーム内の各命令は、典型的には、予め決められた長さのビットのパターンであり、これは命令語と呼ばれる。ビットの各パターンは、符号化されたものであり、それは、プログラマブルデバイスに対する特定の命令を表している。大抵のプログラマブルデバイスでは、１サイクル規準で動作を制御する。通常はそうであるが、ある種のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）のように、１サイクル規準で制御されることには意味が無いプログラマブルデバイスがある。後述する例では１サイクル単位の制御を示すが、本発明のいくつかの実施形態では、フィールドプログラマブルデバイスが特別に関係がある。
【０００３】
命令の符号化は、いくつかの要素を均等に満たしたものである。第1に、デバイスのプログラマが豊富な機能を利用することができるように、多くの異なる演算を符号化する必要がある。第2に、命令の復号化が容易である必要がある。すなわち、比較的小さい回路が、外部命令を必要な内部制御信号に変換する必要がある。これら２つの要因により、各命令語のビット数が多くなる。しかしながら、第3の要因は、一般に、各命令語のビットの数を小さくする必要があるということである。そうでなければ、必要とされる広いデータチャネルに適応するために、多くの時間と回路空間を消費することになる。
【０００４】
満足に命令を処理するにあたりこれらの引張り合いが特に明らかである領域は、RISC（Reduced Instruction Set Computer：縮小命令セットコンピュータ）プロセッサの設計にある。1980年代半ばまで普及していたCISC（Complex Instruction Set Computer：複雑命令セットコンピュータ）の命令セットとは異なり、RISCは、簡略化した命令セットを処理する限定された複数の命令セットを使用する。一般に、CISCデザインでは、各々の有効な結果に対して命令を指定する必要があると考えられている。速度を上昇させ（個々の処理ユニットは、限定された命令を処理しているために簡単にすることができるため）、コストを削減する（RISCデザインは、一般に、同等のCISCデザインより必要なトランジスタの数が少ないため）ために、一般のマイクロプロセッサの設計は、RISCの設計に移行してきている。しかしながら、RISCにはCISCにある命令選択の豊富さが欠けているため、RISCプロセッサのために書かれたコードは、CISCプロセッサのために書かれたコードよりかなり長くなる傾向がある。この点に関して、RISCプロセッサはCISCプロセッサに対して欠点を有している。
【０００５】
このような欠点は、命令サイズが小さい豊富な命令セットを与えることで、事前に十分に除去することができる。命令サイズを縮小することは、それによって命令経路のためのメモリからプロセッサへの全体の帯域幅が縮小され、プログラムを格納するためのメモリ量も縮小することができる（特に、組み込みアプリケーションにおいて重要である）ため、有利である。命令サイズを縮小する方法の一つとして、例えば、World Wide Webサイトhttp://www.devcom.com/riscm/Pro+Peripherals/ArchExt/Thumb/Flyer/、及び米国特許第5568646号に示されているような拡張RISCマシンリミテッド（Advanced RISC Machines Limited：ARM）の「Thumb」アーキテクチャがある。ARMプロセッサは、３２ビットのプロセッサであり、32ビットの命令セットを備えている。Thumb命令セットは、この３２ビット命令セットにおいて最も使用される命令の一揃いからなり、それは16ビット形式に圧縮されている。これら16ビット命令は、プロセッサにおいて32ビットコードに復元される。このソリューション（解決策）によって、32ビットのプロセッサに対して16ビットの命令経路を使用することが可能になるが、命令パイプラインが余計に複雑になる。さらに、このソリューションは、命令セットの選択された命令グループへの縮小に依存する。
【０００６】
【発明が解決しようとする課題】
従って、処理デバイスに対する命令の供給を最適化する他の方法を見つける必要があり、それによって、命令サイズを縮小すると同時に、豊富な機能性と復号化の容易性を達成することができる。
【０００７】
【課題を解決するための手段】
このため、本発明は、処理デバイスに命令ストリームを供給する回路を提供するものであって、第1の命令値のセットを供給するために外部命令ストリームを受信する入力部と、第2の命令値のセットを含むように構成されたメモリと、処理デバイスに出力命令ストリームを供給するための複数の出力部と、制御入力部と、上記制御入力部により、複数の出力部間に第1の命令値のセットと第2の命令値のセットを振り分けるように構成された選択手段とを具備する。
【０００８】
ここで、「処理デバイス」という用語は、命令を受け入れて情報処理機能を実行することができる任意の処理要素に対して基本的に使用され、明らかに、CPUのような要素を含むが、フィールドプログラマブルアレイ内の処理要素をも含む。そのような構造についての本発明の適用例を、以下に示す。
【０００９】
第2の命令のセットを使用することによって、外部命令ストリームにおいて与えられたワード長で利用可能な命令セットの機能を向上させることが可能となる。有利なことには、命令語の「伸長（拡張）」が可能となり、そのため、出力命令ストリームが全体として外部命令ストリームより多くのビットを含むようになる。代替的には、ビットを命令ストリームから転用して、処理デバイスの周辺回路を駆動することができ、それによって、それ自身で、命令セットを効果的に伸長することができる。この周辺回路は、複数の機能の範囲で使用することができ、その一例として、処理デバイスへのデータ入力を許可又は禁止する機能がある。
【００１０】
好ましい構成では、選択手段は、第1の命令値のセットと第2の命令値のセットとの間でビット単位の値を選択し、値の各選択について、第1の命令値のセット及び第2の命令値のセットからの1ビットを、複数の出力の１つに割り当て、他方の第1の命令値のセットと第2の命令値のセットからの対応するビットを、複数の出力の他の１つに割り当てる。この構成において、第2の命令値のセットは、変数で与えることができるが、有利な実施形態では、一つ又は複数の定数（例えば、外部命令ストリームの開始前の、おそらくは、構成可能な又は再構成可能なデバイスの場合におけるデバイス構成時に定義された値）として与えられる。
【００１１】
より大きい回路内での利用率を向上させ得る更に有益な特徴は、外部命令ストリームからの命令又は第2の命令値のセットからの命令の供給のいずれかを禁止する手段を使用することである。これらの特徴により、デバイスの機能のいずれかを「無視」することにより、プログラミングの困難性を低減することができる。
【００１２】
このアプローチは、命令とデータの両方に対して同じデータ経路幅を有するプロセッサデバイスであって、レジスタの使用を命令機能から独立して指定する（RISCプロセッサの場合、一般的であるが）ようなプロセッサデバイスを使用する場合に効果的であるが、また、同様な問題が存在する他の形態のプロセッサ設計においても明らかな利点がある。本発明の適用例として、RISC設計に関してのみでなく、複数のプロセッサ要素を備えたフィールドプログラマブルデバイスの設計に関しても述べる。
【００１３】
本発明の適用例に対するフィールドプログラマブルデバイスの特に適した形態は、複数の処理デバイスが構成可能な配線ネットワークによって互いに接続されており、処理デバイスが、複数のＡＬＵ、特に比較的小さいＡＬＵ（たとえば4ビットＡＬＵ）である（又はそれらを含むものである）ことにある。
【００１４】
本発明の特有の実施形態について、以下に、例を用いて添付図面を参照して説明する。
【００１５】
【発明の実施の形態】
まず、本発明を用いるプログラマブルシステムの主な要素を、従来技術のプログラマブルシステムと対比させる。そのような従来技術のプログラマブルシステムの要素を、図１に示す。命令は、命令ストリーム１により、制御中のデバイスに対して外部のメモリ（図示せず）から供給され、命令ストリーム内の別々の命令の要素（例えば、命令語のビット）で表される命令値のセットは、命令復号器２によって復号され、制御中のデバイス３に意味のある復号済み命令６として出力される。制御中のデバイス３は、例えば、RISCプロセッサとしてもよい。従って、復号済み命令６は、制御中のデバイス３へ供給され、また、デバイス３は、受信データ４を受信して、それが使用する復号済み命令６及び受信データ４からデータ出力５を供給する。
【００１６】
図２は、本発明の一実施形態を用いるプログラマブルシステムの構成要素を示す。このシステムの大部分の外観は図１に示すものと同じである（それらの図において同じ参照番号を用いている）が、命令復号器２への命令の供給が異なっている。命令は、従来と同様に命令ストリーム１で供給されるが、選択手段１１を介して供給される命令の出所が追加されている。ここで、選択手段１１は、命令サイズを効果的に伸長するように構成することができるため、命令伸長要素と呼ぶ。命令伸長要素１１への制御入力は、後述するように、命令マスク１２によって供給される。命令伸長要素１１は、Ｊ及びＫという２つの出力を有しており、これらは命令復号器２に対して２つの命令ストリーム１３，１４を供給する。命令伸長要素１１が３つ以上の出力、つまりは３つ以上の命令ストリームを利用する他の実施形態は、本発明の他の実施形態の適用例として容易に提供することができる。
【００１７】
命令マスク１２は、第1及び第2の命令値のセットをＪ出力とＫ出力との間でどのように振り分けるかを決定する。この機能を実行する基本的な回路（第2の命令値のセットの可能な出所をも示す）を、図３に示す。図３に示す回路は、命令入力１の1ビットを操作するために必要な回路である。基本的な回路に必須なのは1組のマルチプレクサ４３，４４である。各マルチプレクサ４３，４４に対する制御入力は、命令入力１の関連したビットに適した命令マスク１２の値によって与えられる。外部入力は、第1のマルチプレクサ４３の「１」入力と、第2のマルチプレクサ４４の「０」入力とに供給される。第1のマルチプレクサ４３の出力は、命令伸長要素１１のＫ出力であり、第2のマルチプレクサ４４の出力は、命令伸長要素１１のＪ出力である。従って、この実施形態では、外部命令入力の各ビットの経路は、命令伸長要素１１のＪ又はＫ出力のいずれかに定められている。
【００１８】
各マルチプレクサへの他の入力によって、Ｊ出力とＫ出力のうち、外部命令ストリーム１からの関連したビットによって出力値が与えられないのがどちらであるかの情報が与えられる。すなわち、命令マスク値が１である場合、第2のマルチプレクサ４４への「１」入力によって、Ｊ出力に出力値が与えられ、命令マスク値が０である場合、第1のマルチプレクサ４３への「０」入力によって、Ｋ出力に出力値が与えられる。ここでは、これら追加のマルチプレクサ入力４１，４２は、双方とも定数値で供給される（しかし、より複雑な実施形態では、これらは変数とするか、もしくはデータ依存とすることができる）。第1のマルチプレクサへの「０」入力４１は、第1の定数Ｃ1によって供給され、第2のマルチプレクサへの「１」入力４２は、第2の定数Ｃ2によって供給される。
【００１９】
図３に示す構成では、ｎビットの外部入力１とｎビットの命令マスク１２とが供給されているが、その結果は２ｎビットの命令値となり、そのうちのｎビットがＫ出力によって供給され、ｎビットがＪ出力によって供給される。命令マスク１２は、効果的に、外部命令ストリーム内のビットをビット単位でＪ又はＫのいずれかに送るように機能する。
【００２０】
明らかに、利用可能なビット数を自由に増加させることはできない。所定のマスク値について、Ｊ及びＫ出力においてあり得る値のサブセットだけを、外部の値を変化させることによって簡単に供給することができる。しかしながら、実際的な多くの場合において、命令の符号化をしかるべく配置することが容易にできることが分かっている。具体的な例を以下に示す。
【００２１】
この基本的なメカニズムを拡張したものを、図4及び図５に示す。図４及び図５の回路の要素は、概して図３の要素と同じであるが、各場合において、イネーブル入力５１及び追加の論理ゲート５２，５３が設けられている。図4及び図５に示す回路によって、単一ビットのイネーブル信号５１により外部命令入力１と命令マスク１２をそれぞれ禁止するオプションを加えることができる。回路を主入力のいずれか一方により完全に制御することができるメカニズムを供給する動作を、かなり簡略化することができるため、このような拡張は望ましいものである。
【００２２】
図２に示す基本的なメカニズムには、２つの主な代替バージョンがある。これらは、命令マスク１２の設定方法によって異なる。これは図６に示すように構成することができ、ここでは、マスク値は、外部命令ストリーム１に命令が与えられるほど頻繁ではないが、外部的に設定される。この状態の一例は、再構成可能な回路内にあり、ここでは命令マスク設定命令２１を、デバイスの動作中に与えられる構成又は再構成情報の一部として、供給することができる。例２は、図２のメカニズムのこのバージョンを示しており、以下でさらに説明する。他の代替バージョンは、図７に示すものであり、ここでは、マスク設定信号２２が制御中のデバイス３自体によって供給される。この制御形式は、通常のプロセッサ環境におけるより複雑なプロセッサ、すなわち、RISC CPUのような、例１に更に説明する構成に適している。
【００２３】
ここで、本発明の２つの詳細な適用例をそれぞれのコンテキストに対して以下に示す。
【００２４】
例１：RISCアーキテクチャ
RISCプロセッサ設計の重要な特徴は、比較的単純な命令の符号化を使用することである。典型的には、すべての命令は同じサイズであり、とのビットを特定の目的（例えば、レジスタ指定子、即値定数、演算指定子等）に使用することができるかに関する非常に限定されたフォーマットに従う。この方式の利点は、命令を復号するのに必要なロジックを簡単にすることができ、それによって小さくかつ高速なプロセッサを構成し得ることである。一方、対応する不利な点は、多くの命令が厳密に必要な大きさよりも大きくなることであり、例えば、関連した2オペランド命令を命令セットに適合させることができないため、2オペランド命令を、3オペランド命令として１つの入力を複製して符号化する必要がある。また、典型的なサイズではなく、必要とされる可能な限り大きなサイズに応じて、即値定数又は分岐オフセット値のためのスペースを割り当てる必要がある。
【００２５】
個々の命令が必要以上に大きい場合、プログラム全体が必要以上に大きくなる。上述したように、この結果、メモリからプロセッサへのより高い帯域幅が必要となり、メモリサイズが全体のシステムコストに影響を与える場合ある。
【００２６】
本発明の実施形態による命令マスキングは、命令のサイズを縮小するのに用いることができ、それによって、命令セットを豊富に持つという利点を保持しながら、これらの不利な点が発生しなくなる。このアプローチの適用例を示すために、これをDLXアーキテクチャのコンテキストにおいて述べる。DLXは、「ComputerArchitecture, A Quantitative Approach」、J.L. Hennessy & D.A.Patterson,p160〜166及びAppendix E 1990, Morgan Kaufmann Publishers, Inc. San Mateo, CA, USA ISBN 1-55860-069-8に述べられている簡略化した汎用RISCプロセッサである。DLXプロセッサの命令フォーマットを以下に示す。
【００２７】
【表１】
0003762841.tif 000002
【００２８】
Ｒｓ１及びＲｓ２は送信元のレジスタ指定子であり、Ｒｄは宛先のレジスタ指定子である。Ｉタイプ命令は、オペランドとしてのレジスタを１つ持っており、他のオペランドは一般に即値定数である。Ｒタイプ命令は２つのレジスタオペランドを持っている。命令の基本タイプは３つともすべて、３２ビット長であり、6ビットの重要な演算コードは最上位ビットにある。レジスタ指定子は、一般に命令内の同じ位置にあり、常に５ビット長である。
【００２９】
ここで、このプロセッサに対する本発明の一実施形態の適用例を示す。本発明の一実施形態を適用した結果、この場合には、命令毎のビットの数が２１に減るが、マスキングメカニズムを使用してこれを４２に伸長する。使用する回路は、図５に示すものであり、Ｃ2＝０、Ｃ1＝０である。制御信号の出所については後述する。伸長された４２ビット内の命令ビットの可能なレイアウトを、以下の表２の３つの命令フォーマットのそれぞれについて示す。
【００３０】
【表２】
0003762841.tif 000003
【００３１】
表２の具体的な特徴及び図５に示す回路の適用例について、さらに下記する。内部のマスク値１２は、Ｒ０プロセッサレジスタから取り出される。このレジスタは、DLXにおいて、この特別な制御目的に適した選択を可能にするため、（他の多くのRISCプロセッサにおける同等のレジスタと同様に）ある「魔法のような（magic）」特性を有している。このレジスタは特別な特性を有しているので、本目的に適した特性をそれに与えるためにわずかな変更を加えることは、簡単なことである。これらの適した特性は以下の通りである。
【００３２】
Ｉタイプ命令におけるＲ０からの読出しは、すべて０に戻る。これによって、式Ｒｘ＝Ｒ０＋定数の演算がＲｘ＝０＋定数となるため、定数のロードが可能になる。Ｒタイプ命令におけるＲ０への書込みは、まったく起こらない。全ての状態フラグの設定を含む残りの命令は、普通に発生し、レジスタファイルへの最後の再書込み（write back）のみが阻止される。これによって、比較演算を安価に実施することができる（Ａ＞Ｂは、Ｒ０＝Ｂ−Ａとして、「負の」フラグをチェックすることによって実施することができる）。この結果、Ｒ０はＩタイプ命令によってのみ書込むことができ、Ｒタイプ命令によってのみ読み出すことができる。
【００３３】
Ｉタイプ命令において、Ｒｓ１ａとＲｓ１ｂとは、互いにＯＲをとることにより、Ｒｓ１レジスタ指定子を形成する。これにより、より柔軟に、命令定数とレジスタ指定子との間にビットを割り当てることができる。例えば、5ビットまでの長さの定数は、Ｒｓ１ａをレジスタ指定子として使用し、Ｋ4...Ｋ0を定数として使用することができ、一方、より大きい定数は、Ｒｓ１ｂをレジスタ指定子として使用し、Ｋ9...Ｋ5を定数として使用することができる。
【００３４】
ここで、演算コード拡張（opcode extension）フィールドは、１１ビットではなく２１ビットからなる。これによって、伸長済みのセットにおいてビット位置をより柔軟に割り当てることができ、そのため、レジスタ指定子と演算コード拡張の間でビットを交換する必要が特に制限されない。
【００３５】
分岐オフセットフィールドは、４つの領域に分割され、Ｋ20...Ｋ16，Ｋ9...Ｋ0，Ｊ20...Ｊ16，Ｊ9...Ｊ0という３０ビット量に再構成される。短い分岐は、Ｊビットのみで表すことができる。より長い分岐は、Ｋビットが必要であるが、非常に長い分岐のすべてを単純に表すことができるとは限らない。
【００３６】
命令が２１ビット長であるため、３つの命令を１ビット残して６４ビットのグループに適合させることができる。この余分のビットを制御信号５１として使用することにより、マスクをオンとすべきかオフとすべきかを決定することは、適切である。このため、３つの命令群は、同じ制御値を共用しなければならないが、実際にはこれは重要な制限ではなく、命令の順序を再度付け直すことによって、プログラムの正確性を保ちつつ、このような種類の制約を満たすようにする方法が知られている。３つの命令を６４ビットに適合させることにより、分岐先のアラインメントを制限することにもなる。命令をフェッチするのに使用するワードアドレスは、６４ビットメモリアクセスにおいてどちらの３２ビット命令を使用すべきかを指定することができるが、提案された方式において３つの命令のいずれを使用すべきかを指定するための追加のメモリアドレスビットは無い。簡単な解決法は、３つの命令のうちの最初の命令にのみ分岐することであるが、アドレスビットを操作するためのより複雑な他の方法もまた可能である。
【００３７】
レジスタの初期化について、演算コード００００００（２進数）を有する命令は、入力の一方を、他方が０である時に伝えるＩタイプの命令（例えばＡｄｄ、ＸＯＲ、ＯＲ等）である。これは、Ｒ０の値を、以下の表３に示す命令シーケンスを使用して容易に設定することができるということを意味する。
【００３８】
【表３】
0003762841.tif 000004
【００３９】
命令モードは、２つのキャラクタで表す。１つめは、命令がＩ、Ｒ又はＪタイプのいずれであるかを示し、２つめは、制御信号の状態を示す（Ｍ：マスクがアクティブである、Ｎ：マスクがアクティブでない、Ｘ：関係無し）。これらの命令の重要なものは、一般にタイプＩＮであるが、実際には、マスクは多くの場合不都合無くアクティブにすることができる。
【００４０】
上記技術の変形例を使用して、いずれかのレジスタに１６ビット値をロードすることができる。Ｒ０が００００ＦＦＦＦ（１６進数）である場合、命令の２１ビットは（５ビットのレジスタ番号）（１６ビットの定数値）のように解釈される。この方式で、３１の汎用レジスタすべてを、レジスタ毎に１命令と４つの追加の命令（開始時に１回と終了時に１回、Ｒ０を初期化する２つの命令が２組）によって設定することができる。３５×２／３の３２ビットワード、すなわち２３１／３ワードの総計は、圧縮されていない場合に必要な３１ワードと比較して有利であり、２５％の節約となる。
【００４１】
プログラム例：単一ループ以下のプログラム（以下の全てのプログラム例と同様、Ｃで書かれている）は、単一ループを表している。
【００４２】
int total = 0；
for ( int i = 0; i ＜ max; i++) ｛
A〔i〕= B〔i〕+ C〔i〕;
total + = A〔i〕;
｝
このループについての命令シーケンスを、以下の表４に示す。
【００４３】
【表４】
0003762841.tif 000005
【００４４】
この命令方式についてのレジスタ配置を、以下の表５に示す。
【００４５】
【表５】
0003762841.tif 000006
【００４６】
命令は、表４において、６４ビット境界に適合する３つの命令群の中に示されている。ループ本体は、１１の命令が必要であり、それらは、従来の形式の１１ワードに比較して、８×３２ビットワードに収まる。従って、分岐先の正確なアラインメントを保証するための余分なＮＯＰ命令が必要であるにも関わらず、全体としてサイズを２７％節約することができる。
【００４７】
例２：ＣＨＥＳＳアーキテクチャ
ＣＨＥＳＳは、データ経路集中型（datapath-intensive）アプリケーションのためのフィールドプログラマブルアレイ構造である。ＣＨＥＳＳアーキテクチャは、以下の出願に記載されており、それらはすべて本出願に参照によって組み込まれている。この出願は、米国を指定した１９９８年１月２８日に提出された国際特許出願第ＧＢ９８／００２４８号と、１９９７年１２月１７日に提出された欧州特許出願第９７３１０２２０．５号及びその対応米国出願である。アーキテクチャ全体のレイアウトは、本例では重要ではないが、本発明の目的のために、ＣＨＥＳＳは、各ＡＬＵを各入出力を介して他のＡＬＵに接続することができるように経路スイッチを有する４ビットのＡＬＵのアレイからなっていると考えることができる。
【００４８】
図８は、ＣＨＥＳＳの４ビットＡＬＵの入力及び出力を示す。各ＡＬＵは、Ａ，Ｂ及びＩ入力への３つの４ビット入力経路３２，３３，３４と、ＡＬＵの出力Ｆを運ぶ１つの４ビット出力経路３７とを有している。これら入出力経路は、経路スイッチに接続されている。また、桁上げ（carry）信号のための１ビットの入力経路３５と１ビットの出力経路３６が設けられており、それ自体経路スイッチのネットワークを有している。これらは、それぞれＡＬＵの入力Ｃinと出力Ｃoutとに接続されている。
【００４９】
Ａ及びＢはデータ入力であり、ＦはＡ及びＢ入力から導出されるデータ出力である。ＡＬＵは、表６において下記するようにＡ及びＢの算術及び論理機能を生成することができる。また、桁上げ入出力の効果も示されている。一般に、これらを、桁上げ連鎖（carry chain）を生成するために使用して、ＡＬＵをより広いワードの並列計算に使用することができるが、これらは、比較機能にも使用することができる。
【００５０】
【表６】
0003762841.tif 000007
【００５１】
Ｉ入力は、命令入力である。その機能は、ＡＬＵの可能な機能のうちいずれを実際に実行するかを選択することである。ＣＨＥＳＳにおいて、Ｉ入力は、Ａ，Ｂ入力及びＦ出力と同じ幅のものが選択される。すなわち、４ビットである。このことは、以下の理由から大きな利点である。すなわち、これによって、ひとつのＡＬＵのＩ入力を他のＡＬＵのＦ出力で駆動することができ（上述した欧州特許出願第９７３１０２２０．５号に記載されているように、命令を動的に与えることができ）、経路ネットワークのみが、Ａ、Ｂ又はＩ入力に対する経路であるかどうかに関係なく、１つのタイプのデータを桁上げすればよいからである。これは、命令の数に厳しい制約を与える。すなわち、４ビットのＩ入力は、最大でも１６の命令であることを意味している。しかしながら、表６は２１より多くの入力を示している。４ビットの命令入力で十分な命令セットを供給するという問題は、本発明の一実施形態による命令マスク方式を用いることによって、解決することができる。
【００５２】
外部Ｉ入力は、図４に示す回路を使用することにより、８ビット（４×Ｊビット及び４×Ｋビット）に伸長することができる。マスク値１２及び制御信号５１は、両方とも、フィールドプログラマブルアレイの初期構成の一部として内部レジスタに格納される。ここで、定数は、Ｃ1＝０及びＣ2＝１のように選択される。このように選択した結果、制御信号５１が外部命令入力Ｉを禁止すると、Ｊは格納されたマスク値に従うということになる。これにより、Ｉ入力に定数値を必要とすることなく、従ってＩに定数値を供給する経路ネットワークの必要を無くして、ＡＬＵの機能を定数演算に対して設定することができる。
【００５３】
構成例１：入力イネーブルとして使用するＫビット
この例では、４ビットＡＬＵに対する主命令を決定するためにＪビットを使用するが、周辺回路を制御するため、特にＡおよびＢ入力を許可するためにＫビットを使用する。これによって、構成例１に含まれる適用例に示すように、命令セットを効果的に伸長することができる。
【００５４】
必要な構成を得るために、Ｊ及びＫビットに以下の機能を割り当てる。
【００５５】
４つのＪビットを、表７（以下を参照）に示す１６の機能のうち１つを選択するために使用する。Ｋ0及びＫ2を、Ａ入力に対する入力イネーブルを与えるために使用する。ここで、Ｋ0及びＫ2が両方ともローである場合、入力はオンとなり、そうでない場合はオフとなる（表７においてＡ＝００００に相当する）。Ｋ1及びＫ3をＢ入力に対する入力イネーブルを与えるために使用する。ここで、Ｋ1及びＫ3が両方ともローである場合、入力はオンとなり、そうでない場合はオフとなる。
【００５６】
【表７】
0003762841.tif 000008
【００５７】
この命令セットの選択は、命令セットを有効に追加した結果、命令マスク値の特定の値が選択されるように慎重になされている。例えば、マスク値が００１１である場合、Ｊ1及びＪ0は両方とも１でなければならないが、ＡおよびＢ入力は両方ともオフにすることができる。有効な命令セット（外部命令ストリームから認識される命令セット）を表８に示す。
【００５８】
【表８】
0003762841.tif 000009
【００５９】
「入力が両方とも禁止」である列に示す値は、すべて算術演算において有効な定数である。ある場合に結果として生じる定数値１１１１は、２の補数計算において−１を示すが、これはしばしば必要な値である。
【００６０】
代わりに、マスク値が１１００である場合、Ａ及びＢ入力の両方とも再びオフとすることができるが、この場合、Ｊ３及びＪ２は両方とも１であり、命令セットは表９に示すものとなる。
【００６１】
【表９】
0003762841.tif 000010
【００６２】
０１０１のマスク値を使用する場合、更に有効な命令セットを得ることができる。このマスク値を用いると、Ａをオフにする２つの方法がある。その有効な命令セットを表１０に示す。
【００６３】
【表１０】
0003762841.tif 000011
【００６４】
従って、Ｋビットを使用してＡ，Ｂ入力を許可することにより有効な命令セットを変更するための命令マスクを使用するので、ＡＬＵ３１によって（Ｉ入力で受信されるものに関して）認識されるのと同じ命令セットについて、さまざまな種類の異なる命令セットを、外部命令ストリーム１で認識することができるということがわかる。基本的な命令セットを慎重に選択することにより（Ｊビットの組合わせのうちのどれをどの命令に割り当てるかに関して）、これらの異なる有効な命令セットを工夫して、特定の機能として使用するために特に有効なものとすることができる。このため、フィールドプログラマブルアレイの構成において、所定のプロセッサ要素についてのマスク値を、そのプロセッサ要素に対して利用可能な命令が、実行する必要のある（１つ又は複数の）演算に特に適したセットとなるように選択することができる。
【００６５】
このことは、その全てが構成例１、及び表７から表１０に示す命令セットに関連する一連の適用例によって最も良く示される。なお、表７における命令の選択は、例示的なものであることを強調しておく。すなわち、当業者は、この明細書の開示内容から、貴重で有効な命令セットを生成する他の選択を考案する方法を十分に認識するであろう。
【００６６】
適用例としての回路を、図９に示す。この回路は、２つのＡＬＵを有している。１つはＡＬＵ１０４であり、これは００００のマスク値を有し、従って、表７に示す有効な命令セットを有している。もう１つはＡＬＵ１０３であり、これは００１１のマスク値を有し、従って表８に示す有効な命令セットを有している。この回路は、４つの入力によって制御される。これらは、ＡＬＵ１０３及びＡＬＵ１０４それぞれへの外部命令入力１０８，１０９と、回路と共に使用するメモリ１０２（ＣＨＥＳＳアーキテクチャにおいて、このメモリは、欧州特許出願第９７３１０２２０．５号に記載されているようにユーザプレーンメモリ（user plane memory）に変換されるスイッチメモリによって構成することができる）へのアドレス入力１１０及び読出し／書込み入力１１１である。また、３つのレジスタ、すなわちレジスタ１（１０５）、レジスタ２（１０６）、及びＣoutレジスタ１０７が設けられており、これらもまた、ＣＨＥＳＳアーキテクチャの構成要素から容易に供給することができる。以下の例において、明確には示していないが、メモリ１０２に対する書込みはすべてレジスタ１（１０５）に書込まれるようになっている。
【００６７】
応用例１：ビット計数
以下のビット計数プログラム（これも後のすべてのプログラムと同様にＣで書かれている）
while ( z & = ( z-1 ))｛
count++;
｛
は、以下の表１１に示す入力シーケンスに従って実現することができる。表１１は、命令値、及び結果として生じるレジスタ値を示している。
【００６８】
【表１１】
0003762841.tif 000012
【００６９】
変数Ｑは、第１のＡＬＵが実行する比較演算の結果を表す。この値は、当然０又は１である。従って、計数値がインクリメントされるかインクリメントされないかは、比較の結果による。
【００７０】
応用例２：パターン照合
以下のコードは、いくつかのパターンに対して入力値を比較し、合致した数を記録する演算を示す。
【００７１】
for ( i = 0; i ＜ max, i++)｛
if ( z & pattern〔i〕) = = target〔i〕｛
count++;
｝
｝
このコードは、図９に示す回路により、以下の表１２に示す入力シーケンスによって達成することができる。
【００７２】
【表１２】
0003762841.tif 000013
【００７３】
以前と同様に、変数Ｑは比較演算の結果を表すために使用される。また、計数の変数値は、各比較の後でＱだけ再度インクリメントされ、合致した数を表す。
【００７４】
構成例２：Ｋビットが即値定数を与える
本構成例は、ＫビットのいくつかがＡ及びＢ入力についての入力許可機能を与えるという点で、構成例１と類似している。しかしながら、この場合は、すべてのＫビットをその目的に使用するのではなく、代わりに他のビットを、即値定数を供給するために使用する。利用可能な命令タイプの範囲は、第１の構成例より制限されているが、即値定数を供給するメカニズムはいくつかの適用例についてのプログラミングを直接的にかなり簡略化する。
【００７５】
この場合、Ｊ及びＫビットに以下のように機能を割り当てる。
【００７６】
４つのＪビットは、表７に設定されているように１６の命令の１つを選択する。Ｋ0はＡ入力について入力許可を与えるために使用される。Ｋ0がローである場合、入力はオンとなり、他の場合には、Ａ入力は定数値Ｋ3Ｋ200となる。Ｋ1は、Ｂ入力について入力許可を与えるために使用する。Ｋ1がローである場合、入力はオンとなり、他の場合はＢ入力はオフとなる（値００００に設定されるのと同じである）。
【００７７】
命令マスクが１１１１に設定された場合、Ｊビットはすべて１に設定され、ＡＬＵは常に命令Ａ＋Ｂ＋Ｃinを実行しなければならない。追加すべき値の選択は、以下の表１３に示すように、Ｋビットによって決定される。
【００７８】
【表１３】
0003762841.tif 000014
【００７９】
言い換えると、利用可能な命令セットは、以下の通りである。
【００８０】
A+B、
A、
B+定数０，４，８，１２のいずれか、
定数０，４，８，１２のいずれか（もしくは、Ｃinによって与えられる可能性を含み、０，１，４，５，８，９，１２，１３からのいずれかの定数）。
【００８１】
応用例３：ヒストグラム化
以下のコードにより、入力をその上位の２ビットの可能な値と突き合わせてチェックし、チェックの結果に応じてカウンタをインクリメントすることによって、ヒストグラムを生成することができる。
【００８２】
if ((z & 12) == 12) count 3 ++;
if ((z & 12) == 8) count 2 ++;
if ((z & 12) == 4) count 1 ++;
if ((z & 12) == 0) count 0 ++;
図９に示す回路は、Ｋビットが構成例２で示した機能を有するように構成されており、上記コードを実行するために使用することができる。図９に示す場合ともう１つ違いがある。すなわち、ＡＬＵ１０３は、００１１でなく１１１１のマスク値を有するように構成されている。従って、このＡＬＵは、表１３に示す命令セットを有している。このコードを実行するのに必要な入力シーケンスを、以下の表１４に示す。
【００８３】
【表１４】
0003762841.tif 000015
【００８４】
このように、各ビット単位の比較の後、Ｃoutは内部変数Ｑに設定される。この内部変数Ｑは、テスト中の入力の最初の２ビットが比較値と等しい場合は値０を有し、等しくない場合は値１を有する。Ｃoutのこれらの値は、次の演算で反転する。その結果、テスト中の入力の最初の２ビットと一致する比較値に対する適切なカウンタがインクリメントされる。
【００８５】
構成例３：最下位ビットでの加算／減算操作
本発明による命令マスク回路の異なる表現を図１０に示す。このゲートの組合わせは、図４に示すものと論理的には同様である。この場合、外部命令ストリームからのビットは入力３０１で受信され、構成ＲＡＭ３０３の単一ビットが外部命令入力を許可するために使用される。命令マスク値は、４ビット制御レジスタ３１３によって与えられ、マスク回路自体はＯＲゲート３１１及びＡＮＤゲート３１２から構成される。ＯＲゲート３１１の出力３０６は、ＡＬＵのＩ入力に対する関連した命令ビット（この明細書を通して一貫してＪiとして示す）であり、ＡＮＤゲート３１２の出力３０７は、以前と同様にＡＬＵの他の部分に供給するために利用可能なＫiビットとして供給される。入力イネーブルビット３０３がローである場合、出力Ｋiはすべてローであり、ビットスライスのための命令ビットＪiは４ビット制御レジスタ３１３に従う。入力イネーブルビット３０３がハイであり、制御レジスタ３１３のビットがローである場合、外部入力Ｉiは命令ビットＪiに対して関連する出力に経路が定められ、関連したＫiはローに設定される。入力イネーブルビット３０３がハイであり制御レジスタ３１３のビットがハイである場合、外部入力Ｉiは関連したＫiに経路が定められ、命令ビットＪiに対して関連した出力はハイに設定される。
【００８６】
命令マスクにより、他の回路をＡＬＵに同期して制御することができる。実際の場合は、ＡＬＵの加算と減算のスワッピングである。これが実行されると、桁上げ連鎖の最下位ビットに与えられる定数を、減算では１、加算では０に設定する必要がしばしばある。マスク回路を提供することにより、図１１に示すように、周辺回路を制御するために入力を追加する必要がなく、これを実現することができる。
【００８７】
この例では、ＡＬＵに関して、表７に示す命令セットと異なる命令セットについて考える。命令セットの完全な詳細はこの例では重要ではない。ＡＤＤに必要なＪビットが００１１であり、ＳＵＢに必要なＪビットが１１１１であるということを示すことで十分である。制御レジスタ３１３が保持する命令マスク値が００１１に設定された場合、このことは、外部命令ストリームビット（Ｉiと称する）のうち、Ｉ3及びＩ2はＪ3及びＪ2にそれぞれ結合するが、Ｉ1及びＩ0はＫ1及びＫ0に結合するという効果を有する。Ｊ1及びＪ0は、両方とも１の値に固定される。これによって、最下位ビットを操作するように適合されたＡＤＤ＿ＬＳＢ及びＳＵＢ＿ＬＳＢコードを含むＡＤＤ及びＳＵＢの命令コードの伸長したセットが得られる。この機能コードのセットを実現するための外部命令Ｉについて結果として得られるコードは、以下の通りである。
【００８８】
Ｉ入力ＡＤＤ命令コード ００００
Ｉ入力ＡＤＤ＿ＬＳＢ命令コード ０００１
Ｉ入力ＳＵＢ命令コード １１００
Ｉ入力ＳＵＢ＿ＬＳＢ命令コード １１１１
ＡＬＵ命令コードＪは、ＡＤＤとＡＤＤ＿ＬＳＢの両方について同じ（００１１）であるが、ＡＤＤではＣinはビットスライスのためのＣinとなるように単純に伝搬される一方、ＡＤＤ＿ＬＳＢではビットスライスのためのＣinの値は常に０である。ＳＵＢ命令の場合も同様であり、ＳＵＢ＿ＬＳＢについて、ビットスライスのためのＣinの値は常に１である。
【００８９】
従って、周辺回路が動的な命令入力によって制御されるため、同時に使用することができるＡＬＵ命令の組合せは、制限される。しかしながら、制限された数の場合のみをカバーすればよいため、これによって実際的な困難は生じない。例えば、上述した場合では、ＡＤＤ命令とＳＵＢ命令の間に２つの共通したビットが必要である。この場合は、ビットＪ1とＪ0は両方とも１の値を有している。
【００９０】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
【００９１】
１．処理デバイスに命令ストリームを供給するための回路であって、第１の命令値のセットを供給するために外部命令ストリームを受信する入力部と、第２の命令値のセットを含むように構成されたメモリと、前記処理デバイスに出力命令ストリームを供給するための複数の出力部と、制御入力部と、前記制御入力部により、前記複数の出力部間に前記第１の命令値のセットと前記第２の命令値のセットと分配するように構成された選択手段とからなる回路。
【００９２】
２．前記出力命令ストリームは、全体として前記外部命令ストリームより多くのビットを含むことからなる上項１の回路。
【００９３】
３．前記選択手段は、前記第１の命令値のセットと前記第２の命令値のセットとの間でビット毎に値を選択するものであって、ここで、値の各選択について、前記第１の命令値のセット及び前記第２の命令値のセットのいずれかからの１ビットは、前記複数の出力部の１つに送られ、他方の前記第１の命令値のセット及び前記第２の命令値のセットからの対応する１ビットは、前記複数の出力部の他方に送られることからなる上項１又は２の回路。
【００９４】
４．前記制御入力部は、前記外部命令ストリームと同数のビットを有する値を供給し、前記ビット毎の値の選択を、前記外部命令ストリームの等しく重要なビットに対応する前記制御入力値のビットに関連して行うことからなる上項３の回路。
【００９５】
５．前記複数の出力部の１つは、前記処理デバイスに命令入力を供給し、一方、前記複数の出力部の他方は、前記処理デバイスの周辺回路に入力を供給することからなる上項３又は４の回路。
【００９６】
６．前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力を許可又は禁止するための回路を備えることからなる上項５の回路。
【００９７】
７．前記周辺回路は、前記処理デバイスへの１つ又は複数のデータ入力に対して、演算定数を供給するための回路を備えることからなる上項５又は６の回路。
【００９８】
８．前記回路は、命令とデータの両方について同じデータ経路幅を有し、レジスタの使用が命令機能から独立して指定される処理デバイス、と共に使用されるように構成されていることからなる上項１乃至７のいずれの回路。
【００９９】
９．前記選択手段への前記第１の命令値のセットの供給を禁止する手段が供給され、それによって前記処理デバイスが前記第２の命令値のセットに従って制御されることからなる上項１乃至８のいずれかの回路。
【０１００】
１０．前記選択手段への前記第２の命令値のセットの供給を禁止する手段が供給され、それによって前記処理デバイスが前記第１の命令値のセットに従って制御されることからなる上項１乃至９のいずれかの回路。
【０１０１】
１１．前記処理デバイスは、単一の集積回路における複数の処理ユニットの１つであることからなる上項１乃至１０のいずれかの回路。
【０１０２】
１２．複数の処理デバイスと、前記複数の処理デバイスのうちの１つ又は複数のための、上項１乃至１１のいずれかの回路とからなる集積回路。
【０１０３】
１３．前記複数の処理デバイスは、構成可能な配線ネットワークにより互いに接続されていることからなる上項１２の集積回路。
【０１０４】
１４．前記処理デバイスは、フィールドプログラマブルアレイ内の処理要素であることからなる上項１２又は１３の集積回路。
【０１０５】
１５．前記処理デバイスは、複数のＡＬＵであることからなる上項１４の集積回路。
【０１０６】
１６．前記処理デバイスは、複数の４ビットＡＬＵであり、命令及びデータに４ビット幅が必要であることからなる上項１５の集積回路。
【０１０７】
【発明の効果】
上述した複数の実施例から分かるように、本発明の実施形態による命令マスク方式を使用して、意図した目的に関する命令セットを十分豊富に持つことと、復号化を容易に行うことの両方を維持しつつ、命令語内の少数のビットの利点を組み合わせることができる。これらの利点は、命令マスクを使用して有効な命令セットを調整し、命令語長を効果的に伸長することにより、あるいはビットを周辺回路に転用することによって、意図した１つ又は一群の目的に特に適合するようにすることができる。これらのオプションのそれぞれによって、残りの命令セットに制約を与えることとなるが、この制約は基本的な命令セットを好適に選択することによって比較的容易に遵守することができるということが一般的に理解される。
【図面の簡単な説明】
【図１】従来のプログラマブルシステムの命令及びデータの流れを示す図である。
【図２】本発明の一実施形態を用いたプログラマブルシステムの命令及びデータの流れを示す図である。
【図３】本発明の実施形態に使用する選択回路を示す図である。
【図４】入力を禁止することができるように変更した図３R>３に示す選択回路を示す図である。
【図５】入力を禁止することができるように変更した図３R>３の選択回路を示す図である。
【図６】命令マスクの出所を示すために変更した図２の命令の流れを示す図である。
【図７】命令マスクの出所を示すために変更した図２の命令の流れを示す図である。
【図８】本発明の実施形態が使用することのできるフィールドプログラマブル演算アレイの基本的な処理デバイスを示す図である。
【図９】図８に示す基本的な処理デバイスを備えたフィールドプログラマブル演算アレイにおける本発明の一実施形態の適用例を示す図である。
【図１０】図８に示す基本的な処理デバイスを備えたフィールドプログラマブル演算アレイに使用するよう構成された本発明の別の実施形態による命令マスク回路を示す図である。
【図１１】図１０に示す命令マスク回路によって実現されるビットの転用を利用した桁上げ入出力経路を示す図である。
【符号の説明】
１ 命令ストリーム
２ 命令復号器
３ デバイス
４ 受信データ
５ 出力データ
６ 復号済み命令
１１ 選択手段
１２ 命令マスク
１３、１４ 命令ストリーム
【図１】
0003762841.tif 000016
【図２】
0003762841.tif 000017
【図３】
0003762841.tif 000018
【図４】
0003762841.tif 000019
【図５】
0003762841.tif 000020
【図６】
0003762841.tif 000021
【図７】
0003762841.tif 000022
【図８】
0003762841.tif 000023
【図９】
0003762841.tif 000024
【図１０】
0003762841.tif 000025
【図１１】
0003762841.tif 000026