TOP > 国内特許検索 > プログラマブル論理デバイス > 明細書

明細書 :プログラマブル論理デバイス

発行国 日本国特許庁(JP)
公報種別 特許公報(B2)
特許番号 特許第4246200号 (P4246200)
登録日 平成21年1月16日(2009.1.16)
発行日 平成21年4月2日(2009.4.2)
発明の名称または考案の名称 プログラマブル論理デバイス
国際特許分類 G06F   7/00        (2006.01)
H03K  19/173       (2006.01)
FI G06F 7/00 204
H03K 19/173 101
請求項の数または発明の数 13
全頁数 57
出願番号 特願2005-504294 (P2005-504294)
出願日 平成16年3月31日(2004.3.31)
国際出願番号 PCT/JP2004/004752
国際公開番号 WO2004/088500
国際公開日 平成16年10月14日(2004.10.14)
優先権出願番号 2003093922
2003105762
優先日 平成15年3月31日(2003.3.31)
平成15年4月9日(2003.4.9)
優先権主張国 日本国(JP)
日本国(JP)
審査請求日 平成19年2月20日(2007.2.20)
特許権者または実用新案権者 【識別番号】802000031
【氏名又は名称】財団法人北九州産業学術推進機構
発明者または考案者 【氏名】笹尾 勤
【氏名】井口 幸洋
個別代理人の代理人 【識別番号】100121371、【弁理士】、【氏名又は名称】石田 和人
審査官 【審査官】田中 友章
参考文献・文献 米国特許第6118298(US,A)
特開平09-181598(JP,A)
笹尾勤、他,“多出力関数のカスケード実現と再構成可能ハードウェアによる実現”,電子情報通信学会技術研究報告,日本,2001年 4月 6日,vol.101,no.3,p.57-64
調査した分野 G06F 7/00
H03K 19/173
特許請求の範囲 【請求項1】
以下の構成を含むプログラマブル論理デバイス(programmable logic device):
論理関数のLUT(look up table)を記憶するための、直列に順序づけて配列された論理関数メモリ;
前記各論理関数メモリに対する入力変数が入力される複数の外部入力線;
二つの前記論理関数メモリ間において、前段の前記論理関数メモリの出力線又は前記外部入力線のうち後段の前記論理関数メモリの各入力線に接続されるものを選択するための接続情報を記憶する接続メモリ;
二つの前記論理関数メモリ間において、前記接続メモリの出力に従って、前段の前記論理関数メモリの出力線又は前記外部入力線と後段の前記論理関数メモリの入力線との接続関係の再構成を行うことが可能な接続回路。
【請求項2】
以下の構成を含むプログラマブル論理デバイス:
論理関数のLUTを記憶するための、リング状に配列された論理関数メモリ;
前記各論理関数メモリに対する入力変数が入力される複数の外部入力線;
二つの前記論理関数メモリ間において、前段の前記論理関数メモリの出力線又は前記外部入力線のうち後段の前記論理関数メモリの各入力線に接続されるものを選択するための接続情報を記憶する接続メモリ;
二つの前記論理関数メモリ間において、前記接続メモリの出力に従って、前段の前記論理関数メモリの出力線又は前記外部入力線と後段の前記論理関数メモリの入力線との接続関係の再構成を行うことが可能な接続回路。
【請求項3】
論理関数の演算結果を外部回路に出力するための外部出力線を備え;
前記接続メモリは、二つの前記論理関数メモリ間において、前段の前記論理関数メモリの出力線のうち前記外部出力線に接続されるものを選択するための接続情報をも記憶するものであり;
前記接続回路は、二つの前記論理関数メモリ間において、前記接続メモリの出力に従って、前段の前記論理関数メモリの出力線と前記外部出力線との接続をも行うものである;
ことを特徴とする請求の範囲第1項又は第2項記載のプログラマブル論理デバイス。
【請求項4】
論理関数メモリのメモリ領域を指定する領域指定変数を記憶する領域指定記憶手段を備え;
前記接続回路は、二つの前記論理関数メモリ間において、領域指定記憶手段の出力に従って、
前段の前記論理関数メモリの出力及び外部入力線からの入力変数が、領域指定変数により特定される後段の前記論理関数メモリのメモリ領域に入力されるように、
又は、領域指定変数により特定される前段の前記論理関数メモリのメモリ領域からの出力及び外部入力線からの入力変数が、後段の前記論理関数メモリに入力されるように、
前段の前記論理関数メモリの出力線、外部入力線、及び領域指定記憶手段の出力線と、後段の前記論理関数メモリの入力線との接続を行うものである;
ことを特徴とする請求の範囲第1項乃至第3項の何れか一記載のプログラマブル論理デバイス。
【請求項5】
前記論理関数メモリの入力側又は出力側に設けられ、外部から入力されるデータ・ストローブ信号に従って、前記論理関数メモリへの入力又は前記論理関数メモリの出力を取り込んで一時的に保持する中間変数レジスタ;
を備えていることを特徴とする請求の範囲第1項乃至第4項の何れか一記載のプログラマブル論理デバイス。
【請求項6】
前記中間変数レジスタと並列に接続されたバイパス線;
及び、前記中間変数レジスタの出力側に設けられ、前記中間変数レジスタの出力線又は前記バイパス線の何れか一方を選択し、選択された線の信号を出力するバイパス選択回路;
を備えていることを特徴とする請求の範囲第1項乃至第5項の何れか一記載のプログラマブル論理デバイス。
【請求項7】
前記データ・ストローブ信号を計数し、演算を実行する前記論理関数メモリの番号を特定する論理関数メモリ特定手段;
を備えていることを特徴とする請求の範囲第5項又は第6項記載のプログラマブル論理デバイス。
【請求項8】
演算処理を実行させる前記論理関数メモリを通常動作状態とし、それ以外の前記論理関数メモリを低消費電力状態とする制御を行う電源制御手段;
を備えている請求の範囲第5項乃至第7項の何れか一記載のプログラマブル論理デバイス。
【請求項9】
前記各論理関数メモリの一部の入力線は、前記接続回路を介すことなく前記外部入力線に直接接続されていることを特徴とする請求の範囲第1項乃至第8項の何れか一記載のプログラマブル論理デバイス。
【請求項10】
前記各論理関数メモリの一部の出力線は、前記接続回路を介すことなくその後段の論理関数メモリの一部の入力線に直接接続されていることを特徴とする請求の範囲第1項乃至第9項の何れか一に記載のプログラマブル論理デバイス。
【請求項11】
前記接続回路は、複数のセレクタ回路を含み;
前記各セレクタ回路は、前記接続メモリの出力値に従って、前段の前記論理関数メモリの出力線と前記外部入力線とのうち何れか一つ、又は、前段の前記論理関数メモリの出力線と前記外部入力線と領域指定記憶手段の出力線とのうち何れか一つを選択して後段の前記論理関数メモリの入力線に接続するものであること;
を特徴とする請求の範囲第1項乃至第10項の何れか一記載のプログラマブル論理デバイス。
【請求項12】
前記接続回路は、前記接続メモリの出力値に従って、前段の前記論理関数メモリの出力線の接続順序をシフトして後段の前記論理関数メモリの入力線に接続するシフタ回路を含むことを特徴とする請求の範囲第1項乃至第11項の何れか一記載のプログラマブル論理デバイス。
【請求項13】
前記接続回路は、複数のマルチプレクサを含み;
前記マルチプレクサは、前記接続メモリの出力値に従って、前段の前記論理関数メモリの複数の出力線及び複数の前記外部入力線のうちの何れか一本を選択して後段の前記論理関数メモリの入力線に接続するものであること;
を特徴とする請求の範囲第1項乃至第12項の何れか一記載のプログラマブル論理デバイス。
発明の詳細な説明 【技術分野】

本発明は、プログラム可能な論理デバイス(programmable logic device)に係り、特に、目的論理関数を、順序づけられた複数の分解関数に関数分解し、それら分解関数を分解表として表現したルックアップ・テーブル・カスケード(look up table cascade;以下「LUTカスケード」という。)の演算を行うためのプログラマブル論理デバイスに関する。
【背景技術】

近年、論理回路の設計においては、フィールド・プログラマブル・ゲートアレイ(Field Programmable Gate Array。以下、「FPGA」という。)が広く用いられるようになっている(引用文献[1])。FPGAは、マトリックス状に配列された複数の論理セル(Configurable Logic Block;以下、「CLB」という。)の内容と論理セル間の配線の接続とをメモリの書き換えによって変更することが可能なプログラマブル論理デバイスである。FPGAは、プログラムに従ってソフトウェア的に演算を行うマイクロ・プロセッサ(Micro Processing Unit;以下、「MPU」という。)とは異なり、ハードウェア的に演算を行う。従って、論理関数の演算実行速度が速いという特徴を有する。
一方、FPGAは、各CLB間の物理的な配線の引き回しをプログラムにより変更する。そのため、配線遅延をできる限り小さくするように考慮した配置配線設計が必要とされ、設計に長時間を要する。また、各CLB間の配線の引き回し方に依存して、配線遅延時間が変化する。そのため、設計時において論理回路の演算時間の予測が困難である。
また、2次元的に配列されたCLB間の配線を、再構成可能なように自在に接続切り替えを行うことから、チップ内における配線領域の割合が非常に大きくなる。また、接続部にパス・トランジスタを使用する、ため配線部分の遅延が非常に大きい。
そこで、上記FPGAの欠点をカバーするプログラム可能な論理回路として、LUTカスケード(LUT cascade)が提案されている(引用文献[2],[3]参照)。LUTカスケードとは、LUTを直列接続したものであり、演算処理を行う論理関数(目的論理関数)を関数分解して得られる複数の分解関数のLUTを直列接続した形で表現できる。FPGAは、論理回路をそのまま2次元的なCLBのネットワークとして実現するのに対し、LUTカスケードは、目的論理関数を1次元的に直列接続したLUTで実現する点において異なる。
つまり、FPGAで用いられる各CLBは、基本的な論理ゲートを実現するものである。そして、これらの基本論理ゲートを配線により結合することで、複雑な論理回路を実現することに基本的な設計思想がある。従って、必然的に、FPGAをチップ上にレイアウトする場合、2次元的に配置されたCLB間を自在に配線接続するための配線ネットワークを構成する必要がある。そのため、論理領域のほかに広い配線領域が必要となり、レイアウト面積が大きくなりがちである。
それに対し、LUTカスケードにおいては、一般に、多入力多出力の複雑な論理関数を表現するLUTを、直列的(1次元的)に接続して、複雑な論理回路を実現することに基本的な設計思想がある。そのため、各LUTの出力と入力は、一般に複数の配線により接続される。そして、2次元的な配線ネットワークは不要であるため、一般に配線領域は少なく、チップ面積の殆どがLUTを格納するためのメモリ領域となる。
また、配線のための、チップ面積や、配線部分の遅延時間もFPGAに比べて少ない。
以下、LUTカスケードの一設計法について簡単に説明する。第52図はLUTカスケードの原理を表す図である。なお、ここでは簡単のため、中間出力のないLUTカスケードについて説明を行う。
LUTカスケードにおいて論理関数の演算を行う場合、まず、演算を行う論理関数(目的論理関数)f(X)をs個(s≧2)の分解関数{f(X);i=0,…,s-1}に関数分解する。ここで、X=(x,…,xn-1)は入力変数を表す。また、入力変数の集合を{X}で表す。ここで、{X}={X}∪…∪{Xs-1},{X}∩{X}=φ(i≠j;i,j∈{0,…,s-1})である。各分解関数fの出力変数(一般に、ベクトル)をYi+1で表す。以下、X,Yの変数の個数を|X|,|Y|のように表すこととし、特に、|X|=n,|X|=n,|Y|=uと表記する。
任意の目的論理関数fは、n=k(kは分解関数fの入力変数の数)、n=k-u(0<i<s-1),ns-1=k-us-1-t(0≦t≦k-2)となるように関数分解することが可能である(引用文献[2],[3]参照)。そこで、目的論理関数fをs-1個のk入力の分解関数f(j∈{0,…,s-2})と1個のk-t入力の分解関数fs-1とに分解する。そして、各分解関数f(r∈{0,…,s-1})を分解表により表し、これをLUT(look up table)とする。ここで、目的論理関数f(X)の分解表(decomposition chart)とは、2|Xr|列2|fr|行の表で、各行、各列に2進符号のラベルをもち、その要素がfの対応する真理値であるような表をいう。
第52図において、s個のLUT(LUT~LUTs-1)は、それぞれ、分解関数{f;i=0,…,s-1}を表現したものである。それぞれのLUT(LUT)は、k入力ur+1出力のメモリ(以下、「論理関数メモリ」という。)を用いて実現することができる。このような論理関数メモリを、第52図に示すようにカスケード接続することにより、LUTカスケードが実現される。
LUTカスケードでは、目的論理関数fの入出力変数の個数が大きい場合には、多数のLUTをカスケード接続する必要がある。そのため、最適化されたFPGAに比べれば演算速度は遅くなる場合もある。しかし、LUTカスケードでは、各分解関数の演算は、論理関数メモリを用いて高速に行われる。そのため、MPU上で動くプログラムに比べると演算速度を高速化することができる。
そして、LUTの段数によって、一義的に演算速度が定まる。そのため、論理回路の設計時に目的論理関数の演算時間を正確に予測することが容易である。また、LUTカスケードでは、互いに隣接する論理関数メモリ間でのみ配線を行えばよい。そのため、論理回路の設計時には配線遅延等の影響を考慮する必要がない。従って、LUTカスケードはFPGAに比べると論理回路設計が格別に容易になる。
しかしながら、実際に第52図に示したようなLUTカスケードにより目的論理関数の演算を行う場合には、目的論理関数を関数分解して得られる分解関数のLUT間のレイル数(二つのLUT間の線数(中間変数の数))や各LUTの入力変数の個数が目的論理関数により異なる。そのため、種々の目的論理関数を論理回路で実現しようとした場合、入力変数の個数及びレイル数が異なる種々のLUTカスケードの論理回路が必要となり、実用性に欠ける。
そこで、多様な目的論理関数に対応可能なプログラマブル論理デバイスとするためには、各論理関数メモリの入力のビット数に余裕をもたせるべく、あらかじめビット数を十分大きくとっておくことが考えられる。しかし、論理関数メモリのメモリ容量は、論理関数メモリの入力が1増加するごとに2倍に増大する。従って、入力のビット数に余裕をもたせる場合、使用されないメモリ領域が増大しメモリ領域の無駄が多くなる。また、メモリ容量の増大に伴いメモリのレイアウト面積が増大する。そのため、回路の高集積化が困難となり、回路消費電力も大きくなる。
そこで、本発明の目的は、目的論理関数に応じて、各論理関数メモリ間の入力変数の入力線数とレイル数とを柔軟に変化させることが可能で、論理関数メモリの入力数、延いては論理関数メモリのメモリ容量を必要最小限に抑えて設計することが可能なプログラマブル論理デバイスを提供することにある。
〔引用文献〕
[1] 米国再発行特許Re.34,363号明細書
[2] 笹尾勤,松浦宗寛,井口幸洋,“多出力関数のカスケード実現と再構成可能ハードウェアによる実現”,電子情報通信学会FTS研究会,FTS2001-8,pp.57-64,三重大学(2001-04).
[3] T.Sasao,M.Matsuura,and Y.Iguchi,″A cascade realization of multiple-output function for reconfigurable hardware,″International Workshop on Logic and Synthesis(IWLS01),Lake Tahoe,CA,June 12-15,2001.pp.225-230.
【図面の簡単な説明】

第1図は本発明の実施例1に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第2図は第1図の入力変数選択回路の構成を表す回路図である。
第3図は第1図の論理関数メモリの構成を表すブロック図である。
第4図は第1図の接続回路の周辺の回路ブロック図である。
第5図は第1図の接続メモリの構成を表すブロック図である。
第6図は実施例1に係るプログラマブル論理デバイスの動作を表すフローチャートである。
第7図は第1図の接続回路にクロスバ・スイッチを使用した場合の回路ブロック図である。
第8図は第1図の接続回路にマルチプレクサ・アレイを使用した場合の回路ブロック図である。
第9図は第1図の接続回路にセレクタ・アレイを使用した場合の回路ブロック図である。
第10図は8ビット加算器の論理関数を表す図である。
第11図は8つの分解関数に関数分解した8ビット加算器を表す図である。
第12図は8つの分解関数に関数分解した8ビット加算器を表す図である。
第13図は4つの分解関数に関数分解した8ビット加算器を表す図である。
第14図は4つの分解関数に関数分解した8ビット加算器の各分解関数の真理値である。
第15図は例1において論理関数メモリ論理関数メモリ4-0の0ページ目に記憶された真理値である。
第16図は例1において論理関数メモリ論理関数メモリ4-1~4-3の0ページ目に記憶された真理値である。
第17図は本発明の実施例2に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第18図は本発明の実施例3に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第19図は本発明の実施例4に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第20図は第16図の出力レジスタ及び出力デコーダの構成を表すブロック図である。
第21図は第17図の記憶素子の構成を表すブロック図である。
第22図は本発明の実施例5に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第23図は第19図の第2の出力選択回路の構成を表すブロック図である。
第24図は本発明の実施例6に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第25図は本発明の実施例7に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第26図は第25図の演算制御部10の構成を表すブロック図である。
第27図は第26図の出力コントローラ64の内部構成を表すブロック図である。
第28図は実施例7に係るプログラマブル論理デバイスの動作を表すフローチャートである。
第29図は実施例7に係るプログラマブル論理デバイスの動作時における各信号の変化を表すタイミング図である。
第30図は2nビットの二進数A,Bの加算を行う論理関数fを表す図である。
第31図は2nビットの二進数A,Bの加算を行う論理関数fを2n個の分解関数{g,g,…,g2n-1}に関数分解した図である。
第32図は2nビットの二進数A,Bの加算を行う論理関数fを2n個の分解関数{g,g,…,g2n-1}に関数分解した図である。
第33図は2nビットの二進数A,Bの加算を行う論理関数fをn個の分解関数{f,f,…,fn-1}に関数分解した図である。
第34図は分解関数fの真理値表である。
第35図は論理関数メモリ4-0の第1ページに記憶する真理値表である。
第36図は論理関数メモリ4-0~4-3の第0ページに記憶する真理値表である。
第37図は本発明の実施例8に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第38図は本発明の実施例9に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
第39図は本発明の実施例10に係るプログラマブル論理デバイスの全体構成を表す図である。
第40図は本発明の実施例10に係るプログラマブル論理デバイスの演算部の構成を表すブロック図である。
第41図は第40図の接続回路とメモリ・アドレス・レジスタの構成を表す図である。
第42図は本発明の実施例10に係るプログラマブル論理デバイスの出力回路の構成を表す図である。
第43図は実施例10に係るプログラマブル論理デバイスの演算処理動作の流れを表す図である。
第44図は実施例10に係るプログラマブル論理デバイスの演算処理動作の流れを表す図である。
第45図は実施例10に係るプログラマブル論理デバイスの演算処理動作の流れを表す図である。
第46図はメモリ・パッキングの概念を説明する図である。
第47図は本発明の実施例11に係るプログラマブル論理デバイスの構成を表す図である。
第48図は2個の論理回路メモリを用いたプログラマブル論理デバイスで4段のLUTカスケードを実現する例を表す図である。
第49図は論理関数f,gをLUTカスケードで表現した図である。
第50図は論理関数f,gをLUTカスケードで表現した図である。
第51図は論理関数f,gを合成したLUTリングを表す図である。
第52図はLUTカスケードの原理を表す図である。
【発明の開示】

