赞
踩
1、BRAM大小的计算:
宽度18bit * 深度1024 = 18KBit(1个18K BRAM) 注:位宽不足18或深度不足1024,按照一个18K BRAM计算
宽度36bit * 深度1024 = 36KBit(1个36K BRAM)
地址位宽:ceil(log2(Depth))
2、BRAM IP的配置:
在Vivado中选择 Block Memory Generator IP,按照需求对参数进行配置。(下面以数据宽度8Bit,深度1024为例)
具体配置如下:
Basic:
Port A Options:
Port B Options:
3、BRAM 功能/时序分析:
addra[9:0]、addrb[9:0]:
A、B端口写/读数据的地址
clka、clkb:
A、B端口的时钟
dina:
A端口写入的数据(输入)
ena、enb:
A、B端口的使能信号,控制A、B端口的使能
wea:
A端口写入的使能信号
dout:
B端口读取的数据(输出)
注意第0拍时数据的存储,即地址自加要在使能信号有效后一拍开始。
module设计文件:
`timescale 1ns / 1ps module test_bram( input clk, input rst_n ); reg ena; reg wea; reg [9:0] addra; reg enb; reg [9:0] addrb; //port A:clka,ena,wea,addra,dina reg write_state; always @(posedge clk or negedge rst_n) begin if(!rst_n) begin ena <= 0; wea <= 0; addra <= 0; write_state <= 0; end else begin case(write_state) 1'b0:begin ena <= 1;wea <= 1;write_state <= 1'b1; end 1'b1:begin ena <= 1;wea <= 1;addra <= addra + 1'd1; end default:write_state <= 1'b1; endcase end end //read data port B:clkb,enb,addrb reg read_state; always @(posedge clk or negedge rst_n) begin if(!rst_n) begin enb <= 0; addrb <= 0; read_state <= 0; end else begin case(read_state) 1'b0:begin enb <= 1;read_state <= 1'b1; end 1'b1:begin enb <= 1;addrb <= addrb + 1'd1; end default:read_state <= 1'b1; endcase end end wire [7:0]dina = addra[7:0]; wire [7:0]doutb; blk_mem_gen_0 u_blk_mem_gen_0 ( .clka(clk), // input wire clka .ena(ena), // input wire ena .wea(wea), // input wire [0 : 0] wea .addra(addra), // input wire [9 : 0] addra .dina(dina), // input wire [7 : 0] dina .clkb(clk), // input wire clkb .enb(enb), // input wire enb .addrb(addrb), // input wire [9 : 0] addrb .doutb(doutb) // output wire [7 : 0] doutb ); endmodule
module仿真文件:
`timescale 1ns / 1ps
module tb_test_bram;
reg clk;
reg rst_n;
initial begin
clk = 0;
rst_n = 0;
#200; rst_n = 1;
end
always#50 clk = ~clk;
test_bram u_test_bram(
.clk(clk),
.rst_n(rst_n)
);
endmodule
仿真波形图:
RTL分析原理图:
同时可以看到综合后使用了0.5个BRAM资源。(0.5个36K BRAM,即1个18K BRAM)
设置输出寄存器,使得输出数据比正常晚一拍
设置输出寄存器后的波形图:
同时勾选Primitives Output Register 和Core Output Register,可以使得输出数据比正常延迟两拍,波形图如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。