(57)【特許請求の範囲】
【請求項１】
ハードウェア記述言語による回路設計に用いられるコンピュータにおいて実行されるコンピュータプログラムであって、
前記コンピュータを、
記憶媒体として使用するメモリに対して要求される動作機能といずれかの使用が想定される構成の異なる複数のメモリのそれぞれがもつ動作機能との差を補う複数の機能部を備える回路をハードウェア記述言語で記述した、予め用意されている設計データを取得する手段と、
前記複数のメモリのうちのいずれかである第１のメモリがもつ動作機能と、前記複数のメモリのうちの前記第１のメモリ以外のいずれかである第２のメモリがもつ動作機能との差を判定する手段と、
前記第１のメモリと前記第２のメモリとについて判定された動作機能の差に基づいて、前記第１のメモリに代えて前記第２のメモリを使用する場合に前記複数の機能部のそれぞれが必要であるか不要であるかを判定する手段と、
前記回路設計データにおける前記複数の機能部のうちの不要であると判定された機能部の記述を無効にする手段と、として動作させる
ことを特徴とするコンピュータプログラム。
【請求項２】
前記設計データはレジスタ転送レベルのデータである
請求項１記載のコンピュータプログラム。
【請求項３】
前記複数の機能部の一つは、前記使用するメモリに対する書込みまたは読出しのレイテンシーを調整する部分である
請求項１に記載のコンピュータプログラム。
【請求項４】
前記複数の機能部の一つは、前記回路に入力されるアドレスを前記使用するメモリに応じたアドレスに変換する部分である
請求項１に記載のコンピュータプログラム。
【請求項５】
前記複数の機能部の一つは、前記使用するメモリへのデータの書込みをビット単位で行えるようにするためのパーシャルライト機能部である
請求項１に記載のコンピュータプログラム。
【請求項６】
前記回路は、当該回路に入力されるデータを元に前記使用するメモリへ入力するデータを生成する入力ブロックと、前記使用するメモリから出力されるデータを元に当該回路から出力するデータを生成する出力ブロックと、当該入力ブロックから当該出力ブロックに前記使用するメモリを迂回してデータを送信するバイパスブロックとを有する
請求項１に記載のコンピュータプログラム。
【請求項７】
前記複数の機能部の一つは、前記入力ブロックはに含まれ、前記使用するメモリを初期化する部分である
請求項６に記載のコンピュータプログラム。
【請求項８】
前記複数の機能部の一つは、前記入力ブロックにおいて前記使用するメモリを初期化するとともに、初期化をする間は初期化処理中である旨の信号を前記バイパスブロックを介して前記出力ブロックに送信し、かつ前記出力ブロックにおいて前記バイパスブロックを介して前記入力ブロックから前記信号を受信している間は、前記回路からはいずれのデータも出力しないようにする部分である
請求項６に記載のコンピュータプログラム。
【請求項９】
前記複数の機能部の一つは、前記入力ブロックにおいて、前記回路に入力されたデータに誤り訂正符号を付加して前記使用するメモリへ入力するデータを生成し、かつ前記出力ブロックにおいて、前記使用するメモリから出力されたデータの誤りを検出し、誤りがある場合は当該誤りを訂正したデータを生成する部分である
請求項６に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリの置き換えに関する。
【背景技術】
【０００２】
近年、設計変更が容易なＦＰＧＡ（Field Programmable Gate Array）を用いて製品開発を行い、ＦＰＧＡで実現した機能を低価格で高速のＡＳＩＣ（Application Specific Integrated Circuit）へ置き換えて量産することがある。
【０００３】
この場合、スムーズに置き換えが行えるように、開発当初からＡＳＩＣへの置き換えを考慮した設計をしておくことが望ましい。
【０００４】
しかし、開発時に予定していたＡＳＩＣ以外に、新たに開発されたデバイスに置き換えること、又は、より低価格のデバイスに置き換えること等を行う場合がある。
【０００５】
この場合、置き換えるデバイスによっては、そのデバイス固有の特性を考慮した設計変更が発生し得る。この場合には、通常、製品の品質を保証するために新しいデバイスの特性に合わせた再設計及び検証が必要となる。
【０００６】
例えば、１つのＲＡＭ（Random Access Memory）を用いていた記憶装置のＲＡＭを、複数のＲＡＭに置き換える場合がある。
【０００７】
図１７は、１つのＲＡＭをＲＡＭ１〜ＲＡＭ４の４つのＲＡＭに置き換える例である。白抜き矢印の上部に、１つのＲＡＭを用いた場合の設計例を示し、矢印の下部に、４つのＲＡＭに置き換えた場合の設計例を示す。
【０００８】
この場合、入力されたアドレスを４つのＲＡＭ用に変換する必要がある。また、アドレス変換以外にも様々な対処が必要となる場合がある。すなわち、置き換え前のＲＡＭと置き換え後のＲＡＭとがそれぞれ備えている機能が異なる場合には、その機能の差分を補うような対処が必要となる。例えば、置き換え後のＲＡＭのデータ出力タイミングが、置き換え前のＲＡＭのデータ出力タイミングよりも１クロック速い等のレイテンシーが異なる場合等である。
【０００９】
従って、図１７の下部に示すように、ＲＡＭ１〜ＲＡＭ４の前後に、例えば、アドレスを分離する機能ブロック、アドレスを合成する機能ブロック、レイテンシーの調整を行う機能ブロック及び初期化ブロック等を追加して、置き換え前のＲＡＭが備える機能と置き換え後のＲＡＭが備える機能との差分を補っている。
【００１０】
このように、使用するＲＡＭを変更する度に新たに設計・検証を行うことは、デバイスに合った設計となるものの、開発期間が長期化し高品質の製品を早期にユーザに提供することが難しくなる。
【００１１】
ここで、プロセスの変更等に対して迅速に対処するための技術が提案されている。例えば、回路部品データのパラメータを設定できるようにしておき、機能ブロックの属性を満足させるようなパラメータデータを与えて、機能ブロックのレイアウトパターンを生成する技術である（特許文献１等参照）
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００３−２８１２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかし、置き換え前のＲＡＭが備える機能と置き換え後のＲＡＭが備える機能との差分が、回路部品のパラメータ、例えば、パターンサイズ及び伝搬遅延等を変更したとしても補えない場合があり得る。すなわち、何らかの機能ブロックを追加しなければ差分を補えない場合である。
【００１４】
また、この差分を完全に補えない場合には、ＲＡＭの前段の回路又は後段の回路に変更を加える必要が生じ、ＲＡＭの検証だけでなく、機能ブロックの範囲での検証が必要となる場合が生じ得る（図１８参照）。この場合は、検証の範囲が広がる分、検証に要する時間が長期化してしまう。
【００１５】
そこで、本発明では、置き換え前のメモリが備える機能と置き換え後のメモリが備える機能との差分を補う回路を、容易に生成することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の１形態に係るコンピュータプログラムは、ハードウェア記述言語による回路設計に用いられるコンピュータにおいて実行されるコンピュータプログラムであって、前記コンピュータを、記憶媒体として使用するメモリに対して要求される動作機能といずれかの使用が想定される構成の異なる複数のメモリのそれぞれがもつ動作機能との差を補う複数の機能部を備える回路をハードウェア記述言語で記述した、予め用意されている設計データを取得する手段と、前記複数のメモリのうちのいずれかである第１のメモリがもつ動作機能と、前記複数のメモリのうちの前記第１のメモリ以外のいずれかである第２のメモリがもつ動作機能との差を判定する手段と、前記第１のメモリと前記第２のメモリとについて判定された動作機能の差に基づいて、前記第１のメモリに代えて前記第２のメモリを使用する場合に前記複数の機能部のそれぞれが必要であるか不要であるかを判定する手段と、前記回路設計データにおける前記複数の機能部のうちの不要であると判定された機能部の記述を無効にする手段と、として動作させる。
【発明の効果】
【００１７】
上記構成のコンピュータプログラムは、置き換え前のメモリが備える機能と置き換え後のメモリが備える機能との差分を補う回路を、容易に生成することができる。
【図面の簡単な説明】
【００１８】
【図１】記憶装置の機能的構成の例を示すブロック図である。
【図２】記憶装置の機能的構成の例を示すブロック図である。
【図３】カバーブロックのＲＴＬソース生成するツールの生成処理を示すフローチャートである。
【図４】入力ブロックの機能的構成例を示すブロック図である。
【図５】出力ブロックの機能的構成例を示すブロック図である。
【図６】２ポートの記憶装置の出力ブロックの機能的構成を示すブロック図である。
【図７】４つのＲＡＭを用いる場合の入力ブロックの例を示す図である。
【図８】４つのＲＡＭを用いる場合の出力ブロックの例を示す図である。
【図９】１つのＲＡＭを用いる場合の入力ブロックの例を示す図である。
【図１０】１つのＲＡＭを用いる場合の出力ブロックの例を示す図である。
【図１１】４つのＲＡＭを用いる場合の出力ブロックの例を示す図である（２ポート）。
【図１２】ライトスルーモード用競合調停機能を実現する場合のバイパス用データパスの例を示す図である。
【図１３】ライトスルーモード用競合調停処理のタイムチャートである。
【図１４】ライトスルー機能を実現する場合のバイパス用データパスの例を示す図である。
【図１５】リードイネーブルを実現する場合のバイパス用データパスを示す図である。
【図１６】ＲＡＭを置き換えた場合の検証について示した図である。
【図１７】１つのＲＡＭを４つのＲＡＭに置き換える例を示す図である。
【図１８】ＲＡＭの置き換えによる影響範囲を示す図である。
【発明を実施するための形態】
【００１９】
＜実施形態＞
現在、ＬＳＩ（Large Scale Integration）等のハードウェア設計は、ハードウェア記述言語（ＶＨＤＬ：VHSIC(Very High Speed Integrated Circuit) Hardware Description Language）を用いて回路機能を定義することで行われることが多い。
【００２０】
ＬＳＩの機能仕様設計及び検証を行った後、データバス及び制御バスを意識して記述した論理合成可能なＲＴＬ（Register Transfer Level）での設計及び検証を行う。その後、論理合成及びレイアウトを行ってＬＳＩを作成する。
【００２１】
実施形態では、置き換え前のＲＡＭ等のメモリが備える機能と置き換え後のメモリが備える機能との差分を補う回路（以下、「差分回路」という。）を、ＲＴＬの設計段階において容易に生成する。以下、ＲＴＬで作成された設計データをＲＴＬソースというものとする。
【００２２】
具体的には、差分を補うための様々な回路機能を記述したＲＴＬソースのステップを、置き換え後のメモリが備える機能に応じて取捨選択して差分回路のＲＴＬソースを生成する。その後、この差分回路のＲＴＬソースの論理合成を行う。
【００２３】
従って、論理合成した設計データであるネットリストは、差分を補うために必要な回路のみを記述したものとなる。すなわち、差分を補うために必要な回路のみが製品化されることになる。
【００２４】
以下、記憶装置が用いているＲＡＭを別のＲＡＭに置き換える場合を例に、実施形態の差分回路を生成する方法について説明する。
【００２５】
＜機能＞
図１は、記憶装置１００の機能的構成の例を示すブロック図である。記憶装置１００は、ＲＡＭがシングルポートである場合の例である。
【００２６】
記憶装置１００は、シングルポートのＲＡＭ２０００及びカバーブロック１０００（斜線部分）を有する。
【００２７】
カバーブロック１０００は、置き換え前のＲＡＭが備える機能と置き換え後のＲＡＭ２０００が備える機能との差分（以下、単に「ＲＡＭ機能の差分」という場合がある。）を補う回路である。より詳細には、置き換え前のＲＡＭを用いて記憶装置１００が周囲の回路に提供していた機能と同等の機能を、置き換え後のＲＡＭ２０００を用いて実現するための回路である。
【００２８】
カバーブロック１０００は、入力ブロック１１００、出力ブロック１２００、及び、バイパス用データパス１３００を有する。
【００２９】
入力ブロック１１００は、ＲＡＭ２０００の入力に関する機能の差分を補う回路であり、出力ブロック１２００は、ＲＡＭ２０００の出力に関する機能の差分を補う回路である。
【００３０】
バイパス用データパス１３００は、入力ブロック１１００から出力ブロック１２００へ処理に必要なデータを送るためのパスである。
【００３１】
図２は、記憶装置２００の機能的構成の例を示すブロック図である。記憶装置２００は、ＲＡＭが２ポートである場合の例である。
【００３２】
記憶装置２００は、２ポートのＲＡＭ４０００及びカバーブロック３０００を有する。
【００３３】
カバーブロック３０００は、入力ブロック３１００、出力ブロック３２００、及び、バイパス用データパス３３００を有する。
【００３４】
入力ブロック３１００、出力ブロック３２００、及び、バイパス用データパス３３００のそれぞれのブロックは、入力ブロック１１００、出力ブロック１２００、及び、バイパス用データパス１３００をそれぞれポートの数分備えている構成となる。
【００３５】
従って、以下、カバーブロック１０００を説明し、適時、カバーブロック３０００に言及する。
【００３６】
記憶装置１００は、ＲＡＭ２０００に書込むためのデータ（ＩｎｐｕｔＤａｔａ）、読出し又は書込みを行うＲＡＭ２０００のアドレス（ＩｎｐｕｔＡｄｄｒｅｓｓ）、ライトイネーブル（ＩｎｐｕｔＷＥ）、イネーブル（ＩｎｐｕｔＣＥ）、及び、クロック（ＣＬＯＣＫ）を入力し、ＲＡＭ２０００から読出したデータ（ＯｕｔｐｕｔＤａｔａ）を出力する。
【００３７】
ライトイネーブルがアクティブの場合は書込みを行い、アクティブでない場合は読出しを行う。また、イネーブルがアクティブの場合に、データを出力する。
【００３８】
実施形態では、置き換え後のＲＡＭ用のカバーブロック１０００を生成するが、そのカバーブロック１０００は、置き換え後のＲＡＭが備える機能に応じてそれぞれ異なる回路構成となる。
【００３９】
実施形態では、ＲＡＭ機能の差分を補うため機能として、次の６つの機能を用意する。
【００４０】
１つ目は、ＲＡＭの初期化を行う機能である。具体的には、ＲＡＭの使用開始時に、ＲＡＭに所定の値を設定する機能である。この機能は、入力ブロック１１００及び出力ブロック１２００に回路を形成することで実現する。
【００４１】
２つ目は、記憶装置１００が用いるＲＡＭの個数が変わった場合に、アドレスを変換する機能である。このメモリ分割機能は、入力ブロック１１００及び出力ブロック１２００に回路を形成することで実現する。
【００４２】
３つ目は、パーシャルライト用イネーブル生成機能である。ＲＡＭへのデータ書き込みをビット単位又はバイト単位で行えるようにするための回路である。この機能は、入力ブロック１１００に回路を形成することで実現する。
【００４３】
４つ目は、レイテンシー調整機能である。データ出力のタイミングが異なる場合にタイミングを合わせる機能である。以下に説明するライトスルーモード用競合調停機能もレイテンシー調整機能の１つであるが、レイテンシー調整機能では、データ出力が遅れる場合等に対処する。
【００４４】
５つ目は、ライトスルーモード用競合調停機能である。ライトスルーモードとは、書込むデータが、同時に読出し用のポートにも出力されるモードである。この機能は、入力ブロック１１００又は出力ブロック１２００に回路を形成することで実現する。尚、２ポートを備える記憶装置２００の場合には、書込みアドレスと読み出しアドレスとが一致した場合は、書き込まれたデータが読み出しポートにも出力される。
【００４５】
６つ目は、ＥＣＣ（Error Correcting Code）機能である。ＥＣＣを用いてデータ誤りを訂正する機能である。ソフトエラー対策のためである。この機能は、入力ブロック１１００及び出力ブロック１２００に回路を形成することで実現する。
【００４６】
＜カバーブロックのＲＴＬソースの生成＞
カバーブロック１０００のＲＴＬソース、すなわち、差分回路のＲＴＬソースの生成処理を、図３を用いて説明する。
【００４７】
まず、上述した６つの機能の全てを実現するための回路を記述したＲＴＬソースを作成する。このソースには、記述した６つの機能それぞれを取捨できるようにするステップが記載されている。
【００４８】
次に、差分回路のＲＴＬソースを生成するツール（以下、「生成ツール」という。）を起動する。この生成ツールは、いわゆる、プリプロセッサであり、論理合成を行う前の前処理を行うツールである。この生成ツールは、置き換え前のＲＡＭが備えている機能と置き換え後のＲＡＭが備えている機能とを基に、上記６つの機能のそれぞれを取捨して、差分回路のＲＴＬソースを生成する。
【００４９】
図３は、この差分回路のＲＴＬソースを生成するツールの生成処理を示すフローチャートである。
【００５０】
生成ツールは、置き換え後のＲＡＭが動作可能な動作モード、すなわち、ＲＡＭが備える機能と、置き換え前のＲＡＭが動作していたモード、すなわち、実行していた機能とを取得する（ステップＳ１００、ステップＳ１１０）。これらＲＡＭが備える機能は、ユーザによって予めファイル等に記憶されているものとする。
【００５１】
次に、生成ツールは、上述した６つの機能が記述されたＲＴＬソースを読み込み（ステップＳ１２０）、ＲＡＭを置き換えた場合に補う必要がある機能を実現する回路を記述したステップを残した差分回路ＲＴＬソースを生成する。
【００５２】
まず、初期化回路が必要かどうかを判断する（ステップＳ１３０）。置き換え前のＲＡＭが初期化機能を動作させていた場合であって、置き換え後のＲＡＭが初期化機能を有している場合に、初期化回路が不要であると判断する。
【００５３】
初期化回路が不要であると判断した生成ツールは、初期化回路の記述ステップを削除する（ステップＳ１４０）。
【００５４】
次に、ＲＡＭの個数が同じかどうかを判断する（ステップＳ１５０）。記憶装置１００が用いていた置き換え前のＲＡＭの個数と、置き換え後のＲＡＭの個数が同じである場合に、メモリ分割機能を実現する回路が不要であると判断する。尚、実施形態では、説明の便宜上ＲＡＭの個数のみを比較して判断しているが、その他、ＲＡＭの記憶容量等を考慮して判断することとしてもよい。
【００５５】
メモリ分割機能を実現する回路が不要であると判断した生成ツールは、メモリ分割機能を実現する回路の記述ステップを削除する（ステップＳ１６０）。
【００５６】
次に、パーシャルライトモードを実現する回路が必要かどうかを判断する（ステップＳ１７０）。置き換え前のＲＡＭがパーシャルライトモードを動作させていた場合であって、置き換え後のＲＡＭがパーシャルライトモードで動作可能である場合に、パーシャルライトモードを実現する回路は不要であると判断する。
【００５７】
パーシャルライトモードを実現する回路が不要であると判断した生成ツールは、パーシャルライトモードを実現する回路の記述ステップを削除する（ステップＳ１８０）。
【００５８】
次に、読み出し遅延が同じかどうかを判断する（ステップＳ１９０）。記憶装置１００が用いていた置き換え前のＲＡＭの遅延クロック数と、置き換え後のＲＡＭの遅延クロック数が同じである場合に、レイテンシー調整機能を実現する回路が不要であると判断する。
【００５９】
レイテンシー調整機能を実現する回路が不要であると判断した生成ツールは、レイテンシー調整機能を実現する回路の記述ステップを削除する（ステップＳ２００）。
【００６０】
次に、ライトスルーモードを実現する回路が必要かどうかを判断する（ステップＳ２１０）。置き換え前のＲＡＭがライトスルーモードを動作させていた場合であって、置き換え後のＲＡＭがライトスルーモードで動作可能である場合に、ライトスルーモードを実現する回路は不要であると判断する。
【００６１】
ライトスルーモードを実現する回路が不要であると判断した生成ツールは、ライトスルーモードを実現する回路の記述ステップを削除する（ステップＳ２２０）。
【００６２】
次に、ＥＣＣ機能を実現する回路が必要かどうかを判断する（ステップＳ２３０）。置き換え前のＲＡＭがＥＣＣ機能を動作させていた場合であって、置き換え後のＲＡＭがＥＣＣ機能を動作させることが可能である場合に、ＥＣＣ機能を実現する回路は不要であると判断する。
【００６３】
ＥＣＣ機能を実現する回路が不要であると判断した生成ツールは、ＥＣＣ機能を実現する回路の記述ステップを削除する（ステップＳ２４０）。
【００６４】
このように生成ツールは、差分回路ＲＴＬソースを生成する。この後は、通常の手順に則って処理を行う。すなわち、論理合成及びレイアウトを行ってＬＳＩを作成する。
【００６５】
以下、入力ブロック１１００、及び、出力ブロック１２００の詳細な構成を図を用いて説明する。ここでは、上述した６つの機能、すなわち、初期化機能、メモリ分割機能、パーシャルライト用イネーブル生成機能、レイテンシー調整機能、ライトスルーモード用競合調停機能、及び、ＥＣＣ機能を実現する回路を全て含んだブロックについて説明する。
【００６６】
＜入力ブロック＞
図４は、入力ブロック１１００の機能的構成例を示すブロック図である。
【００６７】
入力ブロック１１００は、上述した６つの機能のうち、初期化機能、メモリ分割機能、パーシャルライト用イネーブル生成機能、レイテンシー調整機能、及び、ＥＣＣ機能の５つの機能を実現する。
【００６８】
図４において、「データ」はＲＡＭ２０００に書込むためのデータ（図１のＩｎｐｕｔＤａｔａ）を示し、「アドレス」は読出し又は書込みを行うＲＡＭ２０００のアドレス（図１のＩｎｐｕｔＡｄｄｒｅｓｓ）を示し、「ＷＥ／ＲＥ」は、ライトイネーブル（図１のＩｎｐｕｔＷＥ）を示す。このライトイネーブルがアクティブの場合は書込みを行い、アクティブでない場合は読出しを行う。以下、ライトイネーブルがアクティブの信号を「ライトイネーブル信号」、ライトイネーブルがアクティブでない信号を「リードイネーブル信号」というものとする。
【００６９】
また、入力ブロック１１００からは、入力された「データ」、「アドレス」及び「ＷＥ／ＲＥ」が、それぞれ所定の処理がなされた後、バイパス信号１３１０、バイパス信号１３２０及びバイパス信号１３３０として出力される。これらの信号は、出力ブロック１２００において使用される。
【００７０】
＜１．初期化機能＞
初期化機能は、初期化部１１０４で実現される。
【００７１】
具体的には、初期化部１１０４は、ＲＡＭ２０００に所定の値を書込む処理を行う。
【００７２】
例えば、ＲＡＭ２０００の全領域に、レジスタが記憶しているデフォルトデータを書込む。初期化部１１０４は、アドレスをインクリメントして生成し、生成したアドレスにデフォルトデータを書込んでいく。この際、初期化部１１０４は、アドレスをインクリメントするタイミングでライトイネーブル信号を生成する。
【００７３】
また、初期化部１１０４は、初期化の処理が完了するまで、初期化中であることを示す初期化信号をバイパス信号１３３０として出力する。出力ブロック１２００に初期化中であることを通知するためである。
【００７４】
＜２．メモリ分割機能＞
メモリ分割機能は、デコーダ１１０６及びＷＥ／ＲＥ生成部１１０７で実現される。
【００７５】
デコーダ１１０６及びＷＥ／ＲＥ生成部１１０７は、複数のＲＡＭのうちのどのＲＡＭのいずれのアドレスに書き込むかを示すメモリ分割用アドレスを生成する。
【００７６】
デコーダ１１０６が、入力された「アドレス」から、いずれのＲＡＭに書き込むかを決定する。例えば、置き換え前のＲＡＭが１個で、置き換え後のＲＡＭが４個である場合は、アドレスの上位２ビットを、ＲＡＭを指定するビットとして使用し、いずれのＲＡＭに書き込むかを決定する。また、入力された「アドレス」と各ＲＡＭのサイズとから、書き込むＲＡＭを決定する等であってもよい。
【００７７】
ＷＥ／ＲＥ生成部１１０７は、ＲＡＭに対してライトイネーブル信号又はリードイネーブル信号を送信する。ＷＥ／ＲＥ生成部１１０７は、デコーダ１１０６の決定に従って、決定されたＲＡＭに対して、ライトイネーブル信号又はリードイネーブル信号を生成して送信する。
【００７８】
＜３．パーシャルライト用イネーブル生成機能＞
パーシャルライト用イネーブル生成機能は、ＷＥ／ＲＥ生成部１１０７で実現される。
【００７９】
例えば、通常は３２ビット又は６４ビット単位でＲＡＭの読み書きを行っている場合に、部分的な８ビット又は１ビット等を読み書きするためのライトイネーブル信号及びリードイネーブル信号を、ＷＥ／ＲＥ生成部１１０７が生成する。
【００８０】
すなわち、パーシャルライトに未対応のＲＡＭの場合、ＲＡＭをＢｙｔｅ／Ｂｉｔ単位で扱えるように、ＷＥ／ＲＥ生成部１１０７を作成する。
【００８１】
＜４．レイテンシー調整機能＞
レイテンシー調整機能は、初段のＦＦ１１０１、ＦＦ１１０２、及び、ＦＦ１１０３、並びに、最終段のＦＦ１１０８、ＦＦ１１０９、及び、ＦＦ１１１０で実現される。
【００８２】
レイテンシー調整に必要な個所に必要な個数のＦＦを配置してレイテンシーを調整する。
【００８３】
＜５．ＥＣＣ機能＞
ＥＣＣ機能は、ＥＣＣエンコーダ１１０５によって実現される。
【００８４】
ＥＣＣエンコーダ１１０５は、入力された「データ」を基に、誤り訂正符号を付加したデータを生成する。初期化部１１０４が出力するデフォルトデータに対してもＥＣＣ処理を行ってもよい。
【００８５】
＜出力ブロック＞
図５は、出力ブロック１２００の機能的構成例を示すブロック図である。
【００８６】
出力ブロック１２００は、上述した６つの機能のうち、初期化機能、メモリ分割機能、レイテンシー調整機能、ライトスルーモード用競合調停機能、及び、ＥＣＣ機能の５つの機能を実現する。
【００８７】
出力ブロック１２００には、バイパス信号１３１０、バイパス信号１３２０及びバイパス信号１３３０としてデータ、アドレス及びイネーブル信号がそれぞれ入力ブロック１１００から入力される。また、初期化時には、バイパス信号１３３０として初期化信号が入力される。
【００８８】
また、バイパス信号１３３０として受信される信号がリードイネーブル信号のときのみＦＦ１２０１及びＦＦ１２０６をイネーブルとすることも可能とする。また、必要に応じて、出力ブロック１２００の全機能のＥｎａｂｌｅ、Ｄｉｓａｂｌｅも可能とする。
【００８９】
＜１．初期化機能＞
初期化機能は、マスク処理部１２０８で実現される。
【００９０】
具体的には、マスク処理部１２０８は、バイパス信号１３３０として初期化信号を受信している間、出力ブロック１２００内の全ての回路、又は、全てのＦＦ回路をマスクすることにより、記憶装置１００の出力データを使用する後段の回路に対しての不定出力を回避する。また、各機能をマスクすることで初期化時の擬似エラーも回避する。
【００９１】
＜２．メモリ分割機能＞
メモリ分割機能は、ＳＥＬ１２０２で実現される。
【００９２】
ＳＥＬ１２０２は、いずれのＲＡＭから出力されたデータを出力データとするかを選択する。
【００９３】
ＳＥＬ１２０２は、バイパス信号１３２０としてリードイネーブル信号を受信した場合、バイパス信号１３２０として受信したアドレスから、複数のＲＡＭのうちのどのＲＡＭからのデータを選択するかを決定する。この決定は、入力ブロック１１００のデコーダ１１０６と同様の決定方法で決定する。
【００９４】
例えば、置き換え前のＲＡＭが１個で、置き換え後のＲＡＭが４個である場合は、アドレスの上位２ビットを、ＲＡＭを指定するビットとして使用し、いずれのＲＡＭから読み出すかを決定する。また、バイパス信号１３２０として受信されたアドレスと各ＲＡＭのサイズとから、読み出すＲＡＭを決定する等であってもよい。
【００９５】
＜３．レイテンシー調整機能＞
レイテンシー調整機能は、初段のＦＦ１２０１、及び、最終段のＦＦ１２０６で実現される。
【００９６】
レイテンシー調整に必要な個所に必要な個数のＦＦを配置してレイテンシーを調整する。
【００９７】
＜４．ライトスルーモード用競合調停機能＞
ライトスルーモード用競合調停機能は、ＳＥＬ１２０５、及び、ＦＦ１２０７で実現される。
【００９８】
ライトスルーモードのときは、バイパス信号１３３０としてライトイネーブル信号が受信された場合には、バイパス信号１３１０として受信されるデータを出力データとして選択する。また、バイパス信号１３３０としてリードイネーブル信号が受信された場合には、ＲＡＭから読み出されたデータ、すなわち、図５ではＥＣＣ訂正１２０４されたデータを出力データとして選択する。
【００９９】
ここで、２ポートの記憶装置２００におけるライトスルーモード用競合調停機能について説明する。
【０１００】
図６は、２ポートの記憶装置２００の出力ブロック３２００の機能的構成を示すブロック図である。図５のシングルポートの出力ブロック１２００との違いは、アドレス一致検出部３２０１及びＦＦ３２０２を備える点と、ＲＡＭが２ポートＲＡＭ４０００であり、Ｂポートからリードアドレスを入力する点が異なる。
【０１０１】
アドレス一致検出部３２０１は、バイパス信号１３２０として受信するアドレスと、Ｂポートから受信するリードアドレスとを比較する。
【０１０２】
ＳＥＬ１２０５は、バイパス信号１３３０としてライトイネーブル信号が受信された場合に、アドレスが同じであるとアドレス一致検出部３２０１が判断した場合には、バイパス信号１３１０として受信されるデータを出力データとして選択する。
【０１０３】
書込みを行っているアドレスに対しては読み書きを行うことができないＲＡＭに、対処することが可能となる。また、ライトスルーモードを実現することが可能となる。
【０１０４】
＜５．ＥＣＣ機能＞
ＥＣＣ機能は、ＥＣＣチェック１２０３及びＥＣＣ訂正１２０４によって実現される。
【０１０５】
ＥＣＣチェック１２０３は、入力ブロック１１００のＥＣＣエンコーダ１１０５によって誤り訂正符号が付加されたデータの誤りチェックを行う。ＥＣＣ訂正１２０４は、ＥＣＣチェック１２０３で誤りがあると判断された信号を訂正する。
【０１０６】
＜カバーブロック例＞
図７及び図８に、入力ブロック１１００及び出力ブロック１２００の例を示す。
【０１０７】
図７及び図８で示す入力ブロック１１００Ａ及び出力ブロック１２００Ａは、メモリ分割機能、レイテンシー調整機能、ライトスルーモード用競合調停機能を実現する。
【０１０８】
また、図９及び図１０に、入力ブロック１１００及び出力ブロック１２００の例を示す。
【０１０９】
図９及び図１０で示す入力ブロック１１００Ｂ及び出力ブロック１２００Ｂは、初期化機能、レイテンシー調整機能、及び、ＥＣＣ機能を実現する。
【０１１０】
また、図１１に、２ポートＲＡＭ用の出力ブロック３２００の例を示す。
【０１１１】
図１１で示す出力ブロック３２００Ａは、初期化機能、メモリ分割機能、レイテンシー調整機能、及び、ライトスルーモード用競合調停機能を実現する。
【０１１２】
図７〜図１１で示すように、実施形態では、差分回路として必要最小限の回路を備えるカバーブロックを作成することが可能となる。
【０１１３】
＜バイパスデータパス＞
バイパス用データパス１３００の使用例を説明する。
【０１１４】
図１２は、２ポートの記憶装置２００におけるライトスルーモード用競合調停機能（＜４．ライトスルーモード用競合調停機能＞の項参照）を実現する場合の、バイパス用データパス３３００等を示す図である。
【０１１５】
また、図１３に、ライトスルーモード用競合調停処理時のタイムチャートを示す。図１３の左側に通常時、すなわち競合が起こらない場合のタイムチャートを示し、右側に競合時のタイムチャートを示す。
【０１１６】
２ポートＲＡＭ４０００は、１ポートが読み書き用のポートであり、他の１つは読み込み専用のポートである。図１２において、２ポートＲＡＭ４０００を示す矩形の左側が読み書き用のＡポートを示し、右側が読み込み専用のＢポートを示す。
【０１１７】
ここでは、読み書き用のＡポートからのライトアドレスと、読み込み専用のＢポートからのリードアドレスが一致した場合、すなわち、競合した場合の回避を説明する。
【０１１８】
入力ブロック３１００において、Ａポート側から入力された各信号（ｉ＿ｉａ［＊：０］〜ｉ＿ｉ［＊：０］）をシフトさせ、２ポートＲＡＭ４０００のＡポートへの入力信号（ｏ＿ｒａｍ＿ｉａ［＊：０］〜ｏ＿ｒａｍ＿ｉ［＊：０］）とする。
【０１１９】
入力ブロック３１００は、バイパス信号１３１０としてライトデータ信号（ｉ＿ｉ［＊：０］）を出力する。また、バイパス信号１３２０としてライトアドレス（ｉ＿ｉａ［＊：０］）を出力し、バイパス信号１３３０としてライトイネーブル信号（ｉ＿ｗｅ）を出力する。
【０１２０】
一方、出力ブロック３２００において、Ｂポート側から入力されたリードアドレス信号（ｉ＿ｒｂ［＊：０］）及びリードイネーブル信号（ｉ＿ｉｈｒｂ）をシフトさせ、２ポートＲＡＭ４０００のＢポートへの入力信号（ｏ＿ｒａｍ＿ｒｂ［＊：０］、ｏ＿ｒａｍ＿ｉｈｒｂ）とする。
【０１２１】
出力ブロック３２００は、Ｂポート側から入力されたリードアドレス信号（ｉ＿ｒｂ［＊：０］）及びリードイネーブル信号（ｉ＿ｉｈｒｂ）をアドレス一致検出部３２０１に入力する。
【０１２２】
アドレス一致検出部３２０１は、バイパス信号１３３０として入力されたライトイネーブル信号（ｉ＿ｗｅ）のタイミング（図１３の矢印１０参照）で、バイパス信号１３２０として入力されたライトアドレス（ｉ＿ｉａ［＊：０］）と、Ｂポート側から入力されたリードアドレス信号（ｉ＿ｒｂ［＊：０］）とを比較する。
【０１２３】
図１３の左側のタイムチャートで示される場合は、ライトアドレス（ｉ＿ｉａ［＊：０］）とリードアドレス信号（ｉ＿ｒｂ［＊：０］）とは一致しないので、アドレス一致検出部３２０１の比較結果の信号「ｓ＿ｃｍｐ＿ｂｙｐａｓｓ」が”Ｌ”のままである。
【０１２４】
ＳＥＬ１２０５は、「ｉ＿ｒａｍ＿ｂ[＊：０]」を選択し、Ｂポートからの出力「ｏ＿ｂ［＊：０］」として出力する。
【０１２５】
すなわち、Ａポート側からの書込み及びＢポート側からの読出しは、通常どおりに処理される。
【０１２６】
一方、図１３の右側のタイムチャートで示されるように、バイパス信号１３３０として入力されたライトイネーブル信号（ｉ＿ｗｅ）のタイミング（図１３の矢印１１参照）で、アドレス一致検出部３２０１が、バイパス信号１３２０としてバイパスされたライトアドレス（ｉ＿ｉａ［＊：０］）と、Ｂポート側から入力されたリードアドレス信号（ｉ＿ｒｂ［＊：０］）とを比較する。
【０１２７】
ライトアドレス（ｉ＿ｉａ［＊：０］）とリードアドレス信号（ｉ＿ｒｂ［＊：０］）とが一致した場合は、アドレス一致検出部３２０１は、比較結果の信号「ｓ＿ｃｍｐ＿ｂｙｐａｓｓ」を”Ｈ”（図１３の矢印１２参照）とし、Ｂポートのリードイネーブル信号「ｓｒ＿ｉｈｒｂ＿ｍ［０］」にマスクをかける（図１３の矢印１５参照）。すなわち、読み出しの処理を行わせない（図１３の矢印１６参照）。
【０１２８】
ＳＥＬ１２０５は、比較結果の信号「ｓ＿ｃｍｐ＿ｂｙｐａｓｓ」が”Ｈ”となったタイミングで「ｓｒ＿ｉ＿４ｆｆ[＊：０]」を選択し、Ｂポートからの出力「ｏ＿ｂ［＊：０］」として出力する。詳細には、アドレス一致検出部３２０１は、ＳＥＬ１２０５が「ｓｒ＿ｉ＿４ｆｆ[＊：０]」を選択して出力するタイミング（図１３の矢印１４参照）を通常のタイミングと合わせるために、比較結果の信号「ｓ＿ｃｍｐ＿ｂｙｐａｓｓ」を必要な分シフトさせ、例えば４ＦＦ後の「ｓ＿ｃｍｐ＿ｂｙｐａｓｓ［３］」として出力する。
【０１２９】
すなわち、Ａポート側からの書込みは通常通りに処理されるが、Ｂポート側からの読出しは、Ａポートから書き込まれたデータが出力される。
【０１３０】
図１４は、シングルポートの記憶装置１００におけるライトスルー機能を実現する場合の、バイパス用データパス１３００を示す図である。
【０１３１】
すなわち、書き込み動作時に、書き込んだデータ「ｄａｔａ［０：０］」が、即時にリード動作に反映し、「ｑ［０：０］」として出力される機能の構成図を示す。
【０１３２】
ＲＡＭによっては、このようなライトスルー機能を備えておらず、オプション設定によっては実現できない場合があるからである。
【０１３３】
書込み操作時に、ＲＡＭにデータを書込むと同時に、バイパスを通して同じデータを出力側に送信することで、ライトスルー機能を実現する。
【０１３４】
ライトイネーブル信号「ｗｒｅｎ」及びクロックイネーブル信号「ｃｌｋｅｎ」に応じて出力ブロックのセレクタが切り替わり、ライトスルーモードと同等な動作を行う。
【０１３５】
図１５は、シングルポートの記憶装置１００におけるリードイネーブルを実現する場合の、バイパス用データパス１３００を示す図である。
【０１３６】
リードイネーブル機能とは、書込み動作時に、リードイネーブルを非アクティブにして書込み動作を行うと、ＲＡＭの出力は最後に読み出したデータを保持している機能である。
【０１３７】
バイパス用データパス１３００に、タイミング調整用のディレイバッファを備える。また、出力ブロック１２００に、読出したデータを保持する付加回路を設ける。
【０１３８】
読込み処理時、すなわち、リードイネーブル「ｒｄｅｎ」がアクティブの時に、読み出したデータを出力し、且つ、保持することで、リードイネーブルを実現する。尚、「ｒｄｃｌｏｃｋｅｎ」は、上位ブロックで”Ｈ”固定（非アクティブ）で使用される。
【０１３９】
＜検証＞
図１６は、ＲＡＭを置き換えた場合の検証について示した図である。
【０１４０】
例えば、記憶装置１００のＲＡＭ２０００を、他のＲＡＭ９０００に置き換えたとする。
【０１４１】
ＲＡＭを置き換える前の記憶装置１００は、ＲＡＭ２０００及びＲＡＭ２０００用のカバーブロック１０００で構成されている。また、ＲＡＭを置き換えた後の記憶装置１００は、ＲＡＭ９０００及びＲＡＭ９０００用のカバーブロック９００１で構成されている。
【０１４２】
この場合、ＲＡＭ９０００を備えたカバーブロック９００１の動作が、ＲＡＭ２０００を備えたカバーブロック１０００の動作と同じであることを検証することで、ＲＡＭの置き換えの検証が完了する。具体的には、置き換え前のＲＡＭ２０００を備えたカバーブロック１０００の検証をするために作成（ＧＥＮＥＲＡＴＯＲ）したテストデータを、そのまま置き換え後のＲＡＭ９０００を備えたカバーブロック９００１の検証に用いることができる。検証結果の確認（ＤＥＴＥＣＴＯＲ）も、同様に行うことができる。
【０１４３】
カバーブロック９００１は、置き換え前のＲＡＭ２０００が備える機能と置き換え後のＲＡＭ９０００が備える機能との差分を補う機能を有する回路である。
【０１４４】
従って、ＲＡＭ２０００とカバーブロック１０００とが周囲の回路に提供していた機能と同等の機能を、ＲＡＭ９０００とカバーブロック９００１とが提供するからである。
【０１４５】
このように、ＲＡＭを置き換えたとしても、検証範囲が少なく検証方法も容易となるため検証が短時間で済み、製品の市場への投入を短期間で行うことができるようになる。
【０１４６】
カバーブロックを有することで、デバイス変更に対して柔軟に対応することが可能になり、コストダウン設計の効率化／品質の保持を容易に行うことができるようになる。
【０１４７】
＜補足＞
以上、本発明の実施形態について説明したが、本発明は上記形態に限らず、以下のようにしてもよい。
（１）実施形態では、カバーブロック（差分回路）のＲＴＬソースを、ＲＡＭ機能の差分として考え得る全ての差分を記述したＲＴＬソースから、必要なステップを取捨選択して作成しているが、他の方法であってもよい。必要最小限度のステップのみで構成されたカバーブロックのＲＴＬソースが生成できればよい。
【０１４８】
例えば、ＲＴＬソースの記述言語に、論理合成を行うか行わないかを指定する命令がある場合は、その命令を使用することとしてもよい。
（２）実施形態では、置き換え前のＲＡＭが備えている機能と置き換え後のＲＡＭが備えている機能との差分を補うための機能として、６つの機能を用意することとしているが、これらの機能に限られない。また、これらの機能の一部の機能を用意してもよい。
【符号の説明】
【０１４９】
１００  ２００  記憶装置
１０００  ３０００  ９００１  カバーブロック（回路）
２０００  ２０００Ａ  ２０００Ｂ  ４０００  ＲＡＭ（メモリ）
１１００  ３１００  入力ブロック
１１０４  初期化部
１１０５  エンコーダ
１１０６  デコーダ
１１０７  ＷＥ／ＲＥ生成部
１２００  ３２００  出力ブロック
１２０２  １２０５  ＳＥＬ
１２０３  ＥＣＣチェック
１２０４  ＥＣＣ訂正
１２０８  マスク処理部
１３００  ３３００  バイパス用データパス（バイパスブロック）
１３１０  バイパス信号（データ）
１３２０  バイパス信号（アドレス）
１３３０  バイパス信号（イネーブル）
２０００  ４０００  ＲＡＭ
３２０１  アドレス一致検出部
【図１】
0005446939.tif 000002
【図２】
0005446939.tif 000003
【図３】
0005446939.tif 000004
【図４】
0005446939.tif 000005
【図５】
0005446939.tif 000006
【図６】
0005446939.tif 000007
【図７】
0005446939.tif 000008
【図８】
0005446939.tif 000009
【図９】
0005446939.tif 000010
【図１０】
0005446939.tif 000011
【図１１】
0005446939.tif 000012
【図１２】
0005446939.tif 000013
【図１３】
0005446939.tif 000014
【図１４】
0005446939.tif 000015
【図１５】
0005446939.tif 000016
【図１６】
0005446939.tif 000017
【図１７】
0005446939.tif 000018
【図１８】
0005446939.tif 000019