(57)【要約】  本発明は、所定量のデータを記憶するメモリセルを複数備えたメモリセルブロックを複数有する半導体装置１１０である。それぞれのメモリセルブロックは、入力数および出力数が４以上であり、内部に、メモリセルに対する読出アドレスデコーダ、および、外部への出力時に電圧を増幅するセンスアンプを備え、所定のアドレス入力に対して所望の論理値を出力するための真理値表データをメモリセルに記憶し、論理回路として動作するように構成されている。メモリセルは、読出アドレスデコーダに対応して読出ワード線を有しており、その読出ワード線の電圧が印加された場合に、そのとき保持しているデータが読出データ線から読み出される。メモリセルブロック同士は、１つのメモリセルブロックからの４以上の出力がセンスアンプを介して他の４以上のメモリセルブロックへ入力されるように接続されている。
2009001426.tif 000002
【特許請求の範囲】
【請求項１】
所定量のデータを記憶するメモリセルを複数備えたメモリセルブロックを複数有する半導体装置であって、
それぞれの前記メモリセルブロックは、入力数および出力数が４以上であり、内部に、前記メモリセルに対する読出アドレスデコーダ、および、外部への出力時に電圧を増幅するセンスアンプを備え、所定のアドレス入力に対して所望の論理値を出力するための真理値表データを前記メモリセルに記憶し、論理回路として動作するように構成され、
前記メモリセルは、前記読出アドレスデコーダに対応して読出ワード線を有しており、その読出ワード線の電圧が印加された場合に、そのとき保持しているデータが読出データ線から読み出され、
前記メモリセルブロック同士は、１つのメモリセルブロックからの４以上の出力が前記センスアンプを介して他の４以上のメモリセルブロックへ入力されるように接続されている
ことを特徴とする半導体装置。
【請求項２】
前記メモリセルブロックは、入力数および出力数が５または６であり、
前記メモリセルブロック同士は、１つのメモリセルブロックからの当該５または６の出力が前記センスアンプを介して他の４以上のメモリセルブロックへ入力されるように接続されている
ことを特徴とする請求項１に記載の半導体装置。
【請求項３】
それぞれの前記メモリセルブロックは、アドレス入力に対して除算を行った値をランダムパターンとして出力するように真理値表データを前記メモリセルに記憶している
ことを特徴とする請求項１に記載の半導体装置。
【請求項４】
複数の前記メモリセルブロックは、それぞれ同様の大きさの長方形状をしており、アレイ状の配置から少なくとも一部をずらして配置することで、前記メモリセルブロック同士の接続を行っていることを特徴とする請求項１に記載の半導体装置。
【請求項５】
複数の前記メモリセルブロックは、アレイ状に配置され、配線によって前記メモリセルブロック同士の接続を行っていることを特徴とする請求項１に記載の半導体装置。
【請求項６】
前記メモリセルブロックのメモリセルが前記真理値表データを記憶していないときは、記憶装置として動作することを特徴とする請求項１に記載の半導体装置。
【請求項７】
前記メモリセルブロックは、
動作する前記メモリセルのエリアが２分されており、
前記読出アドレスデコーダにおける特定のアドレス選択線が切り替えられたときに、前記動作するメモリセルのエリアが切り替えられ、２種類の論理回路としての動作、あるいは、論理回路としての動作と記憶装置としての動作、のいずれかが瞬時に切り替わる
ことを特徴とする請求項１に記載の半導体装置。
【請求項８】
複数の前記メモリセルブロックのうち、一部の前記メモリセルブロックのメモリセルが記憶する真理値表データが書き換えられた場合、
その書き換えられた真理値表データにしたがって動作を変更することを特徴とする請求項１に記載の半導体装置。
【請求項９】
システムＬＳＩを構成する請求項１の半導体装置であって、
自己テストし、かつ、前記システムＬＳＩにおける他の論理回路をテストすることを特徴とする半導体装置。
【請求項１０】
動作記述されたＣ言語プログラムによってコンパイルされることを特徴とする請求項１に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリを論理回路として動作させることができる半導体装置に関する。
【背景技術】
【０００２】
従来、ＬＳＩ（Large Scale Integration）などの半導体装置は、機能設計、論理回路設計、ウェハ製造、組立などの多くの工程を経て製造されていた。そして、その製造工程は、同一製品の多量生産には適していたが、多種類の製品の少量ずつの生産にはコストがかかるため適していなかった。【０００３】
そこで、単一の半導体装置を多量に生産しても顧客サイドで別々の製品として使い分けることができるように、ＦＰＧＡ（Field Programmable Gate Array）などの製造技術も開発された。ＦＰＧＡとは、製造した後に論理回路をプログラムできるＬＳＩなどの半導体装置のことである。
しかし、ＦＰＧＡは、論理回路、配線、スイッチなど多種の部品から構成されるため、半導体プロセス上の配線の多層構造や高度な製造技術を必要とするという問題があった。【０００４】
そして、その１つの解決手法として、メモリを論理回路として動作させる技術が開発された。
たとえば、特許文献１では、複数のメモリを配線接続し、所定のアドレス入力に対して所定のデータを出力するように、メモリに所定の真理値を書き込むことで論理回路として動作する半導体装置に関する技術が開示されている。【０００５】
また、特許文献２では、ＳＲＡＭ（Static Random Access Memory）などのメモリに真理値表データを書き込み、アドレスを入力とし、出力を出力値とすることで論理回路として動作する半導体装置に関する技術が開示されている。
【特許文献１】特開２００３−１４９３００号公報
【特許文献２】特開２００３−２２４４６８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の半導体装置では、メモリの真理値を書き換える場合には、配線を接続しなおさなければならないという問題があった。
また、特許文献２の半導体装置では、所定量のデータを記憶するメモリセルを複数集めたメモリセルブロックがアレイ状に並べられ、１つのメモリセルブロックからのデータは、隣接する４つのメモリセルブロックのうち２つ（たとえば上下左右のうち右と下）にしか出力されないため、データを帰還させる（元のメモリセルブロックに戻す）論理回路として動作させることが困難であった。【０００７】
そこで、本発明は、前記問題点に鑑みてなされたものであり、論理回路として動作するメモリであり、メモリの真理値を書き換えても配線を接続しなおす必要がなく、また、データを帰還させることができる半導体装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記課題を解決するために、本発明は、所定量のデータを記憶するメモリセルを複数備えたメモリセルブロックを複数有する半導体装置である。それぞれのメモリセルブロックは、入力数および出力数が４以上であり、内部に、メモリセルに対する読出アドレスデコーダ、および、外部への出力時に電圧を増幅するセンスアンプを備え、所定のアドレス入力に対して所望の論理値を出力するための真理値表データをメモリセルに記憶し、論理回路として動作するように構成されている。メモリセルは、読出アドレスデコーダに対応して読出ワード線を有しており、その読出ワード線の電圧が印加された場合に、そのとき保持しているデータが読出データ線から読み出される。メモリセルブロック同士は、１つのメモリセルブロックからの４以上の出力がセンスアンプを介して他の４以上のメモリセルブロックへ入力されるように接続されている。
【発明の効果】
【０００９】
本発明によれば、論理回路として動作するメモリであり、メモリの真理値を書き換えても配線を接続しなおす必要がなく、また、データを帰還させることができる半導体装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】半導体装置と情報処理装置の構成図である。
【図２】図１の半導体装置を構成する記憶素子であるメモリセルの構成図である。
【図３】メモリセルブロックの構成図である。
【図４】半導体装置における読出ポートの接続状況を示した図である。
【図５】半導体装置の内部構造図である。
【図６】３ビット加算器の構成例である。
【図７】（ａ）はメモリセルブロック３００の簡略図、（ｂ）はメモリセルブロック３００ｄ、３００ｅおよび３００ｆに格納する真理値表である。
【図８】（ａ）はメモリセルブロック３００の簡略図、（ｂ）はメモリセルブロック３００ｇ、３００ｊ、３００ｋおよび３００ｌに格納する真理値表である。
【図９】（ａ）はメモリセルブロック３００の簡略図、（ｂ）はメモリセルブロック３００ｈおよび３００ｉに格納する真理値表である。
【図１０Ａ】ｎ値が「２」の場合のメモリセルブロックの構成例を示す図である。
【図１０Ｂ】ｎ値が「２」の場合の半導体装置１１０の構成例を示す図である。
【図１１Ａ】ｎ値が「３」の場合のメモリセルブロックの構成例を示す図である。
【図１１Ｂ】ｎ値が「３」の場合のメモリセルブロックの構成例を示す図である。
【図１１Ｃ】ｎ値が「３」の場合の半導体装置１１０の構成例を示す図である。
【図１２Ａ】ｎ値が「６」の場合のメモリセルブロックの構成例を示す図である。
【図１２Ｂ】ｎ値が「６」の場合の半導体装置１１０の構成例を示す図である。
【図１３Ａ】ｎ値が「８」の場合のメモリセルブロックの構成例を示す図である。
【図１３Ｂ】ｎ値が「８」の場合の半導体装置１１０の構成例を示す図である。
【図１４Ａ】ｎ値が「２．５」の場合のメモリセルブロックの構成例を示す図である。
【図１４Ｂ】ｎ値が「２．５」の場合の半導体装置１１０の構成例を示す図である。
【図１５】代数的除算の例を示す図である。
【図１６】必要なメモリ容量とクリティカルパスのセル数の大小比較を示す表である。
【図１７】代数的除算を利用したテスタなどの構成図である。
【図１８】半導体装置に、論理回路として動作させるためのビットデータを搭載するときの処理の流れを示すフローチャートである。
【符号の説明】
【００１１】
１００  情報処理装置
１１０  半導体装置
２００  メモリセル
２０１，２０２  読出ワード線
２１１  書込ワード線
２２１，２２２  読出データ線
２３１，２３２  書込データ線
３００  メモリセルブロック
３０１  セレクト線
３１１  読出アドレスデコーダ
４０１  書込／読出回路
６０１，７０１，８０１  真理値表
１４００  大規模メモリ
１９００  テスタ
【発明を実施するための最良の形態】
【００１２】
以下、本発明の実施形態に係る半導体装置について、図面を参照しながら説明する。
図１は、半導体装置と情報処理装置の構成図である。情報処理装置１００は、コンピュータ装置であり、キーボードなどの入力部１０１、ハードディスクなどの記憶部１０２、ＲＡＭ（Random Access Memory）などのメモリ１０３、ＣＲＴ（Cathode Ray Tube）などの出力部１０４、通信装置である通信部１０５、および、ＣＰＵ（Central Processing Unit）などの処理部１０６を備えている。
なお、情報処理装置１００で作成するビットデータ（図１８のステップＳ１２０４で後記）を、図示しないＲＯＭ（Read Only Memory）で保持するようにしてもよい。【００１３】
半導体装置１１０は、情報処理装置１００の通信部１０５と接続されている。半導体装置１１０は、ハードウェア的には、たとえば、通常のＳＲＡＭ（Static Random Access Memory）と同様の記憶装置であり、詳細は図２以降で説明する。【００１４】
図２は、図１の半導体装置１１０を構成する記憶素子であるメモリセルの構成図である。メモリセル２００は、読出ワード線２０１、書込ワード線２１１、読出データ線２２１，２２２、書込データ線２３１，２３２、ゲート２４１，２４２，２６１，２６２およびフリップフロップ２７１を備えて構成される。【００１５】
なお、ゲート２４１，２４２，２６１および２６２は、Ｎ−ＭＯＳ（Negative-Metal Oxide Semiconductor）で構成するものとしているが、その代わりにＰ−ＭＯＳ（Positive-Metal Oxide Semiconductor）を用いて構成してもよく、さらに、Ｎ−ＭＯＳとＰ−ＭＯＳの複合ゲートとしてもよい。その場合、周辺の回路を必要に応じて適宜変更することで対応すればよい。【００１６】
読出ワード線２０１は、メモリセル２００のデータを外部から読み出すときに電圧が印加される配線である。読出ワード線２０１の電圧が印加されるとゲート２４１とゲート２４２が開く。【００１７】
書込ワード線２１１は、メモリセル２００に外部からデータを書き込むときに電圧が印加される配線である。書込ワード線２１１の電圧が印加されると、ゲート２６１とゲート２６２が開く。【００１８】
読出データ線２２１，２２２は、読出ワード線２０１に所定の電圧が印加され、ゲート２４１および２４２が開いたときに、フリップフロップ２７１に保持されているデータを読み出すための配線である。なお、読出データ線２２１からデータ「０」が読み出されたときは読出データ線２２２からはデータ「１」が読み出され、読出データ線２２１からデータ「１」が読み出されたときは読出データ線２２２からはデータ「０」が読み出される、いわゆる差動信号の動作をするようになっている。【００１９】
書込データ線２３１，２３２は、書込ワード線２１１の電圧が印加され、ゲート２６１とゲート２６２が開いたときに、フリップフロップ２７１にデータを書き込むための配線である。書込データ線２３１からデータ「０」を書き込むときは書込データ線２３２からはデータ「１」を書き込み、書込データ線２３１からデータ「１」を書き込むときは書込データ線２３２からはデータ「０」を書き込むようになっている。
フリップフロップ２７１は、上記の意味でのメモリセル２００に記憶される「０」か「１」のデータを保持する記憶回路である。【００２０】
図３は、図１の半導体装置１１０における内部構造の一部のメモリセルブロックの構成図である（適宜図２参照）。
メモリセルブロック３００は、アレイ状に並べて接続された複数のメモリセル２００、読出アドレスデコーダ３１１、２つのセンスアンプ６００を含んで構成される。なお、センスアンプ６００は、メモリセル２００から出力される微弱な電圧を増幅するための回路であり、これによりメモリセルブロック３００間に流れる電流が安定する。また、センスアンプ６００は、ｙアドレス（横方向のアドレス）に関する読出アドレスデコーダの役割も兼ねる。【００２１】
読出アドレスデコーダ３１１は、アドレス入力線３２２から複数のアドレス差動信号（Ａ０と／Ａ０、Ａ１と／Ａ１）を受ける。
なお、特許請求の範囲における、入力数および出力数の「４」というのは、差動信号の場合であれば「４対」という意味に相当し、差動信号の場合でなければ（単一配線の場合）「４本」という意味に相当する。他の数値に関しても同様である。【００２２】
メモリセルブロック３００では、最上段の外側のメモリセル２００、すなわち、メモリセル２００（Cell31,0）とメモリセル２００（Cell31,3）の上側と、最下段の内側のメモリセル２００、すなわち、メモリセル２００（Cell0,1）とメモリセル２００（Cell0,2）の下側において、読出データ線２２１，２２２が、センスアンプ６００を介して他のメモリセルブロック３００（不図示）に接続されるように構成されている。また、センスアンプ６００には、アドレス入力線３２３からｙアドレスの差動信号（Ａ２と／Ａ２、Ａ３と／Ａ３）が入力される。【００２３】
メモリセルブロック３００では、最上段の内側のメモリセル２００、すなわち、メモリセル２００（Cell31,1）とメモリセル２００（Cell31,2）の上側と、最下段の外側のメモリセル２００、すなわち、メモリセル２００（Cell0,0）とメモリセル２００（Cell0,3）の下側において、読出データ線２２１，２２２が切断されている。【００２４】
すなわち、メモリセルブロック３００において、読出データ線は、外側の複数対が上方に、また、内側の複数対が下方に、センスアンプ６００を介して出力するように構成されている。このようにすることで、メモリセルブロック３００の出力（読出し）の規模を必要最小限に抑え、各種データ処理の負担を軽くすることができ、また、複数の方向に複数の出力を行うことができる。【００２５】
メモリセルブロック３００では、これらのアドレス入力線３２２、アドレス入力線３２３およびセレクト線（特定のアドレス選択線）３０１（ＳＥＬ）からの入力により、特定のメモリセル２００における情報を読み出すことができる。【００２６】
また、セレクト線３０１にはインバータ３０２が備えられている。さらに、読出アドレスデコーダ３１１には複数個の論理回路（ＡＮＤ回路やＮＡＮＤ回路など）３７０が備えられている。また、書込ワード線３７１（図２の書込ワード線２１１に対応）は、書込アドレスデコーダ４１１（図５参照）に接続されている。【００２７】
図３に示すように、たとえば、セレクト線３０１から「１」が入力されたときは、メモリセルブロック３００におけるメモリセル２００の上半分が動作し、セレクト線３０１から「０」が入力されたときは、メモリセルブロック３００におけるメモリセル２００の下半分が動作するようになっている。【００２８】
したがって、たとえば、メモリセルブロック３００におけるメモリセル２００の上半分を加算器、メモリセル２００の下半分を減算器として動作するように設定しておけば、セレクト線３０１からの信号を切り替えるだけで、瞬時に、加算器と減算器の切り替えを行うことができる。また、加算器、減算器だけでなく、乗算器、除算器に関しても同様である。さらに、同様にして、それ以外に、加算器と通常の記憶装置との切り替えなども行うことができる。【００２９】
なお、メモリセルブロック３００に入力する信号、および、メモリセルブロック３００から出力される信号は、差動信号であってもよいし、単一の信号であってもよい。【００３０】
図４は、半導体装置１１０（図１参照）における読出ポート（図３の読出データ線の上下２出力ずつとアドレス入力線３２２，３２３からの２入力ずつ）の接続状況を示した図である。また、図４では、半導体装置１１０を平面視した場合の左上の一部を表わしている。【００３１】
メモリセルブロック３００ｄ〜３００ｌにおいて、入力Ａ０（以下「Ａ０」という：Ａ１〜Ａ３も同様）は表記の簡略のために図３のＡ０と／Ａ０を合わせたものを示すものとし、Ａ１〜Ａ３についても同様である。【００３２】
また、メモリセルブロック３００ｄ〜３００ｌにおいて、出力Ｄ０（以下「Ｄ０」という：Ｄ１〜Ｄ３も同様）は表記の簡略のために図３のメモリセル２００（Cell31,0）の読出データ線２つを合わせたものを示すものとし、Ｄ１〜Ｄ３についても同様である。
メモリセルブロック３００ｄ〜３００ｌのＡ０〜Ａ３およびＤ０〜Ｄ３は、図４に示すように接続される。【００３３】
なお、ドライバ回路４２０は、外部装置から本デバイス（半導体装置１１０）に入力される信号を差動信号に変換するものである。また、アンプ４３０は、入力した差動信号を通常の信号に増幅および変換して外部装置に出力するものである。【００３４】
このような配線にすることで、半導体装置１１０において、データの帰還を容易に行うことができる。具体的には、たとえば、メモリセルブロック３００ｄのＤ３からメモリセルブロック３００ｇのＡ１にデータを送る場合、メモリセルブロック３００ｇにおいてＡ１から入ったデータをＤ１から出力するようにメモリセルブロック３００ｇに真理値表を書き込んでおけば、そのデータをメモリセルブロック３００ｄのＡ３に帰還させることができる。【００３５】
また、メモリセルブロック３００ｄ〜３００ｌに書き込む真理値表を変更するだけで、配線を変更することなく、半導体装置１１０を様々な論理回路として動作させることができる。
なお、このような配線の折れ曲がりの回数や具合は、特にこの図４に限定されることなく、適宜変更が可能である。【００３６】
図５は、半導体装置１１０（図１参照）の内部構造図である。それぞれのメモリセルブロック３００はアレイ状に並べられ、左側に書込アドレスデコーダ４１１、下側に書込／読出回路４０１が配置され、そららが図のように接続される。つまり、図５は、図４と同様の半導体装置１１０において、読出ポートの接続状況以外の様子を示した図である。【００３７】
書込アドレスデコーダ４１１は、メモリセルブロック３００にデータを書き込む際に、メモリセルブロック３００のｘアドレス（図５の半導体装置１１０の縦方向のアドレス）を特定するための装置である。
書込アドレスデコーダ４１１には、複数のメモリセルブロック３００のうちのいずれのメモリセルブロック３００かを特定するためのｘアドレスが上位アドレス（この場合はＡ４ｗ以降のＡ５ｗ，Ａ６ｗ，・・・）に入力され、その特定されたメモリセルブロック３００の内部（メモリセル２００）を特定するためのｘアドレスが下位アドレス（この場合はＡ０ｗ〜Ａ３ｗ）から入力される。【００３８】
また、書込／読出回路４０１は、データの読み書きを行うメモリセルブロック３００のｙアドレスを特定し、さらに、特定されたメモリセルブロック３００に対してデータの読み書きを行う装置である。
具体的には、書込／読出回路４０１には、複数のメモリセルブロック３００のうちのいずれかのメモリセルブロック３００かを特定するためのｙアドレス（図５の半導体装置１１０の横方向のアドレス）が（この場合はＡｙｗ２に）入力され、その特定されたメモリセルブロック３００の内部（メモリセル２００）を特定するためのｙアドレスが（この場合はＡｙｗ０，Ａｙｗ１に）入力される。また、書込／読出回路４０１には、入力４０２から複数のビット数（この場合は４ビット）のデータが入力される。【００３９】
このようにして、特定のメモリセルブロック３００における特定のメモリセル２００を適宜選択し、真理値表データの書き換えなどを行うことができる。
すなわち、半導体装置１１０は、複数のメモリセルブロック３００のうち、一部のメモリセルブロック３００のメモリセル２００が記憶する真理値表データを書き換えられた場合、その書き換えられた真理値表データにしたがって動作を変更できる。【００４０】
続いて、図６〜図９を参照しながら、半導体装置１１０（図４参照）を３ビット加算器として使用する場合の例について説明する。
図６は、３ビット加算器の構成例である。この図６におけるメモリセルブロック同士の接続は、図４の場合と同じである。【００４１】
ここでは、３ビットの２数Ｅ，Ｆを加算し、その結果をＹとする場合について説明する。なお、Ｅの最下位ビットをＥ０、次のビットをＥ１、最上位ビットをＥ２とする。また、Ｆの最下位ビットをＦ０、次のビットをＦ１、最上位ビットをＦ２とする。さらに、Ｙの最下位ビットをＹ０、次のビットをＹ１、最上位ビットをＹ２とする。また、最下位ビットの加算による桁上がりをＣ０、次のビットの加算による桁上がりをＣ１、最上位のビットの加算による桁上がりをＣ２とする。また、各々の信号は差動であるが、記載上簡略して記述した。【００４２】
メモリセルブロック３００ｄでは、Ａ０にＥ０が、Ａ１にＦ０が入力され、加算を行い、Ｄ３からＹ０を出力し、Ｄ２からＣ０を出力する。
メモリセルブロック３００ｅでは、Ａ０にＥ１が、Ａ１にＦ１が入力され、また、Ａ３にＣ０が入力され、加算を行い、Ｄ３からＹ１を出力し、Ｄ２からＣ１を出力する。
メモリセルブロック３００ｆでは、Ａ０にＥ２が、Ａ１にＦ２が入力され、また、Ａ３にＣ１が入力され、加算を行い、Ｄ３からＹ２を出力し、Ｄ２からＣ２を出力する。【００４３】
メモリセルブロック３００ｄのＤ３から出力されたＹ０は、図のような経路（太線）を経て、メモリセルブロック３００ｊのＤ３から出力される。
メモリセルブロック３００ｅのＤ３から出力されたＹ１は、図のような経路（太線）を経て、メモリセルブロック３００ｋのＤ３から出力される。
メモリセルブロック３００ｆのＤ３から出力されたＹ２は、図のような経路（太線）を経て、メモリセルブロック３００ｌのＤ３から出力される。
このようにして、加算結果であるＹ０、Ｙ１およびＹ２を得ることができる。【００４４】
図７において、（ａ）はメモリセルブロック３００の簡略図、（ｂ）はメモリセルブロック３００ｄ、３００ｅおよび３００ｆに格納する真理値表である（適宜図６参照）。
図７（ａ）に示すように、メモリセルブロック３００において、Ａ０〜Ａ３に入力があると、その入力に応じてＤ０〜Ｄ３から真理値表に定義されたデータが出力される。【００４５】
図７（ｂ）に示すように、Ａ０，Ａ１，Ａ３にＥ（Ｅ０〜Ｅ２），Ｆ（Ｆ０〜Ｆ２），Ｃin（Ｃ０〜Ｃ２）の入力があると、それら３つの加算結果として、そのビットの値をＤ３にＹ（Ｙ０〜Ｙ２）として出力し、桁上がりをＤ２にＣout（Ｃ０〜Ｃ２）として出力する。【００４６】
なお、Ｄ０とＤ１は、ここでは使用しないため、すべての場合で「０」を出力するようにしている。
また、上から１段目〜４段目と５段目〜８段目では、Ａ２以外の真理値が同じになっているが、これは、Ａ２に「０」と「１」のいずれのデータが入力されても正確な出力結果が得られるようにするためである。９段目〜１２段目と１３段目〜１６段目についても同様である。【００４７】
図８において、（ａ）はメモリセルブロック３００の簡略図、（ｂ）はメモリセルブロック３００ｇ、３００ｊ、３００ｋおよび３００ｌに格納する真理値表である（適宜図６参照）。
図８（ａ）に示すように、メモリセルブロック３００において、Ａ０〜Ａ３に入力があると、その入力に応じてＤ０〜Ｄ３から真理値表に定義されたデータが出力される。【００４８】
図８（ｂ）に示すように、Ａ１にＹ（Ｙ０〜Ｙ２）の入力があると、その値をＤ３にそのまま出力する。
なお、Ｄ０〜Ｄ２は、ここでは使用しないため、すべての場合で「０」を出力するようにしている。【００４９】
また、実際にはＡ１からＤ３へ「０」→「０」、「１」→「１」という２種類（２段分）の真理値表があればよいのであるが、Ａ０、Ａ２、Ａ３に「０」と「１」のいずれのデータが入力されても正確な出力結果が得られるように、１６段の真理値表となっている。【００５０】
図９において、（ａ）はメモリセルブロック３００の簡略図、（ｂ）はメモリセルブロック３００ｈおよび３００ｉに格納する真理値表である（適宜図６参照）。
図９（ａ）に示すように、メモリセルブロック３００において、Ａ０〜Ａ３に入力があると、その入力に応じてＤ０〜Ｄ３から真理値表に定義されたデータが出力される。【００５１】
図９（ｂ）に示すように、Ａ０にＣ（Ｃ０〜Ｃ２）の入力があると、その値をＤ１にそのまま出力する。また、Ａ１にＹ（Ｙ０〜Ｙ２）の入力があると、その値をＤ３にそのまま出力する。
なお、Ｄ０とＤ２は、ここでは使用しないため、すべての場合で「０」を出力するようにしている。【００５２】
また、図８（ｂ）の場合と同様、Ａ２とＡ３に「０」と「１」のいずれのデータが入力されても正確な出力結果が得られるようになっている。
このようにして、半導体装置１１０は、加算器として使用することができ、また、同様に、減算器、乗算器、除算器として使用することもできる。【００５３】
次に、図１０Ａ〜図１４Ｂを参照しながら、本実施形態の半導体装置１１０の構成例について説明する（適宜他図参照）。なお、以下、メモリセルブロック３００からの出力数を２で割った値を「ｎ値」と呼ぶ。つまり、ｎ値とは、メモリセルブロック３００の上下それぞれからの出力数の平均値を示す。【００５４】
図１０Ａは、ｎ値が「２」の場合のメモリセルブロックの構成例を示す図である。メモリセルブロック３００Ｚは、読出アドレスデコーダ３１１、２つのセンスアンプ６００、および、４つのメモリセルマット５００Ｚを備えて構成される。メモリセルマット５００Ｚは、３２（８×４）個のメモリセル２００から構成される。メモリセルブロック３００Ｚは、左右から２つずつの入力を受け、上下から２つずつの出力を行う。【００５５】
図１０Ｂは、ｎ値が「２」の場合の半導体装置１１０の構成例を示す図である。メモリセルブロック３００Ｚをこのように相互接続することで、各メモリセルブロック３００Ｚは、４つの入力に対し４つの出力を行うことができる。【００５６】
図１１Ａは、ｎ値が「３」の場合の一方のメモリセルブロックの構成例を示す図である。メモリセルブロック３００Ａは、読出アドレスデコーダ３１１、２つのセンスアンプ６００、および、６つのメモリセルマット５００Ａを備えて構成される。メモリセルマット５００Ａは、１２８（１６×８）個のメモリセル２００から構成される。メモリセルブロック３００Ａは、左右から３つずつの入力を受け、上から４つ、下から２つの出力を行う。【００５７】
図１１Ｂは、ｎ値が「３」の場合の他方のメモリセルブロックの構成例を示す図である。メモリセルブロック３００Ｂは、読出アドレスデコーダ３１１、２つのセンスアンプ６００、および、６つのメモリセルマット５００Ａを備えて構成される。メモリセルブロック３００Ｂは、左右から３つずつの入力を受け、上から２つ、下から４つの出力を行う。【００５８】
図１１Ｃは、ｎ値が「３」の場合の半導体装置１１０の構成例を示す図である。メモリセルブロック３００Ａ，３００Ｂをこのように相互接続することで、各メモリセルブロック３００Ａ，３００Ｂは、６つの入力に対し６つの出力を行うことができる。【００５９】
図１２Ａは、ｎ値が「６」の場合のメモリセルブロックの構成例を示す図である。メモリセルブロック３００Ｃは、読出アドレスデコーダ３１１、２つのセンスアンプ６００、および、１２個のメモリセルマット５００Ｃを備えて構成される。メモリセルマット５００Ｃは、８１９２（１２８×６４）個のメモリセル２００から構成される。メモリセルブロック３００Ｃは、左右から６つずつの入力を受け、上下から６つずつの出力を行う。【００６０】
図１２Ｂは、ｎ値が「６」の場合の半導体装置１１０の構成例を示す図である。メモリセルブロック３００Ｃをこのように相互接続することで、各メモリセルブロック３００Ｃは、１２個の入力に対し１２個の出力を行うことができる。【００６１】
図１３Ａは、ｎ値が「８」の場合のメモリセルブロックの構成例を示す図である。メモリセルブロック３００Ｄは、読出アドレスデコーダ３１１、２つのセンスアンプ６００、および、１６個のメモリセルマット５００Ｄを備えて構成される。メモリセルマット５００Ｄは、１３１０７２（５１２×２５６）個のメモリセル２００から構成される。メモリセルブロック３００Ｄは、左右から８つずつの入力を受け、上下から８つずつの出力を行う。【００６２】
図１３Ｂは、ｎ値が「８」の場合の半導体装置１１０の構成例を示す図である。メモリセルブロック３００Ｄをこのように相互接続することで、各メモリセルブロック３００Ｄは、１６個の入力に対し１６個の出力を行うことができる。【００６３】
図１４Ａは、ｎ値が「２．５」の場合のメモリセルブロックの構成例を示す図である。メモリセルブロック３００Ｅは、読出アドレスデコーダ３１１、２つのセンスアンプ６００、および、５個のメモリセルマット５００Ｅを備えて構成される。メモリセルマット５００Ｅは、６４（８×８）個のメモリセル２００から構成される。メモリセルブロック３００Ｅは、左から２つ、右から３つの入力を受け、上から３つ、下から２つの出力を行う。【００６４】
図１４Ｂは、ｎ値が「２．５」の場合の半導体装置１１０の構成例を示す図である。メモリセルブロック３００Ｅをこのように相互接続することで、各メモリセルブロック３００Ｅは、５個の入力に対し５個の出力を行うことができる。【００６５】
これらの、ｎ値が「２」、「２．５」、「３」、「６」および「８」の場合の半導体装置１１０によって代数的除算を行う場合について、図１５〜図１７を参照しながら説明する。なお、図６〜図９で説明した加算器の場合と同様にして、ｎ値が「２」、「２．５」、「３」、「６」および「８」の場合の半導体装置１１０において代数的除算機能を実現することができる。つまり、半導体装置１１０において、それぞれのメモリセルブロック３００が、アドレス入力に対して代数的除算を行った値をランダムパターンとして出力するように真理値表データをメモリセル２００に記憶しておけばよい。【００６６】
図１５は、代数的除算の例を示す図である。ここで、代数的除算とは、「（被除数）＝（除数）×（商）＋（剰余）」という関係を満たす一般の除算とは異なるもので、除算における途中の計算での減算時に、各位について「１−１＝０」「１−０＝１」「０−１＝１」「０−０＝０」という計算を行い、繰り上がりや繰り下がりを行わない除算のことである。このように、代数的除算は、繰り上がりや繰り下がりを行わないことにより、計算が簡単になり、２進数のランダムパターンの発生に適している。なお、途中の計算時、繰り上がりや繰り下がりを行わないので、たとえば、「１−１＝０」の代わりに「１＋１＝０」という演算規則を適用してもかまわなく（計算結果は同一）、他の演算規則に関しても同様である。また、代数的除算でなく、通常の除算を行うことでランダムパターンを発生するようにしてもよい。【００６７】
図１５に示すように、このような代数的除算によれば、被除数「１００１００１１０１００１０・・・」を除数「１０１０」で割った場合、商は「０００１０１１１１０００１・・・」となり、剰余は「０１１０」となる。【００６８】
図１６は、ｎ値が「２」、「２．５」、「３」、「６」および「８」の場合の半導体装置１１０によって代数的除算を行う場合における、必要なメモリ容量とクリティカルパスの数の大小比較を示す表である。なお、クリティカルパスの数とは、演算時に使用するメモリセルブロック３００のうち最も長い経路をとった場合のメモリセルブロック３００の数のことである。【００６９】
図１６に示すように、必要なメモリ容量は、ｎ値が「２」、「２．５」、「３」、「６」および「８」の場合の半導体装置１１０において、ｎ値が「２．５」のときが最小となり、ｎ値が「２」および「３」のときがそれよりも少し大きな値となる。
一方、クリティカルパスのセル数は、ｎ値が「２」のときに最大となるが、ｎ値がそれ以外のときはほぼ同等である。
つまり、半導体装置１１０によって代数的除算を行う場合、ｎ値は「２．５」（メモリセルブロック３００における入出力数が「５」）または「３」（メモリセルブロック３００における入出力数が「６」）のときが効率的であることがわかる。【００７０】
なお、半導体装置１１０の全体に対するセンスアンプ６００の面積比率を小さくしたい場合などは、ｎ値を「６」あるいは「８」などとすればよく、つまり、動作の規模や速度、センスアンプ６００の面積比率などのニーズに合わせて、ｎ値を適宜自由に選択することができる。【００７１】
次に、図１７を参照しながら、代数的除算を利用したテスタに半導体装置を使用した場合について説明する。図１７は、そのテスタなどの構成図である。なお、テスタ１９００は、テスト対象ＬＳＩ１９１０（他の半導体装置）の動作確認を行う装置である。
テスタ１９００は、大規模メモリ１４００（記憶装置）、半導体装置１１０、ドライバ１９０１、コンパレータ１９０２、処理部１９０３および剰余生成部１９０４を備えて構成される。【００７２】
大規模メモリ１４００は、半導体装置１１０に対して除数を提供する。
半導体装置１１０は予め被除数に対応したメモリセル２００の構成となっている。
除数を入力した半導体装置１１０は、商（ランダムパターン）をドライバ１９０１に出力し、剰余Ａ（剰余の正解値）をコンパレータ１９０２に出力する。【００７３】
ドライバ１９０１は駆動回路であり、半導体装置１１０から商を受信するとテスト対象ＬＳＩ１９１０に対してその商に基づいた信号を送信する。
テスト対象ＬＳＩ１９１０は、ドライバ１９０１から入力した商に基づいて動作し、出力値を剰余生成部１９０４に出力する。【００７４】
剰余生成部１９０４は、テスト対象ＬＳＩ１９１０から入力した出力値を変換し、剰余Ｂとする。
コンパレータ１９０２は比較器であり、半導体装置１１０から入力した剰余Ａと、剰余生成部１９０４から入力した剰余Ｂとを比較する。
処理部１９０３は、コンパレータ１９０２からの出力を受けて処理を行う装置であり、たとえば、ＣＰＵ（Central Processing Unit）によって実現され、剰余Ａと剰余Ｂが同じであるときのコンパレータ１９０２からの出力を受けたときにテスト対象ＬＳＩ１９１０が「正常」と判定する。【００７５】
また、特に図示しないが、テスタ１９００は、直流電源、タイミングジェネレータなどを、必要に応じて備えるものとする。
このようにして、代数的除算を利用したテスタに半導体装置１１０を適用することができる。なお、半導体装置１１０がいわゆるパターン発生器に相当し、剰余生成部１９０４がいわゆるパターン圧縮器に相当する。【００７６】
次に、半導体装置１１０の動作プログラムについて説明する。
なお、従来のＦＰＧＡの製造では、たとえば、Ｃ言語プログラムを作成して、それからＨＤＬ（Hardware Description Language）を作成する。そのＨＤＬから論理合成を行い、論理回路を作成する。その論理回路から、該当するＦＰＧＡに論理の配置と配置配線を行う。つまり、複雑で高度な作業工程が必要であった。
一方、本実施形態の半導体装置は、メモリであり記憶装置であるので、Ｃ言語プログラムをコンパイルしてそのデータを真理値として搭載できるため、作業工程が単純で容易となる。また、本実施形態の半導体装置は、記憶装置であるため、異なった論理回路を実現する場合でも、配線はそのままで、メモリセル２００に書き込む真理値表データを書き換えるだけで済む。【００７７】
これを、図１８を参照しながら、より具体的に説明する（適宜図１参照）。図１８は、半導体装置に、論理回路として動作させるためのビットデータを搭載するときの処理の流れを示すフローチャートである。【００７８】
まず、情報処理装置１００は、実現したい機能を記述したＣ言語プログラムを入力部１０１から入力し（ステップＳ１２０１）、記憶部１０２に記憶する。
また、記憶部１０２には、あらかじめ、各種機能（加算、減算など）のプログラムが記憶されているものとする。【００７９】
情報処理装置１００の操作者は、記憶部１０２に記憶されているプログラムのうち必要なものを引用するため、入力部１０１を用いて宣言文（Include文）を追加する（ステップＳ１２０２）。
処理部１０６は、Include文が追加されたＣ言語プログラムに基づいて真理値表（図７の真理値表６０１など）を作成し（ステップＳ１２０３）、その真理値表に基づいてビットデータを作成し（ステップＳ１２０４）、さらに、通信部１０５を介して半導体装置１１０にそのビットデータを搭載する（ステップＳ１２０５）。
このように、本実施形態の半導体装置１１０によれば、半導体装置１１０を論理回路として動作させるための作業が簡単に済む。【００８０】
このようにして、本実施形態によれば、論理回路として動作するメモリであり、メモリの真理値を書き換えても配線を接続しなおす必要がなく、また、データを帰還させることができる半導体装置を実現することができる。【００８１】
また、本実施形態の半導体装置によれば、実際の論理回路を使用していないので、メモリの一部に故障が発生しても、その箇所の使用を避けるなどしてその対応（救済）を容易に行うことができる。【００８２】
さらに、本実施形態の半導体装置によれば、複数のメモリを使用し、そのうちのいくつかのメモリにテストプログラムを入れることで、他の１つのメモリをテストすることができる。そして、テスト終了後は、テストプログラムを入れたメモリからテストプログラムを消去することで、それらのメモリを通常のメモリとして使用することができる。【００８３】
また、メモリを内蔵するシステムＬＳＩで、そのメモリを本実施形態の半導体装置の構造にして自己テストし、かつ、その部分にＣ言語で記述されるテストプログラムを記述してテスト論理回路を構成することで、システムＬＳＩにおける他の論理回路をテストすることができる。
さらに、１つのメモリセルブロックにおけるセンスアンプの数は、２個に限定されず、１個や３個以上であってもよい。【００８４】
以上で実施形態の説明を終えるが、本発明の態様はこれらに限定されるものではない。
たとえば、本発明の半導体装置は、ＳＲＡＭに代えて、ＤＲＡＭ（Dynamic Random Access Memory）やフラッシュメモリを用いて実現してもよい。
また、メモリでの性能向上のためのプリチャージ機能等の機能搭載を制限するものではない。
さらに、メモリセルは、読出ワード線を２本使ったいわゆるダブルゲート方式のものであってもよい。
その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【図１】
2009001426.tif 000003
【図２】
2009001426.tif 000004
【図３】
2009001426.tif 000005
【図４】
2009001426.tif 000006
【図５】
2009001426.tif 000007
【図６】
2009001426.tif 000008
【図７】
2009001426.tif 000009
【図８】
2009001426.tif 000010
【図９】
2009001426.tif 000011
【図１０Ａ】
2009001426.tif 000012
【図１０Ｂ】
2009001426.tif 000013
【図１１Ａ】
2009001426.tif 000014
【図１１Ｂ】
2009001426.tif 000015
【図１１Ｃ】
2009001426.tif 000016
【図１２Ａ】
2009001426.tif 000017
【図１２Ｂ】
2009001426.tif 000018
【図１３Ａ】
2009001426.tif 000019
【図１３Ｂ】
2009001426.tif 000020
【図１４Ａ】
2009001426.tif 000021
【図１４Ｂ】
2009001426.tif 000022
【図１５】
2009001426.tif 000023
【図１６】
2009001426.tif 000024
【図１７】
2009001426.tif 000025
【図１８】
2009001426.tif 000026
【国際調査報告】
2009001426.tif 000027
2009001426.tif 000028