本発明に係るプログラマブル論理デバイスの第1の構成は、以下の構成を含むことを特徴とする:
(1)論理関数のLUT(look up table)を記憶するための、直列に順序づけて配列された論理関数メモリ;
(2)前記各論理関数メモリに対する入力変数が入力される複数の外部入力線;
(3)二つの前記論理関数メモリ間において、前段の前記論理関数メモリの出力線又は前記外部入力線のうち後段の前記論理関数メモリの各入力線に接続されるものを選択するための接続情報を記憶する接続メモリ;
(4)二つの前記論理関数メモリ間において、前記接続メモリの出力に従って、前段の前記論理関数メモリの出力線又は前記外部入力線と後段の前記論理関数メモリの入力線との接続関係の再構成を行うことが可能な接続回路。
各段の論理関数メモリには、目的論理関数をLUTカスケードにより表現するために各LUTが表現する論理関数を格納しておく。なお、ここで「メモリ」とは、各アドレスに対応して一つのデータが記憶されており、アドレスを指定することによってそのアドレスに対応するデータを読み出す装置をいう。従って、「メモリ」は物理的に1個単体をなすメモリ素子に限らず、複数のメモリ素子を組み合わせて構成したものであってもかまわない。各接続回路は、接続メモリが出力する接続情報に従って、前段の論理関数メモリの出力線又は外部入力線の何れかと、後段の論理関数メモリの各入力線との接続関係を構成する。これにより、LUTカスケードが実現できる。
演算処理を行うLUTカスケードに合わせて論理関数メモリ内の論理関数及び接続メモリ内の接続情報を書き換える。これにより、後段の論理関数メモリの入力線に接続するための前段の論理関数メモリの出力線の数、及び外部入力線の数を自在に変更できる。そして、LUTカスケードを実現する論理回路を自在に再構成することが可能となる。すなわち、目的論理関数に応じて、隣接する二つのLUT間を結ぶレイル数と外部からの入力変数の入力数との割合を任意に変更することが可能となる。そのため、1つのプログラマブル論理デバイスで実現可能な目的論理関数の範囲を広げることができる。その結果、各論理関数メモリの入力線の数を減らすことが可能となる。従って、回路を小型化することもできる。
また、各論理関数のLUTの出力数と外部入力線からの入力変数の個数との割合を最適化することができる。そのため、論理関数メモリの入力線の配分、メモリの使用領域の無駄をなくすことができる。
なお、本発明に係るプログラマブル論理デバイスは、論理関数メモリが直列(一次元的)に配列されている点において、FPGAとは決定的に異なる。
すなわち、FPGAの場合、ファン・アウト(fan-out)があるので、CLB間の入出力線の接続関係は1対1対応とはならない。従って、あらゆる接続関係に対応できるように接続回路の自由度を大きくする必要がある。そのため、接続回路が大規模となり、チップ内に占める配線領域の割合が非常に大きい。
それに対し、本発明に係るプログラマブル論理デバイスは、論理関数メモリが直列配列されている。従って、接続回路は、1つの論理関数メモリの出力線及び外部入力線と、1つの論理関数メモリの入力線とを選択的に対応づけて接続すればよい。
すなわち、前段の論理関数メモリの出力線の集合をY={y}、外部入力線の集合をX={x}、後段の論理関数メモリの入力線の集合をZr+1={zr+1}とする。このとき、接続回路は、Zr+1⊆Y∪Xとなるように、集合Y∪Xの要素のうちの|Zr+1|個が集合Zr+1の各要素に一対一対応するように接続を行う。すなわち、接続回路は、基本的には|Y∪X|個の線から|Zr+1|個の線を選択する機能(また、必要に応じて、選択した|Zr+1|個の線の順序を変更する機能)を有するものであればよい。
従って、ハードウェア的には、接続回路は、FPGAの接続回路に比べ、極めて簡単な構成となる。そのため、チップ内に占める配線領域も極めて小さくすることができる。また、2つの論理関数メモリ間のみの接続であり、配置配線設計は不要である。従って、回路設計において物理的な配線遅延の影響を考慮する必要もない。
更に、チップ内における配線領域が限定的である。そのため、高いクロック周波数で使用する場合にも、予め反射やクロストーク等の伝送路の周波数特性や寄生効果の影響を受けにくく設計しておくことが可能である。すなわち、高速回路としても使用することが可能となる。これは、FPGAにより複雑な論理回路を設計した場合に、高いクロック周波数で使用できる回路の実現が困難になることとは対照的である。
本発明に係るプログラマブル論理デバイスの第2の構成は、以下の構成を含むことを特徴とする:
(1)論理関数のLUTを記憶するための、リング状に配列された論理関数メモリ;
(2)前記各論理関数メモリに対する入力変数が入力される複数の外部入力線;
(3)二つの前記論理関数メモリ間において、前段の前記論理関数メモリの出力線又は前記外部入力線のうち後段の前記論理関数メモリの各入力線に接続されるものを選択するための接続情報を記憶する接続メモリ;
(4)二つの前記論理関数メモリ間において、前記接続メモリの出力に従って、前段の前記論理関数メモリの出力線又は前記外部入力線と後段の前記論理関数メモリの入力線との接続関係の再構成を行うことが可能な接続回路。
このように、論理関数メモリをリング状に接続することによって、後述(実施例11〔例3〕参照。)のように、入力変数の一部又は全部が共通する複数の組み合わせ論理関数を、LUTリングとして1つのプログラマブル論理デバイスで同時に実現させることが可能となる。
また、後で述べるように、論理関数メモリのアドレスを保持するラッチを付加し、クロック・パルスと同期させ、論理関数メモリをリング状に接続することにより、任意段数のLUTカスケードを模擬することが可能となる。これにより、論理関数メモリの使用効率をより向上させることができる。
なお、本発明に係るプログラマブル論理デバイスは、FPGAと異なり、論理関数メモリは一次元的なリング状に配列されている。従って、接続回路は、1つの論理関数メモリの出力線及び外部入力線と、1つの論理関数メモリの入力線とを選択的に対応づけて接続すればよい。従って、第1の構成の場合と同様、FPGAの接続回路に比べて接続回路は極めて簡単となり、配線領域も小さくすることができる。また、2つの論理関数メモリ間のみの接続であるため、配置配線設計は不要である。従って、論理設計において物理的な配線遅延の影響を考慮する必要はない。
本発明に係るプログラマブル論理デバイスの第3の構成は、前記第1又は2の構成において、論理関数の演算結果を外部回路に出力するための外部出力線を備え;
前記接続メモリは、二つの前記論理関数メモリ間において、前段の前記論理関数メモリの出力線のうち前記外部出力線に接続されるものを選択するための接続情報をも記憶するものであり;
前記接続回路は、二つの前記論理関数メモリ間において、前記接続メモリの出力に従って、前段の前記論理関数メモリの出力線と前記外部出力線との接続をも行うものである;
ことを特徴とする。
この構成により、直列接続された論理関数メモリうちの任意のものから、その出力を取り出すことができる。従って、LUTカスケードの段数が少ない場合には、論理関数メモリ列の途中の出力を出力変数として取り出すことで、演算処理を早期に終了させて演算速度を高速化することができる。
また、多出力論理関数の演算を行う場合には、LUTカスケードの途中で確定した演算結果を、後段のLUTに入力することなく、途中で出力させることができる。これにより、後段のLUTの入力数を削減することができる。また、演算結果が確定した時点でそれを出力することで、演算処理速度を上げることができる。更に、後段のLUTの入力数が減ることで、後段のLUTに必要とされるメモリ容量の削減が可能となる。
本発明に係るプログラマブル論理デバイスの第4の構成は、前記第1乃至3の何れか一の構成において、論理関数メモリのメモリ領域を指定する領域指定変数を記憶する領域指定記憶手段を備え;
前記接続回路は、二つの前記論理関数メモリ間において、領域指定記憶手段の出力に従って、
前段の前記論理関数メモリの出力及び外部入力線からの入力変数が、領域指定変数により特定される後段の前記論理関数メモリのメモリ領域に入力されるように、
又は、領域指定変数により特定される前段の前記論理関数メモリのメモリ領域からの出力及び外部入力線からの入力変数が、後段の前記論理関数メモリに入力されるように、
前段の前記論理関数メモリの出力線、外部入力線、及び領域指定記憶手段の出力線と、後段の前記論理関数メモリの入力線との接続を行うものである;
ことを特徴とする。
この構成によれば、各論理関数メモリにLUTを格納する場合に、メモリを複数の領域(ページ等)に区切って複数のLUTを記憶させておく。領域指定記憶手段には、それぞれの論理関数のLUTが格納されたメモリ領域を指定する領域指定変数の値を記憶させておく。接続メモリには、それぞれの論理関数に対応する領域指定変数が出力される領域指定記憶手段の出力線が、後段の論理関数メモリの入力線と接続するように接続情報を記憶させておく。
そして、所望の論理関数のLUTを読み出す場合には、その論理関数に対応する領域指定変数、領域指定記憶手段から、接続情報を接続メモリから読み出し、接続回路の接続関係を切り替える。それとともに、各論理関数メモリの領域指定変数で指定されるメモリ領域のLUTを読み出す。これにより、複数の目的論理関数の演算を切り替えて行うことが可能となる。
本発明に係るプログラマブル論理デバイスの第5の構成は、前記第1乃至4の何れか一の構成において、前記論理関数メモリの入力側又は出力側に設けられ、外部から入力されるデータ・ストローブ信号に従って、前記論理関数メモリへの入力又は前記論理関数メモリの出力を取り込んで一時的に保持する中間変数レジスタ;
を備えていることを特徴とする。
これにより、各段の論理関数メモリの出力は中間変数レジスタで一時的に保持される。そのため、演算処理の流れは中間変数レジスタで一時的に止められる。すなわち、データ・ストローブ信号に同期して、各論理関数メモリを1段ずつLUTによる演算が行われる。従って、データ・ストローブ信号を外部回路のクロックなどに同期させれば、各論理関数のLUTの演算を外部回路に同期させることができる。
また、論理関数メモリごとに演算が1段ずつ行われる。そのため、複数のデータ(ジョブ)に対する演算をパイプライン処理で実行させることが可能となる。
また、論理関数メモリがリング状に接続されている場合、演算可能な論理関数の入力数に関する自由度を大きくすることができる。すなわち、目的論理関数の入力変数の個数が各論理関数メモリの入力線数の総和よりも多い場合、クロック・パルスを使用することにより、論理関数メモリのリングを一周以上用いてLUTカスケードを構成する。そして、同じ論理関数メモリの使用領域を必要に応じて変化させて関数演算を順次行わせればよい。従って、目的論理関数やメモリ量の数に応じてLUTカスケードの段数を柔軟に変化させることが可能となる。そのため、設計自由度が大きくなる。
更に、論理関数メモリがリング状に接続されている場合、クロック・パルスを使用することにより、LUTカスケードの段数を多くすることができる。そのため、各段のLUTを小さくすることができる。従って、各段の論理関数メモリは、メモリ容量の比較的小さいものを使用することができる。そのため、各論理関数メモリの消費電力は低く抑えることが可能である。更に、演算の流れに従って、一部の論理関数メモリのみがデータ読み出しの動作をする。そして、この動作を行うメモリのみが主として電力を消費する。従って、MPUやFPGAに比べ、低消費電力で動作させることが可能となる。また、データ読み出しの動作をしていないメモリは、低消費電力状態(スリープ状態)にするように構成すれば、更に消費電力の低減が可能となる。
ここで、データ・ストローブ信号としてクロック・パルスを使用することができる。
本発明に係るプログラマブル論理デバイスの第6の構成は、前記第1乃至5の何れか一の構成において、前記中間変数レジスタと並列に接続されたバイパス線;
及び、前記中間変数レジスタの出力側に設けられ、前記中間変数レジスタの出力線又は前記バイパス線の何れか一方を選択し、選択された線の信号を出力するバイパス選択回路;
を備えていることを特徴とする。
この構成により、各バイパス選択回路で、中間変数レジスタの出力線を選択すれば、データ・ストローブ信号を使用した同期的な演算処理を行わせることができる。また、各バイパス選択回路で、バイパス線を選択すれば、前段の論理関数メモリの出力が、中間変数レジスタで止められることなく直接後段の論理関数メモリに送られる。従って、LUTカスケードによる目的論理関数の演算を非同期的に高速で実行することができる。
本発明に係るプログラマブル論理デバイスの第7の構成は、前記第5又は6の構成において、前記データ・ストローブ信号を計数し、演算を実行する前記論理関数メモリの番号を特定する論理関数メモリ特定手段;
を備えていることを特徴とする。
このように、論理関数メモリ特定手段を設けることで、演算の実行中において、ジョブが存在する論理関数メモリの位置を特定することができる。ここで、「ジョブ」とは、入力変数に対してLUTカスケードの各LUTにより演算を実行しデータを生成する作業をいう。
本発明に係るプログラマブル論理デバイスの第8の構成は、前記第5乃至7の何れか一の構成において、演算処理を実行させる前記論理関数メモリを通常動作状態とし、それ以外の前記論理関数メモリを低消費電力状態とする制御を行う電源制御手段;
を備えていることを特徴とする。
この構成によれば、各段の論理関数メモリによる演算処理は中間変数レジスタで一時的に止められながら、データ・ストローブ信号に同期して1段ずつ実行される。この際、電源制御手段は、演算処理に使用されていない論理関数メモリは低消費電力状態(スリープ状態)とし、演算処理に使用する論理関数メモリのみを通常動作状態(ウェイク・アップ状態)とする。これにより、プログラマブル論理デバイスの消費電力を低減させることもできる。
本発明に係るプログラマブル論理デバイスの第9の構成は、前記第1乃至8の何れか一の構成において、前記各論理関数メモリの一部の入力線は、前記接続回路を介すことなく前記外部入力線に直接接続されていることを特徴とする。
最初の段の論理関数メモリについては、総ての入力に対して入力変数が入力される。一方、最初の段以外の各論理関数メモリにおいては、その入力の一部には前段の論理関数メモリの出力が入力され、他の入力には、入力変数が入力される。
ところで、実用的なLUTカスケードの多くにおいて、最初の段以外の各論理関数メモリには、最低限1つの入力変数が入力される。そこで、プログラマブル論理デバイスを汎用目的で製作する場合には、最初の段以外の各論理関数メモリの入力のうちの少なくとも1つに、接続回路を介すことなく入力変数を直接入力するように構成する。これにより、接続回路の入力線の数を減らすことができる。また、接続回路及び接続メモリの出力の配線数を減らすことができるため、回路を更に小型化することが可能となる。
本発明に係るプログラマブル論理デバイスの第10の構成は、前記第1乃至9の何れか一の構成において、前記各論理関数メモリの一部の出力線は、前記接続回路を介すことなくその後段の論理関数メモリの一部の入力線に直接接続されていることを特徴とする。
最初の段以外の各論理関数メモリにおいては、その入力の一部には前段の論理関数メモリの出力が入力され、他の入力には、入力変数が入力される。
ところで、実用的なLUTカスケードの多くにおいて、最初の段以外の各論理関数メモリには、最低1つは前段の論理関数メモリの出力が入力される。そこで、プログラマブル論理デバイスを汎用目的で製作する場合には、最初の段以外の各論理関数メモリの入力のうちの一部を、接続回路を介すことなく前段の論理関数メモリの出力を直接入力するように構成する。これにより、接続回路の入力線の数を減らすことができる。また、接続回路及び接続メモリの出力の配線数を減らすことができるため、回路を更に小型化することが可能となる。
本発明に係るプログラマブル論理デバイスの第11の構成は、前記第1乃至10の何れか一の構成において、前記接続回路は、複数のセレクタ回路を含み;
前記各セレクタ回路は、前記接続メモリの出力値に従って、前段の前記論理関数メモリの出力線と前記外部入力線とのうち何れか一つ、又は、前段の前記論理関数メモリの出力線と前記外部入力線と領域指定記憶手段の出力線とのうち何れか一つを選択して後段の前記論理関数メモリの入力線に接続するものであること;
を特徴とする。
本発明に係るプログラマブル論理デバイスの第12の構成は、前記第1乃至11の何れか一の構成において、前記接続回路は、前記接続メモリの出力値に従って、前段の前記論理関数メモリの出力線の接続順序をシフトして後段の前記論理関数メモリの入力線に接続するシフタ回路を含むことを特徴とする。
本発明に係るプログラマブル論理デバイスの第13の構成は、前記第1乃至12の何れか一の構成において、前記接続回路は、複数のマルチプレクサを含み;
前記マルチプレクサは、前記接続メモリの出力値に従って、前段の前記論理関数メモリの複数の出力線及び複数の前記外部入力線のうちの何れか一本を選択して後段の前記論理関数メモリの入力線に接続するものであること;
を特徴とする。
【発明を実施するための最良の形態】

