SRAMをシミュレーションしてみます。H8プロジェクトでは、AlteraのSRAMの特性を生かした設計したいと思っています。筆者もAlteraのSRAMを使いこなしているわけではないので、ここでシミュレーションしながら、使い方を確認しておきたいと思います。MegaWizardWizardに従ってSRAMブロックを作成していきましょう。REG付3ポートここで、3ポートを選んだ理由は、H8プロジェクトで使用を予定しているからです。Tools=>MegaWizard...を選択して、上記仕様を選択していき下図のようになります。図を見ればお分かりの通り、入力は、全てFFで受けて、出力もFFになっています。2クロック遅れで指定のAddressのDataが出力されます。OPTIONで出力FFなしにすることはできますが、入力のFFは削除できない仕様になっています。シミュレーションそれでは、合成対象ソースです。Wizardで作成した3ポートRAMです。.rdaddress_b(rdaddress_b),.wren(wren),.clock(clock),.qa(qa),.qb(qb));endmoduleテストベンチソースです。RAMAddress値をDataとしてインクリメンタルに書きます。その後、一回読み出して終わりです。.rdaddress_b(rdaddress_b),.wren(wren),.clock(clock),.qa(qa),.qb(qb));endmoduleRTLプロジェクトは、以下の通りとします。メガファンクションのRTLライブラリになっています。quartas\eda\sim_lib\下にあります。WaveformViewerで波形を確認したら、論理合成します。例によって、simulation\custom下に合成後のゲートソースが出力されます。ポストレイアウト遅延ゲートシミュレーション遅延シミュレーション用のプロジェクトを作成します。これもquartas\eda\sim_lib\下にあります。論理合成で生成されたファイルです。プロジェクトは、このフォルダに作成しなければなりません。上の波形はWrite時、下の波形がRead時です。Read時、アドレスが読み込まれて(黒カーソル)、赤カーソルの位置から、出力され始めますが、出力遅延分遅れる様子が分かると思います。この出力が利用可能なのは次のPOSエッジなので、結局2クロック遅れてしまうことになります。