インテル® Hyperflex™ アーキテクチャー高性能デザイン・ハンドブック

ID 683353
日付 10/04/2021
Public
ドキュメント目次

2.4.2.9.3. インテル® Hyperflex™ アーキテクチャーのシンプル・デュアル・ポート・メモリーの例

2つのシンプル・デュアル・ポート・メモリーを使用すると、デバイスのM20Kブロックを2倍にすることができます。しかしながら、このメモリー構造は1GHzまでの周波数で実行することができます。 インテル® Hyperflex™ デバイスで独立したクロックを持つ真のデュアル・ポート・メモリーを使用している場合、この周波数は不可能です。

図 73. シンプル・デュアル・ポート・メモリーのコンフィグレーション

GUIのインスタンス化ではなく、単純なデュアル・ポート・メモリーをRTLで推測することで、同様の周波数結果を得ることができます。

シンプル・デュアル・ポートRAM

module simple_dual_port_ram_with_SDPs
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
		input [(DATA_WIDTH-1):0] wrdata,
		input [(ADDR_WIDTH-1):0] wraddr, rdaddr,
		input we_a, wrclock, rdclock,
		output reg [(DATA_WIDTH-1):0] q_a
);

// Declare the RAM variable
reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];

always @ (posedge wrclock)
begin
		// Port A  is for writing only
		if (we_a)
		begin
		ram[wraddr] <= wrdata;
		end
end

always @ (posedge rdclock)
begin
// Port B is for reading only
begin
q_a <= ram[rdaddr];
end
end
endmodule

トゥルー・デュアル・ポートRAMの動作エミュレーション

module test (wrdata, wraddr, rdaddr_a, rdaddr_b, 
	clk_a, clk_b, we_a, q_a, q_b);
	
	input [7:0] wrdata;
	input clk_a, clk_b, we_a;
	input [5:0] wraddr, rdaddr_a, rdaddr_b;
	output [7:0] q_a, q_b;
	
	simple_dual_port_ram_with_SDPs myRam1 (
		.wrdata(wrdata),
		.wraddr(wraddr),
		.rdaddr(rdaddr_a),
		.we_a(we_a),
		.wrclock(clk_a), .rdclock(clk_b),
		.q_a(q_a)
		);

	simple_dual_port_ram_with_SDPs myRam2 (
		.wrdata(wrdata),
		.wraddr(wraddr),
		.rdaddr(rdaddr_b),
		.we_a(we_a),
		.wrclock(clk_a), .rdclock(clk_a),
		.q_a(q_b)
		);
		
endmodule