〔用語の定義〕
最初に、以下の説明で使用する記号及び用語について定義しておく。
(1)記号「{ }」は非順序集合(unordered set)を表す。記号「( )」は順序集合(ordered set)を表す。変数の集合{x,x,…,x}について、集合の各要素の順序を考慮する場合には、(x,x,…,x)=Xと記す。順序を考慮しない場合には、{x,x,…,x}={X}と記す。Xの変数の個数|X|で表す。
(2)プログラマブル論理デバイスによりLUTカスケードを実現しようとする論理関数のことを「目的論理関数」といい、fと記す。目的論理関数の入力変数の集合をX=(x,x,…,x)(但し、nは自然数)と記す。
(3)目的論理関数f(X)が、f(X)=fs-1(Xs-1,fs-2(Xs-2,fs-3(…f(X,f(X))…))),{X}⊆{X},{X}={X}∪{X}∪…∪{Xs-1}のような合成論理関数で表されるとする。このとき、目的論理関数f(X)を順序づけられた複数の関数の集合(f,f,…,fs-1)に分解することを「関数分解(function decomposition)」という。目的論理関数f(X)を関数分解して得られる各関数{f;i∈{0,1,2,…,s-1}}を「分解関数(decomposition function)」という。
(4)「多出力論理関数」とは、出力変数の個数が複数である論理関数をいう。
以下、本発明を実施するための最良の形態について、図面を参照しながら説明する。
【実施例1】

第1図は本発明の実施例1に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本発明の実施例1に係るプログラマブル論理デバイスは、入力変数レジスタ1、入力変数選択回路2-0~2-3、入力選択メモリ3-0~3-3、論理関数メモリ4-0~4-3、接続回路5-1~5-3、接続メモリ6-1~6-3、及び演算制御部10を備えている。
入力変数レジスタ1は、目的論理関数f(X)の演算に用いられるn個の入力変数X=(x,…,x)(但し、nは自然数)を記憶する。尚、入力変数Xは、外部入力線より入力変数レジスタ1に入力される。論理関数メモリ4-0~4-3は、目的論理関数fを関数分解して得られる分解関数{f;i∈{0,1,2,3}}の真理値表を、LUTとして記憶する。尚、本実施例においては、説明の便宜上、論理関数メモリ4-i(i∈{0,1,2,3})の段数を4段としているが、一般にはこの段数は任意に設定することができる。これらの論理関数メモリ4-0~4-3は、直列に配列され、それぞれ接続回路5-1~5-3を介して直列に順序づけて配列されている。
入力変数選択回路2-0~2-3は、入力変数レジスタ1から出力されるn個の入力変数X=(x,…,x)のうちから、それぞれ、各段の論理関数メモリ4-0~4-3に記憶された分解関数{f;i∈{0,1,2,3}}の真理値表の入力変数X(i∈{0,1,2,3})を選択し、論理関数メモリ4-0又は接続回路5-1~5-3へ出力する。入力選択メモリ3-0~3-3は、それぞれ、入力変数選択回路2-0~2-3の入力変数の選択に関する情報(以下、「入力選択情報」という。)がLUTとして記憶されている。入力変数選択回路2-0~2-3は、各入力選択メモリ3-0~3-3から出力される入力選択信号に基づいて、入力変数の選択の切り換えを行う。
各接続回路5-i(i∈{1,2,3})は、論理関数メモリ4-(i-1)及び入力変数選択回路2-iより入力される、中間変数Y及び入力変数Xを、選択するとともに適宜順序づけて、後段の論理関数メモリ4-i及び外部出力線7-iへ接続する。各接続メモリ6-iは、各接続回路5-iの接続関係に関する情報(以下、「接続情報」という。)を記憶している。接続回路5-iは、接続メモリ6-iから出力される接続情報信号に基づき、接続関係の再構成を行う。
演算制御部10は、このプログラマブル論理デバイス全体の演算処理の制御を行う。
第2図は第1図の入力変数選択回路2-i(i∈{0,1,2,3}。以下、符号2-0~2-3をまとめていう場合には、符号2と記す。)の構成を表す回路図である。尚、この回路図は、動作原理を説明するために、簡略化して記載している。
本実施例の入力変数選択回路2-i(i∈{0,1,2,3})は、第2図のようなシフタ回路により構成されている。尚、第2図では、説明の便宜上、17入力8出力の入力変数選択回路2-iの例を示しているが、入出力の数は、これに限られるものではない。
入力変数選択回路2-i(i∈{0,1,2,3})の入力端子in(00)~in(16)は、入力変数レジスタ1の出力端子に接続されている。従って、入力端子in(00)~in(16)からは入力変数X=(x,…,x)が入力される。また、入力変数選択回路2-0の出力端子out(00)~out(07)は、論理関数メモリ4-0の入力に接続されている。入力変数選択回路2-i(i∈{1,2,3})の出力端子out(00)~out(07)は、接続回路5-iの入力側端子の一部に接続されている。
入力変数選択回路2-i(i∈{0,1,2,3})は、入力側から、8ビットシフト回路11-3、4ビットシフト回路11-2、2ビットシフト回路11-1、及び1ビットシフト回路11-0が直列に接続されている。これにより、入力変数選択回路2-i(i∈{0,1,2,3})は、入力端子in(00)~in(16)の内容を0~15ビットの範囲でシフトさせて、連続する8ビット分を出力端子out(00)~out(07)に出力させることができる。
各シフト回路11-0~11-3には、1ビットの制御線shf0~shf3が接続されている。制御線shf j(j∈{0,1,2,3})が0のときは、シフト回路11-iは接続のシフトを行わず、制御線shf j(j∈{0,1,2,3})が1のときは、シフト回路11-iは接続のシフトを行う。尚、入力変数選択回路2-i(i∈{0,1,2,3})の各制御線shf0~shf3は、入力選択メモリ3-iの出力に接続されている。すなわち、入力選択メモリ3-0から読み出された4ビットのメモリの内容(すなわち、入力選択情報)が、選択制御信号としてそのまま制御線shf0~shf3に出力され、入力変数選択回路2-i(i∈{0,1,2,3})における入力変数のシフト量が設定される。
尚、第2図では、簡略化のために省略しているが、シフタ回路11-0~11-3内の各パス・トランジスタにより入力変数Xの信号振幅が減衰する。従って、実際には、入力変数Xの信号振幅を補償するために、シフタ回路の数段ごとに増幅器(バッファ)を挿入しておくことが必要となる。
また、多出力論理関数を、複数の出力集合に分割して実現する場合には、入力変数選択回路2-i(i∈{0,1,2,3})にシフタが使用できない場合がある。このような場合、接続回路を第7図に示すクロスバ・スイッチや第8図に示すマルチプレクサ・アレイ(後述)と同様のものを使用してもよい。
第3図は第1図の論理関数メモリ4-i(i∈{0,1,2,3}.以下、符号4-0~4-3をまとめていう場合には、符号4と記す。)の構成を表すブロック図である。
論理関数メモリ4は、その内部に、pページからなるメモリ領域FM~FMp-1を備えている。これらのメモリ領域には、分解関数f(j)(i∈{0,1,2,3},j∈{0,…,p-1})の真理値表がLUT(図では「LUT(j)」と記す。)として格納されている。以下では、LUT(j)が格納されているメモリ領域をFMと記す。
尚、ここで、添字「(j)」(j∈{0,…,p-1})は、j番目の目的論理関数f(j)を表す。本実施例におけるプログラマブル論理デバイスでは、複数の目的論理関数f(j)の分解関数{f(j)}を、それぞれの論理関数メモリ4の第jページに記憶させておく。そして、使用目的に応じて、ページを切り換えて、目的論理関数を選択することが可能な構成とされている。
また、論理関数メモリ4-i(i∈{0,1,2,3})は、アドレス・デコーダ16を備えている。アドレス・デコーダ16は、演算制御部10から入力されるページ選択番号pに基づいて、メモリ領域FMのメモリ・アクセスを可能とする。また、アドレス・デコーダ16は、接続回路2からNinビットの入力線17を介して入力される変数(X,Y)(r∈{0,1,2,3}.但し、r=0のとき、Y=φ。)に基づき、メモリ領域FM内のメモリ内容を読み出すアドレスを選択する。この選択されたアドレスのメモリ・セルには、分解関数f(j)の真理値f(j)(X,Y)が格納されている。メモリ領域FMは、アドレス・デコーダ16により、メモリ・セル内のアドレスが指定されると、当該メモリ・セル内に記憶されているデータを、中間変数Yr+1=(yr+1,1,…,yr+1,|Yr+1|)として出力線18に出力する。
第4図は第1図の接続回路5-i(i∈{1,2,3}.以下、符号5-1~5-3をまとめていう場合には、符号5と記す。)の周辺の回路ブロック図である。尚、この回路図は、動作原理を説明するために、簡略化して記載している。
本実施例における接続回路5は、入力線i~i15からの入力信号を循環的に任意のビット数だけシフトさせて出力線o~o15に出力するシフタ回路により構成されている。尚、第4図においては、説明の便宜上、一例として、16ビット入力16ビット出力の接続回路を記載しているが、入出力のビット数は、特にこれに限定されない。
接続回路5は、入力線i~i15の側から、8ビットシフタ回路20-3、4ビットシフタ回路20-2、2ビットシフタ回路20-1、1ビットシフタ回路20-0が直列に接続された構成とされている。各シフタ回路20-i(i∈{0,1,2,3})のオン/オフは、接続メモリ6(符号6-1~6-3をまとめて符号6と記す。以下同じ。)の出力に接続された制御線s(j∈{0,1,2,3})により制御される。
接続回路5-r(r∈{1,2,3})の入力線i~i15のうち、i~iは前段の論理関数メモリ4-(r-1)の出力側に接続されており、i~i15は入力変数選択回路2-rの出力側に接続されている。また、接続回路5-rの出力線o~o15のうち、o~oは、後段の論理関数メモリ4-rの入力側に接続されており、o~o15は外部出力線7-rとなっている。
各シフタ回路20-0~20-3の接続関係のシフトがないときには、入力線i~i15は、それぞれ出力線o~o15に接続される。これにより、前段の論理関数メモリ4-(r-1)の出力である中間変数Yは、総て後段の論理関数メモリ4-rに入力される。
一方、シフタ回路20-3のみが接続関係を8ビットシフトさせた場合には、入力線i~iが、それぞれ、出力線o~o15に接続され、入力線i~i15が、それぞれ、出力線o~oに接続される。これにより、前段の論理関数メモリ4-(r-1)の出力である中間変数Yは、総て外部出力線7-rに出力される。また、入力変数選択回路2-rから出力される入力変数Xは、総て後段の論理関数メモリ4-rに入力される。
また、各シフタ回路20-0~20-2により、接続関係をjビット(1≦j≦7)だけシフトさせた場合には、入力線i15-j+1~i15,i~ij-1が、それぞれ、出力線o~o15に接続され、入力線i~i7+jが、それぞれ、出力線o~oに接続される。これにより、入力線i~i7+jに入力されるjビットの入力変数Xが、後段の論理関数メモリ4-rに入力されるとともに、入力線i~iに入力される8-jビットの中間変数Yが後段の論理関数メモリ4-rに入力される。従って、後段の論理関数メモリ4-rに入力する入力変数Xの変数の個数|X|=nと、後段の論理関数メモリ4-rに入力する中間変数Yの変数の個数|Y|=uとを、k=n+u=8の条件下で自由に変更することが可能となっている。
第5図は第1図の接続メモリ6の構成を表すブロック図である。接続メモリ6-i(i∈{1,2,3})の内部には、p個のメモリ領域CM~CMp-1が備えられている。各メモリ領域CM~CMp-1には、接続回路5-iの各シフタ回路20-(N-1)~20-0(ここで、Nは接続回路におけるシフタ回路の段数を表し、第4図ではN=4である。)のシフト情報を表す接続情報(sNc-1(j),…,s(j))(j∈{0,…,p-1})が記憶されている。尚、ここで、添字「(j)」(j∈{0,…,p-1})は、j番目の目的論理関数f(j)に対応した接続情報であることを表す。
これらのメモリ領域CM~CMp-1のNビットの出力線s~sNc-1は、接続回路5-iの各シフタ回路20-0~20-(N-1)の制御線となっている。
また、各接続メモリ6の内部には、アドレス・デコーダ21が設けられている。アドレス・デコーダ21は、演算制御部10から入力されるページ選択番号pに従って、r番目のメモリ領域CMを選択する。アドレス・デコーダ21により選択されたメモリ領域CMは、Nビットの接続情報(sNc-1(r),…,s(r))からなる接続制御信号を接続回路5に出力する。
以上のように構成された本実施例に係るプログラマブル論理デバイスにおいて、以下その動作について説明する。
第6図は実施例1に係るプログラマブル論理デバイスの動作を表すフローチャートである。
最初に、演算を行おうとする目的論理関数f(X)を関数分解した分解関数{f,…,fs-1}(2≦s≦4)を、各論理関数メモリ4-0~4-3の第rページに書き込んでおく。尚、ここで、rはページ番号を示す。また、各入力選択メモリ3-0~3-3及び各接続メモリ6-1~6-3の第rページには、上記各分解関数{f,f,…,fs-1}に対応した入力選択情報及び接続情報を書き込んでおく。尚、各メモリへの書き込み機能については、第1図では図示していないが、通常のメモリの書き込み方法により行われる。以下では、s=4であるものとして説明する。
以上の書き込みがされた状態において、まず、演算制御部10は、各入力選択メモリ3-0~3-3、及び接続メモリ6-1~6-3に対して、ページ選択番号pを設定する(S1)。
これにより、各入力選択メモリ3-0~3-3は、第rページに書き込まれた入力選択情報を入力変数選択回路2-0~2-3の制御線shf0~shf3に出力する(S2)。また、接続メモリ6-1~6-3は、第rページに書き込まれた接続情報(s(r),…,s(r))を接続回路5-1~5-3の各制御線に出力する(S3)。
入力変数選択回路2-0~2-3は、制御線shf0~shf3に入力された入力選択情報に従って、入力端子in(00)~in(16)の一部を出力端子out(00)~out(07)と電気的に接続する。接続回路5-1~5-3は、各制御線より入力される接続情報(s(r),…、s(r))に従って、入力線i~i15と出力線o~oとを接続する。
次に、演算制御部10は、入力変数レジスタ1により、入力変数Xの出力を行う(S4)。これにより、論理関数メモリ4-0及び接続回路5-1~5-3には、それぞれ、入力変数X,X,X,Xが出力される。
これに伴い、まず論理関数メモリ4-0は、入力変数Xに対する分解関数fの真理値f(X)を中間変数Yとして出力する。この中間変数Yは、接続回路5-1を介して論理関数メモリ4-1の入力に伝達される。また、場合によっては、中間変数Yの一部は、外部出力線7-1へと伝達される。
論理関数メモリ4-1には、論理関数メモリ4-0から伝達された中間変数Yと、入力変数選択回路2-1及び接続回路5-1を介して入力変数レジスタ1から伝達される入力変数Xが入力される。論理関数メモリ4-1は、入力変数X及び中間変数Yに基づき、分解関数fの真理値f(X,Y)を中間変数Yとして出力する。この中間変数Yは、接続回路5-2を介して論理関数メモリ4-2の入力に伝達される。また、場合によっては、中間変数Yの一部は、外部出力線7-2へと伝達される。
論理関数メモリ4-2には、論理関数メモリ4-1から伝達された中間変数Yと、入力変数選択回路2-2及び接続回路5-2を介して入力変数レジスタ1から伝達される入力変数Xが入力される。論理関数メモリ4-2は、入力変数X及び中間変数Yに基づき、分解関数fの真理値f(X,Y)を中間変数Yとして出力する。この中間変数Yは、接続回路5-3を介して論理関数メモリ4-3の入力に伝達される。また、場合によっては、中間変数Yの一部は、外部出力線7-3へと伝達される。
論理関数メモリ4-3には、論理関数メモリ4-2から伝達された中間変数Yと、入力変数選択回路2-3及び接続回路5-3を介して入力変数レジスタ1から伝達される入力変数Xが入力される。論理関数メモリ4-3は、入力変数X及び中間変数Yに基づき、分解関数fの真理値f(X,Y)を出力変数fとして出力する。この出力変数fは、外部出力線7-4に伝達される(S5)。以上の処理は、前段から後段に向かって直列に伝達しながらパイプライン処理により行われる。そして、目的論理関数fの演算結果は、各外部出力線7-1~7-4より取り出される。
なお、本実施例では接続回路5-1~5-3として、第4図のシフタ回路を使用したが、接続回路5-1~5-3としては、第7図に示したクロスバ・スイッチ(Cross Bar Switch)による接続回路5-i’(i∈{1,2,3})や第8図に示したマルチプレクサ・アレイ(Multiplexer Array)による接続回路5-i”を使用することができる。要するに、前段の論理関数メモリの出力線の集合Yi-1、外部入力線の集合X、後段の論理関数メモリの入力線の集合Zに対して、接続回路5-iは、集合Yi-1∪Xの要素から|Z|個の要素を選択し、集合Zの要素と一対一に対応づける機能(又は、必要に応じて、選択した|Z|個の要素の順序を外部指示に従って置換し集合Zの要素と一対一に対応づける機能)を有するものであればよい。
尚、上記クロスバ・スイッチによる接続回路5-i’は、シフタ回路に比べると切換制御線の数が多くなり回路が大きくなるという欠点はあるが、信号が通過するパス・トランジスタの段数を減らすことができるため、演算速度の高速化が可能となる。
また、接続回路5-1~5-3において、変数順序の置換を必要としない場合には、第9図に示したようなセレクタ・アレイ(Selector Array)による接続回路5-i’’’を使用してもよい。セレクタ・アレイによる接続回路5-i’’’は極めて簡単な回路で構成することが可能である。従って、接続回路5-i’’’は、小さいレイアウト面積しか必要とせず、高速であり、回路消費電力も小さい。
また、本実施例では、各論理関数メモリ4-0~4-3を非同期に動作させる例を示したが、本発明においては、各論理関数メモリ4-0~4-3をクロックで同期させて動作させてもよい。
次に、上記動作をより分かりやすく説明するため、具体的な例を用いて本実施例のプログラマブル論理デバイスの具体的な動作の説明を行う。
〔例1〕加算回路
ここでは、簡単な例として、二つの8ビットの二進数A=(a,a,a,a,a,a,a,a),B=(b,b,b,b,b,b,b,b)の加算を行う加算器を、上記プログラマブル論理デバイスによって実行する例を説明する。尚、下位からの桁上げ(キャリー)入力ビットとしてcinも考慮して、以下のような演算を行う加算器を考える。
JP0004246200B2_000002t.gif ここで、桁上げ入力ビットcinとは、8ビット以上の大きな数の加算を行う場合に、加算器を直列につなげて使用する際に、下位の加算器からの桁上げを表すビットである。桁上げ出力ビットcoutも、同様に、上位の加算器に出力する桁上げを表すビットである。
このような二つの8ビットの二進数A,Bの加算を行う論理関数をf=f(X)(X=(A,B))とすると、論理関数fは第10図により表される。この関数は、第11図のように、8つの分解関数{g,g,g,g,g,g,g,g}に関数分解することが可能である。ここで、各分解関数は、(数2)又は(数3)のような論理式で表される。
JP0004246200B2_000003t.gif すなわち、各分解関数は、2つの入力変数a,b及び桁上げを表す中間変数cout(i-1)の2を法とする和S及び桁上げの中間変数cout(i)を出力する論理関数となっている。
これを、第1図のような4段の論理関数メモリ4-0~4-3からなるプログラマブル論理デバイスで実現する。この場合には、第12図に示したように、分解関数{g,g,g,g,g,g,g,g}を、4つの分解関数組{g,g},{g,g},{g,g},{g,g}に分ける。そして、第13図に示すように、各々の分解関数組を1つに合成し、4つの分解関数f,f,f,fで表す。ここで、各分解関数は、(数4)又は(数5)のような論理式で表される5入力3出力論理関数である。
JP0004246200B2_000004t.gif 各々の分解関数fの真理値表は、第14図のようになる。そこで、第15図の真理値表を、論理関数メモリ4-0の第0ページに記憶させる。第16図の真理値表(LUT)を論理関数メモリ4-1~4-3の第0ページに記憶させる。ここで、それぞれ、S2i,S2i+1,cout(i)(i∈{1,2,3})は、それぞれ接続回路5-(i+1)の入力線i,i,iに出力されるように論理関数メモリの出力ビットを割り当てる。
各入力選択メモリ3-0~3-3の第0ページには、それぞれ、0ビットシフト、5ビットシフト、9ビットシフト、13ビットシフトの情報を記憶させる。すなわち、各入力選択メモリ3-0~3-3の入力選択情報(shf0,shf1,shf2,shf3)として、それぞれ、(0,0,0,0)、(0,1,0,1)、(1,0,0,1)、(1,1,0,1)を記憶させる。
各接続メモリ6-1~6-3の第0ページには、接続情報としてシフト情報(4ビット)を記憶させる。すなわち、接続情報として(s,s,s,s)=(0,1,0,0)を記憶させる。
以上のようにプログラムされた状態において、以下、プログラマブル論理デバイスの演算処理を説明する。
まず、入力変数レジスタ1には、変数A,B,cinが入力される。入力変数レジスタ1はこれらの変数を記憶する。演算制御部10は、入力選択メモリ3-0~3-3、論理関数メモリ4-0~4-3、及び接続メモリ6-1~6-3に対してページ選択番号pとして第0ページを設定する。
これにより、各入力選択メモリ3-0~3-3は、第0ページに書き込まれた入力選択情報(shf0,shf1,shf2,shf3)=(0,0,0,0)、(0,1,0,1)、(1,0,0,1)、(1,1,0,1)を、入力変数選択回路2-0~2-3の制御線shf0~shf3に出力する。入力変数選択回路2-0~2-3は、制御線shf0~shf3に入力された入力選択情報に従って、入力端子in(00)~in(16)の一部を出力端子out(00)~out(07)と電気的に接続する。
具体的には、入力選択メモリ3-0は、(shf0,shf1,shf2,shf3)=(0,0,0,0)なので、in(00)~in(07)をout(00)~out(07)に接続する。入力選択メモリ3-1は、(shf0,shf1,shf2,shf3)=(0,1,0,1)なので、5ビットシフトさせて、in(05)~in(12)をout(00)~out(07)に接続する。入力選択メモリ3-2は、(shf0,shf1,shf2,shf3)=(1,0,0,1)なので、9ビットシフトさせて、in(09)~in(16)をout(00)~out(07)に接続する。入力選択メモリ3-3は、(shf0,shf1,shf2,shf3)=(1,1,0,1)なので、13ビットシフトさせて、in(13)~in(16)をout(00)~out(03)に接続する。このとき、out(04)~out(07)には入力変数は伝達されない。
また、接続メモリ6-1~6-3は、各々、第0ページに書き込まれた接続情報(s(0),…,s(0))=(0,1,0,0)を接続回路5-1~5-3の各制御線に出力する。接続回路5-1~5-3は、各制御線より入力される接続情報(s(k),…,s(k))に従って、入力線i~i15と出力線o~oとを接続する。具体的には、各接続メモリ6-1~6-3は、4ビットシフトさせて、i~i11をそれぞれo~oに接続し、i12~i15,i~iをそれぞれo~o15に接続する。
次に、演算制御部10は、入力変数レジスタ1により、入力変数Xの出力を行う。このとき、入力変数選択回路2-1~2-3の入力端子には、それぞれ、(表1)のように入力変数の値が入力される。
JP0004246200B2_000005t.gif 入力変数選択回路2-0は、(out(00),out(01),out(02),out(03),out(04))=(cin,a,a,b,b)を出力し、これを論理関数メモリ4-0に入力する。ここで、出力out(05)~out(07)は使用されないので省略した。
論理関数メモリ4-0は、第0ページに記憶されたLUT(LUT)のアドレス(i,i,i,i,i,i,i,i)=(cin,a,a,b,b,-,-,-)に記憶された真理値f(cin,a,a,b,b)の値(o,o,o,o,o,o,o,o)=(-,-,S,S,cout(0),-,-,-)を接続回路5-1に出力する。ここで、「-」はドントケア(0でも1でもよい。)を表す。このとき、接続回路5-1の各入力線(i,i,i,i,i,i,i,i)には(-,-,S,S,cout(0),-,-,-)が入力される。
一方、入力変数選択回路2-1は、(out(00),out(01),out(02),out(03))=(a,a,b,b)を出力し、これを接続回路5-1の入力線(i,i,i10,i11)に入力する。
接続回路5-1からは、それぞれ、(表2)の値が出力される。
JP0004246200B2_000006t.gif 接続回路5-1の出力線o~o15は、外部出力線7-1として取り出される。従って、演算結果S,Sが外部出力線7-1のうちの2本に出力される。
次に、論理関数メモリ4-1は、第0ページに記憶されたLUT(LUT)のアドレス(i,i,i,i,i,i,i,i)=(cout(0),-,-,-,a,a,b,b)に記憶された真理値f(cout(0),a,a,b,b)の値(o,o,o,o,o,o,o,o)=(-,-,S,S,cout(1),-,-,-)を接続回路5-2に出力する。このとき、接続回路5-2の各入力線(i,i,i,i,i,i,i,i)には(-,-,S,S,cout(1),-,-,-)が入力される。
一方、入力変数選択回路2-2は、(out(00),out(01),out(02),out(03))=(a,a,b,b)を出力し、これを接続回路5-2の入力線(i,i,i10,i11)に入力する。
接続回路5-2からは、それぞれ、(表3)の値が出力される。
JP0004246200B2_000007t.gif 接続回路5-2の出力線o~o15は、外部出力線7-2として取り出される。従って、演算結果S,Sが外部出力線7-2のうちの2本に出力される。
次に、論理関数メモリ4-2は、第0ページに記憶されたLUT(LUT)のアドレス(i,i,i,i,i,i,i,i)=(cout(1),-,-,-,a,a,b,b)に記憶された真理値f(cout(1),a,a,b,b)の値(o,o,o,o,o,o,o,o)=(-,-,S,S,cout(2),-,-,-)を接続回路5-3に出力する。このとき、接続回路5-3の各入力線(i,i,i,i,i,i,i,i)には(-,-,S,S,cout(2),-,-,-)が入力される。
一方、入力変数選択回路2-3は、(out(00),out(01),out(02),out(03))=(a,a,b,b)を出力し、これを接続回路5-3の入力線(i,i,i10,i11)に入力する。
接続回路5-3からは、それぞれ、(表4)の値が出力される。
JP0004246200B2_000008t.gif 接続回路5-3の出力線o~o15は、外部出力線7-3として取り出される。従って、演算結果S,Sが外部出力線7-3のうちの2本に出力される。
最後に、論理関数メモリ4-3は、第0ページに記憶されたLUT(LUT)のアドレス(i,i,i,i,i,i,i,i)=(cout(2),-,-,-,a,a,b,b)に記憶された真理値f(cout(2),a,a,b,b)の値(o,o,o,o,o,o,o,o)=(-,-,S,S,cout(3),-,-,-)を出力線7-4に出力する。これにより、総ての演算結果が出力線7-1~7-4に出力されて演算が終了する。
〔例1終わり〕
【実施例2】

