Intel® Hyperflex™ 体系结构高性能设计手册

ID 683353
日期 10/04/2021
Public
文档目录

2.4.2.9.2. 使用简单双端口存储器

将一个设计移植到 Intel® Hyperflex™ 体系结构中时,请考虑原始设计是否包含一个双端口存储器(在每个端口上使用不同的时钟)以及运行该存储器的最大频率。如果您的设计实际上在两个写端口上使用相同的时钟那么需要使用两个简单双时钟存储器对其进行重组。

此方法的优势在于简单双端口模块支持高达1 GHz的频率。其劣势是实现存储器所需要的存储器模块的数量增加了一倍。

图 73.  Intel® Arria® 10真双端口存储器实现之前版本的 英特尔® Quartus® Prime Pro Edition软件对 Intel® 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

对使用不同写时钟的双端口存储器进行同步是很困难的。要确保两个端口不要同时对一个指定地址进行写操作。在很多设计中,双端口存储器通常对其中一个端口执行写操作,然后是使用这两个端口(1W2R)的两个读操作。您可以通过使用两个简单双端口存储器模型化此行为。在简单双端口存储器中,写操作总是写入两个存储器,而读操作取决于端口。