(57)【特許請求の範囲】
【請求項１】
各々が複数のマルチルックアップテーブルを有し、且つ、前記マルチルックアップテーブルに真理値表データを書き込むと、論理要素及び／又は接続要素として動作する複数のプログラマブル論理部と、
演算器を示す真理値表データである演算器データ、又は、状態遷移を示す真理値表データである制御データを保持するキャッシュ部と、
前記制御データと、前記制御データの状態遷移により示される演算器を含む前記演算器データとを、前記キャッシュ部からそれぞれ読み込んで、前記マルチルックアップテーブルを再構成する、前記構成制御部とを備え、
前記構成制御部は、
前記複数のプログラマブル論理部のうちの第１のプログラマブル論理部の第１のマルチルックアップテーブルが、分岐論理を構成する第１の真理値表データで再構成されている場合、前記分岐論理の分岐先回路を構成する前記第２の真理値表データで、前記複数のプログラマブル論理部のうちの第２のプログラマブル論理部の第２のマルチルックアップテーブルを再構成し、及び、
前記複数のプログラマブル論理部のうちの第１のプログラマブル論理部の第３のマルチルックアップテーブルが、分岐論理を構成する第３の真理値表データで再構成されており、前記第３の真理値表データの分岐論理の分岐先回路と予測した第４の真理値表データで構成された前記第２のプログラマブル論理部の第４のマルチルックアップテーブルの演算結果によって、前記第４の真理値表データが前記第３の真理値表データの分岐論理の分岐先回路を構成しなかった場合、何れかの前記プログラマブル論理部のマルチルックアップテーブルを、前記第３の真理値表データの分岐論理の分岐先回路を構成する第５の真理値表データで再構成する、ことを特徴とする半導体装置。
【請求項２】
前記キャッシュ部が保持する制御データを包含する記憶部をさらに有し、
前記構成制御部は、前記キャッシュ部が保持する制御データの次に、前記プログラマブル論理部のマルチルックアップテーブルを再構成するための制御データを、前記記憶部から読み出して、前記キャッシュ部に記憶する、ことを特徴とする請求項１に記載の半導体装置。
【請求項３】
前記記憶部に記憶される前記制御データの真理値表データは圧縮されており、
前記キャッシュ部は、圧縮した真理値表データを保持し、
前記構成制御部は、前記圧縮した真理値表データを解凍して、当該解凍した真理値表データで前記プログラマブル論理部のマルチルックアップテーブルを再構成する、ことを特徴とする請求項１又は２に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関する。
【背景技術】
【０００２】
ＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）が知られている。ＰＬＤは、構成する論理回路を変更可能な半導体装置であり、複数の論理要素、及び複数の接続要素を有する。
【０００３】
論理要素は、組合せ回路又は順序回路として動作する。論理要素は、例えば、真理値表を構成する複数の記憶素子からなる記憶素子ブロックである。複数の記憶素子は、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【０００４】
接続要素は、論理要素間の接続を切り替える。接続要素は、例えば、トランジスタスイッチング素子である。よって、ＰＬＤは、例えば、ＳＲＡＭを書き換え、スイッチング素子のオン／オフで、構成する論理回路を書き換える。
【０００５】
記憶素子ブロックを、接続要素として動作させる半導体装置が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２２４４６８号公報
【特許文献２】特開２００３−１４９３００号公報
【特許文献３】国際公開第０７／０６０７６３号パンフレット
【特許文献４】国際公開第０９／００１４２６号パンフレット
【特許文献５】国際公開第０７／０６０７３８号パンフレット
【特許文献６】特開２００９−１９４６７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
記憶素子ブロックを接続要素として動作させる半導体装置は、論理要素として動作する記憶素子の比率を上げることで、所望の論理回路を構成する記憶素子ブロックの総量を減らすことができる。
【課題を解決するための手段】
【０００８】
１つの側面では、本発明は、所望の論理回路を構成する記憶素子ブロックの総量を減らすことを目的とする。
【０００９】
上記の課題の解決を意図する実施形態は、下記の第１のセットに係る（１）〜（１５）に記載のようなものである。
（１）Ｎ（Ｎは、２以上の整数）本のアドレス線と、
Ｎ本のデータ線と、
複数の記憶部であって、各記憶部は、
前記Ｎ本のアドレス線から入力されるアドレスをデコードしてワード線にワード選択信号を出力するアドレスデコーダと、
前記ワード線とデータ線に接続し、真理値表を構成するデータをそれぞれ記憶し、前記ワード線から入力される前記ワード選択信号により、前記データを前記データ線に入出力する複数の記憶素子を有する、複数の記憶部と、を備え、
前記記憶部のＮ本のアドレス線は、前記記憶部の他のＮ個の記憶部のデータ線に、それぞれ接続するとともに、前記記憶部のＮ本のデータ線は、前記記憶部の他のＮ個の記憶部のアドレス線に、それぞれ接続することを特徴とする半導体装置。
（２）前記Ｎ本のアドレス線と、前記Ｎ本のデータ線とはそれぞれ、１本のアドレス線と、１本のデータ線とにより対をなす（１）に記載の半導体装置。
（３）前記複数の記憶部を選択する記憶部デコーダをさらに有する（１）又は（２）に記載の半導体装置。
（４）順序回路を有し、
前記複数の記憶部は、前記Ｎ本のデータ線の中の少なくとも１本のデータ線を前記順序回路の信号入力線に接続するとともに、前記Ｎ本のアドレス線の中の少なくとも１本のアドレス線を前記順序回路の信号出力線に接続する（１）〜（３）の何れか１項に記載の半導体装置。
（５）前記Ｎは、６〜８の整数である（１）〜（４）の何れか１項に記載の半導体装置。
（６）前記複数の記憶部は、前記Ｎ本のデータ線の中の６本のデータ線を、隣接する他の６個の記憶部の１本のデータ線にそれぞれ接続するとともに、前記Ｎ本のアドレス線の中の６本のアドレス線を、前記隣接する他の６個の記憶部の１本のデータ線にそれぞれ接続する（１）〜（５）の何れか１項に記載の半導体装置。
（７）前記アドレスデコーダは、行デコーダと列デコーダに分かれており、
前記行デコーダは、Ｍ（Ｍは５以下の整数であり、ＬはＮ−５の整数）本のアドレス線から入力されるアドレスをデコードして前記ワード線にワード選択信号を出力し、
前記列デコーダは、Ｌ本のアドレス線から入力されるアドレスをデコードして、前記複数の記憶素子から出力されるＮ本のデータ線を選択するデータ選択信号を出力する請求項（１）〜（６）の何れか１項に記載の半導体装置。
（８）前記複数の記憶部のうちの少なくとも１つの記憶部に隣接する他のＮ個の記憶部のうち２つの記憶部は、前記少なくとも１つの記憶部から第１の方向に第１の距離を置いて配置され、
前記隣接する他のＮ個の記憶部のうち２つの記憶部は、前記少なくとも１つの記憶部から前記第１の方向に交差する第２の方向に第２の距離を置いて配置され、
前記隣接する他のＮ個の記憶部のうち２つの記憶部は、前記少なくとも１つの記憶部から前記第１の方向と前記第２の方向に交差する第３の方向に第３の距離を置いて配置され、
前記第１〜第３の距離は、第１の距離、第２の距離、第３の距離の順番で長くなる、（１）〜（７）の何れか１項に記載の半導体装置。
（９）前記第１の方向と、前記第２の方向とは、互いに直交している（１）〜（８）の何れか１項に記載の半導体装置。
（１０）前記複数の記憶部の少なくとも１つの記憶部は、隣接する他の記憶部以外の記憶部のデータ線に、１本のアドレス線を接続する（１）〜（９）の何れか１項に記載の半導体装置。
（１１）前記複数の記憶部の何れかは、前記複数の記憶部のうちの少なくとも１つの記憶部から前記第１〜第３の方向の何れかの方向に配置され、
前記複数の記憶部の少なくとも１つの記憶部は、前記第１〜第３の距離の何れか１つを５倍した位置に配置された記憶部のデータ線に、１本のアドレス線を接続する（６）〜（１０）の何れか１項に記載の半導体装置。
（１２）前記複数の記憶部は、再構成可能な論理要素及び／又は接続要素として使用される（１）〜（１１）の何れか１項に記載の半導体装置。
（１３）前記真理値表を構成するデータを記憶する記憶装置に接続する入出力部をさらに有する（１）〜（１２）の何れか１項に記載の半導体装置。
（１４）前記真理値表を構成するデータを記憶する記憶装置をさらに有する（１３）に記載の半導体装置。
（１５）物理的な配線層数が４層以下である（１）〜（１４）の何れか１項に記載の半導体装置。
【００１０】
また、記憶素子ブロックを接続要素として動作させる半導体装置は、他の装置とデータの入出力が可能である。しかしながら、他の装置とのデータの入出力方式が決まらないと、上記半導体装置は、他の装置とデータの入出力を行うことができない。
【００１１】
別な側面では、本発明は、半導体装置と演算処理装置とのデータの入出力を行うことを目的とする。
【００１２】
上記の課題の解決を意図する実施形態は、下記の第２のセットに係る（１）〜（１１）に記載のようなものである。
（１）それぞれが複数の記憶部を有する第１及び第２の論理部であって、各記憶部は、第１アドレス線から入力されるメモリ動作用アドレス、又は、第２アドレス線から入力される論理動作用アドレスをデコードしてワード線にワード選択信号を出力するアドレスデコーダと、前記ワード線とデータ線とに接続し、論理動作又は接続関係を規定する真理値表を構成するデータをそれぞれ記憶するとともに、前記ワード線から入力される前記ワード選択信号により、前記データを入出力するデータ線に接続される複数の記憶素子と、を有する、第１及び第２の論理部と、
前記第１の論理部が有する記憶部の第１アドレス線及びデータ線と接続する第１の入出力部、前記第２の論理部が有する記憶部の第２アドレス線及びデータ線と接続する第２の入出力部、及び、前記第１の入出力部に対してメモリ動作用アドレス及びデータを出力する制御を行うとともに、前記第２の入出力部に対して論理動作用アドレスを出力し且つデータを受け取る制御を行う制御部、を有する演算処理部と、
を備えることを特徴とする半導体装置。
（２）第１の論理部又は第２の論理部に含まれる前記記憶部の論理動作用アドレス線は、前記記憶部の他の記憶部のデータ線に、それぞれ接続するとともに、前記記憶部のデータ線は、前記記憶部の他の記憶部の論理動作用アドレス線に、それぞれ接続する（１）に記載の半導体装置。
（３）前記第１の論理部及び前記第２の論理部に含まれる前記複数の記憶部は、再構成可能である（１）又は（２）に記載の半導体装置。
（４）前記第１の論理部及び前記第２の論理部は、前記複数の記憶部を選択する記憶部デコーダをそれぞれ有する（１）〜（３）の何れか１項に記載の半導体装置。
（５）前記真理値表を構成するデータを記憶する記憶装置に接続する入出力部をさらに有する（１）〜（４）の何れか１項に記載の半導体装置。
（６）前記真理値表を構成するデータを記憶する記憶装置をさらに有する（１）〜（５）の何れか１項に記載の半導体装置。
（７）物理的な配線層数が４層以下である（１）〜（６）の何れか１項に記載の半導体装置。
（８）前記第１の論理部が有する前記記憶部の数と、前記第２の論理部が有する前記記憶部の数とが同一である（１）〜（７）の何れか１項に記載の半導体装置。
（９）前記アドレスデコーダは、行デコーダと列デコーダに分かれており、
前記行デコーダは、Ｍ（Ｍは５以下の整数であり、ＬはＮ−５の整数）本のアドレス線から入力されるアドレスをデコードして前記ワード線にワード選択信号を出力し、
前記列デコーダは、Ｌ本のアドレス線から入力されるアドレスをデコードして、前記複数の記憶素子から出力されるＮ本のデータ線を選択するデータ選択信号を出力する（１）〜（８）の何れか１項に記載の半導体装置。
（１０）演算処理部を用いた半導体装置の制御方法であって、
前記演算処理部が、第１の論理部に、論理動作又は接続関係を規定する真理値表データを出力するステップであって、前記第１の論理部は複数の記憶部を有し、各記憶部は複数の記憶素子を有する、ステップと、
前記第１の論理部の記憶部に、前記論理動作又は接続関係を規定する真理値表データを記憶するステップと、
前記演算処理部が、第２の論理部に、論理動作用アドレスを出力するステップであって、前記第１の論理部は複数の記憶部を有し、各記憶部は複数の記憶素子を有する、ステップと、
前記第２の論理部の記憶部が、前記論理動作用アドレスにより特定される記憶素子からデータを出力するステップと、
前記演算処理装置は、前記第２の論理部からデータを受け取るステップと、を有する特徴とする制御方法。
（１１）前記演算処理装置は前記半導体装置に含まれる、（１０）に記載の制御方法。
【００１３】
上記の課題の解決を意図する実施形態は、下記の第３のセットに係る（１）〜（１１）に記載のようなものである。
（１）データを演算処理する演算処理部と、
複数の記憶部及び入出力部を有する論理部であって、
各記憶部は、アドレス線から入力されるアドレスをデコードして前記ワード線にワード選択信号を出力するアドレスデコーダと、データ線とワード線に接続し、論理動作又は接続関係を規定する真理値表を構成するデータをそれぞれ記憶するとともに、前記ワード線から入力される前記ワード選択信号により、前記データを入出力するデータ線に接続される複数の記憶素子とを有し、
前記入出力部は、前記演算処理部の少なくとも１つの出力信号線と前記アドレス線のすくなくとも１つとを接続すると共に、前記演算処理部の少なくとも１つの入力信号線と前記データ線の少なくとも１つとを接続する、演算処理部と、
を備えることを特徴とする半導体装置。
（２）前記記憶部のアドレス線は、前記記憶部の他の記憶部のデータ線に、それぞれ接続するとともに、前記記憶部のデータ線は、前記記憶部の他の記憶部のアドレス線に、それぞれ接続する（１）に記載の半導体装置。
（３）前記複数の記憶部は、再構成可能である（１）又は（２）に記載の半導体装置。
（４）前記論理部は、前記複数の記憶部を選択する記憶部デコーダをさらに有する（１）〜（３）の何れかに記載の半導体装置。
（５）前記真理値表を構成するデータを記憶する記憶装置に接続する入出力部をさらに有する（１）〜（４）の何れかに記載の半導体装置。
（６）前記真理値表を構成するデータを記憶する記憶装置をさらに有する（１）〜（５）の何れかに記載の半導体装置。
（７）物理的な配線層数が４層以下である（１）〜（６）の何れかに記載の半導体装置。
（８）前記アドレスデコーダは、行デコーダと列デコーダに分かれており、
前記行デコーダは、Ｍ（Ｍは５以下の整数であり、ＬはＮ−５の整数）本のアドレス線から入力されるアドレスをデコードして前記ワード線にワード選択信号を出力し、
前記列デコーダは、Ｌ本のアドレス線から入力されるアドレスをデコードして、前記複数の記憶素子から出力されるＮ本のデータ線を選択するデータ選択信号を出力する（１）〜（７）の何れか１項に記載の半導体装置。
（９）演算処理部を用いた半導体装置の制御方法であって、
前記演算処理部が、前記演算処理部に含まれる論理部に、アドレスを出力するステップであって、前記論理部は複数の記憶素子を有し、各記憶素子は、論理動作又は接続関係を規定する真理値表を構成するデータをそれぞれ記憶する、ステップと、
前記論理部は、前記演算処理部の少なくとも１つの出力信号線と接続される少なくとも１つのアドレス線から、前記アドレスを受け取るステップと、
前記論理部は、前記アドレスにより特定される記憶素子からデータを出力するステップと、
前記論理部は、前記データを、前記演算処理部の少なくとも１つの入力信号線と接続される少なくとも１つのデータ線を介して、前記演算処理部に出力するステップと、
を有することを特徴とする制御方法。
（１０）前記論理部は、前記読み出したデータを、前記論理部内の記憶部と繋がる少なくとも１つのデータ線から、前記演算処理部の少なくとも１つの入力信号線に出力する、（９）に記載の制御方法。
（１１）前記演算処理装置は前記半導体装置に含まれる、（９）又は（１０）に記載の制御方法。
【００１４】
また、ＰＬＤの１つとしてＭＰＬＤ（Ｍｅｍｏｒｙ−ｂａｓｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）がある。ＭＰＬＤは、ＬＵＴベースのＰＬＤと同様に、メモリセルユニットで回路構成を実現する。ＭＰＬＤは、真理値表データが書き込まれるメモリセルユニットが、論理要素として機能する点で、上記したＬＵＴベースのＰＬＤと同じであるが、ＬＵＴ同士の接続要素としても機能する点で、メモリセルユニット間の接続に専用の切り替え回路を有するＬＵＴベースのＰＬＤと異なる。しかし、ＭＰＬＤは、メモリセルユニットを論理要素及び／又は論理要素間の接続を切り替える接続要素として使用するため、データパスを変えるためには、ＬＵＴベースのＰＬＤと同様に、メモリセルに保持された真理値表データを書き換える必要がある。そのため、ＭＰＬＤで、動的再構成を実行すると、メモリセルユニットへのデータの書き込み処理が生じるため、処理が遅延する。
【００１５】
さらに別な側面では、本発明はＭＰＬＤを有する半導体装置の再構成時間を短縮化することができる。
【００１６】
上記の課題の解決を意図する実施形態は、下記の第４のセットに係る（１）〜（５）に記載のようなものである。
【００１７】
（１）各々が複数のメモリセルユニットを有し、且つ、前記メモリセルユニットに真理値表データを書き込むと、論理要素又は接続要素として動作する複数のプログラマブル論理部と、
各々が複数の前記真理値表データである複数の構成情報を保持するキャッシュ部と、
前記複数のプログラマブル論理部のうちの第１のプログラマブル論理部が、分岐論理を構成する第１の構成情報で再構成されている場合、前記分岐論理の実行前に、前記複数のプログラマブル論理部のうちの第２のプログラマブル論理部を、前記分岐論理の分岐先回路を構成する前記第２の構成情報で投機的に再構成する構成制御部と、
を備えることを特徴とする半導体装置。
（２）前記キャッシュ部は、演算器を示す真理値表データである演算器データと、状態遷移を示す真理値表データである制御データとを、分けて保持し、
前記構成制御部は、前記制御データと、前記制御データの状態遷移により示される演算器を含む前記演算器データを、前記キャッシュ部からそれぞれ読み込んで、前記プログラマブル論理部を再構成する、ことを特徴とする（１）に記載の半導体装置。
（３）前記キャッシュ部が保持する制御データを包含する記憶部をさらに有し、
前記構成制御部は、前記キャッシュ部が保持する制御データの次に、前記プログラマブル論理部を再構成するための制御データを、前記記憶部から読み出して、前記キャッシュ部に記憶する、ことを特徴とする（１）又は（２）に記載の半導体装置。
（４）前記記憶部に記憶される前記制御データの真理値表データは圧縮されており、
前記キャッシュ部は、圧縮した真理値表データを保持し、
前記構成制御部は、前記圧縮した真理値表データを解凍して、当該解凍した真理値表データで前記プログラマブル論理部を再構成する、ことを特徴とする（１）〜（３）の何れか１項に記載の半導体装置。
（５）前記第２の構成情報で構成された第２のプログラマブル論理部の演算結果が、前記第２の構成情報が前記第１の構成情報の分岐論理の分岐先回路ではないことを示す場合、前記構成制御部は、前記第２のプログラマブル論理部以外のプログラマブル論理部を、前記分岐論理の分岐先を含む第３の構成情報で再構成する、（１）〜（４）の何れか１項に記載の半導体装置。
【発明の効果】
【００１８】
第１の側面では、本発明は、所望の論理回路を構成する記憶素子ブロックの総量を減らすことができる。
【００１９】
第２の側面では、本発明は、半導体装置と演算処理装置とのデータの入出力を行うことができる。
【００２０】
第３の側面では、本発明は、ＭＰＬＤを有する半導体装置の再構成時間を短縮化することができる。
【図面の簡単な説明】
【００２１】
【図１】ＭＰＬＤの一例を示す図である。
【図２】ＭＰＬＤのメモリ動作の一例を示す図である。
【図３】ＭＬＵＴの論理動作の一例を示す図である。
【図４】ＭＬＵＴの第１例を示す図である。
【図５】１ポート記憶素子の一例を示す図である。
【図６】論理要素として動作するＭＬＵＴの一例を示す図である。
【図７】論理回路として動作するＭＬＵＴの一例を示す図である。
【図８】図７に示す論理回路の真理値表を示す図である。
【図９】接続要素として動作するＭＬＵＴの一例を示す図である。
【図１０】図９に示す接続要素の真理値表を示す図である。
【図１１】４つのＡＤ対を有するＭＬＵＴによって実現される接続要素の一例を示す図である。
【図１２】１つのＭＬＵＴが、論理要素及び接続要素として動作する一例を示す図である。
【図１３】図１２に示す論理要素及び接続要素の真理値表を示す図である。
【図１４】４つのＡＤ対を有するＭＬＵＴによって実現される論理動作及び接続要素の一例を示す図である。
【図１５】ＭＬＵＴで構成される２ビット加算器の回路構成の一例を示す図である。
【図１６】２ビット加算器動作の真理値表を示す図である
【図１７】７つのＡＤ対を有するＭＬＵＴの一例を示す図である。
【図１８Ａ】７個のＡＤ対を有するＭＬＵＴの一例を示す図である。
【図１８Ｂ】７個のＡＤ対を有するＭＬＵＴの平面構造の一例を示す図である。
【図１９】ＭＬＵＴの第２例を示す図である。
【図２０】２ポート記憶素子の一例を示す図である。
【図２１】ＭＬＵＴの第３例を示す図である。
【図２２】ＭＬＵＴ配置の第１例を示す平面図である。
【図２３】ＭＬＵＴの配置の第２例を示す平面図である。
【図２４】ＭＬＵＴ間の結線の一例を示す図である。
【図２５】離間して配置されるＭＬＵＴを隣接ＭＬＵＴを介して接続する例を示す図である。
【図２６Ａ】所望の論理回路を構成するために必要なＭＬＵＴ数の一例を示す図である。
【図２６Ｂ】所望の論理回路を構成するために必要なＭＬＵＴ数の一例を示す図である。
【図２６Ｃ】所望の論理回路を構成するために必要なＭＬＵＴ数の一例を示す図である。
【図２６Ｄ】所望の論理回路を構成するために必要なＭＬＵＴ数の一例を示す図である。
【図２７】最密充填配置構造と、非最密充填配置構造を示す図である。
【図２８】最密充填配置構造におけるＡＤ対の数の一例を示す図である。
【図２９】ＭＬＵＴのＡＤ対の結線構造の１例を示す図である。
【図３０】ＭＬＵＴのＡＤ対の結線構造の別な例を示す図である。
【図３１】ＭＬＵＴのＡＤ対の結線構造の他の例を示す図である。
【図３２】ＭＬＵＴのＡＤ対の結線構造の他の例を示す図である。
【図３３】ＭＬＵＴのＡＤ対の結線構造の他の例を示す図である。
【図３４】ＭＬＵＴを有するＭＬＵＴブロックの一例を示す図である。
【図３５】１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における近距離配線パターンの配置の一例を示す図である。
【図３６】１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第１の離間配線パターンの配置を示す図である。
【図３７】１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第２の離間配線パターンの配置を示す図である。
【図３８】１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第３の離間配線パターンの配置を示す図である。
【図３９】１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第４の離間配線パターンの配置を示す図である。
【図４０】１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第５の離間配線パターンの配置を示す図である。
【図４１】ＭＰＬＤを搭載した半導体装置の配置ブロックの一例を示す図である。
【図４２】ＭＰＬＤの配置・配線を実行する情報処理装置の１例を示す図である。
【図４３】情報処理装置が、ＭＰＬＤに配置・配線するためのビットストリームデータを生成するフローの１例を示す図である。
【図４４】図４１に示す半導体装置に搭載されるＭＰＬＤを部分再構成するフローの一例を示す図である。
【図４５】８点離散フーリエ変換をバタフライ演算で行うときのアルゴリズムの一例を示す。
【図４６】ＭＰＬＤを搭載した半導体装置の一例を示す図である。
【図４７】演算処理部と、ＭＰＬＤとのデータの入出力を行う入出力部の一例を概略的に示す図である。
【図４８】演算処理部と、ＭＰＬＤとのデータの入出力を行う入出力部の別な例を示す図である。
【図４９】論理動作とメモリ動作を同時に行うＭＰＬＤ、及び演算処理部の一例を示す図である。
【図５０】複数のＭＰＬＤ、及び演算処理部の一例を示す図である。
【図５１】ＭＰＬＤを搭載した半導体装置の他の例における配置ブロックの一例を示す図である。
【図５２】ＭＰＬＤを搭載した半導体装置の他の例における配置構造の一例を示す図である。
【図５３】動作合成の一例を示す図である。
【図５４】論理回路ｘ＝（ａ＋ｂ）＊（ｂ＋ｃ）を構成するＣＤＦＧの例を示す図である。
【図５５】図５４に示すＣＤＦＧを、速度優先スケジューリングでスケジューリングした結果を示す図である。
【図５６】図５４に示すＣＤＦＧを、ハードウェア量優先スケジューリングでスケジューリングした結果を示す図である。
【図５７】第１の論理ブロックと第２の論理ブロックとの２つの論理ブロックに面分割された論理回路を実行する１つの例を示す。
【図５８】アロケーションのときに論理回路を面分割する１例を示す図である。
【図５９】ＭＬＵＴに論理回路情報などの情報を書き込む手順を示すフローチャートの一例である。
【図６０】ＭＰＬＤを搭載した半導体装置の他の例における配置構造を示す図である。
【図６１】ＭＰＬＤを搭載した半導体装置の他の例における配置構造を示す図である。
【図６２】半導体装置の配線層の一例を示す断面図である。
【図６３】半導体装置に搭載されるＭＰＬＤを部分再構成するフローの一例を示す図である。
【図６４】ＤＥＳの計算アルゴリズムのフローの一例を示す図である。
【図６５】Ｆ関数のアルゴリズムのフローを示す図である。
【図６６】図６６は、半導体装置の一例を示すブロック図である
【図６７】図６７は、メインメモリのメモリマップの一例を示す図である。
【図６８】図６８は、構成制御部の詳細ブロック図である。
【図６９】図６９は、ＭＰＬＤで構成されるデータパスブロック及びステートマシンの一例を示す図である。
【図７０】図７０は、半導体装置の投機実行に関する処理フローの一例を示す図である。
【図７１】図７１は、半導体装置のキャッシュ制御に関する処理フローである。
【発明を実施するための形態】
【００２２】
以下、〔１〕ＭＰＬＤ、〔２〕ＭＬＵＴ、〔３〕ＭＬＵＴの構造、〔４〕１つのＭＰＬＤを搭載した半導体装置、〔５〕１つのＭＰＬＤと、演算処理部とを搭載した半導体装置、〔６〕２つのＭＰＬＤと、演算処理部とを搭載した半導体装置、〔７〕動的再構成に適する半導体装置に分けて、順に実施例を説明する。以下に説明するＭＰＬＤ〔１〕は、複数のＭＬＵＴ〔２〕を有してなり、ＭＰＬＤ〔１〕は、演算処理部と組み合わされて、半導体装置〔４〕又は〔５〕又は〔６〕又は〔７〕を構成する。
【００２３】
〔１〕ＭＰＬＤ
図１は、半導体装置の一例を示す図である。図１に示す２０は、半導体装置としてのＭＰＬＤ（Ｍｅｍｏｒｙ−ｂａｓｅｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）である。ＭＰＬＤ２０は、記憶素子ブロックとしてのＭＬＵＴ（Ｍｕｌｔｉ  Ｌｏｏｋ−Ｕｐ−Ｔａｂｌｅ）３０を複数有するとともに、ＭＬＵＴデコーダ１２を有する。また、後述するように、ＭＰＬＤ２０は、演算処理装置と接続する論理部として動作する。
【００２４】
ＭＰＬＤ２０は、複数の記憶素子を含む。記憶素子には、真理値表を構成するデータがそれぞれ記憶されることで、ＭＰＬＤ２０は、論理要素、又は、接続要素、又は、論理要素及び接続要素として動作する論理動作を行う。
【００２５】
ＭＰＬＤ２０はさらに、メモリ動作を行う。メモリ動作とは、ＭＬＵＴ３０に含まれる記憶素子へのデータの書き込みや読み出しをいう。よって、ＭＰＬＤ２０は、主記憶装置や、キャッシュメモリとして動作することができる。
【００２６】
ＭＬＵＴ３０へのデータの書き込みは、真理値表データの書き換えにもなるため、メモリ動作は、真理値表データの再構成を生じる。なお、再構成のうち、ＭＰＬＤ内の特定の１つ又は複数のＭＬＵＴ、又はＭＬＵＴを構成する特定の１つ又は複数の記憶素子に記憶された真理値表データを書き換えることを「部分再構成」という。
【００２７】
図１には、メモリ動作では、ＭＰＬＤアドレス、メモリ動作用アドレスＭＡ、書き込みデータＷＤ、及び読み出しデータＲＤの何れかの信号を使用され、それらの信号と、それらの信号を通す結線とが図示される。また、論理動作では、論理動作用アドレスＬＡ、及び論理動作用データＬＤが使用され、それらの信号と、それらの信号を通す結線とが図示される。なお、メモリ動作用アドレスＭＡとは、ＭＰＬＤ２０に含まれる各ＭＬＵＴに供給されるメモリ動作用のアドレスである。ＭＰＬＤアドレスとは、ＭＰＬＤ２０内に含まれる１つのＭＬＵＴを特定するアドレスであり、メモリ動作用アドレスＭＡを供給するＭＬＵＴを特定するアドレス信号である。
【００２８】
〔１．１〕ＭＰＬＤのメモリ動作
図２は、ＭＰＬＤのメモリ動作の一例を示す図である。ＭＰＬＤ２０は、メモリ動作で、実線で示されるメモリ動作用アドレス、ＭＬＵＴアドレス、書き込みデータＷＤ、及び読み出しデータＲＤの何れかの信号を使用し、破線で示される論理動作用アドレスＬＡ、及び論理動作用データＬＤは使用しない。なお、メモリ動作用アドレス、ＭＬＵＴアドレス、及び書き込みデータＷＤは、例えば、ＭＰＬＤ２０の外部にある演算処理装置によって出力され、読み出しデータＷＤは、演算処理装置に出力される。
【００２９】
メモリ動作では、ＭＰＬＤ２０は、記憶素子を特定するアドレスとして、メモリ動作用アドレス及びＭＬＵＴアドレスを受け取るとともに、書き込みのときは書き込みデータＷＤを受け取り、読み出しのときは読み出しデータＬＤを出力する。
【００３０】
ＭＬＵＴアドレスとは、ＭＰＬＤ２０内に含まれる１つのＭＬＵＴを特定するアドレスである。ＭＬＵＴアドレスは、ｍ本の信号線を介してＭＰＬＤ２０に出力される。なお、ｍとは、ＭＬＵＴを特定する選択アドレス信号線の数である。ｍ本の信号線で、２のｍ乗のＭＬＵＴを特定することができる。ＭＬＵＴデコーダ１２は、ｍ本の信号線を介してＭＬＵＴアドレスを受け取るとともに、ＭＬＵＴアドレスをデコードして、メモリ動作の対象となるＭＬＵＴ３０を選択し特定する。メモリ動作用アドレスは、ｎ本の信号線を介して、図１０を用いて後述するアドレスデコーダでデコードされて、メモリ動作の対象となるメモリセルを選択する。
【００３１】
なお、ＭＰＬＤ２０は、例えば、ＭＬＵＴアドレス、書き込みデータＷＤ及び読み出しデータＬＤは、全てｎ本の信号線を介して受け取る。なお、ｎとは、図４を用いて後述されるように、ＭＬＵＴのメモリ動作用又は論理動作用の選択アドレス信号線の数である。ＭＰＬＤ２０は、ｎ本の信号線を介して、ＭＬＵＴアドレス、書き込みデータ及び読み出しデータを各ＭＬＵＴに供給する。なお、メモリ動作用アドレスＭＡ、書き込みデータＷＤ及び読み出しデータＲＤの詳細は、ＭＬＵＴの例とともに、図４、図１９、及び図２１を用いて後述する。
【００３２】
〔１．２〕ＭＰＬＤの論理動作
図３は、ＭＰＬＤ２０の論理動作の一例を示す図である。図３において、ＭＰＬＤ２０の論理動作では、実線で示される論理動作用アドレスＬＡ、及び論理動作用データＬＤを使用する。
【００３３】
ＭＰＬＤ２０の論理動作では、論理動作用アドレスＬＡは、外部装置から出力され、ＭＬＵＴ３０の真理値表によって構成される論理回路の入力信号として使用される。そして、論理動作用データＬＤは、上記論理回路の出力信号であり、論理回路の出力信号として、外部装置に出力される。
【００３４】
複数のＭＬＵＴのうち、ＭＰＬＤ２０の外延に配置されるＭＬＵＴは、ＭＰＬＤ２０の外部の装置と、論理動作用のデータである論理動作用アドレスＬＡを受け取り、論理動作用データＬＤを出力するＭＬＵＴとして動作する。例えば、例えば、図１に示すＭＬＵＴ３０ａ、３０ｂは、半導体装置１００の外部から論理動作用アドレスＬＡを受け取り、周囲にある他のＭＬＵＴ３０ｄに論理動作用データＬＤを出力する。また、図１に示すＭＬＵＴ３０ｅ、３０ｆは、他のＭＬＵＴ３０ｃ、３０ｄから論理動作用アドレスＬＡを受け取り、ＭＰＬＤ２０の外部に論理動作用データＬＤを出力する。
【００３５】
ＭＬＵＴの論理動作用アドレスＬＡのアドレス線は、隣接するＭＬＵＴの論理動作用データＬＤのデータ線と接続しており、例えば、ＭＬＵＴ３０ｃは、ＭＬＵＴ３０ａから出力された論理動作用データを、論理動作用アドレスとして受け取る。このように、ＭＬＵＴの論理動作用アドレス又は論理動作用データは、周囲にあるＭＬＵＴとの入出力により得られる点で、各々のＭＬＵＴが独自に接続するＭＬＵＴアドレスと異なる。
【００３６】
ＭＰＬＤ２０の論理動作により実現される論理は、ＭＬＵＴ３０に記憶される真理値表データにより実現される。いくつかのＭＬＵＴ３０は、ＡＮＤ回路、加算器などの組み合わせ回路としての論理要素として動作する。他のＭＬＵＴは、組み合わせ回路を実現するＭＬＵＴ３０間を接続する接続要素として動作する。論理要素、及び接続要素を実現するための真理値表データの書き換えは、上述のメモリ動作による再構成によりなされる。
【００３７】
〔２〕ＭＬＵＴ
以下に、ＭＬＵＴについて説明する。
〔２．１〕ＭＬＵＴの第１例
図４は、ＭＬＵＴの第１例を示す図である。図４に示すＭＬＵＴ３０は、アドレス切替回路１０ａと、アドレスデコーダ９と、記憶素子４０と、出力データ切替回路１０ｂとを有する。図１０に示すＭＬＵＴ３０は、動作切替信号が論理動作を示す場合、論理動作用アドレスＬＡに従って、論理動作用データＬＤを出力するように動作する。また、ＭＬＵＴ３０は、動作切替信号がメモリ動作を示す場合、メモリ動作用アドレスに従って、書き込みデータを受け入れ、又は、読み出しデータを出力するように動作する。
【００３８】
アドレス切替回路１０ａは、メモリ動作用アドレスＭＡが入力されるｎ本のメモリ動作用アドレス信号線と、論理動作用アドレスＬＡが入力されるｎ本の論理動作用アドレス入力信号線と、動作切替信号が入力される動作切替信号線とを接続する。アドレス切替回路１０ａは、動作切替信号に基づいて、メモリ動作用アドレスＭＡ、又は論理動作用アドレスＬＡのいずれかをｎ本の選択アドレス信号線に出力するように動作する。このように、アドレス切替回路１０ａが、アドレス信号線を選択するのは、記憶素子４０が読み出し動作と書き込み動作の何れかを受け付ける１ポート型の記憶素子であるからである。
【００３９】
図４に示すアドレスデコーダ９は、アドレス切替回路１０ａから供給されるｎ本のアドレス信号線から受け取った選択アドレス信号をデコードし、２のｎ乗本のワード線にデコード信号を出力する。
【００４０】
ｎ×２ｎ個の記憶素子は、２のｎ乗本のワード線と、ｎ本の書き込みデータ線と、ｎ個の出力ビット線の接続部分に配置される。記憶素子の詳細例は、図５を用いて後述する。
【００４１】
出力データ切り替え回路１０ｂは、ｎ本の出力ビット線から信号を受け取ると、入力される動作切替信号に従って、記憶素子から読み出したデータをｎ本の読み出しデータ信号線に出力し、又は、読み出しデータを論理動作用信号線に出力するように動作する。
【００４２】
〔２．２〕ＭＬＵＴの記憶素子
図５は、１ポート型の記憶素子の一例を示す図である。図５に示す１ポート型の記憶素子は、ＳＲＡＭであり、図４に示す記憶素子として使用できる。図５に示す１ポートＳＲＡＭ４０は、第１及び第２のｐＭＯＳ（ｐｏｓｉｔｉｖｅ  ｃｈａｎｎｅｌ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）トランジスタ１６１、１６２と、第１〜第４のｎＭＯＳ（ｎｅｇａｔｉｖｅ  ｃｈａｎｎｅｌ  ＭＯＳ）トランジスタ１６３〜１６６とを有する。
【００４３】
第１のｐＭＯＳトランジスタ１６１のソースと、第２のｐＭＯＳトランジスタ１６２のソースとは、ＶＤＤ（電源電圧端）に接続する。第１のｐＭＯＳトランジスタ１６１のドレーンは、第１のｎＭＯＳトランジスタ１６３のソースと、第２のｐＭＯＳトランジスタのゲート１６２と、第２のｎＭＯＳトランジスタのゲート５０４と、第３のｎＭＯＳトランジスタ５０５のソースとに接続する。第１のｐＭＯＳトランジスタ１６１のゲートは、第１のｎＭＯＳトランジスタ１６３のゲートと、第２のｐＭＯＳトランジスタ１６２のドレーンと、第２のｎＭＯＳトランジスタ５０４のドレーンと、第４のｎＭＯＳトランジスタ５０６のソースとに接続する。第１のｎＭＯＳトランジスタ１６３のドレーンと、第２のｎＭＯＳトランジスタ５０４のドレーンは、ＶＳＳ（接地電圧端）に接続される。
【００４４】
第３のｎＭＯＳトランジスタ１６５のドレーンは、第１のビット線ＢＬに接続される。第３のｎＭＯＳトランジスタ１６５のゲートは、ワード線ＷＬに接続される。第４のｎＭＯＳトランジスタ１６６のドレーンは、第２のビット線ｑＢＬに接続される。第４のｎＭＯＳトランジスタ１６６のゲートは、ワード線ＷＬに接続される。
【００４５】
上記構成により、書き込み動作では、１ポート記憶素子４０は、ワード線ＷＬの信号レベル「Ｈ」により、書込ビット線ＢＬ、及び、書込ビット線ｑＢＬの信号レベルを、保持する。
【００４６】
〔２．３〕ＭＬＵＴの論理動作
Ａ．論理要素
図６は、論理要素として動作するＭＬＵＴの一例を示す図である。図６に示すＭＬＵＴ３０ａ、３０ｂは、論理動作用アドレス線Ａ０〜Ａ３から論理動作用アドレスＬＡを受け取り、論理動作用データ線Ｄ０〜Ｄ３に論理動作用データＬＤを出力する。なお、ＭＬＵＴ３０ａの論理動作用アドレス線Ａ２は、隣接するＭＬＵＴ３０ｂの論理動作用データ線Ｄ０と接続しており、ＭＬＵＴ３０ａは、ＭＬＵＴ３０ｂから出力された論理動作用データＬＤを、論理動作用アドレスＬＡとして受け取る。また、ＭＬＵＴ３０ａの論理動作用データ線Ｄ２は、ＭＬＵＴ３０ｂの論理動作用アドレス線Ａ０と接続しており、ＭＬＵＴ３０ａが出力した論理動作用データＬＤは、ＭＬＵＴ３０ｂで論理動作用アドレスＬＡとして受け取られる。このように、ＭＰＬＤ同士の連結は、１対のアドレス線とデータ線とを用いる。以下、ＭＬＵＴ３０ａの論理動作用アドレス線Ａ２と、論理動作用データ線Ｄ２のように、ＭＬＵＴの連結に使用されるアドレス線とデータ線の対を「ＡＤ対」という。
【００４７】
なお、図６では、ＭＬＵＴ３０ａ、３０ｂが有するＡＤ対は４であるが、ＡＤ対の数は、後述するように４に限定されない。
【００４８】
図７は、論理回路として動作するＭＬＵＴの一例を示す図である。本例では、論理動作用アドレス線Ａ０及びＡ１を２入力ＮＯＲ回路７０１の入力とし、論理動作用アドレス線Ａ２及びＡ３を２入力ＮＡＮＤ回路７０２の入力とする。そして、２入力ＮＯＲ回路の出力と、２入力ＮＡＮＤ回路７０２の出力を、２入力ＮＡＮＤ回路７０３に入力し、２入力ＮＡＮＤ回路７０３の出力をデータ線Ｄ０に出力する論理回路を構成する。
【００４９】
図８は、図７に示す論理回路の真理値表を示す図である。図７の論理回路は、４入力のため、入力Ａ０〜Ａ３の全ての入力を入力として使用する。一方、出力は、１つのみなので、出力Ｄ０のみを出力として使用する。真理値表の出力Ｄ１〜Ｄ３の欄には「＊」が記載されている。これは、「０」又は「１」のいずれの値でもよいことを示す。しかしながら、実際に再構成のために真理値表データをＭＬＵＴに書き込むときには、これらの欄には、「０」又は「１」のいずれかの値を書き込む必要がある。
【００５０】
Ｂ．接続要素の機能
図９は、接続要素として動作するＭＬＵＴの一例を示す図である。図９では、接続要素としてのＭＬＵＴは、アドレス線Ａ０の信号をデータ線Ｄ１に出力し、アドレス線Ａ１の信号をデータ線Ｄ２に出力し、論理動作用アドレス線Ａ２の信号をデータ線Ｄ３に出力するように動作する。接続要素としてのＭＬＵＴはさらに、アドレス線Ａ３の信号をデータ線Ｄ１に出力するように動作する。
【００５１】
図１０は、図９に示す接続要素の真理値表を示す図である。図９に示す接続要素は、４入力４出力である。したがって、入力Ａ０〜Ａ３の全ての入力と、出力Ｄ０〜Ｄ３の全ての出力が使用される。図１０に示す真理値表によって、ＭＬＵＴは、入力Ａ０の信号を出力Ｄ１に出力し、入力Ａ１の信号を出力Ｄ２に出力し、入力Ａ２の信号を出力Ｄ３に出力し、入力Ａ３の信号を出力Ｄ０に出力する接続要素として動作する。
【００５２】
図１１は、４つのＡＤ対を有するＭＬＵＴによって実現される接続要素の一例を示す図である。図１１において、１点鎖線は、ＡＤ対０に入力された信号がＡＤ対１に出力される信号の流れを示す。２点鎖線は、第２のＡＤ対ＡＤＡに入力された信号がＡＤ対２に出力される信号の流れを示す。破線は、ＡＤ対２に入力された信号がＡＤ対３に出力される信号の流れを示す。実線は、ＡＤ対３に入力された信号がＡＤ対０に出力される信号の流れを示す。
【００５３】
なお、図１１では、ＭＬＵＴ３０が有するＡＤ対は４であるが、ＡＤ対の数は、後述するように４に限定されない。
【００５４】
Ｃ．論理要素と接続要素の組合せ機能
図１２は、１つのＭＬＵＴが、論理要素及び接続要素として動作する一例を示す図である。図１２に示す例では、アドレス線Ａ０及びＡ１を２入力ＮＯＲ回路１２１の入力とし、２入力ＮＯＲ回路１２１の出力と、論理動作用アドレス線Ａ２とを２入力ＮＡＮＤ回路１２２の入力とし、２入力ＮＡＮＤ回路１２２の出力をデータ線Ｄ０に出力する論理回路を構成する。また同時に、アドレス線Ａ３の信号をデータ線Ｄ２に出力する接続要素を構成する。
【００５５】
図１３に、図１２に示す論理要素及び接続要素の真理値表を示す。図１２の論理動作は、入力Ｄ０〜Ｄ３の３つの入力を使用し、１つの出力Ｄ０を出力として使用する。一方、図（ａ）の接続要素は、入力Ａ３の信号を出力Ｄ２に出力する接続要素が構成される。
【００５６】
図１４は、４つのＡＤ対を有するＭＬＵＴによって実現される論理動作及び接続要素の一例を示す図である。上述のように、ＭＬＵＴ３０は、３入力１出力の論理動作と、１入力１出力の接続要素との２つの動作を１つのＭＬＵＴ３０で実現する。具体的には、論理動作は、ＡＤ対０のアドレス線と、ＡＤ対１のアドレス線と、ＡＤ対２のアドレス線とを入力として使用する。そして、ＡＤ対０のアドレス線を出力と使用する。また、接続要素は、破線で示すようにＡＤ対３に入力された信号をＡＤ対２に出力する。
【００５７】
なお、Ｎ個のＡＤ対を有するＭＬＵＴには、Ｎ個の入力を有し、Ｎ個の出力を有する任意の論理回路を構成することができる。さらにまた、Ｎ個のＡＤ対を有するＭＬＵＴでは、合計で１〜Ｎの任意の数の入力数を有し、１〜Ｎの任意の数の出力数を有する任意の論理動作と、接続要素とを同時に構成することができる。
【００５８】
〔２．４〕７つのＡＤ対を有するＭＬＵＴ
図１５〜図１７を用いて、７つのＡＤ対を有するＭＬＵＴ上に真理値表の動作を実現する１例を説明する。
【００５９】
図１５は、ＭＬＵＴで構成される２ビット加算器の回路構成の一例を示す図である。２ビット加算器は、１ビット全加算器を２つ接続することにより構成される。図１５において、２ビット加算器は、入力Ａ０、Ｂ０、及びＣｉｎを入力として使用し、出力Ｓ０及び桁上がり出力として使用する第１の１ビット全加算器を有する。また、入力Ａ１、Ｂ１、及び第１の１ビット全加算器の桁上がりを入力として使用し、出力Ｓ１及びＣｏｕｔを出力として使用する第２の１ビット全加算器を有する。
【００６０】
第１の１ビット全加算器は、入力Ａ０及びＢ０を第１の２入力ＸＯＲ回路４．４０１と、第１の２入力ＡＮＤ回路１５２の入力とする。第１の２入力ＸＯＲ回路１５１の出力及び入力Ｃｉｎを、第２の２入力ＸＯＲ回路１５３と、第２の２入力ＡＮＤ回路１５４の入力とする。第１の２入力ＡＮＤ回路１５２の出力及び第２の２入力ＡＮＤ回路１５４の出力を第１の２入力ＯＲ回路１５５の入力とする。さらに、第２の２入力ＸＯＲ回路１５３の出力を出力Ｓ０とし、第１の２入力ＯＲ回路１５５の出力を桁上がり出力とする。
【００６１】
第２の１ビット全加算器は、入力Ａ１及びＢ１を第３の２入力ＸＯＲ回路１５６と、第３の２入力ＡＮＤ回路１５７の入力とする。第３の２入力ＸＯＲ回路１５６の出力及び第１の２入力ＯＲ回路１５５の出力を、第４の２入力ＸＯＲ１５８回路と、第４の２入力ＡＮＤ回路１５９の入力とする。第３の２入力ＡＮＤ回路１５７の出力及び第４の２入力ＡＮＤ回路１５９の出力を第２の２入力ＯＲ回路４．４１０の入力とする。さらに、第４の２入力ＸＯＲ回路１５８の出力を出力Ｓ１とし、第２の２入力ＯＲ回路１６０の出力を出力Ｃｏｕｔとする。
【００６２】
図１６は、図１５の２ビット加算器動作の真理値表を示す図である。図１５の２ビット加算器動作は、入力Ａ０、Ａ１、Ｂ０、Ｂ１、及びＣｉｎの５つの入力を使用する。そして、出力Ｓ０、Ｓ１、及びＣｏｕｔの３つの出力を使用する。
【００６３】
図１７は、７つのＡＤ対を有するＭＬＵＴの一例を示す図である。図１５及び図１６に記載される２ビット加算器を図１７に示すＭＬＵＴ３０に真理値表として実現するためには、５つのＡＤ対の論理制御用アドレス線を入力線として使用し、３つのＡＤ対の論理制御用データ線を出力線として使用する必要がある。さらに、２つのＡＤ対は、接続要素用に使用することができる。このため、７つのＡＤ対を有するＭＬＵＴ３０では、２ビット加算器の論理動作を実現するとともに、２つの接続要素を実現することが可能になる。
【００６４】
例えば、ＡＤ対０を入力Ａ０及び出力Ｓ０に使用し、ＡＤ対１を入力Ａ１及び出力Ｓ１に使用し、ＡＤ対２を入力Ｃｉｎ及び出力Ｃｏｕｔに使用し、ＡＤ対３のアドレス線を入力Ｂ０に使用する。そして、第５のＡＤ対ＡＤ４のアドレス線を入力Ｂ１に使用することができる。
【００６５】
加算器は、四則演算などの演算回路を構成する場合に非常に多く使用される回路である。また、通常の演算処理では、２ビット以上のデータを処理される。従って、５入力３出力で構成される２ビット加算器を１つのＭＬＵＴで構成することによって、ＭＰＬＤの配置・配線効率が向上することは、有利である。すなわち、２ビット加算器を１つのＭＬＵＴで構成することにより、同一数のＭＬＵＴを有するＭＰＬＤに搭載できる演算回路の数を増やすことができる。さらに、多ビット加算器、及び多ビット乗算器など配線パターンが決まっている論理回路を、２ビット加算器を有するモジュールとして用意することも可能である。
【００６６】
また、７つのＡＤ対を有するＭＬＵＴでは、２ビット加算器の論理動作を実現した上で、さらに２経路の接続要素を実現できることは、ＭＰＬＤの配置・配線効率を考えると、さらに有利である。すなわち、配置・配線アルゴリズムを実行するときに、２ビット加算器を配置したＭＬＵＴに、さらに付加的に接続要素を有することができる。このため、ＭＬＵＴに配置した真理値表をそれぞれ配線するときの自由度が向上する。なお、配置・配線とは、ＭＬＵＴは、論理要素及び／又は接続要素として動作するので、ＭＬＵＴへの真理値表データの書込は、論理動作の配置、及び／又は、ＭＬＵＴ間の配線を意味する。そのため、真理値表データの生成を「配置・配線」という。
【００６７】
本例では、７つのＡＤ対を有するＭＬＵＴで、２ビット加算器の論理動作と、接続要素とを同時に実現する実施形態について説明した。しかしながら、５つのＡＤ対を有するＭＬＵＴでは、２ビット加算器の論理動作を実現することができる。また、６つのＡＤ対を有するＭＬＵＴでは、２ビット加算器の論理動作と、１つの接続要素とを実現することができる。さらに、８つのＡＤ対を有するＭＬＵＴでは、２ビット加算器の論理動作と、３つの接続要素とを実現することができる。
【００６８】
また、９つのＡＤ対を有するＭＬＵＴでは、４ビット加算器の論理動作を実現することができる。１０個のＡＤ対を有するＭＬＵＴでは、４ビット加算器の論理動作と、１つの接続要素とを実現することができる。このように、５〜１０程度のＡＤ対を有するＭＬＵＴでは、配置・配線効率を向上させる構成が可能になる。
【００６９】
〔２．５〕ＭＬＵＴの物理的な配置
図１８Ａは、７個のＡＤ対を有するＭＬＵＴの一例を示す図である。図１８Ａに示すＭＬＵＴ３０は、アドレス行デコーダ９ｃと、アドレス列デコーダ９ｄと、記憶素子４０ｃとを有する。図１８Ａに示すＭＬＵＴ３０には、それぞれが７つの信号からなる論理動作用アドレスＬＡと、書き込みデータＷＤとが入力され、それぞれが７つの信号からなる読み出しデータＲＤと、論理動作用データＬＤとが出力される。アドレス切替回路１０ａは、出力データ切り替え回路１０ｂは、図４を用いて説明した回路と同じ動作をするため、説明を省略する。
【００７０】
アドレス行デコーダ９ｃは、ｍ本の信号入力である論理動作用アドレスＬＡをデコードして、２のｍ乗のワード線にワード選択信号を出力する。記憶素子４０ｃは、２Ｌ個の記憶素子ブロック（４０ｃ−１、・・・、４０ｃ−２Ｌ）である。各記憶素子ブロックは、ｎ×２ｍ個の記憶素子を有し、２ｍ本のワード線と、ｎ本の書き込みデータ線と、ｎ個の出力ビット線の接続部分に配置される。ｍは、Ｎ−Ｌの整数であり、Ｌはｎより小さい整数である。「ｎ、ｍ、Ｌ」は、例えば、「７、５、２」、又は、「７、４、３」である。
【００７１】
アドレス列デコーダ９ｄは、Ｌ本の信号入力である論理動作用アドレスＬＡをデコードして、２のＬ乗のブロック選択信号を生成して、ブロック選択信号により、上記した２Ｌ個の記憶素子ブロックのいずれかのｎ個の出力ビット線を選択する。例えば、Ｌ＝２の場合、記憶素子ブロックは２２＝４個あり、各記憶素子ブロックは２５＝３２本のワード線及び出力ビット線を有するため、アドレス列デコーダ９ｄは、ブロック選択信号により何れかの記憶素子ブロックの出力ビット線３２本を選択する。また、Ｌ＝３の場合、記憶素子ブロックは２３＝８個あり、各記憶素子ブロックは２４＝１６本のワード線及び出力ビット線を有するため、アドレス列デコーダ９ｄは、ブロック選択信号により何れかの記憶素子ブロックの出力ビット線１６本を選択する。
【００７２】
アドレス列デコーダ９ｄを設けて、記憶素子を列方向に広げることで、出力ビット線の長さを短縮することが出来る。
【００７３】
図１８Ｂは、図１８Ａに示すＭＬＵＴ３０を２つ組み合わせたＭＬＵＴのフロアプランを示す図である。図１８Ｂに示すＭＬＵＴ３０は、図１８Ａに示すＭＬＵＴが有する構成を含む。図１８Ｂに示すＭＬＵＴ３０は、メモリ論理制御部１０ｃと、アドレス行デコーダ９ｃ−１及び９ｃ−２と、アドレス列デコーダ９ｄ−１及び９ｄ−２と、記憶素子４０ｃ−１及び４０ｃ−２と、読み出し駆動部１１ａ−１及び１１ａ−２とを有する。
【００７４】
アドレス行デコーダ９ｃ−１及び９ｃ−２、及び、アドレス行デコーダ９ｄ−１及び９ｄ−２には、メモリ論理制御部１０ｃから出力される７つの選択アドレス信号を入力する７つの選択アドレス線がそれぞれ接続される。アドレス行デコーダ９ｃ−１、及び、アドレス列デコーダ９ｄ−１は、記憶素子４０ｃ−１に対してワード選択信号及びブロック選択信号をそれぞれ供給する。アドレス行デコーダ９ｃ−２、及び、アドレス列デコーダ９ｄ−２は、記憶素子４０ｃ−２に対してワード選択信号及びブロック選択信号をそれぞれ供給する。
【００７５】
図１８Ｂに示すＭＬＵＴ３０には、図示されないが、それぞれが７つの信号からなると、論理動作用アドレスＬＡと、書き込みデータＷＤとが入力され、それぞれが７つの信号からなる読み出しデータＲＤと、論理動作用データＬＤとが出力される。図１８Ｂに示すＭＬＵＴ３０には、さらに、図示されないが、メモリ動作用アドレスＭＡ、動作切替信号が入力される。
【００７６】
メモリ論理制御部１０ｃには、図１８Ａのアドレス切替回路１０ａと、出力データ切り替え回路１０ｂとが配置される。メモリ動作用アドレスＭＡと、論理動作用アドレスＬＡと、書き込みデータＷＤと、読み出しデータＲＤと、論理動作用データＬＤとはそれぞれ、メモリ論理制御部１０ｃを介して、ＭＬＵＴ３０に入出力される。
【００７７】
アドレス行デコーダ９ｃ−１及び９ｃ−２は、記憶素子領域４０ｃ−１と、記憶素子４０ｃ−２との間に配置される。
【００７８】
第１及び第２の読み出し駆動部１１ａ及び１１ｂはそれぞれ、第１及び第２の記憶素子領域４０ｃ及び４０ｄと、メモリ論理制御部１０ｃとの間に配置される。第１及び第２の読み出し駆動部１１ａ及び１１ｂは、第１及び第２の記憶素子領域４０ｃ及び４０ｄに配置される記憶素子４０から読み出す７つのビット信号を増幅して、読み出し速度を高速化するように構成される。
【００７９】
本例では、アドレス行アドレスに入力される選択アドレス信号の数を４つ、又は５つにしている。選択アドレス信号の数を５以下とすることで、ワード選択信号の数が、２４＝１６本、又は、２５＝３２本となり、出力ビット線の長さを短縮することが出来る。そのため、一般的なＳＲＡＭ回路において必須の構成要素であるセンスアンプと、プリチャージ回路とが不要である回路構成が実現される。図１８Ａ又は図１８Ｂに示すＭＬＵＴ３０は、一般的なＳＲＡＭと異なり、記憶素子数の数の大規模化はしなくてもよい。
【００８０】
ＭＬＵＴに含まれる記憶素子の数は、多くても１０×２１０個程度である。これは、一般に数Ｍビット以上の大規模回路として構成される記憶装置としてのＳＲＡＭメモリと比較すると非常に小さな回路である。このため、一般的なＳＲＡＭメモリとして使用する記憶装置に搭載されるときには、微細化上で問題にならないセンスアンプ、プリチャージ回路、及びこれらの周辺回路の大きさが、ＭＬＵＴの回路構成では、問題になる。一般的なＳＲＡＭメモリなどの記憶装置に配置されるセンスアンプ、及びプリチャージ回路は、配線層に生じる時定数τが大きくなり、信号の伝達遅延時間が大きくなることを防止するために配置される回路である。これは、アドレスデコーダと、記憶素子との間の配線長が長いためである。したがって、アドレスデコーダと、記憶素子との間の配線長に生じる時定数τを、ＭＬＵＴの動作に影響を与えない程度に抑えることにより、センスアンプ、及びプリチャージ回路が不要な構成にできる。図１８Ａ及び図１８Ｂに示す例では、アドレス行デコーダに入力される選択アドレス信号の数を５つ以下にすることにより、アドレス行デコーダと、記憶素子との間の配線長をＭＬＵＴの動作に影響を与えない程度に抑えることを可能にした。
【００８１】
さらに本例では、アドレス行デコーダ９ｃは、第１の記憶素子領域４０ｃと、第２の記憶素子領域４０ｄとの間に配置される。一般的なＳＲＡＭメモリなどの記憶装置では、アドレス行デコーダは、記憶素子領域の一辺に接して配置される。このようにアドレス行デコーダを配置すると、アドレス行デコーダに隣接する記憶素子と、アドレス行デコーダから最も離隔する記憶素子とでは、配線距離が異なる。このため、配線層に生じる時定数τが異なるので、アドレス行デコーダからの信号伝達遅延時間が相違する。上述のように、本例では、センスアンプ、及びプリチャージ回路がない構成となるため、それぞれの記憶素子の間の信号伝達遅延時間の差を小さくする構成にすることが望ましい。そこで、本例では、記憶素子領域を、同一の大きさを有する第１の記憶素子領域４０ｃと、第２の記憶素子領域４０ｄとに分割し、その記憶素子領域の間にアドレス行デコーダ９ｃを配置した。これにより、それぞれの記憶素子の間の信号伝達遅延時間を抑えることが可能になった。
【００８２】
本例では、アドレス行デコーダの選択アドレスの数が、５つであるが、アドレス行デコーダの選択アドレスの数は、６つ以下の任意の数とすることができる。しかしながら、アドレス行デコーダの数が適当な数でない場合には、アドレス列デコーダの配線長が増大し、適切な回路を構成できない可能性がある。７つのＡＤ対を有するＭＬＵＴが説明されるが、ＡＤ対の数は、アドレス行デコーダ及びアドレス列デコーダに配線する選択アドレス数を調整することにより、５〜１０の任意の数とすることができる。
【００８３】
〔２．６〕ＭＬＵＴの第２例
上記図４〜図１８Ｂにおいて、１ポート型の記憶素子として用いるＭＬＵＴについて説明したが、以下に示す２ポート型の記憶素子として用いるＭＬＵＴについても適用可能である。
【００８４】
図１９は、ＭＬＵＴの第２例を示す図である。図１９に示すＭＬＵＴ３０は、データの書き込みと読み出しを同時に行うことができる。図１９に示すＭＬＵＴ３０は、メモリ動作用のアドレスデコーダ９ａと、論理動作用のアドレスデコーダ９ｂと、記憶素子４０とを有する。図１９に示すＭＬＵＴは、図４に示すＭＬＵＴと異なり、論理動作と、メモリ動作を同時に行うことができる。そのため、図１９に示すＭＬＵＴ３０は、図４に示すＭＬＵＴと異なり、動作切替選択信号が不要であり、且つアドレス切替回路１０ａ及び出力データ選択回路は有さない一方で、各々のアドレス用のアドレスデコーダ９ａ、９ｂを有する。その他、図４に示すＭＬＵＴと同じ構成を有する。なお、図１８ＢのＭＬＵＴ３０に含まれる記憶素子は、データの書き込みと読み出しを可能にする２ポートの記憶素子である。
【００８５】
〔２．７〕２ポートの記憶素子
図２０は、２ポート記憶素子の一例を示す図である。図１９に示す例では、２ポート記憶素子４０Ｂは、ＳＲＡＭであり、第１及び第２のｐＭＯＳトランジスタ５０１、５０２と、第３〜第８のｎＭＯＳランジスタ５０３〜５０８とを有する。
【００８６】
図２０に示すように、複数のＭＯＳトランジスタから構成される２ポートＳＲＡＭ４０は、ＶＤＤ、ＶＳＳ、書込ワード線ＷＷＬ、読出ワード線ＲＷＬ、第１の書込ビット線ＷＢＬ、第２の書込ビット線ｑＷＢＬ、第１の読出ビット線ＲＢＬ、及び第２の読出ビット線ｑＲＢＬに接続する。第１の書込ビット線ＷＢＬに印加される信号は、第２の書込ビット線ｑＷＢＬに印加される信号の反転信号である。同様に、第１の読出ビット線ＲＢＬに印加される信号は、第２の読出ビット線ｑＲＢＬに印加される信号の反転信号である。
【００８７】
第１のｐＭＯＳトランジスタ５０１のソースと、第２のｐＭＯＳトランジスタ５０２のソースとは、ＶＤＤに接続される。第１のｐＭＯＳトランジスタ５０１のドレーンは、第１のｎＭＯＳトランジスタ５０３のソースと、第２のｐＭＯＳトランジスタのゲート５０２と、第２のｎＭＯＳトランジスタのゲート１９４と、第３のｎＭＯＳトランジスタ１９５のソースと、第４のｎＭＯＳトランジスタ５０６のソースとに接続される。
【００８８】
第１のｐＭＯＳトランジスタ５０１のゲートは、第１のｎＭＯＳトランジスタ５０３のゲートと、第２のｐＭＯＳトランジスタ５０２のドレーンと、第２のｎＭＯＳトランジスタ１９４のドレーンと、第５のｎＭＯＳトランジスタ１９７のソースと、第６のｎＭＯＳトランジスタ１９８のソースとに接続される。第１のｎＭＯＳトランジスタ５０３のドレーンと、第２のｎＭＯＳトランジスタ１９４のドレーンは、ＶＳＳに接続される。
【００８９】
第３のｎＭＯＳトランジスタ１９５のドレーンは、第１の書込ビット線ＷＢＬに接続される。第３のｎＭＯＳトランジスタ１９５のゲートは、書込ワード線ＷＷＬに接続される。第４のｎＭＯＳトランジスタ５０６のドレーンは、第１の読出ビット線ＲＢＬに接続される。第４のｎＭＯＳトランジスタ５０６のゲートは、読出ワード線ＲＷＬに接続される。
【００９０】
第５のｎＭＯＳトランジスタ１９７のドレーンは、第２の書込ビット線ｑＷＢＬに接続される。第５のｎＭＯＳトランジスタ１９７のゲートは、書込ワード線ＷＷＬに接続される。第６のｎＭＯＳトランジスタ１９８のドレーンは、第２の読出ビット線ｑＲＢＬに接続される。第６のｎＭＯＳトランジスタ１９８のゲートは、読出ワード線ＲＷＬに接続される。
【００９１】
上記構成により、書き込み動作では、２ポートＳＲＡＭ４０は、書込ワード線ＷＷＬの信号レベル「Ｈ」により、第１の書込ビット線ＷＢＬ、及び、第２の書込ビット線ｑＷＢＬの信号レベルを、保持する。
【００９２】
上記構成により、読み出し動作では、２ポートＳＲＡＭ４０は、読出ワード線ＲＷＬの信号レベル「Ｈ」により、第１の読出ビット線ＲＢＬ、及び、第２の読出ビット線ｑＲＢＬに、２ポートＳＲＡＭ４０に保持した信号レベルにする。
【００９３】
このように、メモリ動作用アドレスＭＡ及び論理動作用アドレスＬＡは、記憶素子の１つのワード線を活性化することで、メモリ動作又は論理動作を、ｎ×２ｎ個の記憶素子の一部についてのみ行うことができる。また、メモリ動作用アドレスＭＡ及び論理動作用アドレスＬＡは、ＭＬＵＴ３０内の全ての記憶素子と繋がっているため、メモリ動作又は論理動作を、ｎ×２ｎ個の記憶素子の全ての記憶素子について行うことができる。なお、２ポート記憶素子を有するＭＬＵＴは、メモリ動作と論理動作を同時に行うことができる。
【００９４】
〔２．８〕ＭＬＵＴの第３例
図２１は、ＭＬＵＴの第３例を示す図である。図２１に示すＭＬＵＴ３０は、アドレスデコーダ９ａと、アドレスデコーダ９ｂと、第１の記憶素子４０ａと、第２の記憶素子４０ｂと、ＮＯＴ回路１７１とを有する。図２１に示すＭＬＵＴ３０には、メモリ動作用アドレスＭＡと、論理動作用アドレスＬＡと、書き込みデータＷＤと、セレクト信号とが入力され、読み出しデータＲＤと、論理動作用データＬＤとが出力される。
【００９５】
第３例に係るＭＬＵＴと、第２例に係るＭＬＵＴとの相違点は、セレクト信号により、第１の記憶素子４０ａと、第２の記憶素子４０ｂが、それぞれ異なる動作をすることが可能になる点である。つまり、第１の記憶素子４０ａと、第２の記憶素子４０ｂとは、一方が論理動作用として選択されるときに、他方をメモリ動作用として選択とするように構成できる。
【００９６】
ＮＯＴ回路１７１は、セレクト信号が入力される入力端子と、セレクト信号が反転した信号を出力する出力端子とを有する。
【００９７】
ｎ×２ｎ個の第１及び第２の記憶素子４０は、２ｎ個のメモリ動作用ワード端子（図示せず）と、２ｎ個の論理動作用ワード端子（図示せず）と、ｎ個の書き込みデータ端子（図示せず）と、ｎ個の読み出しデータ端子（図示せず）と、ｎ個の論理動作用データ出力端子（図示せず）と、セレクト端子（図示せず）とを有する。メモリ動作用ワード端子に接続されるメモリ動作用ワード端子はそれぞれ、ｎ個の記憶素子を選択するように構成される。同様に、論理動作用ワード端子に接続される論理動作用ワード端子はそれぞれ、ｎ個の記憶素子を選択するように構成される。書き込みデータ端子には、書き込みデータＷＤが入力される。書き込みデータＷＤは、ＭＬＵＴをメモリ動作させるとき、又はＭＬＵＴを再構成するときに使用される。しかしながら、ＭＬＵＴに書き込まれた真理値表データを読み出すときには使用されない。すなわち、ＭＬＵＴに書き込まれた真理値表データを読み出すときには、書き込みデータＷＤは、記憶素子には印加されず、高インピーダンス入力となるように構成される。読み出しデータ端子は、メモリ動作用ワード端子により選択されたｎ個の記憶素子に記憶されたデータを出力する。同様に、論理動作用データ出力端子は、論理動作用ワード端子により選択されたｎ個の記憶素子に記憶されたデータを出力する。
【００９８】
第１の記憶素子のセレクト端子には、セレクト信号が入力される。第２の記憶素子のセレクト信号には、ＮＯＴ回路の出力信号、すなわちセレクト信号が反転した信号が入力される。これにより、第１の記憶素子と、第２の記憶素子とは、一方が論理動作用として選択されるときに、他方をメモリ動作用として選択とするように構成される。このような構成にすることにより、動的再構成が可能になる。すなわち、一方の記憶素子が、論理動作をし、他方の記憶素子がメモリ動作をすることが可能になる。
【００９９】
〔３〕ＭＬＵＴの構造
ＭＬＵＴの構造について説明する。まず、ＭＬＵＴ領域に配置されるそれぞれのＭＬＵＴの配置構造について説明し、次に、ＭＬＵＴのＡＤ対の結線構造について説明する。そして、最後にＭＬＵＴ領域の構造の１つの実施形態について説明する。
【０１００】
〔３．１〕ＭＬＵＴの配置構造
ここでは、ＭＬＵＴ領域に配置されるそれぞれのＭＬＵＴの配置構造について説明する。まず、ＭＬＵＴのマトリックス配置構造について説明し、次いで、ＭＬＵＴの交互配置構造について説明する。
【０１０１】
〔３．１．１〕ＭＬＵＴのマトリックス配置構造
図２２は、ＭＬＵＴ配置の第１例を示す平面図である。図２２を参照して、ＭＬＵＴ領域におけるＭＬＵＴの配置の第１例について説明する。図２２において、ＭＬＵＴは、説明のために円形状に示される。しかしながら、上述のように、本発明の通常の実施形態では、ＭＬＵＴの平面形状は、長方形状、又は正方形状である。また、以下の説明において、ＭＬＵＴは、円形状に示されることがあるが、それぞれのＭＬＵＴは、長方形状、又は正方形状であると解するべきである。
【０１０２】
図２２では、ＭＬＵＴ３０は、マトリックス状に配置される。ＭＬＵＴ領域８は、半導体装置においてＭＬＵＴ３０が配置される領域である。ＭＬＵＴ３０は、ＭＬＵＴ領域８において、第１の方向に同一の距離間隔で配置されるとともに、第１の方向と直角を成す第２の方向に第１の方向の間隔と同一の間隔、又は異なる間隔で配置される。このようにＭＬＵＴ３０を配置することで、ＭＬＵＴ３０を近距離配線するときに、規則的に結線できる。なお、近距離配線とは、隣接するＭＬＵＴ間を繋ぐ配線である。
【０１０３】
〔３．１．２〕ＭＬＵＴの交互配置構造
図２３は、ＭＬＵＴの配置の第２例を示す平面図である。図２３を参照して、ＭＬＵＴ領域８におけるＭＬＵＴの配置の第２例について説明する。図２３に示す第２例では、ＭＬＵＴ３０は、第１の方向に同一の距離間隔で配置され、第１の方向と直角を成す第２の方向に同一の間隔で配置される。加えて、第１及び第２の方向とは異なる四方に同一間隔で配置されるＭＬＵＴ３０を有するように配置される。本明細書では、このような配置構造を交互配置構造と称する。なお、好適には、第１、又は第２の方向のＭＬＵＴ間の距離と、四方に配置される他のＭＬＵＴ３０との間の距離は同一にすることができる。また、四方に配置されるＭＬＵＴ３０を、第１の方向に配置される２つのＭＬＵＴ３０と、第２の方向に配置される２つのＭＬＵＴ３０とから構成される長方形の対角線の交点に配置することができる。この場合、それぞれのＭＬＵＴ３０は、第１の方向、及び第１の方向と垂直を成す第２の方向にそれぞれ同一間隔で配置される。また、第１及び第２の方向とは異なる第３及び第４の方向にも同一間隔で配置することができる。
【０１０４】
〔３．２〕ＭＬＵＴ間のＡＤ対結線構造
〔３．２．１〕ＡＤ対結線構造
図２４は、ＭＬＵＴ間の結線の一例を示す図である。ここで示されるＡＤ対は、ＭＬＵＴを真理値表として動作させるときに、ＭＰＬＤの入出力信号線として使用するものである。ＭＬＵＴはそれぞれ、ＭＬＵＴをメモリ回路として使用するときに使用するメモリ動作用アドレス線、メモリ動作用データ線、及び制御信号線などの他の配線も有する。しかしながら、説明を簡明にするために、図２４ではＡＤ対以外の配線は省略する。図２４を参照して、隣接するＭＬＵＴ間の結線、すなわち近距離配線の結線について説明する。なお、離間配線は、近距離配線でないＭＬＵＴ間を結線するＡＤ対の配線をいう。図２４には、６つのＡＤ対を有するＭＬＵＴ３０と、ＭＬＵＴ３０に隣接する第１のＭＬＵＴ３０ａと、第２のＭＬＵＴ３０ｂと、第３のＭＬＵＴ３０ｃと、第４のＭＬＵＴ３０ｄと、第５のＭＬＵＴ３０ｅと、第６のＭＬＵＴ３０ｆとが交互配置に配置される。また、図２４では、第１のＭＬＵＴ３０ａと第４のＭＬＵＴ３０ｄとを結ぶ直線に平行な方向をＭＬＵＴ３０の縦方向と仮定し、第２のＭＬＵＴ３０ｂと第６のＭＬＵＴ３０ｆとを結ぶ直線に平行な方向をＭＬＵＴ領域８の横方向と仮定する。
【０１０５】
本例では、ＭＬＵＴ３０が有するそれぞれのＡＤ対は、それぞれ異なるＭＬＵＴに隣接配線される。すなわち、第１のＡＤ対は、隣接する第１のＭＬＵＴ３０ａに結線される。第２のＡＤ対は、隣接する第２のＭＬＵＴ３０ｂに結線される。第３のＡＤ対は、隣接する第３のＭＬＵＴ３０ｃに結線される。第４のＡＤ対は、隣接する第４のＭＬＵＴ３０ｄに結線される。第５のＡＤ対は、隣接する第５のＭＬＵＴ３０ｅに結線される。第６のＡＤ対は、隣接する第６のＭＬＵＴ３０ｆに結線される。
【０１０６】
図２５は、隣接ＭＬＵＴを介して距離を置いて配置された２つのＭＬＵＴの接続の一例を示す図である。この場合、ＭＬＵＴ３０ｆは、ＭＬＵＴ３０ａとＭＬＵＴ３０との接続を行う接続要素として動作する。このように、ＭＬＵＴ３０ｆを、距離を置いて配置されたＭＬＵＴ３０ａとＭＬＵＴ３０とを接続する接続要素として使用する場合、ＭＬＵＴｆの真理値表の一部が、ＭＬＵＴ３０と３０ａとの接続関係に使用されるため、ＭＬＵＴ３０ｆにおける真理値表により実現可能な論理回路の規模が小さくなる。図２５に示すように、隣接するＭＬＵＴを接続要素として利用して、距離を置いて配置されるＭＬＵＴ３０及び３０ａを接続すると、図２４に示すＭＬＵＴと比して、所望の論理回路を構成するのに必要なＭＬＵＴの総量が増加することになる。
【０１０７】
図２６Ａ〜図２６Ｄは、所望の論理回路を構成するために必要なＭＬＵＴ数の一例を示す図である。図２７は、隣接するＭＬＵＴにＡＤ対で接続するＭＬＵＴ構造である最密充填配置構造３１Ａと、離間配置されるＭＬＵＴとをＡＤ対で接続するＭＬＵＴ構造である非最密充填配置構造３１Ｂを示す図である。所望の論理回路は、ＣＬＡ加算器、ＲＣＡ加算器、ｂｅ加算器、及び８ルーレットＬＥＤ回路などの回路を２００〜１０００程度の数のＭＬＵＴを有するＭＰＬＤに、自動配置配線ツールにより配置配線することにより行った。
【０１０８】
この結果、本比較に使用した全ての回路構成において、いずれの大きさのＭＰＬＤを使用した場合でも、最密充填配置構造３１Ａを有するＭＰＬＤが、非最密充填配置構造３１Ｂを有するＭＰＬＤより、非配置・配線効率が高くなった。このため、最密充填配置構造３１Ａを有するＭＰＬＤは、非最密充填配置構造３１Ｂを有するＭＰＬＤより、所望の論理回路を構成するＭＬＵＴの総量を減らすことができる。
【０１０９】
図２８は、最密充填配置構造におけるＡＤ対の数の一例を示す図である。図２８では、３２ビット乗算回路を手動構成した場合の必要メモリ容量とクリティカル・パス・セル数とを計算した。図示されるように、ＭＬＵＴが備えるＡＤ対の数は、６以上であると、クリティカルパルＭＬＵＴ数が減少する。また、ＭＬＵＴが備えるＡＤ対の数は、６以上であると、必要メモリ容量が増加する。この結果は、ＡＤ対の数が少ない場合、所望の論理回路をＭＰＬＤ２０に配置配線するときに、それぞれ論理回路として動作するＭＬＵＴ間の配線にスイッチング用に挿入されるＭＬＵＴの数が増加することを示す。ＡＤ対の数が少ないと、接続要素として機能できるＭＬＵＴの数が限定される。このため、接続要素として機能するＭＬＵＴを数多く通過しなければ、論理回路として動作するＭＬＵＴ間を配線できない可能性がある。この結果、ＡＤ対の数が少ないと、論理回路を実現するために必要なＭＬＵＴ数が増加する可能性がある。図２８の例では、ＭＬＵＴが有するＮ個のＡＤ対のうち、５つのＡＤ対は、論理回路として真理値表を構成するために使用することが望ましい。このため、ＭＬＵＴが備えるＡＤ対の数は、５以上であることが好ましい。
【０１１０】
一方、ＭＬＵＴが備えるＡＤ対の数を増やすと、配置・配線したときに実際に使用するＭＬＵＴ当たりのＡＤ対の数が減少することが予想される。そして、このために、配置・配線効率が低下する可能性がある。図２８に示す、３２ビット乗算回路を手動で配置・配線する場合に、ＡＤ対の数を８にすると、配置・配線に必要な領域は、ＡＤ対の数を６にするときの４倍に増加した。
【０１１１】
〔３．２．２〕マトリックス配置構造でのＡＤ対結線構造
図２９は、ＭＬＵＴのＡＤ対の結線構造の１例を示す図である。ＭＬＵＴ３０は、マトリックス状に配置され、６つのＡＤ対をそれぞれ有する。図２９では、ＭＬＵＴ３０とＭＬＵＴ３０ａとを結ぶ直線に平行な方向をＭＬＵＴ領域８の縦方向と仮定する。そして、ＭＬＵＴ３０とＭＬＵＴ３０ｃとを結ぶ直線に平行な方向をＭＬＵＴ領域８の横方向と仮定する。ＭＬＵＴ３０は、縦方向に配置されるＭＬＵＴ３０ａ及び３０ｂに近距離配線される第１及び第２のＡＤ対と、横方向に配置されるＭＬＵＴ３０ｃ及び３０ｄに近距離配線される第３及び第４のＡＤ対と、縦方向に位置するＭＬＵＴ３０の横方向に隣接する２つのＭＬＵＴ３０ｅ及び３０ｆにそれぞれ近距離配線される第５及び第６のＡＤ対とを有する。
【０１１２】
このように、本例では、ある列に配置されるＭＬＵＴ（例えば、ＭＬＵＴ３０）の２つのＡＤ対は、第１の列の方向に隣接するＭＬＵＴの横方向に隣接する２つのＭＬＵＴにそれぞれ近距離配線される。そして、その列に隣接する列に配置されるＭＬＵＴ（例えば、ＭＬＵＴ３０ｃ及び３０ｄ）の２つのＡＤ対は、第１の列の方向と反対の方向である第２の列の方向に隣接するＭＬＵＴの横方向に隣接する２つのＭＬＵＴにそれぞれ近距離配線される。このように近距離配線することで、隣接するＭＬＵＴを結線するＡＤ対は、同一平面上で交差しない構造とすることができる。
【０１１３】
なお、この例では、全てのＭＬＵＴの第５及び第６のＡＤ対は、縦方向に配置されるＭＬＵＴの横方向に隣接する２つのＭＬＵＴにそれぞれ近距離配線される。しかしながら、このＡＤ対を横方向に配置されるＭＬＵＴの縦方向に隣接するＭＬＵＴに近距離配線する構造とすることもできる。例えば、ＭＬＵＴ３０の第５及び第６のＡＤ対は、横方向に配置されるＭＬＵＴ３０の縦方向に隣接する２つのＭＬＵＴ３０ｅ及び３０ｇにそれぞれ近距離配線できる。
【０１１４】
〔３．２．３〕交互配置構造でのＡＤ対結線構造
図３０は、ＭＬＵＴのＡＤ対の結線構造の別な例を示す図である。ＭＬＵＴ３０はそれぞれ、交互配置構造で配置され、６つのＡＤ対をそれぞれ有する。図３０では、ＭＬＵＴ３０とＭＬＵＴ３０ａとを結ぶ直線に平行な方向をＭＬＵＴ領域８の縦方向と仮定し、ＭＬＵＴ３０ｂとＭＬＵＴ３０ｆとを結ぶ直線に平行な方向をＭＬＵＴ領域８の横方向と仮定する。
【０１１５】
ＭＬＵＴ３０は、縦方向に配置される２つのＭＬＵＴ３０ａ及び３ｄに結線される第１及び第２のＡＤ対と、ＭＬＵＴ３０が配置される列に隣接する列の双方の隣接する位置に配置される４つのＭＬＵＴ３０ｂ、３０ｃ、３０ｅ、及び３０ｆに近距離配線される第３、第４、第５、及び第６のＡＤ対とを有する。
【０１１６】
本例では、ＭＬＵＴを結線するＡＤ対は、同一平面上で交差しない構造とすることができる。さらに、全てのＭＬＵＴのＡＤ対の結線構造を同一な構造にすることができる。なお、この例では、全てのＭＬＵＴの２つのＡＤ対は、縦方向に配置されるＭＬＵＴに結線されるが、このＡＤ対を横方向に配置されるＭＬＵＴに結線する構造とすることもできる。すなわち、ＭＬＵＴ３０の第１及び第２のＡＤ対は、縦方向に配置される横方向に配置されるＭＬＵＴ３０ａ及び３ｄに近距離配線する代わりに、２つのＭＬＵＴ３０ｈ及び３０ｋに近距離配線することができる。
【０１１７】
〔３．２．４〕Ｄフリップフロップ結線を有するＭＬＵＴのＡＤ対結線構造
図３１は、ＭＬＵＴのＡＤ対の結線構造の他の例を示す図である。ＭＬＵＴはそれぞれ、交互配置構造で配置され、７つのＡＤ対をそれぞれ有する。また、ＭＬＵＴはそれぞれ、Ｄフリップフロップ１３を隣接して配置される。ＭＬＵＴが有する７つのＡＤ対の中で、６つのＡＤ対は、隣接するそれぞれ６つのＭＬＵＴと近距離配線される。残りの１つのＡＤ対は、隣接するＤフリップフロップ１３と結線される。近距離配線される６つのＡＤ対は、図３０に示す結線と同一の結線構造を有する近距離配線にすることができる。残りの１つのＡＤ対は、アドレス線がＤフリップフロップ１３のＤ入力と結線され、データ線がＱ出力と結線される。Ｄフリップフロップ１３のＣＫ入力は、全て結線され、全てのＤフリップフロップ１３を１つのクロック信号で動作させることができる。また、Ｄフリップフロップ１３のＣＫ入力を列ごとに結線し、列ごとに異なるクロック信号で動作させることができる。さらにまた、Ｄフリップフロップ１３のＣＫ入力を８個、又は１６個など任意の数のグループごとに結線し、それぞれのグループで異なるクロック信号で動作させることができる。
【０１１８】
本例では、それぞれのＭＬＵＴの１つのＡＤ対にＤフリップフロップが結線されるので、ＭＬＵＴ領域に順序回路を形成することができる。真理値表を構成する機能のみを有するＭＬＵＴのみで構成されるＭＬＵＴ領域では、組み合わせ回路を構成することは、可能であるが、順序回路を構成することは、難しい。そこで、本例では、それぞれのＭＬＵＴの１つのＡＤ対にＤフリップフロップを結線することで、順序回路を形成することを可能にする。
【０１１９】
なお、本例では、ＤフリップフロップがＡＤ対に結線されるが、セット・リセット・フリッププロップ、Ｔフリップフロップ、又はＪＫフリップフロップなどの他のフリップフロップを結線できる。また、セット入力、リセット入力、又はＱＢ出力などの入出力を有するＤフリップフロップを結線できる。さらに、ＤフリップフロップのＱ出力に結線されるＭＬＵＴのデータ線を、ＤフリップフロップのＱＢ出力に結線できる。さらに、全てのＭＬＵＴがそれぞれ、Ｄフリップフロップと結線するＡＤ対を有する必要はなく、ＭＬＵＴ領域を構成するＭＬＵＴの中で、所定の割合のＭＬＵＴのみがＤフリップフロップと結線するＡＤ対を有する構造にすることができる。また、以下の説明において、ＭＬＵＴの１つのＡＤ対をＤフリップフロップに結線することを、Ｄフリップフロップ結線と称することがある。
【０１２０】
〔３．２．５〕離間配線を有する場合のＭＬＵＴのＡＤ対結線構造
図３２は、ＭＬＵＴのＡＤ対の結線構造の他の例を示す図である。ＭＬＵＴ３０はそれぞれ、７つのＡＤ対をそれぞれ有し、交互配置構造で配置される。ＭＬＵＴ３０が有する７つのＡＤ対の中で、６つのＡＤ対は、隣接するそれぞれ６つのＭＬＵＴ３０と近距離配線される。残りの１つのＡＤ対は、１列ごとに列を１つ変えたＭＬＵＴ３０と離間配線される。
【０１２１】
本例では、ＭＬＵＴ３０はそれぞれ、１つの離間配線を有するので、離間配線は、ＭＬＵＴ３０を接続要素として使用してＭＬＵＴ間を接続するよりも、データの伝播遅延時間を減少させることができる。また、離間配線は、論理回路をＭＬＵＴ領域８上に論理回路情報を配置・配線するときに、配線の柔軟性を高めることができる。なお、離間配線は、近距離配線ではないＭＬＵＴ間の接続配線である。よって、隣接するＭＬＵＴではないＭＬＵＴと接続することで、上記の離間配線の効果が生じる。
【０１２２】
なお、本例では、全てのＭＬＵＴがそれぞれ、離間配線されるＡＤ対を有するが、所定の割合のＭＬＵＴのみが離間配線するＡＤ対を有する構造にしてもよい。例えば、ある割合のＭＬＵＴの１つのＡＤ対を、離間配線として使用し、他のＭＬＵＴの１つのＡＤ対を、Ｄフリップフロップ結線とすることができる。
【０１２３】
〔３．３〕ＭＬＵＴ領域の構造
〔３．３．１〕ＭＬＵＴ領域の全体的な構造
図３３は、ＭＬＵＴのＡＤ対の結線構造の他の例を示す図である。図３３を参照して、本例に係るＭＬＵＴ領域の全体的な構造の一例を説明する。本例では、ＭＬＵＴ領域８は、１５行×３０列の交互配置構造で配置される４５０個のＭＬＵＴ３０を有する。ＭＬＵＴはそれぞれ、７つのＡＤ対を有し、６つのＡＤ対を近距離配線として使用する。残りの１つのＡＤ対は、離間配線、又はＤフリップフロップ結線に使用する。図において、離間配線が結線されていないＭＬＵＴは、Ｄフリップフロップに結線される。
【０１２４】
本例では、１５行×３０列の交互配置構造で配置される７つのＡＤ対を有するＭＬＵＴを用いて、ＭＬＵＴ領域が説明される。しかしながら、他の配置のＭＬＵＴを用いて、ＭＬＵＴ領域を構成できることは、当業者に明確に理解されるであろう。また、ＭＬＵＴ領域に配置されるＭＬＵＴの中で、離間配線が結線されるＭＬＵＴと、Ｄフリップフロップ結線されるＭＬＵＴの割合は、ＭＰＬＤが使用される用途及び機能に基づいて任意に選択することができる。さらにまた、本例では、ＭＬＵＴの配置構造は、交互配置構造であるが、マトリックス配置構造においても、本例と同様の結線構造を有することができる。すなわち、本例の配線構造を維持しながら、ＭＬＵＴの配置構造を交互配置構造からマトリックス配置構造にトポロジカルに変換した構造とすることもできる（図２９及び図３０を参照のこと）。
【０１２５】
〔３．３．２〕ＭＬＵＴブロックの構造
図３４は、ＭＬＵＴを有するＭＬＵＴブロックの一例を示す図である。本例では、ＭＬＵＴブロックは、３行×６列のＭＬＵＴを１つのブロックとして構成する。各ブロック内のＭＬＵＴはそれぞれ、基本的には同一の配線規則に従って、離間配線、又はＤフリップフロップ結線される。
【０１２６】
以下、基本的な結線規則を述べる。
【０１２７】
６つのＡＤ対は、近距離配線に使用する。この規則は、ＭＬＵＴ領域８の端部に配置されるＭＬＵＴ３０でも同じである。このため、本例におけるＭＬＵＴ領域８は、近距離配線として配置されるＡＤ対を入出力線ＡＤ対として有し、これらのＡＤ対により半導体装置１００に配置される他の構成要素と結線することができる。
【０１２８】
１つのＭＬＵＴブロックに含まれる１８個のＭＬＵＴ３０の中で６つのＭＬＵＴは、１つのＡＤ対をＤフリップフロップ結線する。このため、本例におけるＭＬＵＴ領域は、３分の１の数のＭＬＵＴがＤフリップフロップ結線されることになる。具体的には、図３４において、「３０Ｆ」の符号が付されたＭＬＵＴ３０である。すなわち、図３４において、下の行の左から２列目及び３列目のＭＬＵＴと、中央の行の左から５列目及び６列目のＭＬＵＴと、上の行の左から３列目及び６列目のＭＬＵＴである。
【０１２９】
１つのＭＬＵＴブロックに含まれる残りの１２個のＭＬＵＴには、離間配線が結線される。離間配線のうち、４本は縦方向に配置されるＭＬＵＴ間で結線される第１の離間配線パターンで結線される。他の４本は左下から右上に整列するＭＬＵＴ間で結線される第２の離間配線パターンで結線される。残りの４本は右下から左上に整列するＭＬＵＴ間で結線される第３の離間配線パターンで結線される。
【０１３０】
第１の離間配線パターンで結線されるＭＬＵＴは、下の行の左から１列目及び４列目のＭＬＵＴと、中央の行の左から１列目のＭＬＵＴと、上の行の左から４列目のＭＬＵＴである。図３４において、これらのＭＬＵＴはそれぞれ、「３０Ｃ」の符号が付される。下の行の左から４列目のＭＬＵＴと、中央の行の左から１列目のＭＬＵＴとは、縦上方向に５つ離れたＭＬＵＴとそれぞれ離間配線が結線される。下の行の左から１列目のＭＬＵＴと、上の行の左から４列目のＭＬＵＴとは、縦下方向に５つ離れたＭＬＵＴとそれぞれ離間配線が結線される。
【０１３１】
第２の離間配線パターンで結線されるＭＬＵＴは、下の行の左から６列目のＭＬＵＴと、中央の行の左から２列目及び３行目のＭＬＵＴと、上の行の左から５列目のＭＬＵＴである。図３４において、これらのＭＬＵＴはそれぞれ、「３０Ｌ」の符号が付される。下の行の左から６列目のＭＬＵＴと、中央の行の左から３列目のＭＬＵＴとは、右上方向に５つ離れたＭＬＵＴとそれぞれ離間配線が結線される。中央の行の左から２列目のＭＬＵＴと、上の行の左から５列目のＭＬＵＴとは、左下方向に５つ離れたＭＬＵＴとそれぞれ離間配線が結線される。
【０１３２】
第３の離間配線パターンで結線されるＭＬＵＴは、下の行の左から５列目のＭＬＵＴと、中央の行の左から４行目のＭＬＵＴと、上の行の左から１行目及び２列目のＭＬＵＴである。図３４において、これらのＭＬＵＴはそれぞれ、３Ｒの符号が付される。中央の行の左から４列目のＭＬＵＴと、上の行の左から１列目のＭＬＵＴとは、左上方向に５つ離れたＭＬＵＴとそれぞれ離間配線が結線される。下の行の左から５列目のＭＬＵＴと、上の行の左から２列目のＭＬＵＴとは、右下方向に５つ離れたＭＬＵＴとそれぞれ離間配線が結線される。
【０１３３】
図３５は、１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における近距離配線パターンの配置の一例を示す図である。図３５において、円形の形状で示される４５０個のＭＬＵＴと、隣接する６つＭＬＵＴ間をそれぞれ結線する近距離配線とが示される。ＭＬＵＴ領域８の端部に位置するＭＬＵＴ３０が有するいくつかのＡＤ対は、未結線である。上述のように、これら未結線のＡＤ対は、入出力回路部１５、又は内部バス回路部などの半導体装置内の他の構成要素と結線することができる。
【０１３４】
図３６〜図３８に、本例におけるＭＬＵＴ領域における第１〜第３の離間配線パターンの配置を示す。以下、それぞれの図を参照して、第１〜第３の離間配線パターンの配置の一例を説明する。
【０１３５】
〔３．３．３〕第１の離間配線パターンの配置構造
図３６は、１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第１の離間配線パターンの配置を示す図である。図３６において、円形の形状で示される４５０個のＭＬＵＴ３０と、隣接する６つＭＬＵＴ間をそれぞれ結線する近距離配線と、縦方向に５つのＭＬＵＴ３０ごとに結線される第１の離間配線パターンとが示される。なお、第１の離間配線パターンで離間配線が結線されるべき位置に配置されるＭＬＵＴの中で、ＭＬＵＴ領域８の上端部及び下端部の近傍に位置するＭＬＵＴ３０のいくつかは、第１の離間配線パターンで離間配線が結線されていない。これらのＭＬＵＴは、第１の離間配線の規則に基づき結線すべきＭＬＵＴがＭＬＵＴ領域８上に存在しない。このため、後述する第４及び第５の離間配線パターンで離間配線が結線される。
【０１３６】
〔３．３．４〕第２の離間配線パターンの配置構造
図３７は、１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第２の離間配線パターンの配置を示す図である。図３７において、円形の形状で示される４５０個のＭＬＵＴ３０と、隣接する６つＭＬＵＴ間をそれぞれ結線する近距離配線と、左下から右上に整列するＭＬＵＴ間で５つのＭＬＵＴごとに結線される第２の離間配線パターンとが示される。なお、第１の離間配線パターンと同様に、第２の離間配線パターンで離間配線が結線されるべき位置に配置されるＭＬＵＴの中で、ＭＬＵＴ領域８の端部の近傍に位置するＭＬＵＴ３０のいくつかは、後述する第４及び第５の離間配線パターンで離間配線が結線される。
【０１３７】
〔３．３．５〕第３の離間配線パターンの配置構造
図３８は、１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第３の離間配線パターンの配置を示す図である。図において、円形の形状で示される４５０個のＭＬＵＴ３０と、隣接する６つＭＬＵＴ間をそれぞれ結線する近距離配線と、右下から左上に整列するＭＬＵＴ間で５つのＭＬＵＴごとに結線される第３の離間配線パターンとが示される。なお、第１及び第２の離間配線パターンと同様に、第３の離間配線パターンで離間配線が結線されるべき位置に配置されるＭＬＵＴ３０の中で、ＭＬＵＴ領域８の端部の近傍に位置するＭＬＵＴ３０のいくつかは、後述する第４及び第５の離間配線パターンで離間配線が結線される。
【０１３８】
〔３．３．６〕第４の離間配線パターンの配置構造
図３９は、１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第４の離間配線パターンの配置を示す図である。上述のように、第４の離間配線パターンの配置は、図３４に示すＭＬＵＴブロックにおいて規定される結線規則に基づくものではなく、ＭＬＵＴ領域８の端部の近傍に位置するＭＬＵＴ３０のいくつかを結線するものである。しかしながら、第１〜第３の離隔配線パターンの配置に類似する配置となるように、第４の離間配線パターンは、配置される。第４の配線パターンの規則を以下に示す。
【０１３９】
まず、第４の離間配線パターンは、第１〜第３の離間配線パターンと同様に、縦方向、左下から右上方向、又は右下から左上方向のいずれかのＭＬＵＴが整列した方向に平行に配置される。
【０１４０】
次に、第４の離間配線パターンは、いずれかの方向にＭＬＵＴを４つ離れたＭＬＵＴごとに配置される。この規則に則するために、本来は第１〜第３の離間配線パターンで結線されるべきＭＬＵＴのいくつかが、第４の離間配線パターンで結線される。例えば、図３８において、上端の行の左端の列に配置されるＭＬＵＴは、第１の離間配線パターンで離間配線を結線されるべきＭＬＵＴであるが、第４の離間配線パターンで結線される。
【０１４１】
このように第４の離隔配線パターンは、第１〜第３の離隔配線パターンに類似した配線パターンを有するため、ＭＬＵＴ領域８上のそれぞれのＭＬＵＴ３０に論理回路情報を配置・配線するときに使用する配置・配線アルゴリズムに与える影響を低く抑えることができる。
【０１４２】
〔３．３．７〕第５の離間配線パターンの配置構造
図４０は、１５行×３０列のＭＬＵＴを有するＭＬＵＴ領域における第５の離間配線パターンの配置を示す図である。第５の離間配線パターンにより接続されるＭＬＵＴは、第１〜第４の離間配線パターンで結線することができず、かつ第４の離間配線パターンでも結線することができなかったＭＬＵＴ３０ある。本例におけるＭＬＵＴ領域では、これらのＭＬＵＴ３０は、Ｄフリップフロップを介して結線することもできる。
【０１４３】
〔４〕１つのＭＰＬＤを搭載した半導体装置
ここでは、１つのＭＰＬＤを搭載した半導体装置の例について説明する。
【０１４４】
〔４．１〕１つのＭＰＬＤを搭載した半導体装置の配置構造
図４１は、ＭＰＬＤを搭載した半導体装置の配置ブロックの一例を示す図である。半導体装置１００は、ＭＰＬＤ２０と、入出力回路部１５とを有する。入出力回路部１５は、半導体装置１００の外部の装置から信号を入力するための入力回路、半導体装置１００の外部の装置から信号を出力するための出力回路、電源用セル、及びＩ／Ｏパッドを有する。
【０１４５】
入力回路はそれぞれ、ＭＰＬＤ２０内に配置されるそれぞれのＭＬＵＴ３０を選択するアドレス線、それぞれのＭＬＵＴ３０を構成する記憶素子４０を選択するアドレス線、それぞれのＭＬＵＴ３０を構成する記憶素子４０にメモリ動作情報などを書き込むためのメモリ動作用データ線接続することができる。さらに入力回路は、ＭＰＬＤ２０の端部に配置され他のＭＬＵＴ３０と結線されていないＡＤ対の少なくとも１つの論理動作用アドレス線、及び制御信号などに接続することができる。出力回路はそれぞれ、メモリ動作用データ線、及びＭＰＬＤ２０の端部に配置され他のＭＬＵＴ３０と結線されていないＡＤ対の少なくとも１つの論理動作用データ線などに接続することができる。入力回路及び出力回路と、ＭＰＬＤ２０のそれぞれのＡＤ対とは、直接接続することができる。また、入力回路及び出力回路と、ＭＰＬＤ２０のＡＤ対とは、バッファ回路を介して接続することもができる。バッファ回路を介することにより、信号伝送速度を向上させることができる。
【０１４６】
ＭＰＬＤは、多入力多出力の論理回路を構成することができる。例えば図３３を参照すると、３０行×１５列のＭＬＵＴ領域８を有するＭＰＬＤ２０は、１１８個の未結線のＡＤ対を有する。これらのＡＤ対は、全て入出力信号線として使用できる。これは、このＭＬＵＴ領域８を有するＭＰＬＤ２０は、１１８本の入力信号線、及び１１８本の出力信号線を有し、６４ビットなどの多ビットの信号をパラレルに論理演算できることを意味する。したがって、ＭＰＬＤは、高速、かつ多入力多出力な論理回路を実現できる。また、上述のように、ＭＰＬＤは、規則的に配置されるＭＬＵＴを有するので、規則性がある回路、又は真理値表に使用することもできる。
【０１４７】
〔４．２〕ＭＰＬＤへの配置・配線フロー
ここでは、半導体装置に搭載されるＭＰＬＤを配置・配線するフローの１つの例について説明する。
【０１４８】
図４２は、ＭＰＬＤの配置・配線を実行する情報処理装置の１例を示す図である。情報処理装置２１０は、演算処理部２１１と、入力部２１２と、出力部２１３と、記憶部２１４とを有する。演算処理部２１１は、入力部２１２に入力された配置・配線用のソフトウェア、ＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）記述などの回路記述（以下、ネットリストとも称する）などの真理値表データを記憶部２１４に記憶する。また、演算処理部２１１は、記憶部２１４に記憶された配置・配線用のソフトウェアを用いて、記憶部２１４に記憶された回路記述に対して以下に示す配置・配線のフローを実行し、出力部２１３に出力する。出力部２１３には、半導体装置１００（図示せず）を接続することができ、演算処理部２１１が実行した配置・配線情報を包含するビットストリームデータを、出力部２１３を介して半導体装置１００に書き込むことができる。
【０１４９】
図４３は、情報処理装置が、ＭＰＬＤに配置・配線するためのビットストリームデータを生成するフローの１例を示す図である。まず、ネットリストをテクノロジー非依存論理最適化し（Ｓ２０１）、テクノロジーマッピングし（Ｓ２０２）、配置（Ｓ２０３）、配線する（Ｓ２０４）ことを有する。配置・配線されたビットストリームデータは、それぞれにＭＬＵＴ３０に書き込む論理回路情報に相当し、ＭＰＬＤ２０のメモリ動作により、それぞれのＭＬＵＴ３０が備える記憶素子に書き込まれる。以下、それぞれのステップについて順に説明する。
【０１５０】
〔４．２．１〕テクノロジー非依存論理最適化
まず、ネットリストをテクノロジー非依存論理最適化するステップ（Ｓ２０１）について説明する。このステップでは、加算器、減算器、乗算器、及び除算器などの演算器部分と、他の論理回路部分とに分離して最適化することができる。
【０１５１】
ＲＴＬ記述から、演算器部分と、他の論理回路部分とに分離するときに、ＲＴＬ記述に記載される演算記号を抽出することにより、演算器部分を分離することができる。例えば、Ｖｅｒｉｌｏｇ  ＨＤＬによりＲＬＴ記述が記述される場合は、加算を意味する「＋」、減算を意味する「−」、乗算を意味する「＊」、除算を意味する「／」、及び剰余演算を意味する「％」などの演算子を抽出することにより、ＲＴＬ記述から、演算器部分を分離することができる。Ｃ言語に類似する他の言語を使用する場合も、同様な方法で演算器部分を分離することができる。
【０１５２】
演算器部分は、全加算器、又は半加算器などを基本単位として最適化することができる。演算器部分を他の論理回路部分とともに最適化すると、ＮＡＮＤ回路、ＸＯＲ回路などの基本的なゲート回路を組み合わせることにより、演算器が構成されることになる。しかしながら、この場合は、論理合成するときに、様々なゲート回路に論理合成されるために、各種演算器が構成される回路が冗長になる可能性がある。そこで、演算器部分を他の論理回路部分と分離し、全加算器、又は半加算器別になどを基本単位としてモジュール合成することにより、演算器部分を効率的に最適化ができる。
【０１５３】
ここでモジュール合成とは、規則的な構造を有するメモリ、演算論理装置（ＡＬＵ）、乗算器、及び加算器などのデータパス系モジュールなどを対象として、モジュールの機能と、ビット幅などの必要な情報とをパラメータとして与えて、モジュールのパターンを生成することをいう。
【０１５４】
例えば、５個以上のＡＤ対を有するＭＬＵＴによりＭＰＬＤを構成する場合は、２ビット加算器を基本単位として、演算器部分をモジュール合成することができる。４ビット加算器は、２つのビット加算器で構成することができる。８ビット加算器は、４つのビット加算器で構成することができる。
【０１５５】
８ビット加算器などの基本的な演算回路は、２ビット加算器による配線情報を記憶部２１４に記憶することができる。このことにより、記憶される演算回路に関しては、後述の配線処理が必要でなくなり、処理の高速化が図れる。しかしながら、演算回路は、様々なビット数を有する。また、加算器においても、全加算器、半加算器に加えて、「キャリー先読み（キャリールックアヘッド：Ｃａｒｒｙ  ｌｏｏｋ  ａｈｅａｄ）」と称されるものも存在する。このため、全てのパターンの演算回路を記憶部に記憶させることは、現実的ではない。そこで、２ビット加算器により演算回路を構成するための所定の配線規則ルを記憶部２１４に記憶し、その配線規則に基づいて演算回路を構成することができる。
【０１５６】
他の論理回路部分は、通常のＬＳＩ設計、又はＦＰＧＡの設計に使用される一般的な方法を使用する。例えば、ステートマシンの状態数の最小化、二段論理最適化、及び多段論理最適化などの処理を実行する。
【０１５７】
〔４．２．２〕テクノロジーマッピング
次に、情報処理装置２１０が、テクノロジー非依存論理最適化した後のネットリストを、ＭＰＬＤを構成するＭＬＵＴに適当なネットリストとするように、テクノロジーマッピングするステップ（Ｓ２０２）について説明する。１つの例では、テクノロジーマッピングは、テクノロジー非依存論理最適化した後のネットリストを分解する第１のステップと、第１のステップで分解したネットリストをカバリングする第２のステップとを有する。
【０１５８】
第１のステップは、ＭＬＵＴに構成される真理値表に１つの論理回路を包含できるように、論理回路の入力及び出力数Ｋ以下にするステップである。ＭＬＵＴのＡＤ対の数がＮである場合、入力及び出力数Ｋは、ＡＤ対の数Ｎ以下でなければならない。第１のステップには、カーネルの括り出し、及びＲｏｔｈ−Ｋａｒｐ  ｄｅｃｏｍｐｏｓｉｔｉｏｎなどを使用することができる。
【０１５９】
第２のステップは、ＭＬＵＴに構成される真理値表の数を最適化するために、第１のステップで得られたネットリストのいくつかの節点をカバーするステップである。このステップでは、第１のステップで分解された真理値表の中で、２つ以上の真理値表を結合して１つのＭＬＵＴに包含できる真理値表を１つの真理値表にまとめる。これにより、ＭＬＵＴ３０に構成される真理値表の数を最適化することができる。
【０１６０】
好適には、組み合わせ回路を最適化するときに、最適化後の組み合わせ回路が有する入力数及び出力数をＭＬＵＴが有するＡＤ対の数よりも少なくすることができる。これにより、組み合わせ回路が配置されるＭＬＵＴを、同時に接続要素として使用することができる。なお、ＭＰＬＤを構成するＭＬＵＴが６つ以上のＡＤ対を有する場合には、入力線及び出力線の数を５つ以下になるように最適することができる。５つの入力線及び出力線を有することによって、１つのＭＬＵＴで２ビット加算器の真理値表を構成するためである。
〔４．２．３〕配置
次に情報処理装置２１０が、テクノロジーマッピングを実行した後のネットリストを、ＭＰＬＤ内のそれぞれのＭＬＵＴに配置するステップ（Ｓ２０３）について説明する。テクノロジーマッピングを実行した後のネットリストには、ＭＬＵＴが有するＡＤ対の数に応じて構成される論理回路部の真理値表と、それぞれのＭＬＵＴが有するＡＤ対間の接続関係が記載される。本ステップでは、論理回路部の真理値表をそれぞれ、適当な位置のＭＬＵＴに配置する。具体的な配置手法としては、通常のＬＳＩ設計と同様に、初期配置に使用される構成的配置法（ランダム法、ペア・リンキング法、クラスタ成長法、及びミンカット法など）、及び配置改善に使用される繰り返し改善法（スタインバーグ法、ペア交換法、反復重心法、及びシミュレーテッド・アニーリング法など）などがある。
【０１６１】
〔４．２．４〕配線
最後にテクノロジーマッピングを実行した後のネットリストに基づいて、配置されたＭＬＵＴ間を配線するステップ（Ｓ２０４）について説明する。テクノロジーマッピングを実行した後のネットリストに従って、論理回路として動作するＭＬＵＴが有するＡＤ対間を、接続要素として機能するＭＬＵＴを用いて配線する。具体的な配置手法としては、通常のＬＳＩ設計と同様に、Ｌｅｅのアルゴリズム、及びラインサーチアルゴリズムなどがある。この結果、所望の論理回路を実現するネットリストをＭＰＬＤ上に配置・配線する真理値表データを構成するビットストリームデータが生成される。
【０１６２】
〔４．３〕１つのＭＰＬＤを搭載した半導体装置での再構成
これまで説明してきたように、ＭＰＬＤは、再構成可能な論理回路を構成することができる複数の記憶素子を有する。ＭＰＬＤのこの特性を利用して、ＭＰＬＤを搭載した半導体装置では、ＭＰＬＤに書き込まれる論理回路情報を再構成することができる。
【０１６３】
例えば、図４１に記載されるＭＰＬＤ２０を搭載した半導体装置１００での再構成は、図４２に記載される情報処理装置２１０を使用して実現することができる。ＭＰＬＤ２０に書き込むことができる論理回路情報を構成する複数のビットストリームデータを情報処理装置２１０の記憶部２１４に記憶する。そして、情報処理装置２１０の出力部２１３と接続された半導体装置１００に情報処理装置２１０がビットストリームデータを書き込むことによって、ＭＰＬＤ２０の再構成を実現できる。
【０１６４】
また、図４１に記載されるＭＰＬＤ２０を搭載した半導体装置１００での再構成は、半導体装置１００と同一の基板に搭載されるマイクロプロセッサ（図示せず）と、記憶装置（図示せず）とを使用することによっても、実現することができる。
〔４．４〕１つのＭＰＬＤを搭載した半導体装置での部分再構成
〔４．４．１〕ＭＰＬＤの部分再構成フロー
半導体装置に搭載されるＭＰＬＤを部分再構成するフローの１つの例について説明する。
【０１６５】
図４４は、図４１に示す半導体装置に搭載されるＭＰＬＤを部分再構成するフローの一例を示す図である。まず、ステップＳ２１１において、情報処理装置２１０が、ＭＰＬＤに書き込まれている第１のビットストリームデータと、部分再構成実行後の第２のビットストリームデータとを比較する。比較は、それぞれのビットストリームデータに記載される同一のアドレスを有するＭＬＵＴ間の内部に記載される真理値表を比較して行う。さらに、ＭＬＵＴのぞれぞれのＡＤ対に接続されるＡＤ対の符号などを比較して行う。第１のビットストリームデータと、部分再構成実行後の第２のビットストリームデータとは、記憶装置に記憶できる。好適には、第２のビットストリームデータを生成するときに、第１のビットストリームデータと、第２のビットストリームデータとの間で同一の機能を有するＭＬＵＴに対して、第１のビットストリームデータと同一の符号を付することができる。次に、ステップＳ２１２において、第１のビットストリームデータと、第２のビットストリームデータの間で記載される真理値表データが異なるＭＬＵＴのアドレスを特定し、記憶装置に記憶する。ＭＬＵＴのアドレスは、第１のビットストリームデータと、第２のビットストリームデータとの間で、ＭＰＬＤ上で同一の位置に位置するＭＬＵＴを同一のアドレスにすることができる。例えば、３０行×１５列のＭＬＵＴ領域を有するＭＰＬＤにおいて、左上の頂点に位置するＭＬＵＴのアドレスを０番とし、そのＭＬＵＴの右側に位置するＭＬＵＴのアドレスを１番とし、以下同様に繰り返し、右下の頂点に位置するＭＬＵＴのアドレスを４４９番とすることができる。なお、第１のビットストリームデータと、第２のビットストリームデータとのそれぞれのＭＬＵＴのアドレスと物理的位置が対応しない場合には、両者の相関を明確にする手段を有することができる。例えば、相関関係を示したデータを記憶装置に記憶できる。次にステップＳ２１３において、情報処理装置２１０が、ステップＳ２１２で特定されたＭＬＵＴの１つのアドレスをＭＰＬＤに出力する。具体的には、ＭＰＬＤ２０の行デコーダ１２ａと、列デコーダ１２ｂとにアドレスを入力する。そしてステップＳ２１４において、情報処理装置２１０が、アドレスが指定されたＭＬＵＴの第２のビットストリームデータに記載される真理値表データを、ＭＬＵＴに書き込む。ＭＬＵＴにデータを書き込む方法については、既に述べているのでここでは詳細は省略する。
【０１６６】
第１のビットストリームデータと、第２のビットストリームデータの間で記載される真理値表データが異なるＭＬＵＴのアドレスが、さらに記憶装置に記憶されている場合は、ステップＳ２１３に戻る。第１のビットストリームデータと、第２のビットストリームデータの間で記載される論理回路情報が異なるＭＬＵＴ３０のアドレスが、他に記憶されていない場合には、部分再構成を終了する。
【０１６７】
〔４．４．２〕部分再構成の実施例
ここでは、部分再構成の利点を具体的な実施例に基づいて説明する。実施例は、高速フーリエ変換において一般に使用されるバタフライ演算に基づくものである。
【０１６８】
図４５に、８点離散フーリエ変換をバタフライ演算で行うときのアルゴリズムの一例を示す。ここで、ｆ（０）〜ｆ（７）は、時間上の８個の点である。Ｆ（０）〜Ｆ（７）は、離散フーリエ変換後の８個の点である。Ｗ０〜Ｗ３は、回転因子である。図４５において、矢印線の交点は、加算する点を示す。また、矢印線の交点に「−１」との記載がさらに付される場合は、減算する点を示す。さらに、矢印線上に回転因子Ｗ０〜Ｗ３が付される場合は、回転因子Ｗ０〜Ｗ３を乗算することを示す。したがって例えばステージＳ１において、ｆ（０）は、ｆ（４）にＷ０を乗じたものを加算されるとともに、ｆ（４）にＷ０を乗じたものを減算される。このように、バタフライ演算では、各Ｓｔａｇｅにおいて、定数乗算がなされる。
【０１６９】
一般的に、定数乗算を論理回路で実現する場合、乗算回路を構成するよりも、シフト回路と加算演算とで定数乗算専用回路を構成することが多い。これは、単純に乗算回路を構成する場合に比べて、シフト回路と加算演算とで定数乗算専用回路を構成することにより、演算速度の高速化を図れるからである。さらにまた、シフト回路と加算演算を使用することにより、回路素子数を減らすことが可能であるため、チップ面積を削減できる効果を有する。例えば、定数「３」に変数「ａ」を乗ずる回路は、以下の式に示すようにシフト回路と加算演算とで構成できる。
３  ＊  ａ  ＝  ａ＊２  ＋  ａ  ＝  （ａ＜＜１）  ＋  ａ
ここで、「＊」は乗算を示し、「＋」は加算を示し、「＜」はシフト回路を示す。したがって、式「（ａ＜＜１）  ＋  ａ」は、変数ａを２桁上位ビットにシフトし、その結果に変数ａを加算することを意味する。
【０１７０】
一方、離散フーリエ変換の回転因子Ｗ０〜Ｗ３は、回路が使用される用途によって、様々な値をとり得る。したがって、同じ８点離散フーリエ変換をバタフライ演算で実現する回路を構成する場合でも、用途によって、種々の回路を構成する必要がある。例えば、回転因子Ｗ３が３である回路においては、回転因子Ｗ３を乗算する回路は、以下に示す式のように構成される。
３  ＊  ａ  ＝  ａ＊２  ＋  ａ  ＝  （ａ＜＜１）  ＋  ａ
これに対し、回転因子Ｗ３が４である回路においては、回転因子Ｗ３を乗算する回路は、以下に示す式のように構成される。
４  ＊  ａ  ＝  ａ＊２  ＋  ａ＊２  ＝  （ａ＜＜１）  ＋  （ａ＜＜１）
ＦＰＧＡなど従来の再構成可能論理回路では、このように一部の回路のみが変更になった場合でも、再び配置・配線する必要があるか、又は論理回路情報を全て書き換える必要がある。しかしながら、ＭＰＬＤは、論理回路情報が変更されたＭＬＵＴのアドレスを特定できるので、論理回路情報が変更されたＭＬＵＴのみを書き換えて、部分再構成することができる。この実施例では、「＋  ａ」の論理回路を構成するＭＬＵＴを「＋  （ａ＜＜１）」の論理回路を構成するＭＬＵＴに書き換えることにより部分再構成することができる。
【０１７１】
〔５〕１つのＭＰＬＤと、演算処理部とを搭載した半導体装置
ここでは、１つのＭＰＬＤと、演算処理部とを搭載した半導体装置の例について説明する。
【０１７２】
〔５．１〕ＭＰＬＤと、演算処理部とを搭載した半導体装置
図４６は、ＭＰＬＤを搭載した半導体装置の一例を示す図である。半導体装置１００は、ＭＰＬＤ２０と、演算処理部２２０を有する。
【０１７３】
演算処理部２２０は、記憶部１１０、命令読出部１２０、レジスタ部１３０、及び命令実行部１４０を有する。演算処理部２２０は、ＭＰＬＤ２０に記憶されたプログラムを実行することで、ＭＰＬＤ２０とのデータの入出力を行い、ＭＰＬＤ２０から受け取ったデータを演算する装置である。演算処理部２２０は、例えば、演算処理装置としてのＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。ＭＰＬＤ２０は、多入力多出力の論理演算を高速処理可能である。そのため、演算処理部２２０を、論理回路の一部の制御としての分岐命令等の例外処理や、ＭＰＬＤ２０の状態制御としてのＭＰＬＤ２０の再構成、ＭＰＬＤ２０内のＳＲＡＭを記憶領域としてデータアクセスする等の機能に限定することで、８ビット、１６ビットなどのビット幅が狭い演算処理装置にすることができる。
【０１７４】
記憶部１１０は、命令又はデータを記憶する記憶装置である。記憶部１１０は、ＭＰＬＤ２０が記憶するデータの一部を記憶する。記憶部１１０は、例えば、１次キャッシュメモリである。記憶部１１０は、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。なお、以下の説明では、記憶部１１０は、ＭＰＬＤ２０の上位キャッシュメモリとして説明するが、図５２を用いて後述するように、一実施形態においては、演算処理部２２０は、記憶部２６とデータ接続する。その場合は、下記のＭＰＬＤ２０のメモリ機能を利用する演算処理部２２０とのデータ入出力は、主記憶装置についても同じである。
【０１７５】
記憶部１１０は、演算処理部２２０の内部に設けられており、ＭＰＬＤ２０より命令読出部１２０に近い位置にある。命令読出部１２０が、記憶部１１０に記憶されているデータにアクセスする場合（以下、「キャッシュヒット」という）、命令読出部１２０は短時間で対象データにアクセスすることが出来る。一方、命令読出部１２０が、キャッシュメモリに記憶されていないデータにアクセスする場合（以下、「キャッシュミス」という）、記憶部１１０の下位階層にあるＭＰＬＤ２０からデータを読み出すため、対象データへのアクセス時間は長くなる。そのため、キャッシュミスが生じないように、演算読出部１２０からのアクセス頻度が高いデータは記憶部１１０に保持される。
【０１７６】
命令読出部１２０は、記憶部１１０から命令を読み出し、読み出した命令を命令実行部１４０に出力する。
【０１７７】
命令実行部１４０は、命令読出部１２０から記憶部１１０から読み出した命令を受け取ると、命令により特定される処理を、レジスタ１３０に記憶されるデータに対して実行する。命令に応じた所定の命令処理とは、例えば、浮動小数点演算、整数演算、アドレス生成、分岐命令実行、レジスタ１３０に記憶されるデータを記憶部１１０へストアするストア動作、記憶部１１０に記憶されるデータをレジスタ１３０にロードするロード動作である。命令実行部１４０は、浮動小数点演算、整数演算、アドレス生成、分岐命令実行、及びストア又はロード動作を行う実行器を備えて、それらの実行器を用いて上記命令処理を実行する。命令実行部１４０は、入出力部１５０を介して、ＭＰＬＤ２０に対してデータのストア又はロード動作を実行する。
【０１７８】
レジスタ１３０は、例えば、オペランド、又は、ＭＰＬＤ２０へストア又はリード動作する際のアドレス、命令実行部１４０が実行対象とする命令が格納されているＭＰＬＤ２０のアドレスを記憶する。
【０１７９】
入出力部１５０は、ＭＰＬＤ２０とのデータの入出力を行う。ＭＰＬＤ２０は、図１〜図３を用いて説明した例と同じである。入出力部１５０は、ＭＬＵＴ３０の論理動作用アドレスＬＡのアドレス線と、演算処理部２２０の出力端子Ｄ０からの１つの出力信号線とが接続すると共に、ＭＬＵＴ３０の論理動作用データＬＤのデータ線と、演算処理部２２０の入力端子Ｉ０への入力信号線が接続する。このようにして、ＭＰＬＤ２０の外延に配置されるＭＬＵＴの少なくとも一部は、演算処理部２２０との論理動作用アドレスＬＡを受け取り、又は、論理動作用データＬＤを出力する。
【０１８０】
入出力部１５０はさらに、図４６に示されるように、ＭＰＬＤアドレス、メモリ動作用アドレスＭＡ、書込データＷＤ、読出データＲＤの信号線と接続し、それらのデータの入出力により、ＭＰＬＤ２０に対するメモリ動作を行う。
【０１８１】
上記構成から明らかなように、演算処理部２２０は、入出力部１５０を介して、メモリ動作用アドレスＭＡ、ＭＰＬＤアドレス、書込データＷＤをＭＰＬＤ２０に出力することで、ＭＰＬＤのメモリ動作を生じさせるストア動作を実行し、入出力部１５０を介して、メモリ動作用アドレスＭＡ、ＭＰＬＤアドレスをＭＰＬＤ２０に出力することで、読出データＲＤを受け取る。このように、入出力部１５０のうち、メモリ動作用アドレスＭＡ、ＭＰＬＤアドレス、書込データＷＤ、読出データＲＤの入出力を行う部分が、メモリ動作用の入出力部として動作する。
【０１８２】
また、上記構成から明らかなように、演算処理部２２０は、入出力部１５０を介して、論理動作用アドレスＬＡを出力し、論理動作用データＬＤを受け取ることでＭＰＬＤの論理動作の結果を受け取る。このように、入出力部１５０のうち、論理動作用アドレスＬＡ、論理動作用データＬＤの入出力を行う部分が、論理動作用の入出力部として動作する。
【０１８３】
図４７は、演算処理部と、ＭＰＬＤとのデータの入出力を行う入出力部の一例を概略的に示す図である。ＭＰＬＤ２０に含まれる入出力部２１は、ＭＬＵＴ３０のアドレス線と、演算処理部２２０の出力端子ＤＯからの１つの出力信号線とが接続すると共に、ＭＬＵＴ３０のデータ線と、演算処理部２２０の入力端子ＩＯへの入力信号線が接続する。
【０１８４】
演算処理部２２０の論理動作用の入出力信号線と、ＭＬＵＴ３０のアドレス又はデータ線との接続は、演算処理部２２０の入出力ビット数の数だけ用意される。例えば、演算処理部２２０が１６ビットの出力ビット幅を有している場合、出力信号線及び入力信号線は、それぞれ１６本となり、それらの信号線と接続するＭＬＵＴのアドレス線及びデータ線も１６本となる。
【０１８５】
演算処理部２２０の入出力信号線と、ＭＬＵＴ３０のアドレス又はデータ線との接続は、演算処理部２２０の入出力ビット数の数だけ用意される。例えば、演算処理部２２０が１６ビットの出力ビット幅を有している場合、出力信号線及び入力信号線は、それぞれ１６本となり、それらの信号線と接続するＭＬＵＴのアドレス線及びデータ線も１６本となる。
【０１８６】
このように、演算処理部２２０の入出力信号線と、ＭＬＵＴ３０のアドレス又はデータ線とをバス接続回路を介さずに直接接続することで、演算処理部２２０と、ＭＰＬＤ２０が接続することができる。演算処理部２２０と、ＭＰＬＤ２０の間の接続に、バス接続回路を介さないことにより、バスの調停回路によりマスタースレーブの設定が不要になる。この結果、演算処理部２２０と、ＭＰＬＤ２０の間の信号の伝送速度の向上を図ることができる。またそれぞれの接続の間に、バッファ回路を挿入することができる。バッファ回路を挿入することにより、信号の伝達速度をさらなる向上を図ることができる。
【０１８７】
図４８は、演算処理部と、ＭＰＬＤとのデータの入出力を行う入出力部の別な例を示す図である。図４８に示すように、演算処理部２２０は、ＭＰＬＤ２０とのデータ入出力を行う入出力部２３０を有する。また、ＭＰＬＤ２０も、演算処理部２２０とのデータ入出力を行う入出力部２１を有する。入出力部２１は、入出力部１５０は、例えば、ＭＬＵＴ３０のＡＤ対のアドレス線からアドレスを出力するポートＡ０〜Ａ７、及び、ＭＬＵＴ３０のＡＤ対のデータ線からデータを入力するポートＤ０〜Ｄ７を有して、ＭＰＬＤ２０の論理要素に対するデータ入出力を行うことができる。
【０１８８】
入出力部２１はさらに、演算処理部２２０の入出力部２３０とデータ入出力を行うための所定のプロトコルに従う伝送制御を行う。所定のプロトコルに従う伝送制御とは、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓ等の高速シリアルバスや、パラレルバス等のバス制御である。このように、演算処理部２２０と、ＭＰＬＤ２０とは、所定のバスによりデータ接続できる。
【０１８９】
なお、図４８は、演算処理装置１つのＭＰＬＤ２０と接続しているが、入出力部２３０を介して他のＭＰＬＤとも接続できる。そして、演算処理部２２０は、入出力部２３０を介して、第１のＭＰＬＤが有するＭＬＵＴのアドレス線及びデータ線と、第２のＭＰＬＤが有するＭＬＵＴのアドレス線及びデータ線と接続し、第１のＭＰＬＤに対して論理動作のデータ入出力を行うとともに、第２のＭＰＬＤに対して再構成を含むメモリ動作を行うこともできる。よって、演算処理部２２０は、第１のＭＰＬＤの入出力部に対してアドレス及びデータを出力する制御を行うとともに、第２のＭＰＬＤの入出力部に対してアドレスを出力し且つデータを受け取る制御を行う。
【０１９０】
図４９は、論理動作とメモリ動作を同時に行うＭＰＬＤ、及び演算処理部の一例を示す図である。図４９に示すＭＰＬＤ２０のＭＬＵＴは、図１９に示すＭＬＵＴのように論理動作と、メモリ動作を同時に行うことができる。そのため、演算処理部２２０は、ＭＰＬＤ内のメモリ動作対象となる複数のＭＬＵＴから構成される第１論理部に対してメモリ動作を行うとともに、ＭＰＬＤ内の論理動作対象となる複数のＭＬＵＴから構成される第２論理部に対して論理動作を行う。
【０１９１】
図５０は、複数のＭＰＬＤ、及び演算処理部の一例を示す図である。図５０に示すＭＰＬＤ２０Ａ、２０ＢのＭＬＵＴは、図４に示すＭＬＵＴのように論理動作と、メモリ動作を同時に行うことができない。そのため、演算処理部２２０は、メモリ動作象となる複数のＭＬＵＴを含む第１ＭＰＬＤ２０Ａに対してメモリ動作を行うとともに、論理動作対象となる複数のＭＬＵＴから構成される第２ＭＰＬＤ２０Ｂに対して論理動作を行う。
【０１９２】
〔５．２〕ＭＰＬＤと、演算処理部とを搭載した半導体装置の配置構造
図５１は、ＭＰＬＤを搭載した半導体装置の他の例における配置ブロックの一例を示す図である。半導体装置１００は、ＭＰＬＤ２０と、演算処理部２２０と、入出力回路部１５とを有する。入出力回路部１５は、図４１を参照して説明した例と同様であるため、ここでは説明を省略する。演算処理部２２０は、図４６を用いて説明したものである。
【０１９３】
本例では、ＭＰＬＤアドレス信号線と、メモリ動作用アドレス信号線とは、演算処理部２２０に接続することができる。ＭＰＬＤ２０の端部に配置され他のＭＬＵＴ３０と結線されていないＡＤ対のいくつかは、演算処理部２２０に接続される。また、他のいくつかは、入出力回路部１５に接続される。演算処理部２２０と、ＭＰＬＤアドレス信号線と、メモリ動作用アドレス信号線とは、内部バス回路を介して接続でき、又は直接接続するもできる。演算処理部２２０と、ＭＬＵＴ３０のＡＤ対との接続は、内部バス回路を介して接続できる。また、演算処理部２２０と、ＭＬＵＴ３０のＡＤ対との接続は、直接接続することもできる。ＡＤ対を直接接続する場合は、内部バス回路を介して接続する場合と比較すると、高速動作が可能になる。これは、バス調停回路動作を必要としないためである。さらにまた、演算処理部２２０と、ＭＰＬＤ２０のそれぞれのＡＤ対とは、バッファ回路を介して接続することもできる。バッファ回路を介することにより、さらに信号伝送速度を向上させることができる。
【０１９４】
図５２に、ＭＰＬＤを搭載した半導体装置の他の例における配置構造の一例を示す図である。図５２を参照すると、本例における半導体装置１００は、マルチプレクサ２２と、Ａ／Ｄコンバータ２４と、演算処理部２２０と、１つのＭＰＬＤ２０と、記憶部２６と、ＭＯＳＦＥＴ（Ｍｅｔａｌ−Ｏｘｉｄｅ−Ｓｅｍｉｃｏｎｄｕｃｔｏｒ  Ｆｉｅｌｄ−Ｅｆｆｅｃｔ  Ｔｒａｎｓｉｓｔｏｒ）ドライバ２８とを有する。また、本例の半導体装置１００の制御対象物の検出器出力からマルチプレクサ２２に信号が入力され、制御対象物の制御入力にＭＯＳＦＥＴドライバ２８の出力が入力される。
【０１９５】
マルチプレクサ２２は、３２個、又は６４個などの適当な数のアナログ信号が制御対象物の検出器から入力される。マルチプレクサ２２は、入力された信号を時分割して、Ａ／Ｄコンバータ２４に出力する。Ａ／Ｄコンバータ２４は、時分割されたアナログ信号をデジタル信号に変換して、演算処理部２２０とＭＰＬＤ２０に出力する。Ａ／Ｄコンバータ２４からの信号を入力した演算処理部２２０は、外部の記憶装置に記憶されるソフトウェアの制御に基づいて、入力した信号の処理をＭＰＬＤ２０に命令する。このときに、ＭＰＬＤ２０は、多入力多出力の演算処理、定型処理、及び背景処理などを行う。
【０１９６】
また、演算処理部２２０は、ＭＰＬＤ２０に信号処理方法を命令するとともに、ＭＰＬＤ２０からエラー信号、警報信号などが入力されたときの処理などの非定型処理を行う。演算処理部２２０は、ＭＰＬＤ２０の論理回路情報を再構成することにより、種々の処理をＭＰＬＤ２０に実行させることができる。所定の処理が終了した後に、外部の記憶装置に記憶されるソフトウェアの制御に基づいて、演算処理部２２０は、ＭＯＳＦＥＴドライバ２８を介して対象物にデータを制御対象物に出力する。これにより、制御対象物の検出器から本例における半導体装置１００を介して制御対象物の制御器へのフィードバックループを形成することができる。したがって、多系統の制御を少ない部品で構成できる。
【０１９７】
本例における半導体装置１００の応用例を、説明する。応用例として、半導体装置１００は、自動車のドアミラーに付着した雨滴を除去する制御する。この場合、制御対象物の検出器は、自動車の運転手側のドアに設置されるドアミラー、助手席側のドアミラーに設置される及びフロントガラスなどに、それぞれ数個ずつ配置される雨滴検出器と、フロントガラス、又はボンネットなどに設置される雨量検出器などがある。また他の入力には、ドアミラー、フロントガラスなどに設置されるワイパの動作頻度、動作速度の信号などがある。これらの信号を入力される半導体装置１００は、動作時間、動作周期、動作強度などを他の記憶装置に記憶されるソフトウェアに従って、決定する。そして、決定に基づき、ＭＯＳＦＥＴドライバ２８の出力に接続されるワイパ駆動用モータに信号を出力し、ドアミラーのワイパを適当な時間、周期、強度で駆動する。また、何らかの故障が生じた場合は、ＭＯＳＦＥＴドライバ２８の出力に接続されるＬＥＤドライバに信号を入力して、運転手に警告を与えるために、ＬＥＤを駆動する。このとき、ワイパ駆動用モータに出力される信号の制御は、定型処理であり、かつ多ビット並列処理であるために、ＭＰＬＤ２０により演算処理される。このとき、必要に応じてＭＰＬＤ２０の論理回路情報を再構成できる。一方、ＭＯＳＦＥＴドライバ２８に出力される警告信号の制御は、非定型処理であるので、演算処理部２２０が処理する。
【０１９８】
〔５．３〕ＭＰＬＤに書き込む論理回路情報の動作合成フロー
ここでは、半導体装置に搭載されたＭＰＬＤに書き込む論理回路情報を動作合成するフローについて説明する。
〔５．３．１〕動作合成について
【０１９９】
一般的に動作合成とは、設計対象の回路で処理したいアルゴリズム、すなわち動作記述から、その回路のＲＴＬコードを生成することをいう。
【０２００】
図５３は、動作合成の一例を示す図である。図４２に示す情報処理装置２１０が、動作合成を実行することができる。図５３を参照すると、動作合成において、情報処理装置２１０は、ステップＳ２２１において、動作記述からＣＤＦＧ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ）を生成し、ステップＳ２２２において、ＣＤＦＧをスケジューリングし、ステップＳ２２３において、スケジューリングしたＣＤＦＧをアロケーションし、ステップＳ２２４において、アロケーションしたＣＤＦＧからＭＰＵ命令コードを生成し、ステップＳ２２５において、ＲＴＬ−ＣＤＦＧとを生成する。なお、「ＭＰＵ命令コード」とは、演算処理部２２０の命令コードである。
【０２０１】
動作記述には、デジタル回路設計用ハードウェア記述言語（ＨＤＬ）の一種であるＶＨＤＬ（ＶＨＳＩＣ（Ｖｅｒｙ  Ｈｉｇｈ  Ｓｐｅｅｄ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔｓ）Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ））を用いることができる。また、動作記述は、汎用性が高い、いわゆる高級言語（高水準言語とも称される）とすることもできる。ここで、高級言語は、プログラミング言語のうち、より自然語に近く、人間にとって理解しやすい構文や概念を持った言語の総称をいう。代表的な高級言語の種類としては、ＢＡＳＩＣ、ＦＯＲＴＲＡＮ、ＣＯＢＯＬ、Ｃ言語、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐａｓｃａｌ、Ｌｉｓｐ、Ｐｒｏｌｏｇ、Ｓｍａｌｌｔａｌｋなどがある。
【０２０２】
ＭＰＵ命令コードは、アセンブリ言語、又は機械語などの低級言語（低水準言語とも称される）であり、演算処理部が直接読み込む言語にすることができる。ＭＰＵ命令コードは、ソフトウェアなどの形態で記憶装置などに記憶され、演算処理部が実行する処理の内容を規定する。ＭＰＵ命令コードには、動作記述に記載される制御回路部分の一部などが含まれる。
【０２０３】
ＲＴＬ−ＣＤＦＧは、Ｃ言語の記述にレジスタ記述を追加したもの、又はｖｅｒｉｌｏｇ  ＨＤＬなどのハードウェア記述言語（ＨＤＬ）などにできる。ＲＴＬ−ＣＤＦＧは、図４３に示す回路記述に相当するものである。図４２に示す情報処理装置２１０は、図４２及び図４３を用いて説明した配置・配線フローにより、ＲＴＬ−ＣＤＦＧからビットストリームデータを生成することができる。
【０２０４】
以下、図５３に示すそれぞれのステップについて、順に説明する。
【０２０５】
〔５．３．２〕ＣＤＦＧを生成するステップ
図５３に示すＣＤＦＧを生成するステップＳ２２１は、動作記述の実行の制御の流れと、データの流れとを解析し、プログラムのフローチャートに類似するＣＤＦＧに変換するステップとを有する。ＣＤＦＧ（Ｃｏｎｔｒｏｌ  Ｄａｔａ  Ｆｌｏｗ  Ｇｒａｐｈ）は、動作記述に現れたデータの流れ（データフロー）と各演算の実行順序の制御の流れ（コントロールフロー）を表し、節点、入力枝、出力枝、及び四則演算などの各種演算の種類を示す番号を有する。動作記述をＣＤＦＧに変換するときに、定数伝搬、共通演算除去などのコンパイラの最適化で行われる処理と同様な処理を行う。また併せて、動作記述に内在する並列性を引き出すように、フローグラフの構造を変換する処理なども実施してもよい。
【０２０６】
図５４は、論理回路ｘ＝（ａ＋ｂ）＊（ｂ＋ｃ）を構成するＣＤＦＧの例を示す図である。この式は、「ａ」と「ｂ」との論理和と、「ｂ」と「ｃ」との論理和との論理積「ｘ」を求める式である。図５４を参照すると、ｂｒ１〜ｂｒ７は、データ信号、又はコントロール信号を表す。節点ｂｒ１１〜ｂｒ１３は、演算を表す。節点ｂｒ１１及びｂｒ１２はそれぞれ、「ａ」と「ｂ」との論理和と、「ｂ」と「ｃ」との論理和とを表す。節点ｂｒ１３は、節点ｂｒ１１の出力枝と、節点ｂｒ１２の出力枝との論理積を表す。
【０２０７】
〔５．３．３〕スケジューリングするステップ
図５３に示すスケジューリングするステップＳ２２２は、全体のハードウェア量と、総制御ステップ数などの時間制約とを考慮して、動作記述中の各演算を実行する制御ステップを具体的に決定するステップである。すなわち、スケジューリングは、ＣＤＦＧの節点に対応する演算をいつ実行するか、決定することである。言い換えると、どのクロックステップでＣＤＦＧの節点に対応する演算を実行するかを決定することである。この場合に、各演算の遅延時間を考慮して、全ての節点がクロック周期内に収まるようにスケジューリングする。スケジューリングは、速度優先スケジューリングと、ハードウェア量優先スケジューリングに分類される。速度優先スケジューリングは、全体の制御ステップ数を制約として与えて、その条件の下でハードウェア量が小さくなるようにスケジューリングを行なうものである。一方、ハードウェア量優先スケジューリングでは、使用可能なハードウェア量の制約を与えて、その条件の下で制御ステップ数が最小になるようにスケジューリングを行なうものである。
【０２０８】
図５５は、図５４に示すＣＤＦＧを、速度優先スケジューリングでスケジューリングした結果を示す図である。図５５を参照すると、ｓｔｅｐ  １において、図５４に示すＣＤＦＧの節点ｃ１１で示される「ａ」と「ｂ」との論理和と、節点ｃ１２で示される「ｂ」と「ｃ」との論理和と、節点ｃ１３で示される節点ｃ１１の出力枝と、節点ｃ１２の出力枝との論理積が全て実行される。このように、図５５に示す速度優先スケジューリングでは、１つのステップで所与の論理回路を実行できる。しかしながら、節点ｃ１１で示される「ａ」と「ｂ」との論理和と、節点ｃ１２で示される「ｂ」と「ｃ」との論理和とが同一のステップで実行されるため、２つの論理和回路を必要とされる。
【０２０９】
図５６は、図５４に示すＣＤＦＧを、ハードウェア量優先スケジューリングでスケジューリングした結果を示す図である。図５６を参照すると、ｓｔｅｐ  １において、図５４に示すＣＤＦＧのうち、節点ｃ１１で示される「ａ」と「ｂ」との論理和が実行される。そして、ｓｔｅｐ  ２において、節点ｃ１２で示される「ｂ」と「ｃ」との論理和と、節点ｃ１３で示される節点ｃ１１の出力枝と、節点ｃ１２の出力枝との論理積が実行される。このように、図５５に示す速度優先スケジューリングが、１つのステップで所与の論理回路を実行するのに対し、ハードウェア量優先スケジューリングでは、２つのステップで所与の論理回路を実行する。このため、速度優先スケジューリングに比較して、ハードウェア量優先スケジューリングでは、処理時間が増加する。しかしながら、節点ｃ１１で示される「ａ」と「ｂ」との論理和と、節点ｃ１２で示される「ｂ」と「ｃ」との論理和とが異なるステップで実行されるため、図５５に示す速度優先スケジューリングが２つの論理和回路を必要とするのに対し、ハードウェア量優先スケジューリングでは、１つの論理和回路のみで２つの論理和演算を実行することができる。
【０２１０】
〔５．３．４〕アロケーションするステップ
アロケーションとは、スケジューリングの結果に基づいて、ＣＤＦＧの演算節点に演算器を割り当て、データ選択のためのマルチプレクサと、データ記憶のためのレジスタとを生成すると共に、これらの演算器、レジスタ、およびマルチプレクサを制御するためのコントローラを生成し、それぞれを互いに接続することにより回路を合成することをいう。すなわち、アロケーションステップ（Ｓ２２３）では、ＣＤＦＧの演算を表す各節点に対して、データの依存関係と与えられた制約とに基づき、制御ステップの割り当てが行われる。このときに、生成される論理回路において使用するＭＬＵＴ数の見積もりを併せて行うことができる。
【０２１１】
アロケーションは、演算器部分と制御部分とに分離して実行することができる。以下、演算器部分と、制御部分とを順に説明する。
【０２１２】
演算器部分に含まれる回路には、３つの種類がある。第１の種類は、全加算器で構成することができるものである。これには、加算減算、乗算、カウンタ、比較演算などが含まれる。第２の種類は、マルチプレクサで構成することができるものである。これには、多ビットマルチプレクサ、及びバレルシフタなどが含まれる。第３の種類は、メモリ回路で構成することができるものである。これには、ルックアップテーブル、及びレジスタファイルなどが含まれる。いずれの種類の演算器においても、アロケーションするときには、ステップごとに、すなわちステートマシンのステートごとにレジスタ回路を挿入する。ここで、ステートマシンは、あらかじめ決められた複数の状態を、決められた条件に従って、決められた順番で遷移していくディジタル・デバイスである。ステートマシンのステートは、図５６に示す「ｓｔｅｐ  １」、又は「ｓｔｅｐ  ２」などのような、スケジューリングで規定される１つの制御ステップである。
【０２１３】
演算器部分のアロケーションは、演算器の種類とビット数とに基づいて実行する。ビット数は、Ｃ言語などの高級言語の型でビット数を決定することができる。これにより、Ｃ言語などの高級言語と互換性を有するＣＤＦＧを構成することができる。また、ｉｎｔ、ｓｈｏｒｔ、ｌｏｎｇなどの型ではビット幅が大きいと考えられる場合には、Ｃ言語の変数宣言の部分に拡張ディレクティブでビット数を規定しても良い。このように規定されるビット数に基づいて、それぞれの演算器に必要なＭＬＵＴの数を決定することができる。
【０２１４】
マルチプレクサで構成できる第１の種類の演算器では、ハードウェア量を優先するアロケーションと、速度を優先するアロケーションとのいずれかを選択して、アロケーションすることができる。例えば、多ビット加算器においては、ハードウェア量を優先するアロケーションでは、全加算器を多段に組み合わせることにより、多ビット加算器を構成できる。また、速度を優先するアロケーションでは、多段に組み合わせられる全加算器と、キャリー先読み論理回路とを有する多ビット加算器を構成することができる。
【０２１５】
５つ以上のＡＤ対を有するＭＬＵＴにより構成されるＭＰＬＤにおいて、第１の種類の演算器を構成するＭＬＵＴ数を見積もる場合は、２ビット加算器を１つのＭＬＵＴで構成することに基づいて、ＭＬＵＴ数を見積もることができる。例えば、４ビット加算器は、２つのビット加算器で構成されると見積もることができる。また、８ビット加算器は、４つのビット加算器で構成されると見積もることができる。この場合、各種の加算器に使用されるＭＬＵＴ数の見積りは、容易になる。
【０２１６】
マルチプレクサで構成できる第２の種類の演算器は、ビット数に基づいてアロケーションすることができる。例えば、多ビットマルチプレクサでは、ビット数に応じたＭＬＵＴの数を記載したデータを記憶部２１４に有することにより、使用するＭＬＵＴ数の見積りの簡易化が図れる。
【０２１７】
メモリ回路で構成できる第３の種類の演算器は、それぞれのＭＬＵＴをＮビット×Ｎワードのメモリ回路と考えて、アロケーションすることができる。論理回路として動作するＭＰＬＤにおいて、一部のＭＬＵＴをメモリ回路として動作することが可能である場合には、ＭＰＬＤの中で、第３の種類の演算器として動作するＭＬＵＴのみをメモリ回路として動作させることが可能になる。これにより、ＭＰＬＤ内部に論理回路とメモリ回路とを混載することができる。
【０２１８】
制御回路は、例えばＣ言語では、ｉｆ文、ｃａｓｅ文、及び関数の呼び出し文などである。制御回路のアロケーションは、２入力ＮＡＮＤ回路と、ＮＯＴ回路とにより構成される回路により行うことができる。
【０２１９】
このように、演算回路と制御回路とを分離し、かつ演算回路を第１〜第３の種類に分離してアロケーションすることにより、それぞれの回路構成に適当なアロケーションを実行することができる。
【０２２０】
制御回路の見積りは、２入力ＮＡＮＤ回路と、ＮＯＴ回路とにより構成される回路を仮に論理合成し、その回路をテクノロジーマッピングすることによって行うことができる。例えば、ｉｆ文は、２入力ＮＡＮＤ回路と、ＮＯＴ回路とを有する比較回路によって構成できる。
【０２２１】
〔５．３．５〕面分割
論理回路をアロケーションし、演算回路部分、及び制御回路部分のＭＬＵＴ数の見積りをした結果、見積もられた論理回路が１つのＭＰＬＤに搭載できないと判断される場合がある。この場合には、論理回路を、１つのＭＰＬＤに搭載可能な複数の論理ブロックに面分割する必要が生じる。
【０２２２】
上述のように、ＭＰＬＤは、再構成が可能な論理回路である。このため、論理回路を１つのＭＰＬＤに搭載できない場合には、論理回路を、１つのＭＰＬＤに搭載可能な複数の論理ブロックに分割し、分割した演算器ブロックごとに処理を順に実行することができる。本明細書では、演算器部分、及び制御部分などの論理回路を１つのＭＰＬＤに搭載できる大きさに分割することを「面分割」と称する。なお、面分割の説明に関して使用される用語「論理回路」は、アロケーションされたＣＤＦＧデータで示される論理回路であり、「論理ブロック」は、アロケーションされたＣＤＦＧデータで構成される論理回路を適当な大きさに分割したＣＤＦＧデータである。
【０２２３】
図５７は、第１の論理ブロックと第２の論理ブロックとの２つの論理ブロックに面分割された論理回路を実行する１つの例を示す。本例では、ＭＰＬＤ２０と演算処理部２２０とを搭載する半導体装置１００と、記憶装置とによって、論理回路を実行することができる。また、ＭＰＬＤ２０と演算処理部２２０とを搭載する半導体装置１００にさらに記憶部２６を搭載することによっても実行することができる。記憶装置、又は記憶部は、ＭＰＬＤ２０の出力に接続され、第１の論理ブロックと第２の論理ブロックと、第１の論理ブロックの実行結果とを記憶する。
【０２２４】
ステップＳ２３１において、演算処理部は、ＭＰＬＤに書き込まれた第１の論理ブロックを実行する。第１の論理ブロックは、１つ、又は複数のステートで構成することができる。ステップＳ２３２において、演算処理部は、ステップＳ２３１で実行された第１の論理ブロックの実行結果を記憶装置に記憶する。第１の論理ブロックの実行結果を記憶装置に記憶することにより、ＭＰＬＤを第１の論理ブロックから第２の論理ブロックに再構成する間に、第１の論理ブロックの実行結果を保存して、第２の論理ブロックの入力として使用することができる。ステップＳ２３３において、演算処理部は、ＭＰＬＤに書き込まれた第１の論理ブロックを第２の論理ブロックに再構成する。再構成するときに、ＭＰＬＤの全てのＭＬＵＴを書き換えてもよく、第１及び第２の論理ブロックで使用されるＭＬＵＴのみを選択的に書き換えることもできる。また、一部のＭＬＵＴを書き換える部分再構成をしてもよい。ステップＳ２３４において、演算処理部は、ステップＳ２３２で記憶装置に記憶された第１の論理ブロックの実行結果を、第２の論理ブロックの入力信号として読み出す。ステップＳ２３５において、演算処理部は、ステップＳ２３４で読み出された第１の論理ブロックの実行結果を、第２の論理ブロックの入力信号としてＭＰＬＤの入力端子に入力して、第２の論理ブロックを実行する。
【０２２５】
本例では、論理回路は、２つの論理ブロックに面分割されるが、ＭＰＬＤの大きさと、見積もった論理回路の大きさとの比較に基づいて、論理回路を適当な数の論理ブロックに面分割することができる。面分割は、図４２に示す情報処理装置２１０が実行することができる。
【０２２６】
図５８は、アロケーションのときに論理回路を面分割する１例を示す図である。図５８を参照して、図４２に示す情報処理装置２１０が、アロケーションのときに見積もった論理回路を、複数の論理ブロックに面分割するフローについて述べる。
【０２２７】
ステップＳ２４１において、情報処理装置２１０は、使用可能なＭＬＵＴ数を決定する。情報処理装置２１０は、ＭＰＬＤに搭載されるＭＬＵＴと、使用可能なＭＬＵＴ数との関係を示すデータなどを記憶部に記憶することができる。このデータは、ＭＰＬＤの配置・配線効率に基づき作成できる。使用可能なＭＬＵＴ数は、このデータに基づいて決定することができる。ステップＳ２４２において、情報処理装置２１０は、ステートを搭載する面を生成する。ここで、面とは、ＣＤＦＧのアロケーションにより、ステップごとのステートに分割された論理回路の１つ、又は複数のステートを搭載する論理ブロックをいう。ステップＳ２４３において、情報処理装置２１０は、ステートを面に搭載する。例えば、第１の面の最初のステップでは、アロケーションされた後の第１のステートを面に搭載し、第１のステートが搭載された後のステップでは、第２のステートを搭載する。ステップＳ２４４において、情報処理装置２１０は、面に搭載された全てのステートが使用するＭＬＵＴ数を見積もる。見積りは、アロケーションされたそれぞれのステートのＭＬＵＴ数を合計することにより行うことができる。
【０２２８】
ステップＳ２４５において、情報処理装置２１０は、さらにステートを面に搭載可能か否かを判定する。情報処理装置２１０は、面に搭載された全てのステートが使用するＭＬＵＴ数の見積りと、ＭＰＬＤ２０に搭載可能なＭＬＵＴ数とに基づいて、さらにステートを面に搭載できるか否かを判定する。情報処理装置２１０が、さらにステートを面に搭載できると判断したときは、処理は、ステップＳ２４３に戻り、次のステートを面に搭載する。情報処理装置２１０が、さらにステートを面に搭載できないと判断したときは、処理は、ステップＳ２４６に進む。このとき、制御回路部のステートに関しては、情報処理装置２１０は、面に搭載するか、又は面に搭載せずにＭＰＵ命令コードとして生成するかを判断する必要がある。制御回路部のステートをＭＰＵ命令コードとして生成する場合は、情報処理装置２１０は、さらなるステートを面に搭載できないと判断し、そのステートは、面には搭載せずに、新たな面を生成する処理に移行する。また、情報処理装置２１０は、ＭＰＵ命令コードとして生成するために、制御回路部のステートを記憶部に記憶する。
【０２２９】
ステップＳ２４６において、情報処理装置２１０は、未処理のステートの有無を判定する。未処理のステートがある場合は、処理は、ステップＳ２４３に戻り、ステートを搭載する面を新たに生成する。未処理のステートがない場合は、情報処理装置２１０は、処理を終了する。
【０２３０】
〔５．３．６〕ＭＰＵ命令コードを生成するステップ
図５３に示すＭＰＵ命令コードを生成するステップＳ２２４は、図５８に示す面分割のときにステップＳ２４１において、ＭＰＵ命令コードとして生成すると判断された制御回路部のステートから、ＭＰＵ命令コードを生成するステップである。上述のように制御回路には、例えばＣ言語では、ｉｆ文、ｃａｓｅ文、及び関数の呼び出し文などが含まれる。ステップＳ２２４では、情報処理装置２１０は、これらの関数を、演算処理部が読み出し可能な低級言語に変換する。
【０２３１】
ステップＳ２２４で生成されたＭＰＵ命令コードは、１つのＭＰＬＤ２０と、演算処理部２２０とともに半導体装置１００に搭載される記憶部２６に記憶することができる。また、半導体装置１００とともに使用される記憶装置（図示せず）に記憶することもできる。
【０２３２】
〔５．３．７〕ＲＴＬ−ＣＤＦＧを生成するステップ
図５３に示すＲＴＬ−ＣＤＦＧを生成するステップＳ２２５は、ＣＤＦＧをアロケーションするステップＳ２２３においてアロケーションされたＣＤＦＧからＲＴＬレベルのＣＤＦＧを生成するステップである。ＣＤＦＧをアロケーションするステップＳ２２３において、面分割がされた場合には、面分割された論理ブロックごとにＲＴＬレベルのＣＤＦＧを生成する。
【０２３３】
ステップＳ２２５で生成されたＲＴＬ−ＣＤＦＧは、図４２及び図４３を用いて説明した配置・配線フローにより、適当なビットストリームデータに変換することができる。面分割がされた場合には、面分割された論理ブロックごとにビットストリームデータを生成する。
【０２３４】
配置・配線された１つ、又は複数のビットストリームは、ＭＰＬＤと、演算処理部とともに半導体装置に搭載される記憶部に記憶することができる。また、半導体装置とともに使用される記憶装置（図示せず）に記憶することもできる。面分割がされた場合には、演算処理部は、このビットストリームデータを使用して、複数の論理ブロックをＭＰＬＤ上に再構成することができる。
【０２３５】
〔５．４〕１つのＭＰＬＤと演算処理部とを搭載した半導体装置での再構成
図５１に記載される１つのＭＰＬＤ２０と演算処理部２２０とを搭載した半導体装置１００においても、図４１に記載される１つのＭＰＬＤ２０を搭載した半導体装置１００と同様に、論理回路情報を再構成することができる。
【０２３６】
図５９は、ＭＬＵＴに論理回路情報などの情報を書き込む手順を示すフローチャートの一例である。ステップＳ２４７において、演算処理部２２０は、メモリ動作用アドレスＭＡにより、論理回路情報などの情報を書き込む記憶素子４を選択する。次いで、ステップ２４８において、演算処理部２２０は、記憶素子４に書き込むデータを出力する。ステップ２４９において、書き込む情報が他に存在するか否かを判定し、書き込む情報がある場合には、再度ステップＳ２４７に戻り、情報の書き込みを続ける。書き込む情報がない場合には、書き込み手順を終了する。情報の書き込みは、ｎ×２ｎ個の記憶素子の全ての記憶素子について行うことができ、またｎ×２ｎ個の記憶素子の一部についてのみ行うことができる。
【０２３７】
上記のようにして、ＭＰＬＤ２０の論理回路情報を再構成することができる。しかしながら、図５１に記載される半導体装置１００は、内部に演算処理部２２０を有するので、再構成に関する命令を演算処理部２２０が実行することができる。この場合には、図４２に記載される情報処理装置２１０、又は半導体装置１００が搭載される基板上のマイクロプロセッサを使用せずに、半導体装置１００に搭載される演算処理部２２０が再構成を実行できる。このため、再構成のための情報処理装置２１０、又は基板上のマイクロプロセッサの入力部に半導体装置１００を接続する必要がない。さらに、半導体装置１００に搭載される演算処理部２２０がＭＰＬＤ２０に論理回路情報を書き込むため、高速動作が可能になる。したがって、図５１に記載される半導体装置１００では、高速かつ簡便な再構成が可能になる。
【０２３８】
〔５．５〕１つのＭＰＬＤと演算処理部とを搭載した半導体装置での部分再構成
図５１に記載される１つのＭＰＬＤ２０と演算処理部とを搭載した半導体装置１００においても、図４１に記載される１つのＭＰＬＤ２０を搭載した半導体装置１００と同様に、ＭＰＬＤ２０の論理回路情報を部分再構成することができる。すなわち、図４４を用いて説明したフローと同一のフローにより、ＭＰＬＤ２０の論理回路情報を部分再構成することができる。しかしながら、図５１に記載される半導体装置１００は、内部に演算処理部２２０を有するので、上述の再構成の場合と同様に、情報処理装置２１０又は半導体装置１００が搭載される基板上のマイクロプロセッサを使用せずに、半導体装置１００に搭載される演算処理部２２０によって、部分再構成を実行することができる。
【０２３９】
〔６〕２つのＭＰＬＤと、演算処理部とを搭載した半導体装置
ここでは、２つのＭＰＬＤと、演算処理部とを搭載した半導体装置の例について説明する。
〔６．１〕２つのＭＰＬＤと、演算処理部とを搭載した半導体装置
図６０は、ＭＰＬＤを搭載した半導体装置の第１例における配置構造を示す図である。半導体装置１００は、第１のＭＰＬＤ２０ａと、第２のＭＰＬＤ２０ｂと、演算処理部２２０と、入出力回路部１５とを有する。入出力回路部１５、及び演算処理部２２０は、図４１を参照して説明した例と同様であるため、ここでは説明を省略する。第１のＭＰＬＤ２０ａと、第２のＭＰＬＤ２０ｂとは、それぞれ、別個に動作可能である。
【０２４０】
第１のＭＰＬＤ２０ａ、及び第２のＭＰＬＤ２０ｂと、演算処理部２２０との配線、及び入出力回路部１５との配線については、図５１及び図５２などを用いて説明しているので、ここでは説明を省略する。
【０２４１】
第１のＭＰＬＤ２０ａと、第２のＭＰＬＤ２０ｂとの間は、それぞれのＭＰＬＤを構成するＭＬＵＴが有するＡＤ対で直接結線することができる。第１のＭＰＬＤ２０ａと、第２のＭＰＬＤ２０ｂとをバス回路などを介さず直接接続することにより、２つのＭＰＬＤ間の信号処理を高速化することができる。
【０２４２】
図６１は、ＭＰＬＤを搭載した半導体装置の第２例における配置構造を示す図である。図６１を参照すると、本例における半導体装置１００は、第１のＭＰＬＤ２０ａと、第２のＭＰＬＤ２０ｂと、演算処理部２２０と、入出力回路部１５と、記憶部２６とを有する。
【０２４３】
記憶部２６は、第１のＭＰＬＤ２０ａ、及び第２のＭＰＬＤ２０ｂにおいてそれぞれ実行される論理回路の実行結果を記憶するとともに、演算処理部２２０が実行するＭＰＵ命令コードを含むプログラムを格納する。半導体装置１００に記憶部２６を搭載することにより、以下に説明する動的再構成の処理が容易になる。記憶部２６は、ＭＰＬＤでの論理回路の実行結果を記憶するように、第１のＭＰＬＤ２０ａ、第２のＭＰＬＤ２０ｂ、及び演算処理部２２０に結線される。
【０２４４】
図６２は、半導体装置の配線層の一例を示す断面図である。半導体装置１００は、ＭＯＳトランジスタなどの回路素子（図示せず）が形成される半導体基板１６０の上方に、配線層１７０を有する。配線層１７０は、それぞれの配線層に複数配置される配線を適当に接続することにより、回路基板上に形成される回路素子のそれぞれの端子（図示せず）を接続する。半導体装置１００が有する回路素子のそれぞれの端子を適当に接続することにより、半導体装置１００は、所望の動作を実現できる。
【０２４５】
配線層１７０は、第１の配線層１７２、第２の配線層１７４、第３の配線層１７６、及び第４の配線層１７８の４層の配線層を有する。半導体基板１６０、並びに第１〜第４の配線層１７２、１７４、１７６、及び１７８は、第１〜第４のビア接続部１７１、１７３、１７５、及び１７７を介して接続される。第１〜第４の配線層１７２、１７４、１７６、及び１７８、並びに第１〜第４のビア接続部１７１、１７３、１７５、及び１７７の層間は、斜線で示す絶縁層１８０が充填される。
【０２４６】
第１の配線層１７２は、図示されるように、断面において直線状となるように形成される。一部の第１の配線層１７２は、回路基板上に形成される回路素子の２つの端子間を接続するように、第１のビア接続部１７１を介して接続される。他の第１の配線層１７２は、回路基板上に形成される回路素子の端子と第１のビア接続部１７１を介して接続され、第２の配線層１７４と第２のビア接続部１７３を介して接続される。さらに他の第１の配線層１７２は、２つの異なる第２の配線層１７４間を接続するように、第２のビア接続部１７３を介して接続される。
【０２４７】
第２の配線層１７４は、回路素子が形成される半導体基板の表面を上方から見た場合に第１の配線層１７２と垂直を成す方向に略直線状となるように複数形成される。一部の第２の配線層１７４は、２つの異なる第１の配線層１７２間を接続するように、第２のビア接続部１７３を介して接続される。他の第２の配線層１７４は、第１の配線層１７２と第２のビア接続部１７３を介して接続され、第３の配線層１７６と第３のビア接続部１７５を介して接続される。さらに他の第２の配線層１７４は、２つの異なる第３の配線層１７６間を接続するように、第３のビア接続部１７５を介して接続される。
【０２４８】
第３の配線層１７６は、回路素子が形成される半導体基板の表面を上方から見た場合に第１の配線層１７２と平行になる方向に略直線状となるように複数形成される。一部の第３の配線層１７６は、２つの異なる第２の配線層１７４間を接続するように、第３のビア接続部１７５を介して接続される。他の第３の配線層１７６は、第２の配線層１７４と第３のビア接続部１７５を介して接続され、第４の配線層１７８と第４のビア接続部１７７を介して接続される。さらに他の第３の配線層１７６は、２つの異なる第４の配線層間を接続するように、第４のビア接続部１７７を介して接続される。一般的に第３の配線層１７６は、第１の配線層１７２、及び第２の配線層１７４と比較した場合に、大きな断面積を有するように形成される。
【０２４９】
第４の配線層１７８は、回路素子が形成される半導体基板の表面を上方から見た場合に第２の配線層１７４と平行になる方向に略直線状となるように複数形成される。第４の配線層１７８は、２つの異なる第３の配線層１７６間を接続するように、第４のビア接続部１７７を介して接続される。一般的に第４の配線層１７８は、第３の配線層１７６よりもさらに大きな断面積を有するように形成される。
【０２５０】
第１〜第４の配線層１７２、１７４、１７６、及び１７８は、アルミニウム、及びバリアメタルとして使用される銅などの導電性材料により形成される。第１〜第４のビア接続部１７１、１７３、１７５、及び１７７もまた、アルミニウムなどの導電性材料により形成される。絶縁層１６０は、二酸化ケイ素などの絶縁体材料により形成される。
【０２５１】
このように半導体装置においては、配線層は、半導体基板上に形成されるそれぞれの回路素子の端子間をそれぞれ接続するために形成される。システムオンチップ（以下、ＳＯＣと称する）と称される半導体装置では、半導体基板上に、演算処理部、記憶部、アナログ‐デジタル変換部、オペアンプなどのアナログ回路部、論理回路部などのデジタル回路部、及び入出力回路部などが搭載される。演算処理部が、高機能な処理を要求されない場合、例えば８ビット、１６ビットなどの演算処理を行う演算処理部などの場合には、演算処理部は、一般に４層程度の配線層により、形成することができる。また、記憶部などのＳＯＣに搭載される他の構成要素も一般に４層以下の配線層により、形成される。
【０２５２】
上述のように、ＭＰＬＤは、ＣＭＯＳトランジスタを有するＳＲＡＭと、ＣＭＯＳトランジスタにより構成することができる論理回路とを有する。このため、ＭＰＬＤは、ＳＲＡＭなどのメモリ回路技術と、ＣＭＯＳ回路技術とを用いることで製造することができる。これらの技術は、一般的には半導体装置の集積度を考慮しても、３層、又は４層程度の配線層で形成することができる。また、ＭＰＬＤは、ＭＰＬＤをスイッチング機能として使用することができるので、ＦＰＧＡのように接続チャネル領域を設ける必要が無い。このため、ＭＰＬＤは、一般的なＣＭＯＳ回路技術で製造される他の構成要素と同程度の集積度が期待できる。したがって、ＭＰＬＤもまた、３層、又は４層程度の配線層で形成することができる。
【０２５３】
このように、ＭＰＬＤの配線層は、ＳＯＣに搭載される他の構成要素と同様に、４層以下の配線層により、形成することができる。これは、半導体装置の製造面を考慮すると、ＭＰＬＤがＳＯＣと親和性を有することを意味する。すなわち、ＭＰＬＤは、ＳＯＣ半導体装置に搭載しやすいことを意味する。ＦＰＧＡなどの他の再構成可能な論理回路は、一般的に、集積度を考慮すると８層から１０層程度の多層の配線層を有する構造になる。このため、ＳＯＣ回路部を多層配線する必要がない場合でも、ＦＰＧＡなどの再構成可能な論理回路が多層配線を必要とするため、半導体装置が多層配線構造となる。これに対し、ＭＰＬＤは、上述のように、３層、又は４層程度の配線層構造にすることができる。このため、ＳＯＣ回路部の配線層構造に基づいて、半導体装置の配線層構造を決定することができる。例えば、半導体装置１００は、物理的な配線層数が４層以下である。
【０２５４】
〔６．２〕２つのＭＰＬＤと、演算処理部とを搭載した半導体装置での動的再構成
〔６．２．１〕ＭＰＬＤの動的再構成フロー
ここでは、半導体装置に搭載されるＭＰＬＤを動的再構成するフローの１つの例について説明する。
【０２５５】
図６３は、図６１に示す半導体装置に搭載されるＭＰＬＤを部分再構成するフローの一例を示す図である。ステップＳ２５１において、演算処理部２２０は、第１のＭＰＬＤ２０ａ、又は第２のＭＰＬＤ２０ｂの何れか一方、又は双方のＭＰＬＤに論理回路情報を書き込む。ここで書き込まれる論理回路情報は、一般的には、図４２及び３９を用いて説明されたビットストリームデータである。ビットストリームデータは、半導体装置に搭載される記憶部に記憶してもよく、半導体装置と接続される記憶装置に記憶してもよい。第１及び第２のＭＰＬＤの双方に論理回路情報を書き込む場合には、最初のサイクルでは、ステップＳ２５３は省略される。
【０２５６】
ステップＳ２５２において、演算処理部は、ステップＳ２５１で論理回路情報が書き込まれた一方のＭＰＬＤの論理回路情報を動作させる。演算処理部は、一方のＭＰＬＤに書き込まれた論理回路情報の動作結果を半導体装置に搭載される記憶部などの記憶手段に記憶する。これにより、記憶された動作結果を他方のＭＰＬＤの入力に使用できる。また、２つのＭＰＬＤのＡＤ対が接続される場合には、動作が終了した後も一方のＭＰＬＤが動作結果を保持し、演算処理部からの指令により、その動作結果を他方のＭＰＬＤに入力信号として与えることができる。論理動作が終了したときに、演算処理部は、このＭＰＬＤから論理動作が終了したことを示すフラグを受信する。
【０２５７】
ステップＳ２５３において、演算処理部は、論理動作をしない他方のＭＰＬＤに論理回路情報を書き込む。書き込みが終了したときに、演算処理部は、このＭＰＬＤから書き込みが終了したことを示すフラグを受信する。上述のように、最初のサイクルでは、ＭＰＬＤを論理動作させる前に、双方のＭＰＬＤに同時に論理回路情報を書き込むことができる。この場合も演算処理部は、書き込み終了時に書き込みが終了したことを示すフラグを受信する。
【０２５８】
ステップＳ２５４において、演算処理部は、一方のＭＰＬＤの論理動作が終了したことを示すフラグと、他方のＭＰＬＤの書き込みが終了したことを示すフラグを受信すると、書き込みが終了した他方のＭＰＬＤの論理動作を開始する。ステップＳ２５４で他方のＭＰＬＤの論理動作が開始されたのちに、ステップＳ２５５において、演算処理部は、他に書き込む論理回路情報があるか否かを判定する。他に書き込む論理回路情報がある場合には、処理は、ステップＳ２５３に戻る。そして、論理動作をしていないＭＰＬＤに論理回路情報への書き込みを開始する。他に書き込む論理回路情報がない場合には、演算処理部は、ＭＰＬＤから論理動作が終了したことを示すフラグを受信した後に処理を終了する。
【０２５９】
ここで説明する動的再構成は、図５３を用いて説明したＭＰＵ命令コードと、面分割されたＲＴＬ−ＣＤＦＧから生成される複数のビットストリームとを用いて実現することができる。演算処理部は、演算処理部指令コードに従ってＭＰＬＤの再構成、論理動作開始指令、又はＭＰＬＤに搭載されなかった制御回路を実行する。また、ＭＰＬＤの論理回路情報であるビットストリームデータは、面分割されたＲＴＬ−ＣＤＦＧから生成されるビットストリームにすることができる。これにより、動作記述で記載されたデータ処理動作が、ハードウェアである半導体装置に搭載される演算処理部とＭＰＬＤとにより実現されることになる。このため、ソフトウェアである動作記述により演算処理部を動作させるよりも高速な動作が可能になる。
【０２６０】
〔６．２．２〕動的再構成の実施例
ここでは、動的再構成の利点を具体的な実施例に基づいて説明する。実施例は、共通鍵暗号方式の１つであるＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ：データ暗号化標準）の暗号化に関するものである。ここでは、ＤＥＳの暗号化計算について概略的に述べたのちに、本例における半導体装置によるＤＥＳ計算の実行方法について説明する。
【０２６１】
〔６．２．２．１〕ＤＥＳのアルゴリズム
図６４は、ＤＥＳの計算アルゴリズムのフローの一例を示す図である。ＤＥＳは、固定ビット（例えば、６４ビット）長の平文を入力とする。ＤＥＳは５６ｂｉｔ長の暗号化鍵を使い６４ｂｉｔの平文ブロックごとに暗号化するブロック暗号である。暗号化鍵は、６４ビットだが、そのうち８ビットはパリティチェックに使うため、アルゴリズム上の実際の鍵の長さは５６ビットである。ＤＥＳの暗号化鍵は、共通鍵暗号方式であり、暗号化と復号に同一の鍵を用いる。また、ＤＥＳでは、Ｆ（Ｆｅｉｓｔｅｌ）関数という、置換と転置を行うラウンド関数を用いて、Ｆ関数を用いて繰り返し暗号化または復号化を行う暗号方式である。ステップＳ２６１において、初期転置を行う。初期転置は、ビット間の所定の転置を実行するものである。例えば、初期転置後の１ビット目のデータは、入力データの５８ビット目のデータであり、初期転置後の２ビット目のデータは、入力データの５０ビット目のデータである。このように、初期転置により、６４ビットのそれぞれのデータの並び替えが行われる。
【０２６２】
ステップＳ２６２において、初期転置後の下位３２ビットをＦ関数により処理する。Ｆ関数の処理は、図６５に示すフローにより説明する。
【０２６３】
図６５は、Ｆ関数のアルゴリズムのフローを示す図である。Ｆ関数には、初期転置処理がされたデータの下位３２ビットが入力される。ステップＳ２７１において、入力された３２ビットのデータは、拡張順列（ｅｘｐａｎｓｉｏｎ  ｐｅｒｍｕｔａｔｉｏｎ）され、４８ビットのデータが生成される。次いでステップＳ２７２において、拡張順列された４８ビットのデータと、４８ビットの巡回鍵との間で排他的論理和の処理がされる。
【０２６４】
ここで、巡回鍵について説明する。巡回鍵は、共通鍵を一定のアルゴリズムにより変換したものであり、１回のＤＥＳ暗号化で１６回行われるＦ関数処理ごとに異なる鍵になる。巡回鍵への変換アルゴリズムには、転置処理と、巡回シフト処理とが含まれる。
【０２６５】
Ｓボックス（ｓｕｂｓｔｉｔｕｔｉｏｎ  ｂｏｘ）とは、ｍビットの入力をｎビット出力に変換する関数であり、２ｍのルックアップテーブルである。ステップＳ２７３において、ステップＳ２７２で巡回鍵との間で排他的論理和の処理がされた４８ビットのデータは、８個のＳボックスによる変換により、６ビットのデータを４ビットのデータに変換する処理がされる。この結果、Ｓボックスにより処理される前は４８ビットであったデータが、Ｓボックスの処理によって３２ビットのデータに変換される。
【０２６６】
Ｓボックスは、Ｓ１〜Ｓ８のそれぞれ所定の値を有する真理値表により構成される。Ｓ１は、下位６ビットのデータを変換するＳボックスであり、Ｓ２は、下位７ビットから１２ビット目のデータを変換するＳボックスである。以下同様に、Ｓ７は、３６ビット目から４２ビット目までのデータを変換するＳボックスであり、Ｓ８は、４３ビット目から４８ビット目までのデータを変換するＳボックスとなる。それぞれのＳボックスは２行×４列の行列に対して、それぞれ４ビットずつのデータが割り当てられる。Ｓボックスの２ビットの行は、６ビットの入力データのＭＳＢ（最上位ビット、すわなち６ビット目）のデータと、ＬＳＢ（最下位ビット、すわなち１ビット目）のデータにより構成される。Ｓボックスの４ビットの列は、６ビットの入力のＭＳＢとＬＳＢとを除いた中間の４ビット（２ビット目から５ビット目）のデータにより構成される。６ビットの入力データを、このような構成を有するＳボックスに入力し、該当する真理値表の４ビットの値を出力することにより、６ビットの入力データを４ビットの出力データに変換することができる。表１にＳボックスの例として、Ｓ１のＳボックスを示す。
【０２６７】
【表１】
0005432344.tif 000002
【０２６８】
Ｓ１では、例えば、６ビットの入力（１００１１０）が与えられた場合、行は、ＭＳＢとＬＳＢとにより（１０）となり、列は、ＭＳＢとＬＳＢとを除いた４ビットから（００１１）となる。したがって、４ビットの出力データは、（１０００）になる。
【０２６９】
ステップＳ２７４において、Ｓボックスによる変換が８回終了したか否かを判定する。Ｓボックスの処理が全て終了していない場合は、次のＳボックスの処理を行う。また、Ｓボックスの処理が全て終了している場合は、処理は、ステップＳ２７５に進む。ステップＳ２７５において、Ｓ１〜Ｓ８の８個のＳボックスで処理された４ビットのデータを全て並べて３２ビットのデータを生成する。
【０２７０】
図６４に示すステップＳ２６３において、Ｓボックスの処理により生成された３２ビットのデータは、上位３２ビットのデータとの間で排他的論理和の処理がされる。ステップＳ２６４において、６４ビットの入力データの下位３２ビットのデータを上位３２ビットのデータとする。そして、ステップＳ２６３により生成される３２ビットのデータを下位３２ビットのデータとする。
【０２７１】
ステップＳ２６５において、Ｆ関数の処理を含む一連の処理が１６回行われたか否かを判定する。処理が１６回行われていない場合は、さらにＦ関数の処理からの一連の処理が行われる。このとき、巡回鍵は、処理ごとに異なる鍵になる。処理が１６回行われた場合は、ステップＳ２６６において、６４ビットのデータは、逆転置されて暗号化処理が完了する。
【０２７２】
〔６．２．２．２〕本例における半導体装置によるＤＥＳ計算例
ここで、２つのＭＰＬＤと、演算処理部とを搭載した半導体装置によるＤＥＳアルゴリズムの計算例について、図６４などを参照しながら説明する。ＭＰＬＤを構成するＭＬＵＴは７個のＡＤ対を有することとする。
【０２７３】
図６４に示されるステップＳ２６１の初期転置と、ステップＳ２６６の逆転置とは１つのＭＬＵＴをメモリ回路として動作させて、転置先のビットを記憶させることができる。この処理は、ＭＰＬＤ内部の一部のＭＬＵＴのみをメモリ回路として動作させることが可能な場合に実現できる。ＭＰＬＤ内部の一部のＭＬＵＴのみをメモリ回路として動作させることができない場合は、外部の記憶装置、又は半導体装置に搭載される記憶部に転置先のビットを記憶させることができる。
【０２７４】
図６４に示されるステップＳ２６３、及び図６４に示されるステップＳ２７２における３２ビット及び４８ビットの排他的論理和の計算は、ＭＰＬＤが計算する。ＭＰＬＤは、多入力他出力の演算に適するからである。
【０２７５】
ステップＳ２７３のＳボックスの処理を８回行う処理は、２つのＭＰＬＤを動的に再構成することにより、実現できる。例えば、１つのＭＬＵＴを真理値表として使用する。Ｓボックスの処理は６ビット入力に対して４ビット出力をするものであるので、７個のＡＤ対を有するＭＬＵＴを使用する場合、６個のＡＤ対の論理制御用アドレス線を６ビットの入力とし、４個のＡＤ対の論理制御用データ線を４ビットの出力線とすることにより、Ｓボックスの真理値表を実現できる。そして、一方のＭＰＬＤでＳ１のＳボックスの演算処理を行う間に、他方のＭＰＬＤにＳ２のＳボックスの演算情報を書き込む。また、他方のＭＰＬＤでＳ２のＳボックスの演算処理を行う間に、一方のＭＰＬＤにＳ３のＳボックスの演算情報を書き込むなどして、動的に再構成しながらＳボックスの演算処理を進めることができる。これにより、動的再構成を用いない場合と比較して、同一の演算処理を実現するための回路規模を大幅に少なくすることができる。
【０２７６】
ステップＳ２７２において使用される巡回鍵を生成するときにもＭＰＬＤを動的再構成して使用することができる。上述のように巡回鍵は、共通鍵に転置処理とシフト処理とを加えることにより生成され、Ｆ関数の動作ごとに異なる巡回鍵を使用する。そこで、２つのＭＰＬＤを動的再構成しながら使用することにより、一方のＭＰＬＤで巡回鍵を使用する演算処理を行う間に、他方のＭＰＬＤで次のサイクルで使用する巡回鍵を生成し、書き込む処理を行うことができる
【０２７７】
ここでは、２つのＭＰＬＤと、演算処理部とを搭載した半導体装置で実現される動的再構成について説明してきたが、１つのＭＰＬＤと、演算処理部とを搭載した半導体装置でも動的再構成を実現することができる。
【０２７８】
１つには、図１９を用いて説明したＭＬＵＴを使用してＭＰＬＤを構成する場合には、動的再構成が可能になる。この型のＭＬＵＴは、セレクト信号により選択される２つの記憶素子群を有する。一方の記憶素子群で演算処理を行う間に他方の記憶素子群の論理回路情報を再構成することにより、動的再構成を実現することができる。
【０２７９】
また、物理的な構成では１つであるＭＰＬＤを、論理動作上は２つのＭＰＬＤであるとして扱うことにより、動的再構成が可能になる。例えば、１つのＭＰＬＤの半分の領域の第１のＭＰＬＤ部として扱い、残りの半分の領域を第２のＭＰＬＤ部として扱うことにより、物理的な構成では１つであるＭＰＬＤを、論理動作上は２つのＭＰＬＤであるとして扱うことができる。
【０２８０】
〔７〕動的再構成に適する半導体装置
【０２８１】
プログラマブルロジックデバイス（ＰＬＤ）の動的再構成が知られている。動的再構成とは、ＰＬＤ稼働中に、ＰＬＤの回路構成を切り替える技術である。動的再構成は、複数の小規模回路を、プログラムに従って短時間に頻繁に結線し直すことで、小規模回路で大規模回路の機能を実現することができる。
【０２８２】
ＰＬＤは、ハードウェアによる物理的な結線で命令を実行するワイヤードロジックを、ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ）やＬＵＴ（Ｌｏｏｋ  ｕｐ  Ｔａｂｌｅ）で実現する回路である。ワイヤードロジックは、ＣＩＳＣプロセッサの演算対象であるマイクロコードによる処理の複数のステップを、１つの組み合わせ論理回路に展開して実現することができる。ＣＩＳＣプロセッサでは、１つの処理を実行するのに、複数のクロックが必要になるが、ワイヤードロジックでは、１つのクロックで実現することができ、データの流れを止めずに処理を高速に行うので、クロックあたりの処理能力が、ＣＩＳＣプロセッサと比して高い。そのため、ワイヤードロジックの回路構成は、複数の回路機能とともに、一連のデータの流れをも実現するため、「データパス」と呼ばれる。
【０２８３】
動的再構成可能なＰＬＤは、機能ごとに固定された専用回路を切り替えるのではなく、小規模回路の再配置を行って専用回路を構成し、複数の小規模回路が協調してパイプライン処理を行う。なお、ここでいう「パイプライン」とは、連続動作処理を意味する。
【０２８４】
一般に、動的再構成可能なＰＬＤは、ＡＬＵベース、又はＬＵＴベースである。ＡＬＵは、加算器、シフタ、乗算器等を含む演算器セットであり、１つのＡＬＵで複数の機能を実現することができる。ＡＬＵベースの動的再構成可能なＰＬＤは、ＡＬＵの機能を選択することで、動的再構成する。ＬＵＴは、複数のメモリセルからなるメモリセルユニットであるため、ＬＵＴベースの動的再構成可能なＰＬＤは、再構成を行うとき、メモリセルユニットの書き換えが必要になる。また、ＬＵＴベースの動的再構成可能なＰＬＤは、メモリセルユニット間の接続に、専用の切り替え回路を有しているので、動的再構成には、切り替え回路の再設定も必要になる。
【０２８５】
以下に示すプログラマブル論理部としてのＭＰＬＤを含む半導体装置は、少なくとも２つのＭＰＬＤを有し、ＭＰＬＤの構成情報を保持するキャッシュ部と、キャッシュ部に保持された構成情報をＭＰＬＤに出力する構成制御部とを備える。構成制御部は、ＭＰＬＤの１つが、分岐論理を構成する構成情報で再構成されている場合、前記分岐論理の実行前に、前記分岐論理の分岐先回路を構成する前記第２の構成情報で、前記複数のプログラマブル論理部のうちの第２のプログラマブル論理部を投機的に再構成する。このように、投機的にＭＰＬＤを再構成することで、分岐確定後にＭＰＬＤを再構成する必要が無いので、再構成時間を短縮化することができる。
【０２８６】
以下、〔７．１〕半導体装置、〔７．２〕ＭＰＬＤの構成例、〔７．３〕半導体装置の動作フローの詳細例について順に説明する。なお、ＭＰＬＤ及びＭＬＵＴは、〔１〕、及び〔２〕においてそれぞれ説明したものが適用可能である。
【０２８７】
〔７．１〕半導体装置
図６６は、半導体装置の一例を示すブロック図である。
図６６に示す半導体装置１００は、構成可能論理部としてのＭＰＬＤ２０Ａ及び２０Ｂ、変数保持部２５、構成制御部３００、キャッシュ部４００Ａ及び４００Ｂを有する。半導体装置１００は、演算処理部としてのＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２２０と接続し、及びメモリコントローラ５５０を介して、記憶部としてのメインメモリ５００と接続する。半導体装置１００は、ＭＰＵ２２０、及び／又は、メモリコントローラ５５０及びメインメモリ５００と一体化したＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）チップとしてもよい。
【０２８８】
〔７．１．１〕ＭＰＬＤ
プログラマブル論理部としてのＭＰＬＤ２０Ａ及び２０Ｂは、複数のメモリセルユニットであるＭＬＵＴ（Ｍｕｌｔｉ  Ｌｏｏｋ−Ｕｐ−Ｔａｂｌｅ）を各々が有する。ＭＬＵＴのメモリセルユニットは、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成してもよい。ＭＬＵＴは、論理要素、又は、複数の論理要素間を接続する接続要素として機能する。
【０２８９】
ＭＰＬＤ２０Ａ及び２０Ｂは、構成情報を書き込むことによって、再構成される。構成情報は、ＭＰＬＤ２０Ａ又は２０Ｂを部分的に再構成するために、複数のＭＬＵＴを構成単位とする再構成単位毎に生成される。構成情報によって再構成単位毎に再構成される複数のＭＬＵＴを、以下「バンク」と言い、再構成単位を、以下「バンク単位」と言う。ＭＰＬＤ２０Ａ及び２０Ｂは、データ信号を外部から受け取ると、構成情報で再構成された回路によって演算を行い、演算結果であるデータ信号を外部に出力する。なお、構成情報は、様々な演算器の真理値表から構成される演算器データ、及び、複数のステート、ステート変化のきっかけとなるイベント、これによって生じるステートの遷移を表す制御データから構成される。
【０２９０】
演算器データは、インバータ、ＡＮＤ演算、ＯＲ演算等の演算名称と各々が対応付けられる複数の真理値表データである。
【０２９１】
制御データは、演算器の種類と、演算器が割り当てられる複数のＭＬＵＴ間のデータパスとを、ステート状態の遷移とともに規定した真理値表データである。制御データには、ステート識別情報、演算器、演算器の配置配線情報、ステートマシン（図６７を用いて後述）を構成する真理値表データ、演算器の真理値表データを書き込むＭＬＵＴの識別情報、演算器リソースの配置配線情報を含む。
【０２９２】
〔７．１．２〕構成制御部
構成制御部３００は、キャッシュ部４００Ａから構成情報（演算器データと制御データ）を読み出して、ＭＰＬＤ２０Ａ又は２０Ｂに書き込む。また、キャッシュ部４００Ａに、書き込み対象となる構成情報（ここでは、制御データ）が無い場合、メモリコントローラにメモリアクセス命令を供給して、メインメモリ５００に記憶される構成情報（制御データ）を読み出す。
【０２９３】
ＭＰＬＤ２０Ａ及び２０Ｂの何れかが再構成された回路によって演算動作を行っているとき、演算動作を行っていないＭＰＬＤは、構成制御部３００によって再構成される。なお、どの演算器データ及び制御データを、ＭＰＬＤに書き込むかについては、後述するスケジュール情報でスケジュールされている。したがって、構成制御部３００は、スケジュール情報を参照することで、スケジュールされたバンク単位の構成情報を、ＭＰＬＤに書き込む。
【０２９４】
上記のように、構成制御部３００は、構成情報で、ＭＰＬＤ２０Ａ又は２０Ｂを再構成し、演算動作を実行するＭＰＬＤと、再構成するＭＰＬＤとを、スケジュール情報にしたがって適宜切り替て、連続的な演算動作を可能にする。
【０２９５】
〔７．１．３〕キャッシュ部
図６６に示されるように、キャッシュ部４００Ａ及び４００Ｂは、それぞれが異なるキャッシュメモリで構成される。キャッシュ部４００Ａ及び４００Ｂは、それぞれ独立してデータの読み出し又は書き込み可能なキャッシュメモリであり、例えば、ＳＲＡＭである。そのため、図６６には図示しないが、キャッシュ部４００Ａ及び４００Ｂは、データを保持するメモリセルアレイと、メモリセルアレイからデータを読み出し又は書き込むための行アドレスデコーダ、列アドレスデコーダ、及びアンプ等の周辺回路をそれぞれ備える。
【０２９６】
キャッシュ部４００Ａは、構成情報のうち演算器データを保持し、キャッシュ部４００Ｂは、構成情報のうち制御データを保持する。演算器データは、半導体装置１００の初期動作時に、メインメモリ５００から読み出されて、キャッシュ部４００Ａに書き込まれる。演算器データは、ＭＰＬＤ３０Ａ又は３０Ｂの再構成に際して、メインメモリ５００から読み出されずに、キャッシュ部４００Ａから読み出される。メインメモリ５００は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されているため、データの読み出し速度が遅い。また、制御データは、データの遷移に係るＭＬＵＴの出力メモリセルを特定するのに対して、演算器データは、ＭＬＵＴに書き込む真理値表データの大部分を構成するので、制御データよりもデータ量が大きい。そのため、ＭＰＬＤ２０Ａ又は２０Ｂの再構成時には、メインメモリアクセス無しで、キャッシュ部４００Ａから、制御データ９１０よりもデータ量の大きい演算器データを読み出すことができるので、演算器データをキャッシュ部４００Ａに保持することで、ＭＰＬＤ２０Ａ又は２０Ｂの再構成時間を短縮することができる。
【０２９７】
また、演算器データと制御データとを、ＭＰＬＤ２０Ａ又は２０Ｂの再構成に合わせて同じデータではなく別個のデータとして、キャッシュ部４００Ａ及び４００Ｂに別々に格納するので、制御データのキャッシュ部へのデータ書き込みとともに、演算器データをメインメモリ５００から書き込む動作も不要となり、ＭＰＬＤ３０Ａ又は３０Ｂの再構成時間を短縮することができる。
【０２９８】
さらに、キャッシュ部４００Ａは、半導体装置１００の初期動作時に、演算器データ９０５が書き込まれ、その後は、読み出し動作となる。したがって、書き込みと読み出しを同時に実行する必要がないので、演算器データ９０５を保持するキャッシュ部４００Ａを構成するメモリは、ダブルポートではなくシングルポートのＳＲＡＭとすることができる。
〔７．１．４〕構成情報の詳細
上記のように、キャッシュ部４００Ａ及び４００Ｂは、それぞれ、演算器データと、制御データとで構成される別個のキャッシュメモリである。以下に、演算器データと、制御データとの詳細例を説明する。
【０２９９】
演算器データは、以下のデータ構造を有する。
Ａ．演算器データのデータ構造
ヘッダ部
演算器ＩＤ
演算器ＬＵＴ数
データ部
演算器ＭＬＵＴ情報（圧縮データ）
【０３００】
上記のように、演算器データは、ヘッダ部に、演算器を識別する「演算器ＩＤ」と、演算器を実装するのに必要なＭＬＵＴの数である「演算器ＭＬＵＴ数」とで定義される。また、データ部には、演算器に必要な演算器ＭＬＵＴ情報が、圧縮データで定義される。
【０３０１】
制御データは、以下のデータ構造を有する。
Ｂ．制御データのデータ構造
バンク番号：
演算器配置情報
演算器ＩＤ
行数情報
１行目のｒｏｗ，ｃｏｌ
２行目のｒｏｗ，ｃｏｌ
．．．
制御回路情報
ヘッダ部
制御回路ＬＵＴ数
制御回路開始のｒｏｗ，  ｃｏｌ
データ部
制御回路ＭＬＵＴ情報（圧縮データ）
【０３０２】
上記のように、制御データは、再構成するＭＬＵＴである「バンク」を識別する「バンク番号」と、そのバンクに配置する演算器ＩＤと、演算器を「バンク」に配置するための演算器ＩＤ毎の行数情報を有する。さらに、制御データは、制御回路を構成するＭＬＵＴの数と、「バンク」において制御回路を開始する行列を「制御回路開始のｒｏｗ，  ｃｏｌ」として規定する。また、制御回路に必要なＭＬＵＴ情報が、圧縮データで定義される。
【０３０３】
構成制御部３００は、制御データ内に含まれる演算器ＩＤを参照して、対応する演算器データを読み出して、制御データの「行数情報」の行数に、対応する演算器データの演算器ＭＬＵＴ情報を書き込む。また、構成制御部３００は、制御データ内に含まれる制御回路情報を参照して、「制御回路開始のｒｏｗ，  ｃｏｌ」に、制御回路ＭＬＵＴ情報を書き込む。このようにして、構成制御部３００は、バンク毎に「演算器ＭＬＵＴ情報」及び「制御回路ＭＬＵＴ情報」を書き込んで、ＭＰＬＤ２０Ａ又は２０Ｂを再構成する。
【０３０４】
〔７．１．５〕メインメモリ
メインメモリ５００は、構成情報としての演算器データ９０５、及び制御データ９１０−１〜９１０−Ｎ（Ｎは自然数）、プロファイル情報９７０、静的スケジュール情報９７５、プログラム９８０、及びコンパイルプログラム９９０を格納する。メインメモリ５００は、ＤＲＡＭである。メモリコントローラ５５０は、メインメモリ５００のデータの読み出し、書き出し、ＤＲＡＭのリフレッシュなどを行なう。
【０３０５】
図６７は、メインメモリのメモリマップの一例を示す図である。
プログラム９８０は、ＭＰＬＤ２０Ａ及び２０Ｂ、又は、ＭＰＵ２２０に所定の処理を実行させるためのプログラムであり、Ｃ言語等のプログラム言語にコーディングされたプログラムである。ＭＰＵ２２０は、コンパイルプログラム９９０を実行することで、プログラム９８０は、ＭＰＬＤ２０Ａ及び２０Ｂの大きさの回路データに分割し、分割された複数の回路データのそれぞれから、演算器データ９０５及び制御データ９１０−１〜９１０−Ｎを生成する。
【０３０６】
〔１．６〕プロファイル情報
プロファイル情報９７０−１〜９７０−Ｎ（Ｎは自然数）は、演算器間の依存、依存データ更新、データフロー、データのライフタイム等のプロファイル（又は履歴）を分析したデータであり、コンパイル処理により、「バンク」毎に「投機的実行の優先」順位が判断されて、生成される。
【０３０７】
プロファイル情報は、メインメモリ５００からキャッシュ部４００Ａ及び４００Ｂへの構成情報のロードと、キャッシュ部４００Ａ及び４００ＢとＭＰＬＤ２０Ａ及び２０Ｂ間のロードを、スケジュールするとともに、それらのロードを並列に実行するようにスケジュールされる。
【０３０８】
例えば、プロファイル情報は、制御データ９１０−１でＭＰＬＤ２０Ａを再構成し、次に、制御データ９１０−２でＭＰＬＤ２０Ｂを再構成するというように、制御データ間の再構成順序を規定する。また、プロファイル情報は、制御データ９１０が分岐回路を規定している場合、分岐回路の実施により、どの制御データが実施されるべきかをスケジューリングする。
【０３０９】
プロファイル情報９７０−１〜９７０−Ｎは、構成制御部３００（より詳細には、後述するスケジューラ）によって使用される。プロファイル情報のデータ構造は、以下の通りである。
【０３１０】
Ｃ．プロファイル情報のデータ構造
ヘッダ部
タイプ：静的か動的
個数  ：動的分岐数、タイプが静的の場合は、０を設定
データ部
値    ：スケジューラがチェック（エンコードされた値）
優先  ：投機的実行の優先
バンク番号：実行バンク番号
【０３１１】
ヘッダ部の「タイプ」が「静的」である場合、プロファイル情報は、静的スケジュール情報９７５とも呼ばれる。静的スケジュール情報９７５は、システムリセット時のプロファイル情報と動作合成から生成される情報である。システムリスタート時に、構成制御部（スケジューラ）３００、静的スケジュール情報としてのプロファイル情報を読み込むと、この情報を、構成制御部３００で保持して、ＭＰＬＤの投機的な再構成を行う。
【０３１２】
ヘッダ部の「動的分岐数」は、動的に分岐したときの分岐対象の「バンク」の個数を示す。データ部の「値」とは、条件分岐の値である。データ部の「優先」とは、投機的実行を優先して行う面を意味する。バンク番号とは、プロファイル情報に対応づけられるバンクの番号である。構成制御部（スケジューラ）３００は、図６９で後述するＭＰＬＤの一部に構成されるステートマシンが、構成制御部（スケジューラ）３００によって予測した条件分岐の「値」と、ＭＰＬＤによって実際に実行された条件分岐の「値」とが一致するか否かを判断する。ステートマシンが、判断結果を、構成制御部（スケジューラ）３００に出力することで、構成制御部（スケジューラ）３００は投機的実行の分岐失敗をチェックできる。
【０３１３】
構成制御部（スケジューラ）３００は次の面を投機ロードする際、読み込んだプロファイル情報の「タイプ」が「静的」ならデータ部の値をチェックし、当該バンクをロードする。読み込んだプロファイル情報の「タイプ」が動的なら、データ部の「優先」の高い「バンク」をロードする。投機ロードの「バンク」が、再構成中のバンクとなった場合、そのバンクが動的分岐を生ずるバンクか否かを、データ部の「優先」値でチェックし、当該バンクが妥当かあるいは別のバンクをロードすべきか判断し、妥当なバンクを、メインメモリ５００又は、キャッシュ部４００Ａ及び４００Ｂからロードし実行する。このように、構成制御部（スケジューラ）３００は、プロファイル情報の「優先」により、ＭＰＬＤを投機的に再構成するように動作する。
【０３１４】
変数保持部２５は、ＭＰＬＤ２０Ａ及び２０Ｂ間を跨るライフタイムの長い変数を保持する記憶部である。変数保持部２５が、ライフタイムの長い変数（例えば、グローバル変数等）を保持することで、ＭＰＬＤ２０Ａ及び２０Ｂが変数を保持するＭＬＵＴを再構成する必要がなくなり、ＭＬＵＴの有効活用が可能になる。
【０３１５】
図６８は、構成制御部の詳細ブロック図である。構成制御部３００は、キャッシュ制御３１０、システムリセット３２０、圧縮データ解凍３３０、スケジューラ３４０で示される機能を有する。これらの機能は、構成制御部３００内部の回路や、構成制御部３００がプログラムを実行することで実現される。以下、各機能について説明する。
【０３１６】
キャッシュ制御３１０は、構成制御部３００によるキャッシュ部４００Ａ及び４００Ｂ、メインメモリ５００、ＭＰＬＤ２０Ａ及び２０Ｂへのデータの入出力を行う機能である。
【０３１７】
システムリセット３２０は、構成制御部３００が外部からシステムリセット（ＳＲ）信号を受け取ると、キャッシュ制御３１０に、初期動作を実行するように指示する機能である。初期動作とは、メインメモリ５００からの演算器データ９０５及び制御データ９１０を読み出して、ＭＰＬＤ２０Ａ及び２０Ｂへの書き込み、静的スケジュール情報９７５に従う演算器データ９０５及び制御データ９１０の読み出しである。
【０３１８】
圧縮データ解凍３３０は、キャッシュ部４００Ａ及び４００Ｂに、演算器データ９０５及び制御データ９１０のＭＬＵＴ情報は、圧縮されているので、圧縮された演算器データ９０５及び制御データ９１０のＭＬＵＴ情報を解凍して、ＭＰＬＤ２０Ａ又は２０Ｂに出力する機能である。
【０３１９】
演算器データ９０５及び制御データ９１０のＭＬＵＴ情報は、コンパイルプログラム９９０により圧縮された形でメインメモリ５００に記憶されうる。これは、メインメモリ５００とキャッシュ部４００Ａ及び４００Ｂとの間のデータ量の削減と、キャッシュ部４００Ａ及び４００Ｂにおいて演算器データ９０５及び制御データ９１０を保持する記憶領域を削減するためである。
【０３２０】
ＭＰＬＤ２０Ａ及び２０Ｂは、ＡＬＭマトリクス型のＰＬＤと比べて、再構成するデータ量が多い。メインメモリ５００をＤＲＡＭで構成した場合、メインメモリ５００とキャッシュ部４００Ａ及び４００Ｂとの間のデータ転送速度が、再構成時間の制約となりうる。そのため、構成情報である演算器データ９０５及び制御データ９１０のＭＬＵＴ情報を圧縮してメインメモリに記憶し、キャッシュ部４００Ａ及び４００Ｂに送信することで、ＭＰＬＤによる再構成時間を短縮化することができる。また、ＭＰＬＤ２０Ａ及び２０Ｂの構成情報の多くは演算器データ９０５である。演算器データ９０５を、キャッシュ部４００Ａに保持することでＭＰＬＤの再構成時間を短縮化できることはすでに述べたが、演算器データ９０５を圧縮してキャッシュ部４００Ａに保持することで、メインメモリ５００と比して記憶容量の小さいキャッシュ部４００Ａで演算器データ９０５を保持可能になる。
【０３２１】
また、従来、プロセッサの技術分野において、データ圧縮とは、命令の圧縮には使用されていない。ＭＬＵＴ情報は、真理値表データで全て構成可能であるため、プログラム上の命令を演算器データに変換すると、データ圧縮が可能になる。
【０３２２】
圧縮及び解凍には、様々な技術が適用可能である。適用可能な圧縮及び解凍技術として、例えば、ＬＺＳＳである。
【０３２３】
スケジューラ３４０は、プロファイル情報を順番に読み出して、ＭＰＬＤを再構成するバンクの優先順位を判断し、ＭＰＬＤに書き込む構成情報の順位を判断する。スケジューラ３４０は、プロファイル情報に規定される優先順位に従って、メインメモリ５００から構成情報（制御データ）を読み出して、または、キャッシュ部４００Ａ及び４００Ｂから構成情報（演算器データ及び制御データ）を読み出して、ＭＰＬＤを再構成する。スケジューラ３４０は、プロファイル情報に従ってＭＰＬＤを再構成した結果、ステートマシンから投機実行の失敗出力を受けた場合、正しい分岐先となる制御データをキャッシュ部４００Ａ及び４００Ｂ、又は、メインメモリ５００から読み出す。なお、このように投機実行が失敗した場合であっても、読み出す制御データの真理値表データは圧縮されており、また、演算器データはキャッシュ部４００Ａに保持されているため、分岐先の制御データを読み出す時間を短くすることができるため、投機実行失敗時の再構成時間による遅延を短くすることができる。
【０３２４】
なお、ステートマシンは、ＭＰＬＤ上で構成情報により実現される。ステートマシーンは、少なくとも２つの機能を有する。１つは、ＭＰＵ２２０のバス等のバスの制御や、図６８には図示されていないが通信部から送信される通信パケット処理等の制御回路として動作するステートマシーンである。もう１つは、演算手順のデータフローの順番を制御する制御回路を動作させるステートマシーンである。なお、ステートマシーンは、静的スケジュール情報９７５により、システムリスタート時にＭＰＬＤに構成される。
【０３２５】
〔７．２〕ＭＰＬＤの構成例
図６９は、ＭＰＬＤで構成されるデータパスブロック及びステートマシンの一例を示す図である。データパスブロック９０２は、演算器データ９０５に示される演算器が、ＭＰＬＤ２０Ａ又は２０Ｂ内のＭＬＵＴに割り当てられることで実現される回路ブロックと、そのデータパスを示す。ステートは、各ＭＰＬＤに構成可能なバンク単位の回路構成を識別する。ステートは、コンパイルプログラム９９０をＭＰＵ２２０が実行した際に、ＭＰＬＤ２０Ａ及び２０Ｂの粒度に合わせて生成される。各ステートは、静的スケジュール情報９７５により順番付けされている。例えば、また、ステート１〜４は、ＭＰＬＤ２０Ａのバンク単位の記憶領域をそれぞれ特定する。また、ステート１は、ＭＰＬＤ２０Ａを構成し、ステート２は、ＭＰＬＤ２０Ｂを構成し、ステート３は、ＭＰＬＤ２０Ａを構成し、ステート４は、ＭＰＬＤ２０Ｂを構成するように、複数のＭＰＬＤを時系列毎に特定してもよい。このようにしてステート１からステート４へとＭＰＬＤの再構成が繰り替えられることで、段数の多いパイプラインを、小規模のＭＰＬＤで処理することが可能になる。
【０３２６】
ステートマシン９１５は、ステートの起動開始と、ステートのステータスを管理する。ステートマシン９１５は、データパス駆動信号をデータパスブロックに出力することで、ステートを起動し、ステータス信号を受け取ることで、ステートを管理する。
【０３２７】
Ｓ０ステートは外部からの実行トリガの監視と本処理の最後に本ステートに戻ることで、次に実行する制御データを設定する。これによりスケジューラ９４０は投機的実行の分岐失敗をチェックできる。
【０３２８】
〔７．３〕半導体装置の動作処理フロー
次に、半導体装置の動作処理フローについて説明する。
【０３２９】
図７０は、半導体装置の投機実行に関する処理フローの一例を示す図である。まず、構成制御部３００は、システムリセット信号が受信されたか否かを判断する（Ｓ１００１）。システムリセット信号を受信した場合（Ｓ１００１  Ｙｅｓ）、メインメモリ５００から演算器データ９０５及び制御データ９１０を読み出して、キャッシュ部４００Ａ及び４００Ｂにそれぞれ書き込む（Ｓ１００２）。構成制御部３００は、キャッシュ部４００Ａ及び４００Ｂに保持された演算器データ９０５及び制御データ９１０を読み出して、演算器データ９０５及び制御データ９１０を解凍する（Ｓ１００３）。構成制御部３００は、解凍した演算器データ９０５及び制御データ９１０で、ＭＰＬＤ２０Ａ及び２０Ｂをそれぞれ再構成する（Ｓ１００４）。ＭＰＬＤ２０Ａ又は２０Ｂは、ステートマシンのデータパス駆動信号に従い演算を開始する（Ｓ１００５）。構成制御部３００は、静的スケジュール情報９７５に従ってＳ１００３〜Ｓ１００５の処理を繰り返すとともに、投機実行が失敗したか否かを判断する（Ｓ１００６）。投機実行の失敗は、ステートマシンから通知される。投機実行が失敗した場合（Ｓ１００７  エラー）、投機実行の失敗を通知したステートマシンが動作するＭＰＬＤを、分岐先回路を含む演算器データ９０５及び制御データ９１０で再構成する（Ｓ１００８）。
【０３３０】
投機実行が成功した場合（Ｓ１００７  Ｎｏ）、投機実行により再構成されたＭＰＬＤの演算を開始する（Ｓ１００９）。
【０３３１】
図７１は、半導体装置のキャッシュ制御に関する処理フローである。構成制御部３００は、静的スケジュール情報９７５に従って、キャッシュ部４００Ｂに制御データ９１０があるかどうか判断する（Ｓ１１０１）。静的スケジュール情報９７５に特定される制御データ９１０が、キャッシュ部４００Ｂに保持されるなら（Ｓ１１０１  Ｙｅｓ）、Ｓ１００２〜Ｓ１００８の処理を行う（Ｓ１１０２）。静的スケジュール情報９７５に特定される制御データ９１０が、キャッシュ部４００Ｂに保持されていない場合（Ｓ１１０１  Ｎｏ）、構成制御部３００は、メインメモリ５００から制御データ９１０を読み出して（Ｓ１１０３）、読み出した制御データ９１０でＭＰＬＤを再構成する（Ｓ１１０４）。
【符号の説明】
【０３３２】
９      アドレスデコーダ
１２    ＭＬＵＴデコーダ
１３    Ｄフリップフロップ
１５    入出力回路部
２０    ＭＰＬＤ
２２    マルチプレクサ
２４    Ａ／Ｄコンバータ
２５    変数保持部
２６    記憶部
２８    ＭＯＳＦＥＴドライバ
３０    ＭＬＵＴ
４０    記憶素子
１００  半導体装置
１５０  入出力部
２１０  情報処理装置
２１１、２２０  演算処理部
３００  構成制御部
３１０  キャッシュ制御
３２０  システムリセット
３３０  圧縮データ解凍
３４０  スケジューラ
４００Ａ  キャッシュ部
４００Ｂ  キャッシュ部
５００  メインメモリ
５５０  メモリコントローラ
９０２  データパスブロック
９０５  演算器データ
９１０  制御データ
９１５  ステートマシン
９４０  スケジューラ
９７０  プロファイル情報
９７５  静的スケジュール情報
９８０  プログラム
９９０  コンパイルプログラム
【図１】
0005432344.tif 000003
【図２】
0005432344.tif 000004
【図３】
0005432344.tif 000005
【図４】
0005432344.tif 000006
【図５】
0005432344.tif 000007
【図６】
0005432344.tif 000008
【図７】
0005432344.tif 000009
【図８】
0005432344.tif 000010
【図９】
0005432344.tif 000011
【図１０】
0005432344.tif 000012
【図１１】
0005432344.tif 000013
【図１２】
0005432344.tif 000014
【図１３】
0005432344.tif 000015
【図１４】
0005432344.tif 000016
【図１５】
0005432344.tif 000017
【図１６】
0005432344.tif 000018
【図１７】
0005432344.tif 000019
【図１８Ａ】
0005432344.tif 000020
【図１８Ｂ】
0005432344.tif 000021
【図１９】
0005432344.tif 000022
【図２０】
0005432344.tif 000023
【図２１】
0005432344.tif 000024
【図２２】
0005432344.tif 000025
【図２３】
0005432344.tif 000026
【図２４】
0005432344.tif 000027
【図２５】
0005432344.tif 000028
【図２６Ａ】
0005432344.tif 000029
【図２６Ｂ】
0005432344.tif 000030
【図２６Ｃ】
0005432344.tif 000031
【図２６Ｄ】
0005432344.tif 000032
【図２７】
0005432344.tif 000033
【図２８】
0005432344.tif 000034
【図２９】
0005432344.tif 000035
【図３０】
0005432344.tif 000036
【図３１】
0005432344.tif 000037
【図３２】
0005432344.tif 000038
【図３３】
0005432344.tif 000039
【図３４】
0005432344.tif 000040
【図３５】
0005432344.tif 000041
【図３６】
0005432344.tif 000042
【図３７】
0005432344.tif 000043
【図３８】
0005432344.tif 000044
【図３９】
0005432344.tif 000045
【図４０】
0005432344.tif 000046
【図４１】
0005432344.tif 000047
【図４２】
0005432344.tif 000048
【図４３】
0005432344.tif 000049
【図４４】
0005432344.tif 000050
【図４５】
0005432344.tif 000051
【図４６】
0005432344.tif 000052
【図４７】
0005432344.tif 000053
【図４８】
0005432344.tif 000054
【図４９】
0005432344.tif 000055
【図５０】
0005432344.tif 000056
【図５１】
0005432344.tif 000057
【図５２】
0005432344.tif 000058
【図５３】
0005432344.tif 000059
【図５４】
0005432344.tif 000060
【図５５】
0005432344.tif 000061
【図５６】
0005432344.tif 000062
【図５７】
0005432344.tif 000063
【図５８】
0005432344.tif 000064
【図５９】
0005432344.tif 000065
【図６０】
0005432344.tif 000066
【図６１】
0005432344.tif 000067
【図６２】
0005432344.tif 000068
【図６３】
0005432344.tif 000069
【図６４】
0005432344.tif 000070
【図６５】
0005432344.tif 000071
【図６６】
0005432344.tif 000072
【図６７】
0005432344.tif 000073
【図６８】
0005432344.tif 000074
【図６９】
0005432344.tif 000075
【図７０】
0005432344.tif 000076
【図７１】
0005432344.tif 000077