第17図は本発明の実施例2に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本実施例においては、入力変数選択回路2-1~2-3の出力線の一部を、接続回路5-1~5-3を介すことなく、論理関数メモリ4-1~4-3の入力に直接接続したことを特徴とする。実用的な多くの論理関数においては、論理関数メモリ4-1~4-3の入力には、最低でも1つの入力変数が入力される場合が多い。すなわち、入力変数選択回路2-1~2-3の出力線の最低1本は、論理関数メモリ4-1~4-3の入力に接続される場合が多い。従って、汎用的な用途で使用するプログラマブル論理デバイスでは、最初から入力変数選択回路2-1~2-3の出力線の一部を、接続回路5-1~5-3を介さずに論理関数メモリ4-1~4-3の入力に直接接続しておけば、接続回路5-1~5-3の入力線の本数を減らすことができる。その結果、接続回路5-1~5-3を小型化することが可能となる。また、接続回路5-1~5-3を第4図のようなシフタ回路により構成する場合には、シフタの段数を減らすことが可能であり、演算速度の高速化及び低消費電力化を図ることができる。
【実施例3】

第18図は本発明の実施例3に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本実施例においては、接続回路5-1~5-3に入力する入力変数を選択する入力変数選択回路2-1~2-3に加えて、接続回路5-1~5-3を介さずに、論理関数メモリ4-1~4-3に直接入力する入力変数の選択を行う入力変数選択回路30-1~30-3及びその入力選択情報を記憶する入力選択メモリ31-1~31-3を設けたことを第1の特徴とする。また、前段の論理関数メモリ4-(i-1)(i∈{1,2,3})から後段の論理関数メモリ4-iに入力される中間変数の一部を、接続回路5-iを介さずに直接入力するように構成したことを第2の特徴とする。
このように構成することで、接続回路5-1~5-3の入力線の本数を減らすことができる。その結果、接続回路5-1~5-3を小型化することが可能となる。また、接続回路5-1~5-3を第4図のようなシフタ回路により構成する場合には、シフタの段数を減らすことが可能であり、演算速度の高速化を図ることができる。
【実施例4】

第19図は本発明の実施例4に係るプログラマブル論理デバイスの全体構成を表すブロック図、第20図は第19図の出力レジスタ及び出力デコーダの構成を表すブロック図、第21図は第20図の記憶素子の構成を表すブロック図である。本実施例においては、外部出力線7-1~7-4に出力された出力変数を一時的に記憶する出力変数レジスタ51、及び出力変数レジスタ51が出力変数を取り込むためのロード信号を出力する出力選択デコーダ52を備えたことを特徴とする。他の構成については、第1図と同様であるため、説明は省略する。尚、本実施例においては各論理関数メモリ4-0~4-3は、内部にアドレス・ラッチ(図示せず)を備えており、クロックにより同期して動作するものとする。
出力変数レジスタ51は、32個の記憶素子M(i,j)(i∈{1,2,3,4},j∈{0,1,2,3,4,5,6,7})を備えている。各記憶素子M(i,j)は、データを保持するDフリップ・フロップ(以下、「DFF」という。)53と2入力1出力のマルチプレクサ(以下、「MUX」という。)54とから構成されている。DFF53には、共通のクロック信号Clockが入力される。このクロック信号Clockが1のときに、DFF53はデータ入力Dに入力された値をラッチする。MUX54の出力はDFF53のデータ入力Dに接続されている。また、DFF53の出力Qは、MUX54の0側の入力D0に接続されている。MUX54の1側の入力D1は、外部出力線7-iのj番目の線に接続されている。MUX54は、ロード信号Loadにより制御され、Load=0のときに0側の入力を選択し、Load=1のときに1側の入力を選択する。
出力選択デコーダ52には、演算制御部10から、2ビットの出力選択信号tが入力される。そして、出力選択デコーダ52は、4つの出力選択信号T~Tを出力する。t=(0,0)のときは、(T1,T2,T3,T4)=(1,0,0,0)が出力される。t=(0,1)のときは、(T1,T2,T3,T4)=(0,1,0,0)が出力される。t=(1,0)のときは、(T1,T2,T3,T4)=(0,0,1,0)が出力される。t=(1,1)のときは、(T1,T2,T3,T4)=(0,0,0,1)が出力される。各出力選択信号T(i∈{1,2,3,4})は、各記憶素子M(i,j)にロード信号Loadとして入力される。
演算制御部10は、演算開始時には、t=(00)として、論理関数メモリ4-0が演算結果を出力した後にt=(01)、論理関数メモリ4-1が演算結果を出力した後にt=(10)、論理関数メモリ4-2が演算結果を出力した後にt=(11)のように出力選択信号tを切り換えて、演算結果を出力変数レジスタ51にラッチする。そして、演算が終了した時点で、出力変数レジスタ51に記憶された出力変数を読み出すことで、演算結果を得ることができる。
【実施例5】

