FPGA開發(fā)中使用頻率非常高的兩個(gè)IP就是FIFO和BRAM,上一篇文章中已經(jīng)詳細(xì)介紹了Vivado FIFO IP,今天我們來聊一聊BRAM IP。
本文將詳細(xì)介紹Vivado中BRAM IP的配置方式和使用技巧。
一、BRAM IP核的配置
1、打開BRAM IP核
在Vivado的IP Catalog中找到Block Memory Generator IP核,雙擊打開參數(shù)配置界面。
2、配置BRAM IP基本參數(shù)
(1)IP名
定制的IP的名字只能在定制時(shí)設(shè)定好,后續(xù)不能修改。
IP名設(shè)定,簡單易懂即可,按照功能或數(shù)據(jù)寬度和深度來設(shè)定即可,例如BRAM_8x256,即表示數(shù)據(jù)寬度為8bit,數(shù)據(jù)深度為256bit。
(2)接口類型(Interface Type)
Native:最基本的接口,包括數(shù)據(jù)寫入、數(shù)據(jù)讀取等信號。
AXI4:AXI4總線通信協(xié)議接口
(3)存儲類型(Memory Type)
Single Port RAM:單端口RAM
Simple Dual Port RAM:簡單雙端口RAM,可選同步時(shí)鐘和異步時(shí)鐘,A端口只支持寫數(shù)據(jù),B端口只支持讀數(shù)據(jù)。
True Dual Port RAM:真雙端口RAM,可選同步時(shí)鐘和異步時(shí)鐘,A端口和B端口都支持寫數(shù)據(jù)和讀數(shù)據(jù)。
Single Port ROM:單端口ROM
Dual Port ROM:雙端口ROM,A端口和B端口都可以讀取數(shù)據(jù)
3、配置A端口或B端口參數(shù)
A端口和B端口參數(shù)配置界面基本一致,這里只介紹A端口的參數(shù)配置。
(1)存儲大小設(shè)置(Memory Size)
設(shè)置讀數(shù)據(jù)或?qū)憯?shù)據(jù)端的數(shù)據(jù)位寬和深度,數(shù)據(jù)位寬范圍為1 ~ 4608bit,數(shù)存儲深度為2~1048576。
operating mode:讀寫同一個(gè)地址時(shí),操作模式設(shè)定:寫優(yōu)先、讀優(yōu)先、不變,建議在實(shí)際應(yīng)用時(shí)不出現(xiàn)這種情況。
Enable Port Type:設(shè)定是否開放端口使能控制信號。
(2)輸出數(shù)據(jù)寄存設(shè)置
Primitives Output Register:輸出數(shù)據(jù)是否插入一個(gè)寄存器,如果不選中這個(gè),則讀數(shù)據(jù)延時(shí)只有1個(gè)周期,否則讀數(shù)據(jù)延時(shí)有2個(gè)周期。
建議選中這個(gè)輸出寄存器,可以改善時(shí)序。
(3)復(fù)位參數(shù)設(shè)置
RSTA Pin (setreset pin):復(fù)位端口選擇,如果選中,則開放復(fù)位端口。
Output Reset Value (Hex):設(shè)定復(fù)位生效后,輸出數(shù)據(jù)值,默認(rèn)為0
4、Other Options
這部分初始化值,對于RAM來說可能用處不大,但對于ROM來說很重要。
選中這個(gè)Load Init File,再點(diǎn)擊“Browse”選中“coe或mif”格式文件,最后點(diǎn)擊“Edit”,在打開的界面選擇“Valide”校驗(yàn)一下,如果有問題,這部分會(huì)提示紅色文字,否則繼續(xù)下一步即可。
5、IP設(shè)置參數(shù)總覽
IP設(shè)置參數(shù)總覽,可看到資源消耗、寬度、深度、讀延遲等信息。
6、點(diǎn)擊OK生成IP核。
在IP核生成完成后,點(diǎn)擊source窗口下的“IP source”,鼠標(biāo)左鍵單擊這個(gè)IP,在“Instantiation Template”下,雙擊“veo”后綴文件,即可看到例化模板。
二、BRAM IP核的接口
1、時(shí)鐘信號和復(fù)位信號
復(fù)位信號 rsta/rstb
時(shí)鐘 clka(A端口時(shí)鐘) clkb(b端口時(shí)鐘),復(fù)位信號 rsta(A端口復(fù)位),rstb(B端口復(fù)位)
2、端口信號
A和B端口信號基本一樣,這里以A端口為例。
ena A端口使能信號
wea A端口寫使能信號
addra A端口讀寫地址
dina A端口的寫入數(shù)據(jù)
douta A端口的讀取數(shù)據(jù)
三、BRAM IP核的調(diào)用
BRAM IP核的調(diào)用很簡單,這里以同步時(shí)鐘下的簡單雙端口RAM為例:
module top (
input clk,
input [7:0] data_in,
input wr_en,
input [7:0] wr_addr,
input [7:0] rd_addr,
output [7:0] data_out
);
BRAM_8x256 u_BRAM_8x256 (
.clka(clk), // input wire clka
.ena(1'b1), // input wire ena
.wea(wr_en), // input wire [0 : 0] wea
.addra(wr_addr), // input wire [7 : 0] addra
.dina(data_in), // input wire [7 : 0] dina
.clkb(clk), // input wire clkb
.enb(1'b1), // input wire enb
.addrb(rd_addr), // input wire [7 : 0] addrb
.doutb(data_out) // output wire [7 : 0] doutb
);
endmodule
下面是BRAM IP核的一個(gè)簡單的testbench:
module test;
reg clk;
reg [7:0] din;
reg wen;
reg [7:0] waddr;
reg [7:0] raddr;
wire [7:0] dout;
top u_top(
.clk(clk),
.data_in(din),
.wr_en(wen),
.wr_addr(waddr),
.rd_addr(raddr),
.data_out(dout)
);
initial begin
clk = 0;
wen = 0; waddr = 0; raddr = 0;
#10 wen = 1; waddr = 1; din = 5;
#10 wen = 1; waddr = 2; din = 6;
#10 wen = 1; waddr = 3; din = 7;
#10 wen = 1; waddr = 4; din = 8;
#10 wen = 1; waddr = 5; din = 9;
#10 wen = 0; raddr = 1;
#10 wen = 0; raddr = 2;
#10 wen = 0; raddr = 3;
#10 wen = 0; raddr = 4;
#10 wen = 0; raddr = 5;
#30 $finish;
end
always #5 clk = ~clk;
endmodule
仿真測試圖:
-
FPGA
+關(guān)注
關(guān)注
1643文章
21985瀏覽量
615084 -
寄存器
+關(guān)注
關(guān)注
31文章
5425瀏覽量
123644 -
fifo
+關(guān)注
關(guān)注
3文章
400瀏覽量
44668 -
IP核
+關(guān)注
關(guān)注
4文章
338瀏覽量
50543 -
BRAM
+關(guān)注
關(guān)注
0文章
41瀏覽量
11249
發(fā)布評論請先 登錄
FPGA設(shè)計(jì)中BRAM的知識科普

請問vivado如何減少BRAM瓦片這一數(shù)量?如何操作?
初始化BRAM警告coe文件不存在
如何使用Vivado IP Block Design?
在vivado中bram加載coe文件數(shù)據(jù)僅在實(shí)例化中生成datain
URAM和BRAM的區(qū)別是什么
如何在Vivado Design Suite 中進(jìn)行IP加密
FPGA實(shí)現(xiàn)基于Vivado的BRAM IP核的使用
Vivado中xilinx_BRAM IP核使用

Vivado IP核Shared Logic選項(xiàng)配置

評論