インテルのみ表示可能 — GUID: mwh1409959584770
Ixiasoft
1.4.1.1. 同期メモリーブロックの使用
1.4.1.2. サポートされないリセットおよびコントロール条件の回避
1.4.1.3. Read-During-Write動作の確認
1.4.1.4. RAMの推論と実装の制御
1.4.1.5. シングルクロック同期RAM (古いデータでのRead-During-Write動作)
Verilog HDLシングルクロック、シンプル・デュアルポート同期RAM (古いデータでのRead-During-Write動作)
VHDLシングルクロック、シンプル・デュアルポート同期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. 電源投入時の初期のメモリーコンテンツの指定
インテルのみ表示可能 — GUID: mwh1409959584770
Ixiasoft
1.4.1.5. シングルクロック同期RAM (古いデータでのRead-During-Write動作)
このセクションのコード例では、Verilog HDLおよびVHDLのコードでシンプル・デュアルポート、シングルクロックの同期RAMを推論しています。シングルポートRAMブロックでも、同様のコーディング・スタイルを使用します。
ここで示されているRead-During-Write動作は、メモリーアドレスの古いデータを読み出すものです。MLABメモリーで最高のパフォーマンスを実現するには、適切な属性を使用して、書き込み動作時に読み出しデータに依存するデザインにならないようにします。シンプル・デュアルポートRAMのコードサンプルは、インテルの同期メモリーに直接マッピングされます。
メモリーブロックのシングルポート・バージョン (つまり、同じ読み出しアドレス信号と書き込みアドレス信号を使用) では、デバイスファミリーによっては、デュアルポート・メモリー・ブロックよりも優れたRAM使用率が得られます。該当するデバイス・ハンドブックを参照し、お使いのターゲットデバイスに関する推奨事項を確認してください。
Verilog HDLシングルクロック、シンプル・デュアルポート同期RAM (古いデータでのRead-During-Write動作)
module single_clk_ram( output reg [7:0] q, input [7:0] d, input [4:0] write_address, read_address, input we, clk ); reg [7:0] mem [31:0]; always @ (posedge clk) begin if (we) mem[write_address] <= d; q <= mem[read_address]; // q doesn't get d in this clock cycle end endmodule
VHDLシングルクロック、シンプル・デュアルポート同期RAM (古いデータでのRead-During-Write動作)
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY single_clock_ram IS PORT ( clock: IN STD_LOGIC; data: IN STD_LOGIC_VECTOR (7 DOWNTO 0); write_address: IN INTEGER RANGE 0 to 31; read_address: IN INTEGER RANGE 0 to 31; we: IN STD_LOGIC; q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END single_clock_ram; ARCHITECTURE rtl OF single_clock_ram IS TYPE MEM IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL ram_block: MEM; BEGIN PROCESS (clock) BEGIN IF (rising_edge(clock)) THEN IF (we = '1') THEN ram_block(write_address) <= data; END IF; q <= ram_block(read_address); -- VHDL semantics imply that q doesn't get data -- in this clock cycle END IF; END PROCESS; END rtl;
注: この single_clock_ram のサイズが小さいと、コンパイラーはメモリーをM20KメモリーブロックではなくMLABメモリーブロックとして推論します。single_clock_ram でより大きな幅を指定している場合、コンパイラーはメモリーをM20Kメモリーブロックとして推論します。