營銷顧問公司seo是什么部位
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)存儲(chǔ)類型(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)存儲(chǔ)大小設(shè)置(Memory Size)
設(shè)置讀數(shù)據(jù)或?qū)憯?shù)據(jù)端的數(shù)據(jù)位寬和深度,數(shù)據(jù)位寬范圍為1~4608bit,數(shù)存儲(chǔ)深度為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ù)位信號
同步時(shí)鐘 clk, 復(fù)位信號 rst
異步時(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 beginclk = 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;
endalways #5 clk = ~clk; endmodule
仿真測試圖:
?參考文獻(xiàn):xilinx官方手冊或網(wǎng)盤下載
本文將不斷定期更新中,碼字不易,點(diǎn)??贊,收??藏一下,不走丟哦
本文由FPGA狂飆原創(chuàng),有任何問題,都可以在評論區(qū)和我交流哦。
您的支持是我持續(xù)創(chuàng)作的最大動(dòng)力!如果本文對您有幫助,請給一個(gè)鼓勵(lì),謝謝。