第22図は本発明の実施例5に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本実施例においては、第1の出力選択回路25、第2の出力選択回路26、入力選択メモリ3-4、及び入力変数選択回路2-4を備えていることを特徴とする。尚、他の構成については、第1図と同様であるため、説明は省略する。
第2の出力選択回路26は、入力変数選択回路2-4から入力される入力変数の値に従って、最終段の論理関数メモリ4-3から出力される出力変数のうちの全部又は一部を選択して出力する。尚、入力変数選択回路2-4は、第2図に示したものと同様のシフト回路で構成されている。但し、本実施例では、最終段の論理関数メモリ4-3の出力が8ビットであるため、入力変数選択回路2-4に使用されるシフト回路の出力は、3ビットとされる。一般には、入力変数選択回路2-4の出力は、最終段の論理関数メモリ4-3の出力の数Nに対して、
JP0004246200B2_000009t.gifとされる。以下、入力変数選択回路2-4の出力out(00)~out(02)(第2図参照)を、それぞれ、F,F,Fで表す。
第1の出力選択回路25は、マルチプレクサにより構成されており、演算制御部10から出力される出力選択信号tに従って、各論理関数メモリ4-0~4-2及び第2の出力選択回路26から出力される出力変数のうちの何れかを選択して出力する。
ここで、出力選択信号tとは、第1の出力選択回路25が選択する出力線束の指定番号(t∈{(00),(01),(10),(11)})を表す2ビットの信号である。第1の出力選択回路25は、t=(00)のときは接続回路5-1の出力線束(第4図のo~o15)を選択し、t=(01)のときは接続回路5-2の出力線束を選択し、t=(10)のときは接続回路5-3の出力線束を選択し、t=(11)のときは第2の出力選択回路26の出力線束を選択する。
第23図は第22図の第2の出力選択回路26の構成を表すブロック図である。尚、この回路図は、動作原理を説明するために、簡略化して記載している。
第2の出力選択回路26は、第23図に示したように、2入力1出力のマルチプレクサ(以下、「MUX」という。)31~37を多段にカスケード状に接続し、各段において出力を、MUX38~MUX44を通して取り出すことができるように構成されている。尚、第23図では、説明の便宜上、出力線のビット数Nが8ビットの例を示しているが、Nは8ビットに限られるものではない。
第23図において、第2の出力選択回路26の入力線y~yは、論理関数メモリ4-3の出力に接続される。この入力線y~yより、出力変数Yの値が入力される。また、出力選択回路26の出力線f(0)~f(7)からは、入力線y~yのうち選択された出力変数Yの値(y,…,y|Y|-1)が出力される。
入力線y,y、入力線y,y、入力線y,y、及び入力線y,yは、それぞれMUX31、MUX32、MUX33、及びMUX34の入力側に接続されている。MUX31,32、及びMUX33,34の出力は、それぞれMUX35、及びMUX36の入力側に接続されている。MUX35,36の出力は、MUX37の入力に接続されている。
一方、(入力線y,MUX31の出力)、(入力線y,MUX32の出力)、(入力線y,MUX33の出力)、及び(入力線y,MUX34の出力)は、それぞれMUX38、MUX39、MUX40、及びMUX41の入力側に接続されている。また、(入力線y,MUX35の出力)、(入力線y,MUX37の出力)、及び(入力線y,MUX36の出力)は、それぞれMUX42、MUX43、及びMUX44の入力側に接続されている。
MUX31~34は、共通の入力変数Fにより切換制御がされる。すなわち、Fが“0”のときは、MUX31,32,33,34は、それぞれ、入力線y,y,y,yを選択し、Fが“1”のときは、MUX31,32,33,34は、それぞれ、入力線y,y,y,yを選択する。
MUX35,36は、共通の入力変数Fにより切換制御がされる。すなわち、Fが“0”のときは、MUX35,36は、それぞれ、MUX31,33を選択し、Fが“1”のときは、MUX35,36は、それぞれ、MUX32,34を選択する。
また、MUX37は、入力変数Fにより切換制御がされる。すなわち、Fが“0”のときは、MUX37はMUX35を選択し、Fが“1”のときは、MUX37はMUX36を選択する。
MUX31~34によって、8本の入力線y~yのうちの4本が選択される。MUX31~36によって、8本の入力線y~yのうちの2本が選択される。MUX31~37によって、8本の入力線y~yのうちの1本が選択される。これは、目的論理関数f(X)=(f(X),f(X),…,f(X))の出力変数の個数mが4個以下の場合、論理関数メモリ4-3の出力する中間変数Yに対し、更に入力変数(F,F,F)による論理演算が可能であることを意味する。従って、論理関数メモリ4-0~4-3により行う演算における入力変数の数を減らすことができる。
すなわち、例えば、目的論理関数f(x,x,…,xn-2,xn-1)を、
JP0004246200B2_000010t.gifのようにシャノン展開して、関数f’(x,x,…,xn-2)を4つの分解関数f(X),f(X,Y),f(X,Y),f(X,Y)(但し、X∪X∪X∪X={x,x,…,xn-2})に関数分解して、最終段の分解関数f(X,Y)の出力数を4以下となるようにすれば、論理関数メモリ4-0~4-3に入力する入力変数の個数を1個減らすことができる。そして、入力変数xn-1は、入力変数Fとして、第2の出力変数選択回路26に入力するようにすればよい。
同様に、目的論理関数f(x,x,…,xn-2,xn-1)を、
JP0004246200B2_000011t.gifのようにシャノン展開すれば、論理関数メモリ4-0~4-3に入力する入力変数の個数を2個減らすことができ、
JP0004246200B2_000012t.gifのようにシャノン展開すれば、論理関数メモリ4-0~4-3に入力する入力変数の個数を3個減らすことができる。
尚、MUX31~MUX37により選択された8ビット、4ビット、2ビット、又は1ビットの出力は、共通の8本の出力線によって第1の出力選択回路25に出力する必要がある。そこで、第23図では、MUX38~44によって、上記各本数の出力線が選択されたときの出力を、共通の出力線f(0)~f(7)を通して出力されるように構成されている。MUX38~44は、共通の選択切換変数Selectによって切換制御がされる。尚、選択切換変数Selectの設定値は、出力変数f(X)=(f(X),f(X),…,f(X))の個数mによって、あらかじめ選択切換メモリ45に記憶される。そして、演算制御部10の制御によって、Selectに設定される。
MUX38は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX31の出力を選択し、選択した線の信号値を出力線f(0)に出力する。MUX39は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX32の出力を選択し、選択した線の信号値を出力線f(2)に出力する。MUX40は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX33の出力を選択し、選択した線の信号値を出力線f(4)に出力する。MUX41は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX34の出力を選択し、選択した線の信号値を出力線f(6)に出力する。
MUX42は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX35の出力を選択し、選択した線の信号値を出力線f(1)に出力する。MUX43は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX37の出力を選択し、選択した線の信号値を出力線f(3)に出力する。MUX44は、Selectが“0”のとき入力線yを選択し、Selectが“1”のときMUX36の出力を選択し、選択した線の信号値を出力線f(5)に出力する。また、出力線f(7)は、入力線yに直結されている。
目的論理関数fの演算結果f(X)のビット数(出力の本数)が8のときは、Selectを“0”とする。これにより、出力線f(0)~f(7)には、入力線y~yに入力される出力変数Y=(y,…,y)の値が出力される。出力の本数が4のときは、Selectを“1”に設定し、入力変数Fに“0”又は“1”を入力する。これにより、入力線y~yのうちF=0のときは(y,y,y,y)の4本が、F0=1のときは(y,y,y,y)の4本が、出力線f(0),f(2),f(4),f(6)に出力される。出力の本数が2のときは、Selectを“1”とし、入力変数F、Fに“0”又は“1”を設定する。これにより、(F,F)=(0,0)のときは、出力線f(1),f(5)には入力線y~yのうち2本に入力される出力変数Y=(y,y)の値が出力される。(F,F)=(0,0),(0,1),(1,1)のときは出力には(y,y),(y,y),(y,y)の値がそれぞれ出力される。出力の本数が1のときは、Selectを“1”とし、入力変数F,F,Fに“0”又は“1”を設定する。これにより、出力線f(3)には、入力線y~yのうち1本にF,F,Fで指定した入力が出力される。
このように第2の出力選択回路26を設けることにより、出力変数f(X)の個数が、最終段の論理関数メモリ4-3の全出力線の本数の1/2以下の場合には、第2の出力選択回路26を用いて更に選択操作を行うことが可能である。これによって、論理関数メモリ4-0~4-3において演算を行う分解関数の入力変数の総数を実質的に1個以上増すことが可能となる。従って、プログラマブル論理デバイス全体で許容される入力変数の数を増やすことが可能となる。
尚、第23図では、出力選択回路26内のマルチプレクサは2入力1出力のものを使用しているが、一般に、w入力1出力(w≧2)のMUXを使用することが可能である。
【実施例6】

第24図は本発明の実施例6に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本実施例においては、第2の出力選択回路26を、第1の出力選択回路25の後段側に接続したことを特徴とする。尚、第1の出力選択回路25及び第2の出力選択回路26の接続順序以外は、実施例5と同様に構成されているので、各部の説明については省略する。
接続回路5-1~5-3及び論理関数メモリ4-3から出力される変数組は、第1の選択回路25において何れか一つが選択される。第1の選択回路25において選択された変数組は、入力変数(F,F,F)及び選択切換変数Selectの値に基づいて、第2の選択回路26によりその総て又は一部が選択され、出力変数として出力される。
ここで、任意のn変数論理関数f(x,x,…,xn-1)は、以下の形で表現することが可能である。
JP0004246200B2_000013t.gif 従って、上記部分関数f~fを論理関数メモリ4-0~4-3により実現し、各部分関数f~fとxn-2,xn-1等との積項を第2の出力選択回路26により演算することで、n変数の論理関数を実現することが可能となる。
【実施例7】

