【发布时间】:2016-08-31 06:14:52
【问题描述】:
所以我创建了这个模块,它假设代表一个 RAM,我根据我的顶部模块上的结果在其上保存一些数据。
module RAM_OUT (pix_val, w_mem_out, set_ram);
input [2:0] w_mem_out;
input [31:0] pix_val;
input set_ram;
reg [15:0] addr_out;
reg [31:0] mem_out1 [0:57599];
reg [31:0] mem_out2 [0:57599];
reg [31:0] mem_out3 [0:57599];
/////////// ram out ///////////////
always @ (w_mem_out or set_ram)
begin
if (set_ram)
addr_out = 0;
else
begin
if (w_mem_out == 1)
begin
mem_out1 [addr_out] = pix_val;
mem_out2 [addr_out] = 32'b11111111_000000000000000000000000;
mem_out3 [addr_out] = 32'b00000000_000000000000000000000000;
addr_out = addr_out + 16'b0000000000000001;
end
else if (w_mem_out == 2)
begin
mem_out1 [addr_out] = 32'b11111111_000000000000000000000000;
mem_out2 [addr_out] = pix_val;
mem_out3 [addr_out] = 32'b00000000_000000000000000000000000;
addr_out = addr_out + 16'b0000000000000001;
end
else if (w_mem_out == 3)
begin
mem_out1 [addr_out] = 32'b11111111_000000000000000000000000;
mem_out2 [addr_out] = 32'b11111111_000000000000000000000000;
mem_out3 [addr_out] = pix_val;
addr_out = addr_out + 16'b0000000000000001;
end
else
addr_out = addr_out;
end
end
endmodule
该程序已经在模拟中运行得非常好,但是由于我打算将它加载到我的 FPGA 中,我想使用板上可用的 SDRAM 存储器(我的目的是制作一个完整的 SOC,我需要将数据加载到 SDRAM,然后使用我的设计来处理这些数据)。
所以,我想知道对 SDRAM 进行编程是否与我在上面的代码中所做的相差太远。您可以看到我编写了一些逻辑,以便将我想要的数据保存到“内存”中,但我不确定在执行 SDRAM 时这是否相同,否则我将不得不稍后为此更改我的设计(我不喜欢这样,因为我的系统已经在模拟中运行良好)。
我从altera文档中编写了上面的代码,他们说这是制作RAM的方法,但这是可合成的吗? FPGA 中到底发生了什么,它使用 FPGA 芯片中的门推断内存还是利用板的实际内存?请注意,输入数据由 57600 个 32 位数字组成。
【问题讨论】:
标签: verilog fpga ram synthesis quartus