1.4.1.1. 同期メモリーブロックの使用
1.4.1.2. サポートされないリセットおよびコントロール条件の回避
RAMのコンテンツをクリアするリセット信号のあるVerilog RAM (デバイスのアーキテクチャーでサポートされません)
1.4.1.3. Read-During-Write動作の確認
1.4.1.4. RAMの推論と実装の制御
1.4.1.5. シングルクロック同期RAM (古いデータでのRead-During-Write動作)
1.4.1.6. シングルクロック同期RAM (新しいデータでのRead-During-Write動作)
1.4.1.7. シンプル・デュアルポート、デュアルクロック同期RAM
1.4.1.8. トゥルー・デュアルポート同期RAM
1.4.1.9. 混合幅デュアルポートRAM
1.4.1.10. バイト・イネーブル信号を備えるRAM
1.4.1.11. 電源投入時の初期のメモリーコンテンツの指定
1.4.1.2. サポートされないリセットおよびコントロール条件の回避
HDLコードをターゲットのデバイス・アーキテクチャーに正しく実装するには、サポートされていないリセット条件やデバイス・アーキテクチャーに存在しないコントロール・ロジックを避けるようにします。
デバイスの動作時に、インテル FPGAメモリーブロックのRAMのコンテンツを reset 信号でクリアすることはできません。HDLコードで記述しているRAMで reset 信号をRAMのコンテンツに使用している場合、ロジックはメモリーブロックではなく通常のロジックセルに実装されます。RAMの読み出しまたは書き込み動作は、always ブロックまたは process ブロックに reset 信号とともに配置しないでください。メモリーコンテンツを指定するには、メモリーを初期化する、もしくはデバイス動作時にRAMにデータを書き込みます。
リセット信号の他にも、他のコントロール・ロジックによって合成でメモリーロジックをメモリーブロックとして推論できないことがあります。例えば、読み出しアドレスレジスターでクロックイネーブルを使用する場合、RAMの出力ラッチが変化し、合成後のRAMの結果がHDLの記述と一致しなくなることがあります。アドレスストール機能を読み出しアドレス・クロック・イネーブルとして使用し、この制限を回避します。お使いのFPGAデバイスのドキュメントを参照し、コードがデバイスで利用可能なハードウェアと一致することを確認してください。
RAMのコンテンツをクリアするリセット信号のあるVerilog RAM (デバイスのアーキテクチャーでサポートされません)
module clear_ram ( input clock, reset, we, input [7:0] data_in, input [4:0] address, output reg [7:0] data_out ); reg [7:0] mem [0:31]; integer i; always @ (posedge clock or posedge reset) begin if (reset == 1'b1) mem[address] <= 0; else if (we == 1'b1) mem[address] <= data_in; data_out <= mem[address]; end endmodule