第25図は本発明の実施例7に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本発明の実施例7に係るプログラマブル論理デバイスは、入力変数レジスタ1、入力変数選択回路2-0~2-3、入力選択メモリ3-0~3-3、論理関数メモリ4-0~4-3、接続回路5-0~5-3、接続メモリ6-0~6-3、領域指定メモリ8-0~8-3、及び演算制御部10を備えている。尚、本実施例においては、各回路は共通のクロックによって同期して動作するものとする。
入力変数レジスタ1は、目的論理関数f(X)の演算に用いられるn個の入力変数X=(x,…,x)(但し、nは自然数)を記憶する。尚、入力変数Xは、外部入力線から入力変数レジスタ1に入力される。論理関数メモリ4-0~4-3は、目的論理関数fを関数分解して得られる分解関数{f;i∈{0,1,2,3}}の真理値表を、LUTとして記憶する。尚、本実施例においては、一例として、論理関数メモリ4-i(i∈{0,1,2,3})の段数を4段としているが、一般にはこの段数は任意に設定することができる。これらの論理関数メモリ4-0~4-3は、順序づけて配列され、それぞれ接続回路5-0~5-3を介してリング状に接続されている。
尚、本実施例における論理関数メモリ4-0~4-3は、第3図で説明したものと同様のものを使用する。その際、アドレス・デコーダ16は、領域指定メモリ8-iから入力されるページ選択番号p(p)に基づいて、メモリ領域FMのメモリ・アクセスを可能とする。
入力変数選択回路2-0~2-3は、入力変数レジスタ1から出力されるn個の入力変数X=(x,…,x)のうちから、それぞれ、各段の論理関数メモリ4-0~4-3に記憶された分解関数{f;i∈{0,1,2,3}}の真理値表の入力変数X(i∈{0,1,2,3})を選択し、接続回路5-0~5-3へ出力する。入力選択メモリ3-0~3-3は、それぞれ、入力変数選択回路2-0~2-3の入力変数の選択に関する情報(以下、「入力選択情報」という。)が記憶されている。入力変数選択回路2-0~2-3は、各入力選択メモリ3-0~3-3から出力される入力選択信号に基づいて、入力変数の選択の切り換えを行う。
尚、本実施例においては、入力変数選択回路2-0~2-3には、第2図に示したようなシフタ回路を使用する。第2図の入力変数選択回路2-i(i∈{0,1,2,3})において、入力端子in(00)~in(16)は、入力変数レジスタ1の出力端子に接続されている。従って、入力端子in(00)~in(16)からは入力変数X=(x,…,x)が入力される。また、入力変数選択回路2-i(i∈{0,1,2,3})の出力端子out(00)~out(07)は、接続回路5-iの入力側端子の一部に接続されている。
各接続回路5-i(i∈{0,1,2,3})は、論理関数メモリ4-(i-1 mod 4)及び入力変数選択回路2-iより入力される、中間変数Y及び入力変数Xを、順序を変えて、後段の論理関数メモリ4-i及び外部出力線7-iへ接続する。各接続メモリ6-i(i∈{0,1,2,3})は、各接続回路5-iの接続関係に関する情報(以下、「接続情報」という。)を記憶している。接続回路5-iは、接続メモリ6-iから出力される接続情報信号に基づき、接続関係の切り換えを行う。
尚、本実施例においては、説明の便宜上、接続回路5-0~5-3には、第4図に示したようなサイクリックなシフタ回路を使用することとする。第4図に示したような接続回路5-j(j∈{1,2,3})において、入力線i~i15のうち、i~iは前段の論理関数メモリ4-(j-1)の出力側に接続されており、i~i15は入力変数選択回路2-jの出力側に接続されている。また、接続回路5-0の入力線i~i15のうち、i~iは前段の論理関数メモリ4-3の出力側に接続されており、i~i15は入力変数選択回路2-0の出力側に接続されている。一方、接続回路5-j(j∈{0,1,2,3})の出力線o~o15のうち、o~oは、後段の論理関数メモリ4-jの入力側に接続されており、o~o15は外部出力線7-jとなっている。
また、本実施例においては、各接続メモリ6-i(i∈{0,1,2,3})は、第5図に示したものと同様のものが使用されている。
各領域指定メモリ8-i(i∈{0,1,2,3})は、目的論理関数の演算段数に対応して、論理関数メモリ4-iに記憶されたLUTのうちの使用するものが格納されているページ番号(以下、「領域指定変数」という。)が記憶されている。論理関数メモリ4-iは、領域指定メモリ8-iが出力する領域指定変数に従ってページを設定する。
演算制御部10は、プログラマブル論理デバイス全体の演算処理の制御を行う。
第26図は第25図の演算制御部10の構成を表すブロック図である。
演算制御部10は、演算ステップ・レジスタ61、ステップ・カウンタ62、ページ・カウンタ63、及び出力コントローラ64を備えた構成からなる。
演算ステップ・レジスタ61には、目的論理関数を関数分解した後の分解関数の数である演算ステップ数が格納される。ステップ・カウンタ62は、現在演算が行われている分解関数の段数をカウントする。このステップ・カウンタ62には、演算ステップ・レジスタ61に格納された値が設定され、演算処理が1段進行するのに応じて、内部に格納された値を1ずつ減じていくダウン・カウンタによって構成されている。ステップ・カウンタ62は、そのカウント値iが0となったときに、終了信号ENDを出力する。また、ステップ・カウンタ62は、外部からリセット信号resetが入力されたとき、カウント値を演算ステップ・レジスタ61に格納された値に設定する。
ページ・カウンタ63は、入力選択メモリ3、接続メモリ6、及び領域指定メモリ8が出力するデータが格納されている各メモリのページ番号をカウントし、そのカウント値kをカウント信号pkとして出力する。ページ・カウンタ63は、アップ・カウンタであり、出力コントローラ64から出力されるチップ・イネーブル信号CEの立ち下がりを検出したときに、カウント値kを1だけ増加させる。尚、ページ・カウンタ63は、リセット信号resetが入力されたとき、又はステップ・カウンタ62から終了信号ENDが入力されたときに、カウント値kを0にリセットする。
出力コントローラ64は、各々の論理関数メモリ4-0~4-3に対して、チップ・イネーブル信号CE~CE、及びアドレス・ストローブ信号ADSP~ADSPを出力することで、論理関数メモリ4-0~4-3の出力制御を行う。
尚、チップ・イネーブル信号CEは、i段目の論理関数メモリ4-iを活性化する信号であり、チップ・イネーブル信号CEが“1”(真値)となった(アサートされた)ときに、論理関数メモリ4-iが外部からの入力信号の受け付け及びデータの出力を行うことが可能となる。アドレス・ストローブ信号ADSPは、論理関数メモリ4-iに対して、入力されたアドレスのラッチを制御するための信号である。論理関数メモリ4-iは、クロックエッジでアドレス・ストローブ信号ADSPが“1”(真値)となっている(アサートされている)ときに、入力線i(00)~i(07)に入力されているデータを、内部のアドレス・レジスタに設定する。また、アドレス・ストローブ信号ADSPが“1”から“0”(偽値)に遷移すると、内部のアドレス・レジスタに設定されているアドレス値をラッチする。尚、チップ・イネーブル信号CEが“0”(偽値)とされた状態では、ADSPが“1”となっても、入力線i(00)~i(07)に入力されているデータはラッチされない。
第27図は第26図の出力コントローラ64の内部構成を表すブロック図である。
出力コントローラ64は、4つのフリップ・フロップ(以下、「FF」という。)65~68からなるジョンソン・カウンタ69、4つのAND回路70~73、及び1つのOR回路74によって構成されている。
FF65~68のクロック端子Cには、共通のクロック信号clockが入力されている。また、FF65,66,67,68の出力Q,Q,Q,NOT(Q)は、それぞれ、FF65,66,67,68のデータ入力D,D,D,Dに接続されている。また、OR回路74は、リセット信号reset及び終了信号ENDの論理和のリセット信号reset’を出力する。FF65~68のリセット端子rstには、リセット信号reset’が入力されている。
このように構成することにより、ジョンソン・カウンタ69の出力(Q,Q,Q,Q)の状態は、クロック信号clockが立ち上がるごとに、
(0,0,0,0)
→(1,0,0,0)
→(1,1,0,0)
→(1,1,1,0)
→(1,1,1,1)
→(0,1,1,1)
→(0,0,1,1)
→(0,0,0,1)
→(0,0,0,0)
のようにサイクリックに遷移する。すなわち、それぞれのクロックごとに、1ビット右にシフトして、最上位のビット(Q)を反転して、最下位のビット(Q)とするという動作を繰り返す。
FF65,67の出力Q,Qが、それぞれ、チップ・イネーブル信号CE,CEとして出力される。また、FF65,67の出力NOT(Q),NOT(Q)が、それぞれ、チップ・イネーブル信号CE,CEとして出力される。ここで、NOT(Q)は、出力Qの反転出力である。
また、AND回路70は、FF65,66の出力Q,NOT(Q)の論理積をアドレス・ストローブ信号ADSPとして出力する。AND回路71は、FF67,68の出力Q,NOT(Q)の論理積をアドレス・ストローブ信号ADSPとして出力する。AND回路72は、FF65,66の出力NOT(Q),Qの論理積をアドレス・ストローブ信号ADSPとして出力する。AND回路73は、FF67,68の出力NOT(Q),Qの論理積をアドレス・ストローブ信号ADSPとして出力する。
尚、論理関数メモリ4-0~4-3は、チップ・イネーブル信号CE~CEが“0”とされた状態においては、低消費電力モードになるものとする。これにより、演算に使用されない論理関数メモリ4の消費電力が低減され、LUTカスケード回路全体を、より低消費電力化することができる。
以上のように構成された本実施例に係るプログラマブル論理デバイスにおいて、以下その動作について説明する。
第28図は実施例7に係るプログラマブル論理デバイスの動作を表すフローチャート、第29図は実施例7に係るプログラマブル論理デバイスの動作時における各信号の変化を表すタイミング図である。
最初に、演算を行おうとする目的論理関数f(X)を関数分解した分解関数{f,…,fs-1}(1≦s)の真理値表を、LUTとして各論理関数メモリ4-0~4-3に書き込んでおく。ここで、f(i=0,1,.,.,s-1)を表すLUTは、4-(i mod 4)のメモリのint(i/4)ページに書き込んでおく。尚、同一の論理関数メモリ4において、異なるページに同一のLUTが書き込まれることとなる場合には、複数ページに同一のLUTを書き込むことはせず、1つのLUTのみを書き込むようにする(以下、これを「書込縮約」という)。メモリ容量を節約するためである。また、入力選択メモリ3-0~3-3及び各接続メモリ6-1~6-3には、第0ページから順に上記各分解関数{f,…,fs-1}に対応した入力選択情報及び接続情報を書き込んでおく。また、領域指定メモリ8-i(i∈{0,1,2,3})のjページには、分解関数fi*4+j(但し、0<=i*4+j<=s-1)に対応するLUTが記憶されている論理関数メモリ4-iのページ数pを格納する。尚、各メモリへの書き込み機能については、第25図では図示していないが、通常のメモリの書き込み方法により行われる。更に、演算制御部10の演算ステップ・レジスタ61には、分解関数の全段数sを書き込んでおく。尚、以下では、s>4であるものとして説明する。
以上の書き込みがされた状態において、まず、時間区間Tにおいて、演算制御部10は、外部から入力されるリセット信号resetによって、ステップ・カウンタ62、ページ・カウンタ63のカウント値i,pがそれぞれリセットされる(S1)。このとき、ステップ・カウンタ62のカウント値iは、演算ステップ・レジスタ61内に記憶された値sに初期化され、ページ・カウンタ63のカウント値pは0に初期化される。また、当該リセット信号resetにより、演算制御部10内の出力コントローラ64のFF65~68がリセットされる(S2)。
このとき、FF65~68からなるジョンソン・カウンタ69は、出力値として、(Q,Q,Q,Q)=(0,0,0,0),(NOT(Q),NOT(Q),NOT(Q),NOT(Q))=(1,1,1,1)を出力する。従って、出力コントローラ64は、各論理関数メモリ4-0,4-1,4-2,4-3に対して、チップ・イネーブル信号CE,CE,CE,CEとして、それぞれ0,0,1,1を出力する。また、ページ・カウンタ63は、カウント信号pとして0を、入力選択メモリ3-0~3-3、接続メモリ6-0~6-3、及び領域指定メモリ8-0~8-3に対して出力する(S3)。
これにより、入力選択メモリ3-i(i∈{0,1,2,3})は、第0ページに格納された入力選択情報を、入力変数選択回路2-iの制御線shf0~shf3に出力する。入力変数選択回路2-iは、制御線shf0~shf3に入力された入力選択情報に従って、入力端子in(00)~in(16)の一部を出力端子out(00)~out(07)と電気的に接続する。
また、接続メモリ6-i(i∈{0,1,2,3})は、第0ページに格納された接続情報(sNc-1(0),…,s(0))を接続回路5-iに出力する。これにより、接続回路5-iは、各制御線より入力される接続情報(s(0),…,s(0))に従って、入力線i~i15と出力線o~oとを接続する。
更に、領域指定メモリ8-i(i∈{0,1,2,3})は、第0ページに格納された領域指定変数p(0)を論理関数メモリ4-iのアドレス・デコーダ16に出力する。これにより、論理関数メモリ4-iは、第p(0)ページが選択され得る状態となる。
そして、入力変数レジスタ1は、各入力変数選択回路2-0~2-3に対して、入力変数の出力を開始する(S4)。これにより、接続回路5-0~5-3には、それぞれ、入力変数X,X,X,Xが出力される。接続回路5-i(i∈{0,1,2,3})に入力された入力変数X,X,X,Xは、設定された接続順序に従って、論理関数メモリ4-iの入力側に出力される。
続いて、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ジョンソン・カウンタ69の出力(Q,Q,Q,Q)は、(1,0,0,0)に変化する。これにより、CEが“1”となり、論理関数メモリ4-0がアクセス可能な状態となるとともに、CEは“0”となる。従って、論理関数メモリ4-0から、データDが出力され始める(S5)。
また、これとほぼ同時に、AND回路70の出力であるADSPが“1”となる。ADSPが“1”となると、論理関数メモリ4-0は、接続回路5-0から入力される入力変数Xに基づいて、その内部のアドレス・レジスタが制定される(S6)。そして、論理関数メモリ4-0は、第0ページ内の制定されたアドレスに対応するLUTの値(中間変数Y4p+(s-i))を、接続回路5-1に出力し始める。接続回路5-1に出力された中間変数Y4p+(s-i)は、設定された接続関係に従って、論理関数メモリ4-1に入力される。また、場合によっては、中間変数Y4p+(s-i)の一部は、外部出力線7-1へと伝達される。時間区間Tの最後にADSPが“1”から“0”に立ち下がり、論理関数メモリ4-0内部のアドレス・レジスタはラッチされる。
時間区間Tにおいて、ADSPが“1”となってから次のクロック信号clockが立ち上がったときに、ジョンソン・カウンタ69の出力(Q,Q,Q,Q)は、(1,1,0,0)に変化する。これにより、ADSPは“0”となる(S7)。これにより、論理関数メモリ4-0の出力データDの値が中間変数Y4p+(s-i)に確定する。一方、このとき、Q=1なので、CEは“1”にラッチされている。
次いで、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ステップ・カウンタ62は、カウント値iをデクリメントする(S8)。また、このとき、ジョンソン・カウンタ69の値は(Q,Q,Q,Q)=(1,1,1,0)となる。
ここで、ステップ・カウンタ62のカウント値iが0でない場合において(S9)、出力Qの値が1に遷移すると、CEが“1”となるとともに、CEが“0”となる。それに伴って、論理関数メモリ4-1の出力線から出力データDが出力され始める(S10)。
また、これとほぼ同時に、AND回路71の出力であるADSPが“1”となる(S11)。これにより、論理関数メモリ4-1は、接続回路5-1を介して前段の論理関数メモリ4-0から入力される中間変数と新たな入力変数とに基づいてアドレスが制定される。このアドレスの制定に伴って、論理関数メモリ4-1の出力データDが変化し、第pkページ内の制定されたアドレスに対応するLUTの値(中間変数Y4p+(s-i))が、接続回路5-2に出力され始める。
そして、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ジョンソン・カウンタ69の値は(Q,Q,Q,Q)=(1,1,1,1)となる。これにより、AND回路71の出力であるADSPが“0”となり、論理関数メモリ4-1の出力データDが、中間変数Y4p+(s-i)に確定する(S12)。接続回路5-2に出力された中間変数Y4p+(s-i)は、設定された接続関係に従って、論理関数メモリ4-2に入力される。また、場合によっては、中間変数Y4p+(s-i)の一部は、外部出力線7-2へと伝達される。
次いで、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ステップ・カウンタ62は、カウント値iをデクリメントする(S13)。また、このとき、ジョンソン・カウンタ69の値は(Q,Q,Q,Q)=(0,1,1,1)となる。
ここで、ステップ・カウンタ62のカウント値iが0でない場合(S14)、出力Qの値が0に遷移すると、CEが“1”となるとともに、CEは“0”となる。それに伴って、論理関数メモリ4-0の出力が停止するとともに、論理関数メモリ4-2の出力線から出力データDが出力され始める(S15)。
また、これとほぼ同時に、AND回路72の出力であるADSPが“1”となる(S16)。これにより、論理関数メモリ4-2は、接続回路5-2を介して前段の論理関数メモリ4-1から入力される中間変数と新たな入力変数とに基づいてアドレスが制定される。このアドレスの制定に伴って、論理関数メモリ4-2の出力データDが変化し、第pkページ内の制定されたアドレスに対応するLUTの値(中間変数Y4p+(s-i))が、接続回路5-3に出力され始める。
そして、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ジョンソン・カウンタ69の値は(Q,Q,Q,Q)=(0,0,1,1)となる。これにより、AND回路72の出力であるADSPが“0”となり、論理関数メモリ4-2の出力データDが、中間変数Y4p+(s-i)に確定する(S17)。接続回路5-3に出力された中間変数Y4p+(s-i)は、設定された接続関係に従って、論理関数メモリ4-3に入力される。また、場合によっては、中間変数Y4p+(s-i)の一部は、外部出力線7-3へと伝達される。
次いで、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ステップ・カウンタ62は、カウント値iをデクリメントする(S18)。また、このとき、ジョンソン・カウンタ69の値は(Q,Q,Q,Q)=(0,0,0,1)となる。
ここで、ステップ・カウンタ62のカウント値iが0でない場合において(S19)、出力Qの値が0に遷移すると、CEが“1”となるとともに、CEは“0”となる。それに伴って、論理関数メモリ4-1の出力が停止するとともに、論理関数メモリ4-3の出力線から出力データDが出力され始める(S20)。
また、これとほぼ同時に、AND回路73の出力であるADSPが“1”となる(S21)。これにより、論理関数メモリ4-3は、接続回路5-3を介して前段の論理関数メモリ4-2から入力される中間変数と新たな入力変数とに基づいてアドレスが制定される。このアドレスの制定に伴って、論理関数メモリ4-3の出力データDが変化し、第pkページ内の制定されたアドレスに対応するLUTの値(中間変数Y4p+(s-i))が、接続回路5-0に出力され始める。
そして、時間区間Tにおいて、次のクロック信号clockの立ち上がりで、ジョンソン・カウンタ69の値は(Q,Q,Q,Q)=(0,0,0,0)となる。これにより、AND回路73の出力であるADSPが“0”となり、論理関数メモリ4-3の出力データDが、中間変数Y4p+(s-i)に確定する(S22)。接続回路5-0に出力された中間変数Y4p+(s-i)は、設定された接続関係に従って、論理関数メモリ4-0に入力される。また、場合によっては、中間変数Y4p+(s-i)の一部は、外部出力線7-0へと伝達される。
このとき、ページ・カウンタ63は、カウント値pをインクリメントする(S23)。これにより、カウント信号pの値が1だけ増加し、入力選択メモリ3-0~3-3、接続メモリ6-0~6-3、及び領域指定メモリ8-0~8-3の選択されるページが切り替わる。これに伴って、入力変数選択回路2-0~2-3及び接続回路5-0~5-3の接続関係も切り替わる。尚、領域指定メモリ8-0~8-3の選択されるページが切り替わった場合であっても、各論理関数メモリは、チップ・イネーブル信号CE及びアドレス・ストローブ信号ADSPが“1”となってアドレスを受け付ける状態とならない限りにおいては、ページが切り替わることはない。
次いで、時間間隔Tにおいて、次のクロック信号clockの立ち上がりで、ステップ・カウンタ62は、カウント値iをデクリメントする(S24)。また、このとき、ジョンソン・カウンタ69の出力Qの値が1となる。
ここで、ステップ・カウンタ62のカウント値iが0でない場合には(S25)、再びステップS5の動作に戻る。
上記ステップS9,S14,S19,S25において、ステップ・カウンタ62のカウント値iが0であった場合は、ステップ・カウンタ62は終了信号ENDを出力する。これにより、演算制御部10は演算動作を停止し、演算が終了する。
以上のように、演算処理は、前段から後段に向かって直列処理により行われる。そして、最後段の論理関数メモリ4-3における演算処理が終了した時点で、まだ総ての分解関数の演算が終了していない場合には、論理関数メモリ4-3から出力される中間変数を再び最前段の論理関数メモリにフィード・バックして、演算処理を繰り返す。そして、目的論理関数fの演算結果は、各外部出力線7-1~7-4より取り出される。
次に、上記動作をより分かりやすく説明するため、具体的な例を用いてプログラマブル論理デバイスの具体的な動作を説明する。
〔例2〕加算回路
ここでは、簡単な例として、二つの2nビット(n≧5)の二進数A=(a2n-1,a2n-,…,a,a),B=(b2n-1,b2n-2,…,b,b)の加算を行う加算器を、上記プログラマブル論理デバイスによって実行する例を説明する。尚、下位からの桁上げ(キャリー)入力ビットとしてcinも考慮して、以下のような演算を行う加算器を考える。
JP0004246200B2_000014t.gif ここで、桁上げ入力ビットcinとは、2nビット以上の大きな数の加算を行う場合に、加算器を直列につなげて使用する際に、下位の加算器からの桁上げを表すビットである。桁上げ出力ビットcoutも、同様に、上位の加算器に出力する桁上げを表すビットである。
尚、この例においては、入力変数選択回路2-0~2-3は、第2図と同様に、log(2n+1)(log(2n+1)が整数でないときは、log(2n+1)を切り上げた数)段のシフタが直列接続された、(2n+1)入力8出力のシフタ回路で構成されているものとする。
このような二つの2nビットの二進数A,Bの加算を行う論理関数をf=f(X)(X=(A,B))とすると、論理関数fは第30図により表される。この関数は、第31図のように、2n個の分解関数{g,g,…,g2n-1}に関数分解することが可能である。ここで、各分解関数は、(数12)又は(数13)のような論理式で表される。
JP0004246200B2_000015t.gifすなわち、各分解関数は、2つの入力変数a,b及び桁上げを表す中間変数cout(i-1)の2を法とする和S及び桁上げの中間変数cout(i)を出力する論理関数となっている。
これを、第25図のような4段の論理関数メモリ4-0~4-3からなるプログラマブル論理デバイスで実現する場合には、第32図に示したように、分解関数{g,g,…,g2n-1}を、n個の分解関数組{g,g},{g,g},…,{g2n-2,g2n-1}に分ける。そして、第33図に示したように、各々の分解関数組を1つにまとめてn個の分解関数f,f,…,fn-1で表す。ここで、各分解関数は、(数14)又は(数15)のような論理式で表される3変数入力3変数出力論理関数である。
JP0004246200B2_000016t.gif 各々の分解関数fの真理値表は、第34図のようになる。そこで、第35図の真理値表を、論理関数メモリ4-0の第1ページに記憶させ、第36図の真理値表(LUT)を論理関数メモリ4-0~4-3の第0ページに記憶させる。ここで、それぞれ、S2i,S2i+1,cout(i)(i∈{1,2,…,n-1})は、それぞれ接続回路5-(i+1)の入力線i,i,iに出力されるように論理関数メモリの出力ビットを割り当てる。
各入力選択メモリ3-0~3-3の第0ページには、それぞれ、0ビットシフト、5ビットシフト、9ビットシフト、13ビットシフト、第pページ(1≦p≦[(n-1)/4])には、それぞれ、16p+1ビットシフト、16p+5ビットシフト、16p+9ビットシフト、16p+13ビットシフトの情報を記憶させておく。
接続メモリ6-0の第0ページには、接続情報として、8ビット分シフトさせる情報を記憶させる。接続メモリ6-1~6-3の第0ページには、接続情報として4ビット分シフトさせる情報を記憶させる。また、各接続メモリ6-0~6-3の第kページ(1≦p≦[(n-1)/4])には、接続情報として4ビット分シフトさせる情報を記憶させる。但し、接続メモリ6-α(α=n mod 4)の第[n/4]ページの接続情報は、最終段の分解関数の出力変数(5ビット)を出力させるための接続情報なので、当該ページには5ビット分シフトさせる情報を記憶させる。尚、4ビット分シフトさせる場合には接続情報として(s,s,s,s)=(0,1,0,0)を、5ビット分シフトさせる場合には(s,s,s,s)=(0,1,0,1)を、8ビット分シフトさせる場合には接続情報として(s,s,s,s)=(1,0,0,0)を接続メモリの各ページに記憶させる。例えば、n=13の場合、接続メモリ6の内容は、以下の(表5)のようになる。
JP0004246200B2_000017t.gif 領域指定メモリ8-0の第0ページには、領域指定変数として1を記憶させておく。また、領域指定メモリ8-1~8-3の第0ページには、領域指定変数として0を記憶させておく。更に、領域指定メモリ8-0~8-3の第kページ(1≦p≦[(n-1)/4])には、領域指定変数として0を記憶させておく。例えば、n=13の場合、接続メモリ6の内容は、以下の(表6)のようになる。
JP0004246200B2_000018t.gif 以上のようにプログラムされた状態において、以下、プログラマブル論理デバイスの演算処理を説明する。尚、以下の説明では、簡単のためn=5として説明する。
まず、入力変数レジスタ1には、変数A,B,cinが入力され記憶される。また、演算ステップ・レジスタ61には、n=5が記憶される。そして、演算制御部10は、まず、ステップ・カウンタ62のカウント値iをn=5にリセットし、ページ・カウンタ63のカウント値kを0にリセットする。更に、ジョンソン・カウンタ69も0にリセットする。これにより、演算制御部10のページ・カウンタ63は、入力選択メモリ3-0~3-3、接続メモリ6-0~6-3、及び領域指定メモリ8-0~8-3に対してページ選択番号pとして第0ページを設定する。
また、入力変数選択回路2-0~2-3は、各々の制御線に入力された入力選択情報に従って、入力端子in(00)~in(x-1)のうちの8つを出力端子out(00)~out(07)と電気的に接続する。
具体的には、入力選択メモリ3-0は、in(00)~in(07)をout(00)~out(07)に接続し、入力選択メモリ3-1は、5ビットシフトさせて、in(05)~in(12)をout(00)~out(07)に接続し、入力選択メモリ3-2は、9ビットシフトさせて、in(09)~in(16)をout(00)~out(07)に接続し、入力選択メモリ3-3は、13ビットシフトさせて、in(13)~in(20)をout(00)~out(07)に接続する。
また、接続メモリ6-0~6-3は、各々、第0ページに書き込まれた接続情報(s(0),…,s(0))を接続回路5-0~5-3の各制御線に出力する。接続回路5-0~5-3は、各制御線より入力される接続情報(s(0),…,s(0))に従って、入力線i~i15と出力線o~oとを接続する。具体的には、接続回路5-0は、8ビットシフトさせて、i~i15をそれぞれo~oに接続し、i~iをそれぞれo~o15に接続する。また、接続メモリ6-1~6-3は、4ビットシフトさせて、i~i11をそれぞれo~oに接続し、i12~i15,i~iをそれぞれo~o15に接続する。
また、領域指定メモリ8-0~8-3は、各々、第0ページに書き込まれた領域指定変数を、論理関数メモリ4-0~4-3のアドレス・デコーダ16に対して出力する。これにより、論理関数メモリ4-0は、1ページがアクセス可能な状態となり、論理関数メモリ4-1~4-3は、1ページがアクセス可能な状態となる。
次に、演算制御部10は、入力変数レジスタ1により、入力変数Xの出力を行う。このとき、入力変数選択回路2-1~2-3の入力端子には、それぞれ、(表7)のように入力変数の値が入力される。
JP0004246200B2_000019t.gif 入力変数選択回路2-0は、(out(00),out(01),out(02),out(03),out(04))=(cin,a,a,b,b)を出力し、これを接続回路5-0の入力線(i,i,i10,i11,i12)に入力する。尚、出力out(05)~out(07)は使用されないので省略した。接続回路5-0は、8ビットシフトさせて、これらを出力線(o,o,o,o,o)に出力する。このようにして、入力変数(cin,a,a,b,b)が論理関数メモリ4-0に入力される。
次に、演算制御部10の出力コントローラ64は、CEを“1”に設定して論理関数メモリ4-0のデータ出力を行わせるとともに、ADSPを“1”に設定して、論理関数メモリ4-0内部のアドレス・レジスタに、アドレス(i,i,i,i,i,i,i,i)=(cin,a,a,b,b,-,-,-)を制定する。ここで、「-」はドントケア(0でも1でもよい。)を表す。アドレス制定後に、出力コントローラ64は、ADSPを“0”とする。
アドレス制定後、論理関数メモリ4-0の出力端子には、第1ページに格納されたLUT(LUT)のアドレス(cin,a,a,b,b,-,-,-)に記憶された真理値f(cin,a,a,b,b)の値(-,-,S,S,cout(0),-,-,-)が現れ、これが接続回路5-1に出力される。すなわち、接続回路5-1の各入力線(i,i,i,i,i,i,i,i)には(-,-,S,S,cout(0),-,-,-)が入力される。
一方、入力変数選択回路2-1は、(out(00),out(01),out(02),out(03))=(a,a,b,b)を出力し、これを接続回路5-1の入力線(i,i,i10,i11)に入力する。
接続回路5-1からは、それぞれ、(表8)の値が出力される。
JP0004246200B2_000020t.gif 接続回路5-1の出力線o~o15は、外部出力線7-1として取り出される。従って、演算結果S,Sが外部出力線7-1のうちの2本に出力される。
次に、演算制御部10のステップ・カウンタ62は、そのカウント値iをi-1=4に更新する。そして、演算制御部10の出力コントローラ64は、CEを“1”に設定して論理関数メモリ4-1のデータ出力を行わせるとともに、ADSPを“1”に設定して、論理関数メモリ4-1内部のアドレス・レジスタに、アドレス(i,i,i,i,i,i,i,i)=(cout(0),-,-,-,a,a,b,b)を制定する。アドレス制定後に、出力コントローラ64は、ADSPを“0”とする。更に、0段目の論理関数メモリ4-0の出力値は既にアドレス・レジスタに取り込んだので、出力コントローラ64は、CEを“0”として、論理関数メモリ4-0の出力を停止させる。
アドレス制定後、論理関数メモリ4-1の出力端子には、第0ページに格納されたLUT(LUT)のアドレス(cout(0),-,-,-,a,a,b,b)に記憶された真理値f(cout(0),a,a,b,b)の値(-,-,S,S,cout(1),-,-,-)が現れ、これが接続回路5-2に出力される。すなわち、接続回路5-2の各入力線(i,i,i,i,i,i,i,i)には(-,-,S,S,cout(1),-,-,-)が入力される。
一方、入力変数選択回路2-2は、(out(00),out(01),out(02),out(03))=(a,a,b,b)を出力し、これを接続回路5-2の入力線(i,i,i10,i11)に入力する。
接続回路5-2からは、それぞれ、(表9)の値が出力される。
JP0004246200B2_000021t.gif 接続回路5-2の出力線o~o15は、外部出力線7-2として取り出される。従って、演算結果S,Sが外部出力線7-2のうちの2本に出力される。
以下同様にして、論理関数メモリ4-2、論理関数メモリ4-3においても演算が行われる。そして、論理関数メモリ4-2の演算結果S,Sは外部出力線7-3のうちの2本に出力される。また、論理関数メモリ4-3の出力値(-,-,S,S,cout(3),-,-,-)は、接続回路5-0の入力線i~iにフィード・バックされる。
次に、演算制御部10のステップ・カウンタ62は、そのカウント値iをi-1=1に更新する。ここで、論理関数メモリ4-3における演算処理が終了したので、ページ・カウンタ63は、そのカウント値kを1だけインクリメントし、そのカウント値kをカウント信号pkに出力する。
これに伴い、入力選択メモリ3、接続メモリ6、及び領域指定メモリ8のアクセスページが変更されるため、これらのメモリからの出力も変更される。具体的には、入力選択メモリ3-0から出力されるシフト量の情報が17ビットシフトに変更される。また、接続メモリ5-0から出力される接続情報が(s,s,s,s)=(0,1,0,0)に変更され、接続メモリ5-1から出力される接続情報が(s,s,s,s)=(0,1,0,1)に変更される。更に、領域指定メモリ8-0が出力する領域指定変数p(p=1)の値が0に変更され、論理関数メモリ4-0は0ページがアクセス可能な状態となる。
また、これにより、論理関数メモリ4-3の演算結果S,Sは外部出力線7-0のうちの2本に出力される。
そして、上述の場合と同様に、論理関数メモリ4-0において演算処理が行われ、論理関数メモリ4-0の出力値(-,-,S,S,cout(4),-,-,-)は接続回路5-1の入力線i~iに入力される。接続回路5-1は、これを5ビットシフトして、(S,S,cout(4))を出力線(o13,o14,o15)に出力する。これにより、論理関数メモリ4-0の演算結果(S,S,cout(4))は外部出力線7-1のうちの3本に出力される。以上で、総ての演算結果が出力線7-0~7-3に出力されて演算が終了する。
〔例2終わり〕
尚、上記〔例2〕においては、各段のLUTに入力する入力変数X,X,…,Xs-1は互いに共通の要素を持たない(すなわち、X∪X=φ(i≠j))と仮定したが、本発明におけるプログラマブル論理デバイスは、入力変数X,X,…,Xs-1の何れか2つが共通の要素を有するような場合にも使用することが可能である。
【実施例8】

