IP-RAM
Vivado软件自带的Block Memory Genrator IP核可以用来配置生成RAM和ROM,生成的RAM和ROM使用的都是FPGA内部的BRAM资源
Vivado IP核配置
- 读数据位宽要与写数据位宽成整数倍关系
- Port A Optional Register:用于为RAM的输出端添加寄存器,提高BRAM的运行频率和改善时序,每勾选一个寄存器,输出会延迟一拍
地址信号和写信号的生成
module ram_rv (
clk,
rst_n,
ena,
wea,
addr,
din
);
input clk;
input rst_n;
output reg ena;
output reg [7:0] din;
output reg [4:0] addr;
output wea;
reg [5:0] cnt;
assign wea=(cnt<=6'd31&&ena==1)?1'b1:1'b0;
always @(posedge clk or negedge rst_n) begin
if(rst_n==1'b0)
ena<=1'b0;
else
ena<=1'b1;
end
always @(posedge clk or negedge rst_n) begin
if(rst_n==1'b0)
cnt<=6'b0;
else if(cnt==63&&ena==1'b1)
cnt<=6'b0;
else if(ena==1'b1)
cnt<=cnt+1'b1;
else
cnt<=6'b0;
end
always @(posedge clk or negedge rst_n) begin
if(rst_n==1'b0)
addr<=5'b0;
else if(addr==5'd31&&ena==1'b1)
addr<=5'b0;
else if(ena==1'b1)
addr<=addr+1'b1;
else begin
addr<=5'b0;
end
end
always @(posedge clk or negedge rst_n) begin
if(rst_n==1'b0)
begin
din<=8'b0;
end
else if(din<8'd31 && wea==1'b1) begin
din<=din+1'b1;
end
else begin
din<=8'b0;
end
end
endmodule
波形
当WEA为高电平时,根据地址信号向RAM中写入数据
WEA为低电平时,读出RAM中的信号