(57)【特許請求の範囲】
【請求項１】
ＦＰＧＡに所定個数搭載された物理的なＦＰＧＡブロックＲＡＭのうちの少なくとも１つのＦＰＧＡブロックＲＡＭのワード方向及びビット方向の少なくとも一方において見かけ上複数のＲＡＭを割り当て、前記複数のＲＡＭの各々を単一のＲＡＭとしてアクセスするように前記複数のＲＡＭの各々の入出力信号を制御する制御回路をハードウェア記述言語による記述として生成する処理を実行する処理部、
を備えたことを特徴とする設計装置。
【請求項２】
前記処理部は、１つのＦＰＧＡブロックＲＡＭには１つのＲＡＭのみを割り当てることにより生成された開発対象の回路のハードウェア記述言語による記述から、単一のＲＡＭとして配置された前記複数のＲＡＭの各々に接続される信号を特定し、前記特定された信号を前記１つのＦＰＧＡブロックＲＡＭの前記制御回路に接続し直す処理を、更に実行する請求項１に記載の設計装置。
【請求項３】
前記制御回路は、前記複数のＲＡＭに対するアクセス競合が存在する場合に前記複数のＲＡＭに順番にアクセスを可能にする調停回路を含む請求項１又は２記載の設計装置。
【請求項４】
前記制御回路は、外部から入力されるアドレスを変換して前記複数のＲＡＭにアクセスするアドレスを生成するアドレス変換回路を含む請求項１乃至３いずれか一項記載の設計装置。
【請求項５】
前記制御回路は、前記複数のＲＡＭのうちアクセス可能なＲＡＭを示す信号を出力する回路を含む請求項１乃至４いずれか一項記載の設計装置。
【請求項６】
前記１つのＦＰＧＡブロックＲＡＭのビット方向において複数のＲＡＭが割り当てられている場合、前記制御回路は、ビット方向に割り当てられた前記複数のＲＡＭからデータを読み出し、外部からの書き込みデータにより前記読み出したデータの一部を置き換え、前記置き換えた後のデータを前記複数のＲＡＭに書き込む回路を含む請求項１乃至５いずれか一項記載の設計装置。
【請求項７】
ＦＰＧＡに所定個数搭載された物理的なＦＰＧＡブロックＲＡＭのうちの少なくとも１つのＦＰＧＡブロックＲＡＭのワード方向及びビット方向の少なくとも一方において見かけ上複数のＲＡＭを割り当て、
前記複数のＲＡＭの各々を単一のＲＡＭとしてアクセスするように前記複数のＲＡＭの各々の入出力信号を制御する制御回路をハードウェア記述言語による記述として生成する、
各処理をコンピュータに実行させるプログラム。
【請求項８】
１つのＦＰＧＡブロックＲＡＭには１つのＲＡＭのみを割り当てることにより生成された開発対象の回路のハードウェア記述言語による記述から、単一のＲＡＭとして配置された前記複数のＲＡＭの各々に接続される信号を特定し、前記特定された信号を前記１つのＦＰＧＡブロックＲＡＭの前記制御回路に接続し直す処理を更にコンピュータに実行させる請求項７に記載のプログラム。
【請求項９】
ＦＰＧＡに所定個数搭載された物理的なＦＰＧＡブロックＲＡＭのうちの少なくとも１つのＦＰＧＡブロックＲＡＭのワード方向及びビット方向の少なくとも一方において見かけ上複数のＲＡＭを割り当て、
前記複数のＲＡＭの各々を単一のＲＡＭとしてアクセスするように前記複数のＲＡＭの各々の入出力信号を制御する制御回路をハードウェア記述言語による記述として生成する
処理をコンピュータに実行させるＦＰＧＡ設計方法。
【請求項１０】
前記処理部は、１つのＦＰＧＡブロックＲＡＭのワード方向及びビット方向の少なくとも一方において、ビット数またはワード数の大きい順に複数のＲＡＭを割り当てる処理を実行することを特徴とする請求項１に記載の設計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、設計装置、プログラム、及びＦＰＧＡ設計方法に関する。
【背景技術】
【０００２】
ＦＰＧＡ（Field Programmable Gate Array）開発においては、設計した回路を実装するＦＰＧＡデバイスの価格が開発コストに大きく影響する。ＦＰＧＡの価格はＦＰＧＡデバイスのベンダや回路規模によって異なるが、最新テクノロジを使用した大規模ＦＰＧＡは非常に高価になる。ＦＰＧＡ開発の担当者はコストを最大限に抑えるため、一世代前のＦＰＧＡデバイスを採用したり、小さな規模のデバイスを採用するなどの工夫をしている。このため、回路設計においては、ＦＰＧＡのリソースを最大限に利用することが求められている。
【０００３】
ＦＰＧＡの回路設計においては、テクノロジやベンダに依存しないＲＴＬ（Register Transfer Level）ベースでの設計が一般的である。ＲＡＭ（Random Access Memory）を除く回路部分の論理については、ＣＡＤ（Computer Aided Design）による最適化などによりＦＰＧＡの実装の効率化が可能となっている。
【０００４】
ＲＡＭについては、ＦＰＧＡデバイス毎に搭載されているＲＡＭ（ブロックＲＡＭ）の個数が決まっている。従来、設計した回路で利用するＲＡＭの個数が、使用予定のＦＰＧＡデバイスのブロックＲＡＭの個数よりも多くなってしまった場合には、搭載ブロックＲＡＭ数が多い上位機種のＦＰＧＡデバイスを採用したり、外部ＲＡＭを別途用意したりして対応していた。しかしながら、上位機種のＦＰＧＡデバイスを用いることは、コストの増大に直結する。また外部ＲＡＭを使用すると、ＲＴＬ設計やプリント板の変更が必要になり、開発コストが上昇してしまう。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２０７０４２号公報
【特許文献２】特開２０００−２０７２７４号公報
【特許文献３】特開２００４−１７８０５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以上を鑑みると、ＦＰＧＡ開発において限られた数のＲＡＭを効率的に利用する手法が望まれる。
【課題を解決するための手段】
【０００７】
設計装置は、ＦＰＧＡに所定個数搭載された物理的なＦＰＧＡブロックＲＡＭのうちの少なくとも１つのＦＰＧＡブロックＲＡＭのワード方向及びビット方向の少なくとも一方において見かけ上複数のＲＡＭを割り当て、前記複数のＲＡＭの各々を単一のＲＡＭとしてアクセスするように前記複数のＲＡＭの各々の入出力信号を制御する制御回路をハードウェア記述言語による記述として生成する処理を実行する処理部を備えたことを特徴とする。
【発明の効果】
【０００８】
少なくとも１つの実施例によれば、ＦＰＧＡ開発において限られた数のＲＡＭを効率的に利用することができる。
【図面の簡単な説明】
【０００９】
【図１】ＦＰＧＡ開発手順の一例を示すフローチャートである。
【図２】論理ＲＡＭモデル生成の処理を示すフローチャートである。
【図３】論理ＲＡＭモデルの構成の一例を示す図である。
【図４】設計対象回路の論理モジュールとＲＡＭとの関係の一例を示す模式図である。
【図５】複数マッピングされたＲＡＭと論理モジュールとの関係の一例を示す模式図である。
【図６】論理ＲＡＭモデル２５の構成の一例を示す図である。
【図７】ＲＡＭ割り当て処理の手順の一例を示すフローチャートである。
【図８】ブロックＲＡＭ内の空きビット領域を説明するための図である。
【図９】ブロックＲＡＭ内の空きビット領域に対するＲＡＭの割り当てを説明するための図である。
【図１０】ＲＡＭ割り当て処理の手順の一例を示すフローチャートである。
【図１１】ブロックＲＡＭ内の空きワード領域を説明するための図である。
【図１２】ブロックＲＡＭ内の空きビット領域に対するＲＡＭの割り当てを説明するための図である。
【図１３】複数マッピングされたＲＡＭに対する制御回路を生成する処理の手順の一例を示すフローチャートである。
【図１４】図１３に示される処理の続きの処理を示すフローチャートである。
【図１５】データ書き込み時の動作を説明するための図である。
【図１６】複数マッピングされたＲＡＭの引き出し処理の概略的な手順の一例を示す図である。
【図１７】複数マッピングされたＲＡＭの引き出し処理の詳細な手順の一例を示す図である。
【図１８】複数マッピングされた論理ＲＡＭモデルの入出力信号の一例を示す図である。
【図１９】図１８に示す論理ＲＡＭモデルの入出力信号について説明する表である。
【図２０】図１８に示すマルチマッピングＲＡＭの回路構成の一例を示す図である。
【図２１】競合判定回路及び調停回路の構成の一例を示す図である。
【図２２】１つのポートにアクセスした場合のマルチマッピングＲＡＭの動作の一例を示すタイミング図である。
【図２３】２つのポートに同時アクセスした場合のマルチマッピングＲＡＭの動作の一例を示すタイミング図である。
【図２４】３つのポートに同時アクセスした場合のマルチマッピングＲＡＭの動作の一例を示すタイミング図である。
【図２５】ユーザ回路とマルチマッピングＲＡＭとの接続形態の一例を示す図である。
【図２６】マルチマッピングＲＡＭにアクセスするユーザ回路の動作の一例を示すタイミング図である。
【図２７】設計装置の構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。なお以下の図面において、同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【００１１】
図１は、ＦＰＧＡ開発手順の一例を示すフローチャートである。なお図１及び以降の図において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、Ａステップの次にＢステップを実行することが可能なだけでなく、Ｂステップの次にＡステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Ｂステップの次にＡステップが実行されてもよいことは自明である。Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
【００１２】
図１に示すＦＰＧＡ開発手順の各ステップの処理は、ＣＡＤ（Computer Aided Design）装置等の設計装置を用いて実行される。ステップＳ１において、設計装置が論理ＲＡＭモデルをＲＡＭライブラリ１１として生成する。即ち、ビット数、ワード数、及びメモリタイプ（例えばデュアルポート又はシングルポートの種別等）を規定したＲＡＭ情報１０に基づいて、ＦＰＧＡのブロックＲＡＭを所望のビット数、ワード数、及びメモリタイプを有するＲＡＭとして使用できるようにする。
【００１３】
図２は、論理ＲＡＭモデル生成の処理を示すフローチャートである。ステップＳ１−１において、ＦＰＧＡにより開発したい対象の回路の仕様を記述したＦＰＧＡ設計仕様書５から、ＲＡＭ情報１０を抽出する。ステップＳ１−２において、ＲＡＭ情報１０に規定されるビット数、ワード数、及びメモリタイプを有するＲＡＭとしてＦＰＧＡのブロックＲＡＭを使用できるように、設計装置によりアクセス制御回路を生成する。即ち、設計装置により、上記アクセス制御回路のハードウェア記述言語による記述を生成する。ステップＳ１−３において、設計装置は、ＦＰＧＡブロックＲＡＭライブラリ１２とアクセス制御回路と組み合わせることで、論理ＲＡＭモデルをＲＴＬ記述として生成する。
【００１４】
図３は、論理ＲＡＭモデルの構成の一例を示す図である。図３に示されるように、論理ＲＡＭモデル２２は、ブロックＲＡＭ２１、入力制御回路２２Ａ、及び出力制御回路２２Ｂを含む。ブロックＲＡＭ２１は、データビット幅及びアドレスビット幅を設定可能となっている。入力制御回路２２Ａ及び出力制御回路２２Ｂを設けることにより、ブロックＲＡＭ２１を所望のデータビット幅及びアドレスビット幅を有するＲＡＭとして使用可能になる。入力制御回路２２Ａが、ユーザ回路Ａからの入力アドレスや書き込みデータをブロックＲＡＭ２１に供給する。出力制御回路２２Ｂが、ブロックＲＡＭ２１からの読み出しデータをユーザロジックＢに供給する。
【００１５】
図１に戻り、ステップＳ２において、設計装置によりＲＴＬコーディングを行う。即ち、開発対象の回路のＲＴＬ記述に対して、ステップＳ１で生成した論理ＲＡＭモデルのＲＴＬ記述を組み込む。これにより設計装置はＲＴＬ記述１３を生成する。ステップＳ３において、設計装置は、ＲＴＬ記述１３により記述された回路の動作が仕様に合った動作をするか否かを、シミュレータを用いて検証する。適宜ＲＴＬ記述１３の修正及びシミュレーションを繰り替えすことにより、適切なＲＴＬ記述１３を生成する。
【００１６】
ステップＳ４において、設計装置により、ＲＴＬ記述１３に基づいてＦＰＧＡを論理合成する。即ち、ＲＴＬ記述１３の内容をＦＰＧＡデバイスが有するリソースに割り当てる。この時点において、ＲＴＬ記述１３で使用するＲＡＭ種別及び数が使用ＲＡＭ情報１４として判明する。ＦＰＧＡデバイスに搭載されているブロックＲＡＭの個数が、ＲＴＬ記述１３で使用するＲＡＭの個数よりも少ない場合には、ＦＰＧＡ論理合成は失敗しエラーが通知される。ＦＰＧＡデバイスに搭載されているブロックＲＡＭの個数が、ＲＴＬ記述１３で使用するＲＡＭの個数よりも大きいか等しい場合には、ＦＰＧＡ論理合成は成功するので、その後ＦＰＧＡへの回路のレイアウト（配置及び配線）を行えばよい。
【００１７】
ＦＰＧＡ論理合成が失敗しエラーが通知されると、ステップＳ５において、設計装置により、１つのＦＰＧＡブロックＲＡＭに複数のＲＡＭを割り当てる。具体的には、使用ＲＡＭ情報１４と、ＦＰＧＡ上で使用可能なＲＡＭの種別及び数を示すハードウェア制限情報１５とに基づいて、設計装置が、１つのＦＰＧＡブロックＲＡＭのワード方向及びビット方向の少なくとも一方において複数のＲＡＭを割り当てる。また更に、設計装置が、１つのＦＰＧＡブロックＲＡＭに割り当てられた複数のＲＡＭの各々を単一のＲＡＭとしてアクセスするように、複数のＲＡＭの各々の入出力信号を制御する制御回路を、ハードウェア記述言語による記述として生成する。これらの処理により、複数マッピング（複数割り当て）されたＲＡＭについての論理ＲＡＭライブラリ１６とブロックＲＡＭライブラリ１７とが生成される。これらの処理の内容については、後ほど詳細に説明する。
【００１８】
ステップＳ６において、設計装置は、設計対象回路の論理ブロック（論理モジュール）に対して、複数マッピングされたＲＡＭの引き出し処理を実行する。具体的には、設計装置が、開発対象の回路のハードウェア記述言語による記述から、単一のＲＡＭとしてそれぞれ配置された複数のＲＡＭの各々に接続される信号を特定し、特定された信号を１つのＦＰＧＡブロックＲＡＭの制御回路に接続し直す。これにより、複数マッピングされたＲＡＭを含むＲＴＬ記述１８が生成される。
【００１９】
図４は、設計対象回路の論理モジュールとＲＡＭとの関係の一例を示す模式図である。図４に示される例において、設計対象回路２０は論理モジュール２３及び論理モジュール２４を含む。論理モジュール２３はユーザ回路Ａ、論理ＲＡＭモデル２２、及びユーザ回路Ｂを含む。論理モジュール２４はユーザ回路Ｃ、論理ＲＡＭモデル２２、及びユーザ回路Ｄを含む。この状態では、ＲＡＭ２２がそれぞれ単一のＲＡＭとして各モジュールに配置されている。
【００２０】
図５は、複数マッピングされたＲＡＭと論理モジュールとの関係の一例を示す模式図である。図５に示される例において、設計対象回路２０は論理モジュール２３及び論理モジュール２４を含む。論理モジュール２３は、ユーザ回路Ａ及びユーザ回路Ｂを含むが、論理ＲＡＭモデルを含んでいない。また論理モジュール２４は、ユーザ回路Ｃ及びユーザ回路Ｄを含むが、論理ＲＡＭモデルを含んでいない。１つのブロックＲＡＭに２つのＲＡＭが割り当てられた論理ＲＡＭモデル２５が、論理モジュール２３及び２４の外部に配置されている。ユーザ回路Ａの出力信号及びユーザ回路Ｂの入力信号が論理モジュール２３から引き出され、論理ＲＡＭモデル２５に接続されている。またユーザ回路Ｃの出力信号及びユーザ回路Ｄの入力信号が論理モジュール２４から引き出され、論理ＲＡＭモデル２５に接続されている。
【００２１】
図６は、論理ＲＡＭモデル２５の構成の一例を示す図である。論理ＲＡＭモデル２５は、複数のＲＡＭが割り当てられたブロックＲＡＭ２１、論理回路２６、及び論理回路２７を含む。論理回路２６及び２７は、１つのＦＰＧＡブロックＲＡＭ２１に割り当てられた複数のＲＡＭの各々を単一のＲＡＭとしてアクセスするように複数のＲＡＭの各々の入出力信号を制御する制御回路である。論理回路２６の入力信号は、図５に示されるユーザ回路Ａ及びＣのそれぞれの出力信号である。論理回路２６は受け取った入力信号に基づいて、ブロックＲＡＭ２１をアクセスするための信号を生成する。論理回路２７はブロックＲＡＭ２１からの信号を入力信号として受け取り、受け取った入力信号に基づいて出力信号を生成する。論理回路２７の出力信号は、図５に示されるユーザ回路Ｂ及びＤのそれぞれの入力信号となる。
【００２２】
図４乃至図６に示されるように、設計対象回路２０から、単一のＲＡＭとしてそれぞれ配置された複数のＲＡＭ（図４に示される論理ＲＡＭモデル２２）の各々に接続される信号を特定し、特定された信号を論理ＲＡＭモデル２５に接続し直す。この際、これらの特定された信号は、論理ＲＡＭモデル２５に内蔵されたブロックＲＡＭ２１の制御回路（論理回路２６及ぶ２７）に接続されることになる。
【００２３】
図１に戻り、ステップＳ７において、設計装置は、ＲＴＬ記述１８により記述された回路の動作が仕様に合った動作をするか否かを、シミュレータを用いて検証する。適宜ＲＴＬ記述１８の修正及びシミュレーションを繰り替えすことにより、適切なＲＴＬ記述１８を生成する。
【００２４】
ステップＳ８において、設計装置により、ＲＴＬ記述１３に基づいてＦＰＧＡを論理合成する。即ち、ＲＴＬ記述１８の内容をＦＰＧＡデバイスが有するリソースに割り当てる。ステップＳ９において、設計装置により、ＦＰＧＡに対する回路のレイアウト（配置及び配線）を行う。なお必要に応じて、要求速度で回路が動作するか否かのタイミング検証を行う。以上でＦＰＧＡ開発処理を終了する。
【００２５】
図７は、ＲＡＭ割り当て処理の手順の一例を示すフローチャートである。図７の処理は図１のステップＳ５において実行され、図７に示す各ステップの処理は、設計装置により自動時に実行されてよい。
【００２６】
ステップＳ１１において、図１のステップＳ１で生成された論理ＲＡＭモデルをワード数の多い順にソートして、ワード数の降順に論理ＲＡＭモデルが並べられたリストを生成する。このリストを「ＷＮ，ＷＮ−１，・・・，Ｗ２，Ｗ１」とする。ステップＳ１２において、リスト中の各論理ＲＡＭモデルについて、ブロックＲＡＭ内の空きビット領域を計算する。
【００２７】
図８は、ブロックＲＡＭ内の空きビット領域を説明するための図である。図８及び以降の同様の図において、図面縦方向は複数のワード線が並べられている方向（即ちビット線が延びる方向）であり、図面横方向は複数のビット線が並べられている方向（即ちワード線が延びる方向）である。１つのブロックＲＡＭ２１には１つのＲＡＭ２８−１が割り当てられており、残りの領域２８−２のビット数が空きビット領域のビット数となる。
【００２８】
図７に戻り、ステップＳ１３において、リストに含まれる論理ＲＡＭモデルの総数Ｎを変数ｎに代入する。ステップＳ１４において、変数ｍを１に設定する。ステップＳ１５において、リスト中にＷｎ−ｍが存在し且つＷｎの空きビット領域にＷｎ−ｍを割り当て可能である、との条件が満たされるか否かを判断する。当該条件が満たされる場合にはステップＳ１６に進み、当該条件が満たされない場合にはステップＳ１８に進む。ステップＳ１６において、Ｗｎの空きビット領域にＷｎ−ｍを割り当て、Ｗｎ−ｍをリストから削除する。
【００２９】
図９は、ブロックＲＡＭ内の空きビット領域に対するＲＡＭの割り当てを説明するための図である。１つのブロックＲＡＭ２１には２つのＲＡＭ２８−１及び２８−３が割り当てられており、残りの領域２８−４のビット数が空きビット領域のビット数となる。ＲＡＭ２８−１が当初から存在するＲＡＭ（Ｗｎ）であり、ＲＡＭ２８−３が後ほど割り当てられたＲＡＭ（Ｗｎ−ｍ）である。なお、リスト「ＷＮ，ＷＮ−１，・・・，Ｗ２，Ｗ１」はワード数の多い順（降順）に並べられているので、Ｗｎのワード線数よりもＷｎ−ｍのワード線数の方が少なく、図９において、ＲＡＭ２８−３の方がＲＡＭ２８−１よりも縦方向の幅が短くなっている。
【００３０】
図７に戻り、ステップＳ１７において、Ｗｎ−ｍを割り当て後のＷｎの残りビット領域を再計算する。即ち、例えば図９の例においては、空きビット領域２８−４のビット数を計算する。ステップＳ１８において、変数ｍを１増加させる。
【００３１】
ステップＳ１９において、ｎ−ｍが０より大きいか否かを判定する。ｎ−ｍが０より大きい場合にはステップＳ１５に戻り、以降の処理を繰り返す。即ち、Ｗｎの空きビット領域に対する次のＷｎ−ｍの割り当て処理を実行する。ｎ−ｍが０より大きくない場合にはステップＳ２０に進む。
【００３２】
ステップＳ２０において、変数ｎを１減少させる。ステップＳ２１において、ｎが１より大きく且つリスト中Ｗｎが存在しない、との条件が満たされるか否かを判定する。当該条件が満たされる場合にはステップＳ２０に戻り、変数ｎを更に１減少させ、次のＷｎの存否を判定する。
【００３３】
ステップＳ２１の条件が満たされない場合には、ステップＳ２２において、ｎが１より大きいか否かを判定する。ｎが１より大きい場合、ステップＳ１４に戻り、以降の処理を繰り返す。即ち、新規Ｗｎに対する割り当て処理を実行する。ｎが１より大きくない場合、図７の処理は終了する。
【００３４】
図１０は、ＲＡＭ割り当て処理の手順の一例を示すフローチャートである。図１０の処理は、図１のステップＳ５において図７の処理の後に実行され、図１０に示す各ステップの処理は、設計装置により自動時に実行されてよい。
【００３５】
ステップＳ３１において、図７の処理の終了時に存在するリスト中の論理ＲＡＭモデルをビット数の多い順にソートして、ビット数の降順に論理ＲＡＭモデルが並べられたリストを生成する。このリストを「ＷＫ，ＷＫ−１，・・・，Ｗ２，Ｗ１」とする。なおこの際比較対象とするビット数は、複数のＲＡＭが図７の処理で割り当てられた論理ＲＡＭモデルについては、複数のＲＡＭのビット数の合計（総ビット数）を用いる。ステップＳ３２において、リスト中の各論理ＲＡＭモデルについて、ブロックＲＡＭ内の空きワード領域を計算する。
【００３６】
図１１は、ブロックＲＡＭ内の空きワード領域を説明するための図である。１つのブロックＲＡＭ２１には１つのＲＡＭ２９−１が割り当てられており、残りの領域２９−２のワード数が空きワード領域のワード数となる。
【００３７】
図１０に戻り、ステップＳ３３において、リストに含まれる論理ＲＡＭモデルの総数Ｋを変数ｋに代入する。ステップＳ３４において、変数ｍを１に設定する。ステップＳ３５において、リスト中にＷｋ−ｍが存在し且つＷｋの空きビット領域にＷｋ−ｍを割り当て可能である、との条件が満たされるか否かを判断する。当該条件が満たされる場合にはステップＳ３６に進み、当該条件が満たされない場合にはステップＳ３８に進む。ステップＳ３６において、Ｗｋの空きビット領域にＷｋ−ｍを割り当て、Ｗｋ−ｍをリストから削除する。
【００３８】
図１２は、ブロックＲＡＭ内の空きビット領域に対するＲＡＭの割り当てを説明するための図である。１つのブロックＲＡＭ２１には２つのＲＡＭ２９−１及び２９−３が割り当てられており、残りの領域２９−４のワード数が空きワード領域のワード数となる。ＲＡＭ２９−１が当初から存在するＲＡＭ（Ｗｋ）であり、ＲＡＭ２９−３が後ほど割り当てられたＲＡＭ（Ｗｋ−ｍ）である。なお、リスト「ＷＫ，ＷＫ−１，・・・，Ｗ２，Ｗ１」はビット数の多い順（降順）に並べられているので、Ｗｋのビット線数よりもＷｋ−ｍのビット線数の方が少なく、図９において、ＲＡＭ２９−３の方がＲＡＭ２９−１よりも横方向の幅が短くなっている。
【００３９】
図１０に戻り、ステップＳ３７において、Ｗｋ−ｍを割り当て後のＷｋの残りワード領域を再計算する。即ち、例えば図１２の例においては、空きワード領域２９−４のワード数を計算する。ステップＳ３８において、変数ｍを１増加させる。
【００４０】
ステップＳ３９において、ｋ−ｍが０より大きいか否かを判定する。ｋ−ｍが０より大きい場合にはステップＳ３５に戻り、以降の処理を繰り返す。即ち、Ｗｋの空きビット領域に対する次のＷｋ−ｍの割り当て処理を実行する。ｋ−ｍが０より大きくない場合にはステップＳ４０に進む。
【００４１】
ステップＳ４０において、変数ｋを１減少させる。ステップＳ４１において、ｋが１より大きく且つリスト中Ｗｋが存在しない、との条件が満たされるか否かを判定する。当該条件が満たされる場合にはステップＳ４０に戻り、変数ｋを更に１減少させ、次のＷｋの存否を判定する。
【００４２】
ステップＳ４１の条件が満たされない場合には、ステップＳ４２において、ｋが１より大きいか否かを判定する。ｋが１より大きい場合、ステップＳ３４に戻り、以降の処理を繰り返す。即ち、新規Ｗｋに対する割り当て処理を実行する。ｋが１より大きくない場合、図７の処理は終了する。
【００４３】
図１３は、複数マッピングされたＲＡＭに対する制御回路を生成する処理の手順の一例を示すフローチャートである。図１３の処理は図１のステップＳ５において実行され、図１３に示す各ステップの処理は、設計装置により自動時に実行されてよい。この図１３の処理により、１つのＦＰＧＡブロックＲＡＭに割り当てられた複数のＲＡＭの各々を単一のＲＡＭとしてアクセス可能となるように、複数のＲＡＭの各々の入出力信号を制御する制御回路が、ハードウェア記述言語による記述として生成される。
【００４４】
なお図１３に示される処理は、複数マッピングされた論理ＲＡＭモデルの各々に対して実行される。即ち、１つの論理ＲＡＭモデルに着目した場合、複数のＲＡＭが割り当てられた１つのＦＰＧＡブロックＲＡＭに対して、図１３に示される処理が実行されてよい。まず複数マッピングされた論理ＲＡＭモデル３０（１つの論理ＲＡＭモデル）のうち、当該ＲＡＭモデルにマッピングされた複数のＲＡＭのリスト３１が、ステップＳ１において用いられる。
【００４５】
ステップＳ５１乃至Ｓ５３のループにおいて、複数マッピングされたＲＡＭのリスト３１中に存在する各ＲＡＭに対して、ステップ５２におけるポート番号割り当て処理を実行する。具体的には、各ＲＡＭに対して入出力ポートを割り当て、更に入出力ポートにポート番号を割り当てる。ポート番号は、リスト中の複数のＲＡＭに対して１から順番（例えば昇順）に割り当てられた連続する番号であってよい。
【００４６】
ステップＳ５４において、設計装置は、競合判定回路及び競合調停回路を生成する。即ち、設計装置は、競合判定回路及び競合調停回路のハードウェア記述言語による記述を生成する。この際、外部からのアクセス対象のポートに対するアクセス要求が、外部から供給されるＥＮＡＢＬＥ信号のアサートとして通知されるとする。競合判定回路は、複数のポートに対するＥＮＡＢＬＥ信号のアサートが同一サイクルで発生した場合に、競合が発生したと判定するように設計される。また競合調停回路は、複数のＲＡＭに対するアクセス競合が存在する場合に複数のＲＡＭに順番にアクセスを可能にするよう設計される。より具体的には、競合調停回路は、競合が発生した場合に競合が発生している複数のポートのうちでポート番号の若い順番にアクセス権を与えるように設計される。即ち競合調停回路は、ラウンドロビン方式でポートにアクセス権を与える。具体的な回路形態の一例としては、競合調停回路からの信号に基づいて、ポートセレクタ回路が、アクセス権の与えられたポートを選択するポート選択信号を出力してよい。なおポートセレクタ回路は、アクセス競合の存在しない場合には、外部からのＥＮＡＢＬＥ信号のアサートに応答して、当該アサート状態のＥＮＡＢＬＥ信号に対応するポートを選択するようなポート選択信号を出力してよい。競合判定回路及び競合調停回路を自動で生成することにより、１つのＦＰＧＡブロックＲＡＭに複数ＲＡＭのマッピングをしても、それに起因して発生する追加の設計作業の手間は最小限ですむ。従って、適切な動作をするＦＰＧＡ回路をコスト増なく開発することができる。
【００４７】
ステップＳ５５乃至Ｓ５７のループにおいて、マッピングされた複数のＲＡＭのそれぞれのアドレス開始位置について、当該アドレス開始位置をポート番号に対応付けする処理を実行する。なおマッピングされた複数のＲＡＭのそれぞれのアドレス開始位置に関する情報は、複数マッピングされた論理ＲＡＭモデル３０に含まれるアドレス開始位置情報３２として提供される。設計装置は例えば、各ポート番号とアドレス開始位置とを対応付けたテーブルを生成してよい。
【００４８】
ステップＳ５８において、設計装置はアドレス計算回路を生成する。即ち、設計装置は、アドレス計算回路のハードウェア記述言語による記述を生成してよい。具体的には、複数のポートのうちの１つを上記ポート選択信号に応じて選択し、選択されたポートに外部から入力されるアドレスデータにオフセットを加算するアドレス選択及びオフセット調整回路を生成する。アドレス選択及びオフセット調整回路は、オフセットの加算により、外部から入力されるアドレスを変換して複数のＲＡＭのそれぞれにアクセスするアドレスを生成する。アドレス選択及びオフセット調整回路を自動で生成することにより、１つのＦＰＧＡブロックＲＡＭに複数ＲＡＭのマッピングをしても、それに起因して発生する追加の設計作業の手間は最小限ですむ。従って、適切な動作をするＦＰＧＡ回路をコスト増なく開発することができる。
【００４９】
ステップＳ５９において、設計装置はライトイネーブルセレクト回路を生成する。即ち、設計装置は、ライトイネーブルセレクト回路のハードウェア記述言語による記述を生成する。ライトイネーブルセレクト回路は、複数のポートのうちの１つをポート選択信号に応じて選択し、選択されたポートに外部から入力されるライトイネーブル信号をＲＡＭに印加する。
【００５０】
ステップＳ６０において、設計装置は書き込みアドレスのデータを読み出すリード制御回路を生成する。即ち、設計装置は、リード制御回路のハードウェア記述言語による記述を生成する。ビット方向に複数のＲＡＭが割り当てられている場合には、あるワードアドレスに対する書き込み動作を１つのＲＡＭに対して実行すると、他のＲＡＭの当該ワードアドレスの格納データが破壊されてしまう。これは、１つの物理的なブロックＲＡＭに対して、見かけ上複数のＲＡＭを割り当てているからである。そこでビット方向に複数のＲＡＭが割り当てられている場合には、書き込みワードアドレスのデータを読み出して、書き込み対象となるＲＡＭに対応するビット位置のデータを書き込みデータで置き換え、置き換えた後のデータをＲＡＭに書き込む。即ち、ビット方向に割り当てられた複数のＲＡＭからデータを読み出し、外部からの書き込みデータにより読み出したデータの一部を置き換え、置き換えた後のデータを複数のＲＡＭに書き込む。この書き込み処理は以下に説明するライトデータ回路により実行される。
【００５１】
ステップＳ６１において、設計装置はライトデータ生成回路を生成する。即ち、設計装置は、ライトデータ生成回路のハードウェア記述言語による記述を生成してよい。ビット方向に複数のＲＡＭが割り当てられていない場合、ライトデータ生成回路は、複数のポートのうちの１つをポート選択信号に応じて選択し、選択されたポートに外部から入力される書き込みデータをＲＡＭに入力する。ビット方向に複数のＲＡＭが割り当てられている場合、ライトデータ生成回路は、書き込みワードアドレスのデータを読み出して、書き込み対象となるＲＡＭに対応するビット位置のデータを書き込みデータで置き換え、置き換えた後のデータをＲＡＭに供給する。ライトデータ生成回路を自動で生成することにより、１つのＦＰＧＡブロックＲＡＭに複数ＲＡＭのマッピングをしても、それに起因して発生する追加の設計作業の手間は最小限ですむ。従って、適切な動作をするＦＰＧＡ回路をコスト増なく開発することができる。
【００５２】
図１５は、データ書き込み時の動作を説明するための図である。読み出しデータ４０に対して、書き込みデータ４１を適切なビット位置に挿入することにより、書き込みデータ４１によりデータが部分的に置き換えられた読み出しデータ４０Ａが得られる。この読み出しデータ４０Ａが、書き込みデータとして、複数のＲＡＭ（１つのブロックＲＡＭ）に書き込まれる
図１４は、図１３に示される処理の続きの処理を示すフローチャートである。ステップＳ６２において、設計装置はＶＡＬＩＤ信号を生成するＶＡＬＩＤ信号制御回路を生成する。即ち、設計装置は、ＶＡＬＩＤ信号制御回路のハードウェア記述言語による記述を生成してよい。具体的には、ＶＡＬＩＤ信号制御回路は、ポート選択信号が示す出力ポートから出力されるＶＡＬＩＤ信号を、当該ポートに対応するＲＡＭの処理が終了したときにアサート状態にする。更にＶＡＬＩＤ信号制御回路は、アクセス要求されていないポートについては、ＶＡＬＩＤ信号をアサート状態にしてよい。このＶＡＬＩＤ信号制御回路は、複数のＲＡＭのうちアクセス可能なＲＡＭを示す信号を出力する回路として機能する。ＶＡＬＩＤ信号制御回路を自動で生成することにより、１つのＦＰＧＡブロックＲＡＭに複数ＲＡＭのマッピングをしても、それに起因して発生する追加の設計作業の手間は最小限ですむ。従って、適切な動作をするＦＰＧＡ回路をコスト増なく開発することが可能となる。
【００５３】
ステップＳ６３において、設計装置は出力データセレクト回路を生成する。即ち、設計装置は、出力データセレクト回路のハードウェア記述言語による記述を生成してよい。具体的には、出力データセレクト回路は、ポート選択信号が示す出力ポートから、ＲＡＭのアクセス処理に必要なレイテンシに合わせて、ＲＡＭからの読み出し信号を出力する。書き込み動作の場合は、出力データはドントケアとなる。
【００５４】
以上の処理により、マルチマッピングＲＡＭラッパー回路３４が生成される。このマルチマッピングＲＡＭラッパー回路３４は、複数のＲＡＭか割り当てられた１つのＦＰＧＡブロックＲＡＭと、図１３及び図１４の処理で生成された種々の制御回路とを含む。
【００５５】
図１６は、複数マッピングされたＲＡＭの引き出し処理の概略的な手順の一例を示す図である。図１６に示す処理は、図１のステップＳ６において実行される。図１６に示す各ステップの処理は、設計装置により自動的に実行されてよい。
【００５６】
ステップＳ７１において、設計装置は、設計対象回路中に存在するのＲＡＭのうち、他のＲＡＭと一緒にＦＰＧＡブロックＲＡＭに割り当てられた全てのＲＡＭについて、入出力信号を抽出する。この抽出処理により、各ＲＡＭについてＲＡＭの識別情報と入出力信号の識別情報とを含むマッピングＲＡＭ情報４５が得られる。
【００５７】
ステップＳ７２において、設計装置が、ＲＴＬ記述を修正する。具体的には、設計装置が、マッピングＲＡＭ情報４５により特定される入出力信号を、論理ＲＡＭライブラリ１６中の論理ＲＡＭモデルの制御回路に接続し直す。これにより、複数マッピングされたＲＡＭを含む修正後のＲＴＬ記述１８が生成される。
【００５８】
このようにＲＴＬ記述の修正はＲＡＭの入出力信号のつなぎ替えのみであり、ＲＴＬ記述の実質的な内容を修正するものではない。またＲＡＭの入出力信号のつなぎ替えは自動的に行うことができる。従って、１つのＦＰＧＡブロックＲＡＭに複数ＲＡＭのマッピングをしても、それに起因して発生する追加の設計作業の手間は最小限ですむ。従って、適切な動作をするＦＰＧＡ回路をコスト増なく開発することが可能となる。
【００５９】
図１７は、複数マッピングされたＲＡＭの引き出し処理の詳細な手順の一例を示す図である。図１７に示す処理は、図１のステップＳ６において実行される。図１７に示す各ステップの処理は、設計装置により自動的に実行されてよい。
【００６０】
なお図１７に示される処理は、複数マッピングされた論理ＲＡＭモデルの各々に対して実行される。即ち、１つの論理ＲＡＭモデルに着目した場合、複数のＲＡＭが割り当てられた１つのＦＰＧＡブロックＲＡＭと制御回路とを含む１つの論理ＲＡＭモデルに対して、図１７に示される処理が実行されてよい。
【００６１】
ステップＳ８１において、１つの論理ＲＡＭモデル（マルチマッピングＲＡＭモデル）５０に割り当てられている複数のＲＡＭの各々について、設計装置は、ＲＴＬ記述１３中の対応するＲＡＭの入出力信号とＲＡＭが配置されている階層とを抽出する。この抽出処理により、マッピングされたＲＡＭのリスト４５−１、マッピングされたＲＡＭの階層情報４５−２、及びマッピングされたＲＡＭのＩＦ情報（入出力信号情報）４５−３が得られる。
【００６２】
ステップＳ８２において、マッピングされたＲＡＭのリスト４５−１により特定される全てのＲＡＭが、ＲＴＬ記述１３において同一階層に配置されているか否かを判定する。全てのＲＡＭが同一階層に配置されている場合、ステップＳ９４において、複数マッピング論理ＲＡＭモデル５０を当該階層に配置する。ステップＳ９５において、マッピングされたＲＡＭのＩＦ情報４５−３により特定される入出力信号を、上記階層に配置された複数マッピング論理ＲＡＭモデル５０に接続する。
【００６３】
ＲＡＭが同一階層に配置されていない場合、ステップＳ８３及びＳ９１で構成されるループにおいて、マッピングされたＲＡＭのリスト４５−１中の複数ＲＡＭの一つ一つについて、ステップＳ８４乃至９０の処理を順次実行する。まずステップＳ８４において、リスト４５−１中の着目ＲＡＭのＲＴＬ記述１３における階層レベルをｙに代入する。ここで階層レベル１が最上位階層である。
【００６４】
ステップＳ８５及び９０で構成されるループにおいて、ｙを１ずつ減少させながら、ステップＳ８６乃至８８の処理を実行する。ステップＳ８６乃至８８では、マッピングされたＲＡＭのＩＦ情報４５−３により特定される入出力信号の一つ一つについて、当該信号をｙよりも１つ上の階層に引き出すようにＲＴＬ記述を修正する処理を順次実行する。
【００６５】
以上のステップＳ８３及びＳ９１の処理により、マッピングされたＲＡＭのＩＦ情報４５−３により特定される入出力信号が全て最上位階層まで引き出される。その後ステップＳ９２において、複数マッピング論理ＲＡＭモデル５０を最上位階層に配置する。ステップＳ９３において、最上位階層まで引き出した入出力信号を、最上位階層に配置された複数マッピング論理ＲＡＭモデル５０に接続する。以上の処理により、修正されたＲＴＬ記述１８が生成される。
【００６６】
図１８は、複数マッピングされた論理ＲＡＭモデルの入出力信号の一例を示す図である。図１８に示すマルチマッピングＲＡＭ５１は、ＲＡＭ５２、ＲＡＭ５３、及びＲＡＭ５４を含む。ＲＡＭ５２は、イネーブル信号ＥＮ１、６ビットのアドレス信号ＡＤ１［５：０］、８ビットのデータ信号ＤＩ１［７：０］、及びライトイネーブル信号ＷＥ１を入力信号として受け取る。ＲＡＭ５２は、８ビットのデータ信号ＤＯ１［７：０］及びＶＡＬＩＤ信号ＶＡＬ１を出力信号として出力する。ＲＡＭ５３は、イネーブル信号ＥＮ２、８ビットのアドレス信号ＡＤ２［７：０］、２０ビットのデータ信号ＤＩ２［１９：０］、及びライトイネーブル信号ＷＥ２を入力信号として受け取る。ＲＡＭ５３は、２０ビットのデータ信号ＤＯ２［１９：０］及びＶＡＬＩＤ信号ＶＡＬ２を出力信号として出力する。ＲＡＭ５４は、イネーブル信号ＥＮ３、９ビットのアドレス信号ＡＤ３［８：０］、１６ビットのデータ信号ＤＩ３［１５：０］、及びライトイネーブル信号ＷＥ３を入力信号として受け取る。ＲＡＭ５４は、１６ビットのデータ信号ＤＯ３［１５：０］及びＶＡＬＩＤ信号ＶＡＬ３を出力信号として出力する。マルチマッピングＲＡＭ５１は更に、クロック信号ＣＬＫ及びシステムリセット信号ＸＲＳＴを入力信号として受け取る。
【００６７】
図１９は、図１８に示す論理ＲＡＭモデルの入出力信号について説明する表である。Ｉ／Ｏは入力（Ｉ）と出力（Ｏ）との区別を示す。Ｐ／Ｎは信号の極性を示す。表においてＲＡＭ１乃至ＲＡＭ３は、図１８のＲＡＭ５２乃至５４のことである。「ｂｉｔ」欄が「−」の信号はビット幅が１ビットの信号である。
【００６８】
図２０は、図１８に示すマルチマッピングＲＡＭの回路構成の一例を示す図である。図２０に示すマルチマッピングＲＡＭは、競合判定回路６１、調停回路６２、ポートセレクタ６３、ＶＡＬＩＤセレクタ６４、アドレス選択＆オフセット調整回路６５、ライトイネーブルセレクタ６６、及び入力データセレクタ６７を含む。マルチマッピングＲＡＭは更に、フリップフロップ６８、フリップフロップ６９、出力データセレクタ７０、及びＦＰＧＡブロックＲＡＭ７１を含む。
【００６９】
競合判定回路６１は、イネーブル信号ＥＮ１乃至ＥＮ３の何れかが重複してアサート状態になると、競合状態を示す信号をアサートする。調停回路６２は、競合判定回路６１からの競合状態を示す信号に基づいて、競合状態にあるポート間での調停を行う信号を出力する。この調停を行う信号は、ポート１及びポート２の間での調停を行う信号、ポート２及びポート３の間での調停を行う信号、ポート１及びポート３の間での調停を行う信号、ポート１乃至ポート３の間での調停を行う信号を含む。
【００７０】
ポートセレクタ６３は、競合判定回路６１からの競合状態を示す信号に基づいて、調停回路６２からのポート間での調停を行う複数の信号のうちの何れか１つ又は外部から入力されるそのままのイネーブル信号ＥＮ１乃至ＥＮ３を選択して出力する。このポートセレクタ６３の出力信号は、選択したポート即ちアクセス許可したポートを示すポート選択信号である。ＶＡＬＩＤセレクタ６４は、競合判定回路６１からの競合状態を示す信号に基づいて、調停回路６２からの複数の信号のうちの何れか１つ又は固定値"１１１"を選択して出力する。このＶＡＬＩＤセレクタ６４の出力信号は、フリップフロップ６９によりＦＰＧＡブロックＲＡＭ７１の読み出し動作のレイテンシ分だけ遅延され、アクセス可能なポートを示すＶＡＬＩＤ信号ＶＡＬ１乃至ＶＡＬ３として出力される。
【００７１】
アドレス選択＆オフセット調整回路６５は、ポート選択信号が示すポートの入力アドレス（ＡＤ１乃至ＡＤ３の何れか１つ）を選択し、ポート選択信号が示すポートに対応するオフセット値を選択アドレスに加算することで、変換後のアドレスを生成する。変換後のアドレスはＦＰＧＡブロックＲＡＭ７１に入力される。ライトイネーブルセレクタ６６は、ポート選択信号が示すポートのライトイネーブル信号（ＷＥ１乃至ＷＥ３の何れか１つ）を選択し、選択されたライトイネーブル信号をＦＰＧＡブロックＲＡＭ７１に供給する。入力データセレクタ６７は、ポート選択信号が示すポートの入力データ信号（ＤＩ１乃至ＤＩ３の何れか１つ）を選択し、選択された入力データ信号をＦＰＧＡブロックＲＡＭ７１に供給する。
【００７２】
フリップフロップ６８は、ＦＰＧＡブロックＲＡＭ７１の読み出し動作のレイテンシ分だけポート選択信号を遅延し、遅延されたポート選択信号を出力データセレクタ７０に供給する。出力データセレクタ７０は、ＦＰＧＡブロックＲＡＭ７１から出力される読み出しデータを、遅延されたポート選択信号が示すポートの出力信号として主力する。この出力信号が、マルチマッピングＲＡＭ５１の読み出しデータ（ＤＯ１乃至ＤＯ３の何れか１つ）となる。
【００７３】
図２１は、競合判定回路及び調停回路の構成の一例を示す図である。図２１において競合判定回路６１は、ＡＮＤ回路８０乃至８３、ＯＲ回路８４、ＡＮＤ回路８５、ＯＲ回路８６、及びＮＡＮＤ回路８７を含む。イネーブル信号ＥＮ１乃至ＥＮ３が、１つが反転され残り２つが非反転の状態でＡＮＤ回路８０乃至８２に印加され、また３つとも非反転の状態でＡＮＤ回路８３に印加される。これにより、ＡＮＤ８０乃至８２の出力はそれぞれ、ポート１及び２の競合時、ポート２及び３の競合時、ポート１及び３の競合時、及びポート１乃至３の競合時にＨＩＧＨにアサートされる。ＯＲ回路８４、ＡＮＤ回路８５、ＯＲ回路８６、及びＮＡＮＤ回路８７は、イネーブル信号ＥＮ１乃至ＥＮ３を入力として、ポート間に競合の無い時にＨＩＧＨにアサートされる信号を生成する。即ち、ＮＡＮＤ回路８７の出力は、イネーブル信号ＥＮ１乃至ＥＮ３のうち１つのみＨＩＧＨ又は全てがＬＯＷのときにＨＩＧＨになる。
【００７４】
調停回路６２は、トグル回路９１乃至９３、３進カウンタ９４、デコーダ９５、インバータ１０１乃至１０６を含む。トグル回路９１乃至９３はそれぞれ、ポート１及び２の競合時、ポート２及び３の競合時、及びポート１及び３の競合時にそれぞれアサートされる信号をイネーブル信号として受け取り、クロック信号ＣＬＫに同期してトグル動作をする。３進カウンタ９４は、ポート１乃至３の競合時にアサートされる信号をイネーブル信号として受け取り、クロック信号ＣＬＫに同期して０〜２の間で循環的に繰り返しカウントアップする。デコーダ９５は、３進カウンタ９４のカウント値出力をデコードすることにより、３ビットの出力のうちの１つのビットを順番にアサート状態にする。
【００７５】
ポートセレクタ６３は、無競合時にＰ０入力を選択し、ポート１及び２の競合時にＰ１入力を選択し、ポート２及び３の競合時にＰ２入力を選択し、ポート１及び３の競合時にＰ３入力を選択し、ポート１乃至３の競合時にＰ４入力を選択する。具体的には、無競合時には、Ｐ０入力に印加されるイネーブル信号ＥＮ１乃至ＥＮ３が、そのままポート選択信号の第１ビット乃至第３ビットとして出力される。ポート１及び２の競合時には、Ｐ１入力に印加される調停回路６２のトグル回路９１の出力信号と、その反転信号と、固定値"０"とがそれぞれポート選択信号の第１ビット乃至第３ビットとして出力される。ポート２及び３の競合時には、Ｐ２入力に印加される固定値"０"と、調停回路６２のトグル回路９２の出力信号と、その反転信号とがそれぞれポート選択信号の第１ビット乃至第３ビットとして出力される。ポート１及び３の競合時には、Ｐ３入力に印加される調停回路６２のトグル回路９３の出力トグル信号と、固定値"０"と、トグル信号の反転信号とがそれぞれポート選択信号の第１ビット乃至第３ビットとして出力される。またポート１乃至３の競合時には、Ｐ４入力に印加される調停回路６２のデコーダ９５の３ビットの出力信号が、ポート選択信号の第１ビット乃至第３ビットとして出力される。
【００７６】
ＶＡＬＩＤセレクタ６４は、無競合時にＶ０入力を選択し、ポート１及び２の競合時にＶ１入力を選択し、ポート２及び３の競合時にＶ２入力を選択し、ポート１及び３の競合時にＶ３入力を選択し、ポート１乃至３の競合時にＶ４入力を選択する。具体的には、無競合時には、Ｖ０入力に印加される固定値"１１１"が、ＶＡＬＩＤ信号の第１ビット乃至第３ビットとして出力される。ポート１及び２の競合時には、Ｖ１入力に印加される調停回路６２のトグル回路９１の出力信号と、その反転信号と、固定値"１"とがそれぞれＶＡＬＩＤ信号の第１ビット乃至第３ビットとして出力される。ポート２及び３の競合時には、Ｖ２入力に印加される固定値"１"と、調停回路６２のトグル回路９２の出力信号と、その反転信号とがそれぞれＶＡＬＩＤ信号の第１ビット乃至第３ビットとして出力される。ポート１及び３の競合時には、Ｖ３入力に印加される調停回路６２のトグル回路９３の出力トグル信号と、固定値"１"と、トグル信号の反転信号とがそれぞれＶＡＬＩＤ信号の第１ビット乃至第３ビットとして出力される。またポート１乃至３の競合時には、Ｖ４入力に印加される調停回路６２のデコーダ９５の３ビットの出力信号が、全ビット反転されてＶＡＬＩＤ信号の第１ビット乃至第３ビットとして出力される。
【００７７】
図２２は、１つのポートにアクセスした場合のマルチマッピングＲＡＭの動作の一例を示すタイミング図である。サイクルＴ１において、ＶＡＬＩＤ信号ＶＡＬ１がＨＩＧＨのアサート状態にあり、ポート１はアクセス可能状態であることが分かる。サイクルＴ２において、ポート１のイネーブル信号ＥＮ１とライトイネーブル信号ＷＥ１とをアサートし、アドレスａｄ１（０）とデータｄｉ１（１）とを印加することにより、ポート１のＲＡＭに対する書き込み動作が実行される。またサイクルＴ６において、ポート１のイネーブル信号ＥＮ１とライトイネーブル信号ＷＥ１とをそれぞれアサート及びネゲートし、アドレスａｄ１（１）を印加することにより、ポート１のＲＡＭからデータｄｏ１（１）を読み出す動作が実行される。この例のようにポート間でアクセスが競合しない場合には、アクセス要求したサイクルの次のサイクルで処理が完了するため、ＶＡＬＩＤ信号ＶＡＬ１は常時ＨＩＧＨとなっている。
【００７８】
図２３は、２つのポートに同時アクセスした場合のマルチマッピングＲＡＭの動作の一例を示すタイミング図である。サイクルＴ１において、ＶＡＬＩＤ信号ＶＡＬ１及びＶＡＬ２がＨＩＧＨのアサート状態にあり、ポート１及び２はアクセス可能状態であることが分かる。サイクルＴ２において、ポート１のイネーブル信号ＥＮ１とライトイネーブル信号ＷＥ１とをアサートし、ポート２のイネーブル信号ＥＮ２をアサートする。即ち、ポート１とポート２とに同時にアクセスを要求する。
【００７９】
サイクルＴ３において、ポート１のＶＡＬＩＤ信号ＶＡＬ１がアサート状態となることから、ポート１についてはアクセスリクエストが完了したことが分かる。従って、その次のサイクルＴ４では、ポート１に対する新たなアドレス入力ａｄａ（１）を印加している。またサイクルＴ３において、ポート２のＶＡＬＩＤ信号ＶＡＬ２がネゲート状態となることから、ポート２についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ４まで、ポート２に対するアドレス入力ａｄ２（０）をそのまま維持している。
【００８０】
サイクルＴ４において、ポート１のＶＡＬＩＤ信号ＶＡＬ１がネゲート状態となることから、ポート１についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ５まで、ポート１に対するアドレス入力ａｄａ（１）をそのまま維持している。またサイクルＴ４において、ポート２のＶＡＬＩＤ信号ＶＡＬ２がアサート状態となることから、ポート２についてはアクセスリクエストが完了したことが分かる。従って、その次のサイクルＴ５では、ポート２に対する新たなアドレス入力ａｄ２（１）を印加している。
【００８１】
以降同様にしてポート１とポート２とが交互にアクセス許可され、ＶＡＬＩＤ信号ＶＡＬ１とＶＡＬ２とが交互にアサートされる。
【００８２】
図２４は、３つのポートに同時アクセスした場合のマルチマッピングＲＡＭの動作の一例を示すタイミング図である。サイクルＴ１において、ＶＡＬＩＤ信号ＶＡＬ１乃至ＶＡＬ３がＨＩＧＨのアサート状態にあり、ポート１乃至３はアクセス可能状態であることが分かる。サイクルＴ２において、ポート１乃至３のイネーブル信号ＥＮ１乃至ＥＮ３をアサートする。即ち、ポート１乃至３に同時にアクセスを要求する。
【００８３】
サイクルＴ３において、ポート１のＶＡＬＩＤ信号ＶＡＬ１がアサート状態となることから、ポート１についてはアクセスリクエストが完了したことが分かる。従って、その次のサイクルＴ４では、ポート１に対する新たなアドレス入力ａｄａ（１）を印加している。またサイクルＴ３において、ポート２のＶＡＬＩＤ信号ＶＡＬ２がネゲート状態となることから、ポート２についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ４まで、ポート２に対するアドレス入力ａｄ２（０）をそのまま維持している。サイクルＴ３においては更に、ポート３のＶＡＬＩＤ信号ＶＡＬ３がネゲート状態となることから、ポート３についてもアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ４まで、ポート３に対するアドレス入力ａｄ３（０）をそのまま維持している。
【００８４】
サイクルＴ４において、ポート１のＶＡＬＩＤ信号ＶＡＬ１がネゲート状態となることから、ポート１についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ５まで、ポート１に対するアドレス入力ａｄａ（１）をそのまま維持している。またサイクルＴ４において、ポート２のＶＡＬＩＤ信号ＶＡＬ２がアサート状態となることから、ポート２についてはアクセスリクエストが完了したことが分かる。従って、その次のサイクルＴ５では、ポート２に対する新たなアドレス入力ａｄ２（１）を印加している。サイクルＴ４においては更に、ポート３のＶＡＬＩＤ信号ＶＡＬ３がネゲート状態となることから、ポート３についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ５まで、ポート３に対するアドレス入力ａｄ３（０）をそのまま維持している。
【００８５】
サイクルＴ５において、ポート１のＶＡＬＩＤ信号ＶＡＬ１がネゲート状態となることから、ポート１についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ６まで、ポート１に対するアドレス入力ａｄａ（１）をそのまま維持している。またサイクルＴ５において、ポート２のＶＡＬＩＤ信号ＶＡＬ２がネゲート状態となることから、ポート２についてはアクセスリクエストが完了していないことが分かる。従って、その次のサイクルＴ６まで、ポート２に対するアドレス入力ａｄ２（１）をそのまま維持している。サイクルＴ５においては更に、ポート３のＶＡＬＩＤ信号ＶＡＬ３がアサート状態となることから、ポート３についてはアクセスリクエストが完了したことが分かる。従って、その次のサイクルＴ６では、ポート３に対する新たなアドレス入力ａｄ３（１）を印加している。
【００８６】
以降同様にしてポート１乃至ポート３が１つずつ順番にアクセス許可され、ＶＡＬＩＤ信号ＶＡＬ１乃至ＶＡＬ３とが１つずつ順番にアサートされる。
【００８７】
図２５は、ユーザ回路とマルチマッピングＲＡＭとの接続形態の一例を示す図である。ユーザ回路２００は、マルチマッピングＲＡＭ２０１のｎ個のＲＡＭにアクセスしてデータ書き込みやデータ読み出しのアクセス動作を実行する。ユーザ回路２００からマルチマッピングＲＡＭ２０１へは、ｎ個のＲＡＭに対応するｎ個のイネーブル信号ＥＮｎ、ｎ個のライトイネーブル信号ＷＥｎ、ｎ個のアドレス信号ＡＤｎ、及びｎ個の書き込みデータ信号ＤＩｎを印加する。マルチマッピングＲＡＭ２０１からユーザ回路２００へは、ｎ個のＲＡＭに対応するｎ個の読み出しデータ信号ＤＯｎ及びｎ個のＶＡＬＩＤ信号ＶＡＬｎが供給される。
【００８８】
ユーザ回路２００には、ＶＡＬＩＤ信号を監視し、ＶＡＬＩＤ信号がアサート状態の時のみアクセスできるように設計しておく。このような機能をユーザ回路２００に予め設けておくことにより、複数マッピングされた論理ＲＡＭに対して競合アクセスが発生しても、ＶＡＬＩＤ信号に基づいて適切なアクセス動作を実現することができる。従って、ＲＡＭリソースが不足したことが判明した時点で複数のＲＡＭを単一のブロックＲＡＭに割り当てた場合でも、最初に生成したユーザ回路２００のＲＴＬ記述を変更する必要がない。
【００８９】
図２６は、マルチマッピングＲＡＭにアクセスするユーザ回路の動作の一例を示すタイミング図である。ユーザ回路２００は、サイクルＴ２において、ＶＡＬＩＤ信号ＶＡＬｎがＨＩＧＨのアサート状態にあり、ポートｎはアクセス可能状態であることが分かる。サイクルＴ３において、ユーザ回路２００は、ポートｎのイネーブル信号ＥＮｎとライトイネーブル信号ＷＥｎとをアサートし、アドレス信号とデータ信号とを印加することにより、ポートｎのＲＡＭに対する書き込み動作を実行する。またサイクルＴ８において、ＶＡＬＩＤ信号ＶＡＬｎがＨＩＧＨのアサート状態にあり、ポートｎはアクセス可能状態であることが分かる。サイクルＴ９において、ユーザ回路２００は、ポートｎのイネーブル信号ＥＮｎをアサートし、アドレス信号ａｄ１（２）を印加することにより、ポートｎのＲＡＭに対する読み出し動作を実行しようとする。しかしこのとき、ユーザ回路２００は他のポートに対してアクセス処理を実行しており、ポートｎのアクセス処理はサイクルＴ１２まで完了しない。サイクルＴ１２においてＶＡＬＩＤ信号ＶＡＬｎがＨＩＧＨのアサート状態になると、ユーザ回路２００はポートｎに対する読み出し動作が完了したことを認識し、次のサイクルＴ１３においてアドレス信号入力を停止する。
【００９０】
図２７は、設計装置の構成の一例を示す図である。図２７に示されるように、本願開示の設計処理を実行する装置は、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図２７の装置は、コンピュータ５１０と、コンピュータ５１０に接続されるディスプレイ装置５２０、通信装置５２３、及び入力装置よりなる。入力装置は、例えばキーボード５２１及びマウス５２２を含む。コンピュータ５１０は、ＣＰＵ（Central Processing Unit）５１１、ＲＡＭ５１２、ＲＯＭ５１３、ハードディスク等の二次記憶装置５１４、可換媒体記憶装置５１５、及びインターフェース５１６を含む。
【００９１】
キーボード５２１及びマウス５２２は、ユーザとのインターフェースを提供するものであり、コンピュータ５１０を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置５２０は、コンピュータ５１０で処理された結果等を表示すると共に、コンピュータ５１０を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置５２３は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
【００９２】
本願開示の設計装置は、コンピュータ５１０が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置５１５に装着可能な記憶媒体Ｍに記憶されており、記憶媒体Ｍから可換媒体記憶装置５１５を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体（図示せず）に記憶されており、この記憶媒体から通信装置５２３及びインターフェース５１６を介して、ＲＡＭ５１２或いは二次記憶装置５１４にロードされる。
【００９３】
キーボード５２１及び／又はマウス５２２を介してユーザからプログラム実行指示があると、ＣＰＵ５１１は、記憶媒体Ｍ、遠隔地記憶媒体、或いは二次記憶装置５１４からプログラムをＲＡＭ５１２にロードする。プロセッサであり演算回路でもあるＣＰＵ５１１は、ＲＡＭ５１２の空き記憶空間をワークエリアとして使用して、ＲＡＭ５１２にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおＲＯＭ５１３は、コンピュータ５１０の基本動作を制御するための制御プログラムが格納されている。
【００９４】
上記コンピュータプログラムを実行することにより、コンピュータ５１０が、ここまでにおいて説明された設計動作を実行する。
【００９５】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【符号の説明】
【００９６】
１０  ＲＡＭ情報
１１  ＲＡＭライブラリ
１２  ＦＰＧＡブロックＲＡＭライブラリ
１３  ＲＴＬ記述
１４  使用ＲＡＭ情報
１５  ハードウェア制限情報
１６  論理ＲＡＭライブラリ
１７  ブロックＲＡＭライブラリ
１８  ＲＴＬ記述
２０  設計対象回路
２１  ブロックＲＡＭ
２２  論理ＲＡＭモデル
【図１】
0006586759.tif 000002
【図２】
0006586759.tif 000003
【図３】
0006586759.tif 000004
【図４】
0006586759.tif 000005
【図５】
0006586759.tif 000006
【図６】
0006586759.tif 000007
【図７】
0006586759.tif 000008
【図８】
0006586759.tif 000009
【図９】
0006586759.tif 000010
【図１０】
0006586759.tif 000011
【図１１】
0006586759.tif 000012
【図１２】
0006586759.tif 000013
【図１３】
0006586759.tif 000014
【図１４】
0006586759.tif 000015
【図１５】
0006586759.tif 000016
【図１６】
0006586759.tif 000017
【図１７】
0006586759.tif 000018
【図１８】
0006586759.tif 000019
【図１９】
0006586759.tif 000020
【図２０】
0006586759.tif 000021
【図２１】
0006586759.tif 000022
【図２２】
0006586759.tif 000023
【図２３】
0006586759.tif 000024
【図２４】
0006586759.tif 000025
【図２５】
0006586759.tif 000026
【図２６】
0006586759.tif 000027
【図２７】
0006586759.tif 000028