第37図は本発明の実施例8に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本実施例においては、接続回路5-0~5-3に入力する入力変数を選択する入力変数選択回路2-0~2-3に加えて、接続回路5-0~5-3を介さずに、論理関数メモリ4-0~4-3に直接入力する入力変数の選択を行う入力変数選択回路80-0~80-3及びその入力選択情報を記憶する入力選択メモリ81-1~81-3を設けたことを第1の特徴とする。また、前段の論理関数メモリ4-(i-1)(i∈{1,2,3})から後段の論理関数メモリ4-iに入力される中間変数の一部を、接続回路5-iを介さずに直接入力するように構成したことを第2の特徴とする。
このように構成することで、接続回路5-0~5-3の入力線の本数を減らすことができる。その結果、接続回路5-0~5-3を小型化することが可能となる。また、接続回路5-0~5-3を第4図のようなシフタ回路により構成する場合には、シフタの段数を減らすことが可能であり、演算速度の高速化を図ることができる。
【実施例9】

第38図は本発明の実施例9に係るプログラマブル論理デバイスの全体構成を表すブロック図である。
本実施例においては、フィード・バック用の接続回路の入力側に、最後段の論理関数メモリ4-3の複数個の出力を一時的に記憶し、フィード・バック用の接続回路5-0に出力する中間変数レジスタ82を備えていることを特徴とする。
実施例7においては、論理関数メモリ4-0~4-3として、クロックに同期して動作するシンクロナスなメモリを使用した。しかし、論理関数メモリ4-0~4-3は、シンクロナスなメモリには限られず、非同期に動作するメモリを使用することも可能である。
しかしながら、最終段の論理関数メモリ4-3の出力は、最前段の論理関数メモリ4-0の入力にフィード・バックされることから、論理関数メモリ4-0~4-3に非同期のメモリを使用した場合、場合によっては発振を起こすなど、予期しない動作が起こる可能性がある。
そこで、本実施例では、中間変数レジスタ82を備えた構成とし、1演算ループの演算が終了するごとに、論理関数メモリ4-0~4-3の出力値を一旦確定させ、論理関数メモリ4-3が出力する中間変数の値を中間変数レジスタ82に記憶させる。そして、次の演算ループに移り、中間変数レジスタ82に記憶された中間変数を値の論理関数メモリ4-0に入力して演算処理を行うようにする。
これにより、論理関数メモリ4-0~4-3に非同期なメモリを使用した場合にも、発振すること等を防止できる。
【実施例10】

