【友晶科技Terasic 】RAM IP调用及单口RAM的控制实现
RAM IP 核简介
RAM 是随机存取存储器(Random Access Memory),是一个易失性存储器,可随时对任何地址写入或者读出数据。
RAM IP核实现
RAM IP核实现使用的是FPGA 内部的 RAM资源:M9K、LCs......
单端口RAM
读和写使用同一个数据端口。
简单双端口RAM
两个数据端口,一个专门读,一个专门写。
真正双端口RAM
两个数据端口,两个端口都可以读和写。相当于两个单口RAM 的信号。
单口RAM IP调用和参数配置
1. 创建一个新Quartus工程。(步骤略)
2.在IP Catalog 搜索ram:
3.设置RAM IP的参数:
4. 点击finish,点击添加IP 到工程即可。
RAM IP 的顶层文件:
module ram( clk, rst_n, q ); input clk; input rst_n; output [7:0]q; wire [9:0]address; wire [7:0]data; wire wren; ram1port ram1port_inst ( .address ( address ), .clock ( clk ), .data ( data ), .wren ( wren ), .q ( q ) ); ram_control ram_control_inst( .clk(clk), .rst_n(rst_n), .address(address), .data(data), .wren(wren) ); endmodule
RAM IP 的控制:
module ram_control( clk, rst_n, address, data, wren ); input clk; input rst_n; output reg [7:0]address; output reg [7:0]data; output reg wren; reg state; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin address<=0; data<=0; wren<=0; state<=0; end else begin case(state) 0:begin wren<=1; if(address<255) begin address<=address+1; data<=data+1; end else begin address<=0; data<=0; wren<=0; state<=1; end end 1:begin if(address<255) begin address<=address+1; end else begin address<=0; end end default:state<=0; endcase end end endmodule