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

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

2.4.2.9.2. シンプル・デュアル・ポート・メモリー

インテル® Hyperflex™ アーキテクチャーを元のデザインに各ポートで異なるクロックを使用するデュアル・ポート・メモリーが含まれているかどうかを検討します。デザインが実際に両方の書き込みポートで同じクロックを使用している場合、2つのシンプルなデュアル・クロック・メモリーを使用して再構成します。

この方法の利点は、シンプルなデュアルポートブロックが1GHzまでの周波数をサポートすることです。欠点は、メモリーを実装するのに必要なメモリーブロック数が倍増することです。

図 72. トゥルー・デュアル・ポート・メモリーのコンフィグレーション以前のバージョンの インテル® Quartus® Primeプロ・エディションソフトウェアは、 インテル® Arria® 10デバイスの真のデュアル・ポート・メモリー構造を生成します。 。

デュアル・ポート、デュアル・クロック・メモリー実装

module true_dual_port_ram_dual_clock
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
	input [(DATA_WIDTH-1):0] data_a, data_b,
	input [(ADDR_WIDTH-1):0] addr_a, addr_b,
	input we_a, we_b, clk_a, clk_b,
	output reg [(DATA_WIDTH-1):0] q_a, q_b
);

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

	always @ (posedge clk_a)
	begin
		// Port A 
		if (we_a) 
		begin
			ram[addr_a] <= data_a;
			q_a <= data_a;
		end
		else 
		begin
			q_a <= ram[addr_a];
		end 
	end

	always @ (posedge clk_b)
	begin
		// Port B 
		if (we_b) 
		begin
			ram[addr_b] <= data_b;
			q_b <= data_b;
		end
		else 
		begin
			q_b <= ram[addr_b];
		end 
	end

endmodule

異なる書き込みクロックを使用するデュアル・ポート・メモリーを同期させることは困難です。両方のポートが同時に指定のアドレスに書き込まれないようにしてください。多くのデザインでは、デュアル・ポート・メモリーは、ポートの1つで書き込み動作を実行し、その後に両方のポート(1W2R)を使用して2つのみ出し動作を実行します。この動作は、2つのシンプル・デュアル・ポート・メモリーを使用してモデル化できます。シンプル・デュアル・ポート・メモリーでは、書き込み動作は常に両方のメモリーに書き込み、読み出し動作はポートに依存します。