第39図は本発明の実施例10に係るプログラマブル論理デバイスの全体構成を表す図である。本実施例のプログラマブル論理デバイスは、演算部85とs個(s≧2)の出力回路86-1~86-sにより構成されている。本実施例のプログラマブル論理デバイスでは、最大s個の演算をパイプライン処理により行うことが可能である。従って、第39図では出力回路86をs個設けた構成としている。しかし、出力回路86の数は、必要に応じて減らすこともできる。
第40図は本発明の実施例10に係るプログラマブル論理デバイスの演算部85の構成を表すブロック図である。第40図において、入力変数レジスタ1、入力変数選択回路2-0~2-(s-1)(s≧3)、入力選択メモリ3-0~3-(s-1)、論理関数メモリ4-0~4-(s-1)、接続回路5-0~5-(s-1)、接続メモリ6-0~6-(s-1)、外部出力線7-1~7-s、及び演算制御部10は第1図と同様であり、同記号を付している。
本実施形態に係るプログラマブル論理デバイスは、s個(s≧2)の論理関数メモリ4-i(i=0,…,s-1)を直列に接続した構成である。i-1段目(i∈{1,…,s-1})の論理関数メモリ4-(i-1)と、i段目の論理関数メモリ4-iとの間には、接続回路5-i,メモリ・アドレス・レジスタ(memory address register:以下、「MAR」という。)90-i,及びダイレクト・アクセス・セレクタ(direct access selector:以下、「DAS」という。)91-iがこの順に接続されている。また、最前段の論理関数メモリ4-0の入力側には、DAS91-0が接続されている。
入力選択回路2-0の出力線は、すべて最前段のDAS91-0の入力線に接続されている。入力選択回路2-i(i∈{1,…,s-1})の出力線は、その一部が論理関数メモリ4-iの入力線の一部と接続され、その他はMAR90-iの入力線の一部に接続されている。
最前段の論理関数メモリ4-0の入力線は、その全部がDAS91-0の出力線と接続されている。また、それ以外の論理関数メモリ4-i(i∈{1,…,s-1})の入力線は、全部がその前段に配置されたDAS91-iの各出力線に接続されている。
最後段の論理関数メモリ4-(s-1)の出力線は、その全部が外部出力線7-sに接続されている。また、それ以外の論理関数メモリ4-i(i∈{0,…,s-2})の出力線は、その全部が接続回路5-(i+1)の入力線の一部に接続されている。
各論理関数メモリ4-0~4-sは、電源制御端子PWを備えている。電源制御端子PWに1が入力されたときには、各論理関数メモリ4-i(i∈{0,…,s-1})はウェイク・アップ状態(wake-up mode)となる。PWに0が入力されたときには、各論理関数メモリ4-iは、低消費電力状態(low-power mode)となる。各論理関数メモリ4-0~4-sの電源制御端子PWには、それぞれ、外部から電源制御信号φ~φs-1が入力されている。この電源制御信号φ~φs-1によって、各論理関数メモリ4-0~4-sの電源制御が行われる。すべての論理関数メモリを使用してパイプライン処理により複数のジョブを実行するときは、この電源制御信号φ~φs-1には常時1が入力される。一方、それ以外の場合には、ジョブの流れに合わせて、電源制御信号φ~φs-1に多相クロックを入力する。これにより、演算処理を実行する論理関数メモリのみをウェイク・アップ状態とするとともに、それ以外のものは低消費電力状態とし、消費電力の節減が図られる。
接続回路5-i(i∈{1,…,s-1})の入力線のうち、入力選択回路2-0の出力線に接続されたもの以外のものは、論理関数メモリ4-(i-1)の出力線に接続されている。また、接続回路5-iの出力線の一部は、MAR90-iに接続されており、その他のものは、外部出力線7-iに接続されている。尚、接続回路5-iの詳細については後述する。
MAR90-i(i∈{1,…,s-1})は、複数の入力線(データ入力線)から入力される変数値を一時的に保持する。MAR90-iは、中間変数レジスタとしての機能も有する。MAR90-iの入力線は、一部が入力選択回路2-iの出力線の一部と接続され、その他のものは接続回路5-iの出力線の一部と接続されている。MAR90-iの出力線は、その全部が、DAS91-iの入力線の一部に接続されている。
また、MAR90-iは、外部クロック入力線、リセット入力線、及びバイパス制御入力線を有する。外部クロック入力線には、外部からクロック信号(clock)が入力される。また、リセット入力線及びバイパス制御入力線には、演算制御部10から、それぞれリセット信号(reset signal),バイパス制御信号が入力される。尚、このMAR90-iは、論理関数メモリへの入力を取り込んで一時的に保持する中間変数レジスタとして機能する。この場合、外部クロック入力線に入力されるクロック信号がデータ・ストローブ信号となる。MAR90-iの詳細については後述する。
DAS91-i(i∈{0,…,s-1})は、外部から論理関数メモリ4-iに対して、データを直接書き込んだり、論理関数メモリ4-iのテストを行ったりするために設けられたものである。DAS91-iは、論理関数メモリ4-iの入力線(データ入力線)と同数の2入力1出力のマルチプレクサ(以下、「MUX」という。)を備えている。各MUXの出力端子は、論理関数メモリ4-iの各入力線に接続されている。各MUXの2つの入力端子のうちの一方(0側入力端子)は、外部アドレス入力線101-iに接続されている。また、もう一方(1側入力端子)は、MAR90-iの出力線(一部は、直接、入力選択回路2-iの出力線)に接続されている。各MUXの選択制御端子は、選択制御線102が接続されている。選択制御線102には、演算制御部10から、DAS選択制御信号(DAS select)が入力される。各MUXは、DAS選択制御信号が0のときには0側入力端子を選択し、DAS選択制御信号が1のときには1側入力端子を選択する。
外部アドレス入力線101-iには、論理関数メモリ4-iを直接アクセスする場合に、アクセスしようとするアドレスが入力される。DAS選択制御信号を0として、外部アドレス入力線101-iにアドレスを入力することにより、論理関数メモリ4-iの直接アクセスが可能となる。この機能を利用して、論理関数メモリ4-iにデータを書き込んだり、論理関数メモリ4-iのテストを行ったりすることができる。
なお、本実施例においては、接続メモリ6-i(i∈{1,…,s-1})は、接続情報を表す接続変数のほかに、領域指定変数を記憶している。接続情報とは、二つの論理関数メモリ4-(i-1),4-i間において、前段の論理関数メモリ4-(i-1)の出力線又は外部入力線のうち後段の論理関数メモリ4-iの各入力線に接続されるものを選択するための情報である。また、領域指定変数とは、論理関数メモリ4-(i-1),4-iのメモリ領域を指定するための変数である。従って、接続メモリ6-iは、領域指定記憶手段としての機能も兼ね備えている。尚、これらの詳細については後述する。
第41図は第40図の接続回路とメモリ・アドレス・レジスタ(MAR)の構成を表す図である。接続回路5-iは、メモリ・パッキング・シフタ(memory packing shifter:以下、「MPS」という。)92、及びレイル・セレクタ(rail selector)93を備えている。
MPS92はk個の入力線(データ入力線)、入力線と同数(k個)の出力線(データ出力線)、及びシフト制御線を備えている。MPS92の各入力線には、前段の論理関数メモリ4の各出力線が接続されている。MPS92のシフト制御線には、接続メモリ6-iから出力される領域指定変数Rの一部R(以下、「列選択変数」という。)が入力される。列選択変数Rは、前段の論理関数メモリ4-(i-1)内のメモリ・セルから読み出したデータの一部を取得する場合において、取り出すデータが格納されているメモリ・セルの列方向の領域を特定する変数である。MPS92は、論理関数メモリ4-(i-1)の各出力線から入力される変数Y={y}の順序を、列選択変数Rにより指定される量だけシフトして、出力線に出力する。これにより、MPS92は、前段の論理関数メモリ4-(i-1)の出力変数から、必要なものを選択することができる。
レイル・セレクタ93は、複数の2入力1出力のマルチプレクサ(以下、「MUX」という。)93aを備えている。各MUX93aは、1個の出力端子、1個の入力端子(データ入力端子)、及び1個の選択制御入力端子を備えている。
各MUX93aの選択制御入力端子には、接続メモリ6-iから出力される各接続変数が入力される。各MUX93aは、選択制御入力端子に入力される接続変数の値によって、0側入力端子又は1側入力端子を選択する。
各MUX93aの出力端子は、MAR90-iの入力線に接続されている。各MUX93aの一方の入力端子(0側入力端子)には、入力選択回路2-iの各出力線が接続されている。尚、入力選択回路2-iの出力線の一部は、MUX93aを介さず、直接MAR90-iの入力線に接続されている。
これらのMUX93aは、ページ/入力変数選択群93bと前段出力変数/入力変数選択群93cとの2つの集合に分けられる。
ページ/入力変数選択群93bの各MUX93aの1側入力端子には、接続メモリ6-iから出力される領域指定変数Rの残りの一部R(以下、「行指定変数」という。)が入力される。行指定変数Rは、後段の論理関数メモリ4-i内のメモリ・セルにアクセスする場合において、アクセスするメモリ・セルの行方向の領域を特定する変数である。ページ/入力変数選択群93bの各MUX93aは、行指定変数又は入力変数の何れか一方を選択して、MAR90-iの入力線に出力する。このように、ページ/入力変数選択群93bの各MUX93aを設けることによって、行指定変数のビット数を可変とすることができる。
前段出力変数/入力変数選択群93cの各MUX93aの1側入力端子には、MPS92の各出力線が接続されている。前段出力変数/入力変数選択群93cの各MUX93aは、前段の論理関数メモリ4-(i-1)が出力する出力変数のうちMPSにより選択されたもの、又は入力変数の何れか一方を選択して、MAR90-iの入力線に出力する。
MAR90-iは、同期型Dフリップ・フロップ(以下、「DFF」という。)90aとバイパス選択回路90bとの組が複数個配列された構成を有する。各DFF90aは、データ入力端子(D)、データ出力端子(Q)、クロック端子(LOAD)、及びリセット端子(RST)を有する。また、各バイパス選択回路90bは、2入力1出力のマルチプレクサで構成されている。
DFF90aのクロック端子(LOAD)には、外部からのクロック信号(clock)が入力される。尚、このクロック信号が、データ・ストローブ信号となる。DFF90aのリセット端子(RST)には、演算制御部10が出力するリセット信号(reset)が入力される。
DFF90aのデータ入力端子(D)は、バイパス選択回路90bの1側入力端子と、バイパス線90cにより接続されている。また、DFF90aのデータ出力端子(Q)は、バイパス選択回路90bの0側入力端子と接続されている。各DFF90aのデータ入力端子は、前段の接続回路5-iの各出力線(レイル・セレクタ93の各出力線又は入力変数選択回路2-i)に接続されている。
バイパス選択回路90bの選択制御入力端子には、演算制御部10が出力するバイパス制御信号が入力される。バイパス選択回路90bは、このバイパス制御信号により、0側入力端子又は1側入力端子を選択する。
DFF90aのうちの一部は、そのデータ出力端子が後段のDAS91-iに接続されており、残りの一部は、そのデータ出力端子が外部出力線7-iに接続されている。この場合、ページ/入力変数選択群93bの各MUX93aと接続されたDFF90a、又は、入力変数選択回路2-iの出力線と直接接続されたDFF90aは、後段のDAS91-iに接続される。前段出力変数/入力変数選択群93cの各MUX93aと接続されたDFF90aは、一部が後段のDAS91-iに接続され、残りの一部は外部出力線7-iに接続される。
第42図は本発明の実施例10に係るプログラマブル論理デバイスの出力回路86-i(i∈{1,…,s})の構成を表す図である。出力回路86-iは、出力選択回路94、出力シフタ95、出力パッキング・シフタ96、出力選択メモリ97、出力パッキング・レジスタ98、出力レジスタ99を備えている。
出力選択回路94は、演算制御部10から出力されるステップ変数(step)の値に基づいて、外部出力線7-1~7-sに出力される出力変数Y~Yのうち何れか一つを選択する。そして、選択した出力変数Yを出力シフタ95に出力する。出力シフタ95には、出力選択回路94から出力変数Yが入力される。出力シフタ95は、出力変数Yをシフトして、出力パッキング・シフタ96に出力する。
出力パッキング・シフタ96は、複数のデータ入力線と複数のデータ出力線を有する。このデータ入力線の一部は、出力シフタ95の出力線に接続されており、残りは、後述の出力パッキング・レジスタ98の出力線に接続されている。出力パッキング・シフタ96の出力線は、出力パッキング・レジスタの入力線に接続されている。出力パッキング・シフタ96の入力線の数は、出力シフタ95の出力線の数と出力パッキング・レジスタ98の出力線の数の和だけある。一方、出力パッキング・シフタ96の出力線の数は、出力パッキング・レジスタ98の出力線の数と同数である。
出力パッキング・シフタ96は、入力線を所定の量だけシフトして、その一部を出力線に接続する。シフト量が0のときには、出力パッキング・レジスタ98の出力線に接続された入力線が、出力パッキング・シフタ96の出力線に接続されるように構成されている。
出力選択メモリ97は、出力シフタ95及び出力パッキング・シフタ96のシフト量に関する情報が記憶されている。出力選択メモリ97は、演算制御部10から入力されるページ変数に従って、これらのシフト量情報を出力シフタ95及び出力パッキング・シフタ96に出力する。出力シフタ95及び出力パッキング・シフタ96は、このシフト量情報に従ってシフトを行う。
出力パッキング・レジスタ98は、外部から入力されるクロックに従って、出力パッキング・シフタ96の出力をラッチする。出力パッキング・レジスタ98の出力は、出力レジスタ99に出力されるとともに、出力パッキング・シフタ96の入力側にフィード・バックされる。この構成により、外部出力線70-iに順次出力される出力変数を、出力パッキング・レジスタ98に順番に隙間なく詰め込むことができる。
出力レジスタ99は、すべての演算が終了した時点で演算制御部10から出力ロード信号(0_load)が入力されると、出力パッキング・レジスタ98の出力を取り込んで保持する。
以上のように構成された本実施例に係るプログラマブル論理デバイスについて、以下その動作を説明する。
第43図~第45図は実施例10に係るプログラマブル論理デバイスの演算処理動作の流れを表す図である。ここでは、論理関数メモリ4の段数が5段(s=5)の例について説明する。尚、ここでφ~φは5相クロックである。また、DAS選択制御信号は1に設定されているものとする。従って、DAS91-0~91-4は、前段からの入力値を選択し、後段の論理関数メモリ4に伝達する。
初期状態では、すべての論理関数メモリ4-0~4-4は低消費電力状態とされている。
まず、第43(a)図に示すように、外部入力線から入力変数Xが入力変数レジスタ1に入力される。入力変数レジスタ1は、入力変数Xを取り込んで保持する。入力変数Xは、入力変数レジスタ1から各入力変数選択回路2-0~2-4に出力される。各入力選択回路2-i(i∈{0,1,2,3,4})は、入力選択メモリ3-iの出力値に従って、入力変数Xの中からi段目の論理関数メモリ4-iに入力する入力変数Xを選択する。
入力選択メモリ2-0は、入力変数Xを論理関数メモリ4-0の入力線に出力する。入力選択メモリ2-i(i∈{1,2,3,4})は、入力変数Xを接続回路5-iの入力線に入力する。
次に、第43(b)図に示すように、論理関数メモリ4-0の電源制御端子PWに入力される電源制御信号φが1になる。これにより、論理関数メモリ4-0は、ウェイク・アップ状態となる。そして、論理関数メモリ4-0の出力線から、1段目のLUTによる演算結果が出力される。尚、第43図~45において、網掛けされた論理関数メモリは、ウェイク・アップ状態にある論理関数メモリを表している。
接続回路5-1は、接続メモリ6-1の出力に従って、論理関数メモリ4-0の出力線及び入力変数選択回路2-1の出力線とMAR90-1の入力線とを接続する。そして、1段目のLUTの演算結果の一部は、出力変数Yとして外部出力線7-1に出力される。また、その他の変数は、中間変数UとしてMAR90-1の入力線に出力される。また、入力変数XもMAR90-1の入力線に出力される。
次に、クロックclkの立ち上りで、MAR90-1は、中間変数Uと入力変数Xを取り込んで保持する。そして、電源制御信号φが0となり、論理関数メモリ4-0は再び低消費電力状態となる。それとともに、今度は、第44(a)図に示すように、電源制御信号φが1となり、論理関数メモリ4-1がウェイク・アップ状態となる。そして、論理関数メモリ4-1の出力線から、2段目のLUTの演算結果が出力される。接続回路5-2は、接続メモリ6-2の出力に従って、論理関数メモリ4-1の出力線及び入力変数選択回路2-2の出力線とMAR90-2の入力線とを接続する。そして、2段目のLUTの演算結果の一部は、出力変数Yとして外部出力線7-2に出力される。また、その他の変数は、中間変数UとしてMAR90-2の入力線に出力される。また、入力変数XもMAR90-2の入力線に出力される。
以下、同様にして、第44(b)図,第45(a)図,第45(b)図の順に演算が進行し、すべての演算が終了する。
このように、演算に使用する論理関数メモリのみをウェイク・アップ状態として演算を実行させ、使用していない他の論理関数メモリは低消費電力状態にすることにより、回路全体の消費電力を抑えることができる。
尚、ここでは、1つのタスクのみを実行させる動作について説明したが、本実施例のプログラマブル論理デバイスは、複数のタスクをパイプライン処理により実行することも可能である。これにより、多数のタスクを効率よく演算処理することが可能となる。
また、すべての論理関数メモリ4-0~4-(s-1)をウェイク・アップ状態とし、MAR90-i(i∈{1,…,s-1})に入力するバイパス制御信号を1としておくことで、クロックを使用せずに非同期モードで高速に演算処理を行うことも可能である。
次に、領域指定変数RとMPS92を使用した論理関数メモリ4-i(i∈{0,…,s-1})のメモリ・パッキング方法に関して説明する。
第46図はメモリ・パッキングの概念を説明する図である。第46(a)図,第46(b)図は、論理関数メモリのメモリ・マップを表している。
実施例1で示したプログラマブル論理デバイスでは、各論理関数メモリについて、ページを切り替えることにより複数の論理関数のLUTを記憶させておくことが可能である。これを概念的に表示すると、第46(a)図のようになる。第46図では、ページ指定ビットとして、論理関数メモリの行アドレスの上位2ビットを割り当てている。そうすると、論理関数メモリは4ページに区分される。そして、ページ毎にLUTを格納すると、最低4個のLUTを格納することができる。また、1個のLUTが行内のすべての列アドレスを使用していないような場合には、1つのページ内に複数のLUTを格納することも可能である。
例えば、第46(a)図では、2ページ目に、論理関数f,f及びfの3つのLUTを格納している。また、3ページ目にはf及びfの2つのLUTを格納している。
しかしながら、この方法では、論理関数メモリの内部に未使用の領域が散在することとなり、メモリ使用効率が低い。そこで、第46(b)図のように、論理関数メモリ内にできるだけ隙間なくLUTを詰め込むようにすれば、メモリ使用効率が向上する。従って、1つの論理関数メモリ内に格納することのできるLUTの数も増やすことができる。このように、論理関数メモリ内にLUTをできるだけ隙間なく格納することを「メモリ・パッキング」という。
上記のようなメモリ・パッキングを実現するためには、ページ指定ビットの数を可変にする必要がある。また、論理関数メモリ内の列アドレスを、任意の位置から読み出せるようにすることが必要である。
第41図に示した本実施例に係る接続回路5-i(i∈{1,…,s-1})は、このようなメモリ・パッキングを行うことを可能とする。まず、ページ指定は、接続メモリ6-iが出力する行指定変数Rにより行う。また、ページ指定ビットとして何ビット使用するかは、接続メモリ6-iが出力する接続変数のうち、ページ/入力変数選択群93bのMUX93aに入力するものにより指定される。第41図の例では、ページ指定ビットとして最大3ビットまで使用することが可能である(尚、これは3ビットに限らず、目的にあわせて何ビットで設計してもよい)。ページ指定ビットとして使用しない場合には、代わりにそのビットには入力変数を入力することができる。
次に、論理関数メモリ内の列アドレスの読み出し位置の変更は、MPS92により行う。例えば、前段の論理関数メモリ4-(i-1)の指定された行において、列方向に8ビットずらして読み出したい場合には、MPS92により論理関数メモリ4-(i-1)の出力を8ビットシフトさせる。これにより、論理関数メモリ内の列アドレスを、任意の位置から読み出せるようにすることができる。なお、列アドレスの読み出し位置の指定は、接続メモリ6-iが出力する列選択変数Rにより行われる。
以上のように、本実施例の接続回路5-i(i∈{1,…,s-1})を使用すると、メモリ・パッキングを実現することが可能となる。
最後に、第42図に示した出力回路86-iの動作について簡単に説明する。まず、演算制御部10は、出力変数Yが出力される論理関数メモリ4-(i-1)の段数(i-1)をステップ変数(step)として出力回路86-iに出力する。出力セレクタ94は、このステップ変数(step)の値に基づき、出力変数Yを選択する。選択された出力変数Yは、出力シフタ95の入力線に出力される。
一方、出力選択メモリ97は、ステップ変数(step)の値に基づき、出力シフタ95及び出力パッキング・シフタ96のシフト量に関する情報を出力する。
通常は、必ずしも出力変数Yのすべてのビットが利用されているわけではなく、その一部のビットのみに有効な出力変数が出力される。そこで、出力シフタ95は、出力選択メモリ97から入力されるシフト量情報に従って、出力変数Yをシフトさせる。これにより、出力変数Yの未使用ビットを除いて、変数を端のビットから詰め込むことができる。出力シフタ95の出力は、出力パッキング・シフタ96の入力線に出力される。
出力パッキング・シフタ96は、更に、入力線を所定の量だけシフトして、その一部を出力線に接続する。例えば、出力シフタ95から出力される出力変数Yの有効なビット数がrビットであったとする。この場合、出力パッキング・シフタ96は、入力線をrビットだけシフトして出力線に接続する。これにより、出力シフタ95から出力されるrビットの出力変数は、ちょうど出力パッキング・レジスタ98の入力線の下位rビットの範囲に詰め込まれる。出力パッキング・レジスタ98は、クロックclkに同期して、出力パッキング・シフタ96の出力値を保持する。
次に、ステップ変数(step)がiとなり、出力セレクタ94が出力変数Yi+1を選択すると、同様にして、出力パッキング・レジスタ98の入力線の下位ビットに、出力変数が出力される。このとき、先に出力パッキング・レジスタ98に保持された変数値は、出力パッキング・シフタ96の入力線にフィード・バックされている。従って、先に出力パッキング・レジスタ98に保持された変数値も、新たな出力変数と同じビット数だけシフトして出力パッキング・レジスタ98に入力される。そして、出力パッキング・レジスタ98は、クロックclkに同期して、出力パッキング・シフタ96の出力値を保持する。
このようにして、出力パッキング・シフタ96に出力変数が順次隙間なく詰め込まれる。そして、演算が終了した時点で、演算制御部10は出力ロード信号(0_load)を1とする。これにより、出力レジスタ99は出力パッキング・シフタ96の出力値を取り込んで記憶し、外部に出力する。
このようにして、本実施例の出力回路を使用すれば、各論理関数メモリから個々に出力される演算結果をパッキングして、まとめて出力させることが可能となる。
【実施例11】

第47図は本発明の実施例11に係るプログラマブル論理デバイスの構成を表す図である。本実施例のプログラマブル論理デバイスは、基本的な構成は実施例10のプログラマブル論理デバイスと同様であるが、本実施例ではs個(s≧2)の論理関数メモリ4-0~4-(s-1)がリング状に接続されている点において実施例10とは異なる。すなわち、論理関数メモリ4-(s-1)の後段に、接続回路5-s、MAR90-s、DAS91-sが設けられており、DAS91-sの出力線は、論理関数メモリ4-0の入力線に接続されている。
このように、論理関数メモリ4-0~4-(s-1)をリング状に接続したことで、このプログラマブル論理デバイスで実行可能なLUTカスケードの段数をs段よりも大きくすることが可能である。従って、LUTカスケードの設計自由度が大きくなる。
例えば、s=2の場合を考える。この2つの論理回路メモリ4-0,4-1を用いて4段のLUTカスケードを実現する。第48図に示したように、1段目のLUTを論理回路メモリ4-0の0ページ(第48(a)図)、2段目のLUTを論理回路メモリ4-1の0ページ(第48(b)図)、3段目のLUTを論理回路メモリ4-0の1ページ(第48(c)図)、4段目のLUTを論理回路メモリ4-1の1ページ(第48(d)図)に格納すればよい。尚、ここではページを固定したが、論理回路メモリのメモリ使用効率を上げるためには、上述したメモリ・パッキングの手法を用いることもできる。
また、この論理回路メモリをリング状に接続したプログラマブル論理デバイスを用いて、以下の〔例3〕に示すように、2つ以上の組み合わせ論理回路の演算を1つのプログラマブル論理デバイスで同時に実行することが可能となる。
〔例3〕
(数16)、(数17)で表される2つの論理関数f,gを考える。
JP0004246200B2_000022t.gif (数16)の論理関数fは、第49(a)図に示したような6段のLUTカスケードにより表現することができる。(数17)の論理関数gは、第49(b)図に示したような6段のLUTカスケードにより表現することができる。
そこで、この2つのLUTカスケードを、6個の論理回路メモリをリング状に接続したプログラマブル論理デバイスを用いて実現する。この場合、第50図に示したように、論理関数fのLUTカスケードの各段の入力変数と、論理関数gのLUTカスケードの各段の入力変数が重複するように、互いにずらして配置する。
そして、この2つのLUTカスケードを、第51図に示したような1つのLUTリングに合成する。これにより、2つの組み合わせ論理回路が1つのLUTリングにより表現される。そして、このLUTリングを各論理関数メモリに格納すれば、2つの組み合わせ論理回路f、gの演算を1つのプログラマブル論理デバイスで同時に実行することが可能となる。
〔例3終わり〕
【産業上の利用可能性】

以上のように、本発明によれば、接続回路と接続メモリを用いて、それぞれの目的論理関数に応じて、前段の論理関数メモリの出力線及び入力変数の入力線と後段の論理関数メモリの入力線との接続関係を再構成することが可能な構成とした。これにより、使用可能な論理関数のレイル数及び入力変数の個数の組み合わせの自由度が増す。そして、より多くの目的論理関数の論理回路を1つのLUTカスケード論理回路により設計することが可能となる。また、レイル数及び入力変数の数の組み合わせを最適化できるため、論理関数メモリの入力線数を極力少なくすることができる。そのため、メモリの使用効率も向上する。その結果、LSIチップの利用効率が向上する。従って、回路の小型化・高集積化を図ることができる。
また、接続回路が、前段の論理関数メモリの出力を、論理関数の演算結果を出力する外部出力線に接続可能とした。これにより、LUTカスケードの途中の論理関数メモリの出力を出力変数として取り出し、必要なメモリ量を削減し、演算速度を高速化することが可能となる。
また、各論理関数メモリについて、複数の目的論理関数に対して、論理関数のLUTの異なるメモリ領域を割り当て、領域指定記憶手段の出力に従ってアクセス可能なメモリ領域を選択的に切り換えることで、複数の目的論理関数の演算を実行させることが可能となる。
更に、各接続回路及び各論理関数メモリに対して入力する入力変数を、各入力変数選択回路により個別に選択することができる。従って、複数の論理関数メモリの演算を同時に行うことが可能であり、パイプライン処理が可能となる。
図面
【図1】
0
【図2】
1
【図3】
2
【図4】
3
【図5】
4
【図6】
5
【図7】
6
【図8】
7
【図9】
8
【図10】
9
【図11】
10
【図12】
11
【図13】
12
【図14】
13
【図15】
14
【図16】
15
【図17】
16
【図18】
17
【図19】
18
【図20】
19
【図21】
20
【図22】
21
【図23】
22
【図24】
23
【図25】
24
【図26】
25
【図27】
26
【図】
27
【図29】
28
【図30】
29
【図31】
30
【図32】
31
【図33】
32
【図34】
33
【図35】
34
【図36】
35
【図37】
36
【図38】
37
【図39】
38
【図40】
39
【図41】
40
【図42】
41
【図47】
42
【図48】
43
【図50】
44
【図51】
45
【図52】
46