【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章 FPGA片內(nèi)RAM讀寫測試實驗
資料介紹
作者: ALINX
* 本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權歸本公司所有,如需轉(zhuǎn)載,需授權并注明出處。
適用于板卡型號:
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實驗Vivado工程為“ram_test”。
RAM是FPGA中常用的基礎模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎。本實驗將為大家介紹如何使用FPGA內(nèi)部的RAM以及程序?qū)υ揜AM的數(shù)據(jù)讀寫操作。
1.實驗原理
Xilinx在VIVADO里為我們已經(jīng)提供了RAM的IP核, 我們只需通過IP核例化一個RAM,根據(jù)RAM的讀寫時序來寫入和讀取RAM中存儲的數(shù)據(jù)。實驗中會通過VIVADO集成的在線邏輯分析儀ila,我們可以觀察RAM的讀寫時序和從RAM中讀取的數(shù)據(jù)。
2.創(chuàng)建Vivado工程
在添加RAM IP之前先新建一個ram_test的工程, 然后在工程中添加RAM IP,方法如下:
2.1 點擊下圖中IP Catalog,在右側(cè)彈出的界面中搜索ram,找到Block Memory Generator,雙擊打開。

2.2 將Component Name改為ram_ip,在Basic欄目下,將Memory Type改為Simple Dual Prot RAM,也就是偽雙口RAM。一般來講"Simple Dual Port RAM"是最常用的,因為它是兩個端口,輸入和輸出信號獨立。

2.3 切換到Port A Options欄目下,將RAM位寬Port A Width改為16,也就是數(shù)據(jù)寬度。將RAM深度Port A Depth改為512,深度指的是RAM里可以存放多少個數(shù)據(jù)。使能管腳Enable Port Type改為Always Enable。

2.4 切換到Port B Options欄目下,將RAM位寬Port B Width改為16,使能管腳Enable Port Type改為Always Enable,當然也可以Use ENB Pin,相當于讀使能信號。而Primitives Output Register取消勾選,其功能是在輸出數(shù)據(jù)加上寄存器,可以有效改善時序,但讀出的數(shù)據(jù)會落后地址兩個周期。很多情況下,不使能這項功能,保持數(shù)據(jù)落后地址一個周期。

2.5 在Other Options欄目中,這里不像ROM那樣需要初始化RAM的數(shù)據(jù),我們可以在程序中寫入,所以配置默認即可,直接點擊OK。

2.6 點擊“Generate”生成RAM IP。

3. RAM的端口定義和時序
Simple Dual Port RAM 模塊端口的說明如下:

RAM的數(shù)據(jù)寫入和讀出都是按時鐘的上升沿操作的,端口A數(shù)據(jù)寫入的時候需要置高wea信號,同時提供地址和要寫入的數(shù)據(jù)。下圖為輸入寫入到RAM的時序圖。

而端口B是不能寫入數(shù)據(jù)的,只能從RAM中讀出數(shù)據(jù),只要提供地址就可以了,一般情況下可以在下一個周期采集到有效的數(shù)據(jù)。

RAM讀時序
4. 測試程序編寫
下面進行RAM的測試程序的編寫,由于測試RAM的功能,我們向RAM的端口A寫入一串連續(xù)的數(shù)據(jù),只寫一次,并從端口B中讀出,使用邏輯分析儀查看數(shù)據(jù)。代碼如下
`timescale1ns/1ps
//////////////////////////////////////////////////////////////////////////////////
module ram_test(
input clk, //25MHz時鐘
input rst_n //復位信號,低電平有效
);
//-----------------------------------------------------------
reg [8:0] w_addr; //RAM PORTA寫地址
reg [15:0] w_data; //RAM PORTA寫數(shù)據(jù)
reg wea; //RAM PORTA使能
reg [8:0] r_addr; //RAM PORTB讀地址
wire [15:0] r_data; //RAM PORTB讀數(shù)據(jù)
//產(chǎn)生RAM PORTB讀地址
always@(posedge clk ornegedge rst_n)
begin
if(!rst_n)
r_addr <=9'd0;
elseif(|w_addr) //w_addr位或,不等于0
r_addr <= r_addr+1'b1;
else
r_addr <=9'd0;
end
//產(chǎn)生RAM PORTA寫使能信號
always@(posedge clk ornegedge rst_n)
begin
if(!rst_n)
wea <=#11'b0;
else
begin
if(&w_addr)//w_addr的bit位全為1,共寫入512個數(shù)據(jù),寫入完成
wea <=#11'b0;
else
wea <=#11'b1;//ram寫使能
end
end
//產(chǎn)生RAM PORTA寫入的地址及數(shù)據(jù)
always@(posedge clk ornegedge rst_n)
begin
if(!rst_n)
begin
w_addr <=9'd0;
w_data <=16'd1;
end
else
begin
if(wea) //ram寫使能有效
begin
if(&w_addr)//w_addr的bit位全為1,共寫入512個數(shù)據(jù),寫入完成
begin
w_addr <= w_addr ;//將地址和數(shù)據(jù)的值保持住,只寫一次RAM
w_data <= w_data ;
end
else
begin
w_addr <= w_addr +1'b1;
w_data <= w_data +1'b1;
end
end
end
end
//-----------------------------------------------------------
//實例化RAM
ram_ip ram_ip_inst (
.clka (clk ),// input clka
.wea (wea ),// input [0 : 0] wea
.addra (w_addr ),// input [8 : 0] addra
.dina (w_data ),// input [15 : 0] dina
.clkb (clk ),// input clkb
.addrb (r_addr ),// input [8 : 0] addrb
.doutb (r_data )// output [15 : 0] doutb
);
//實例化ila邏輯分析儀
ila_0 ila_0_inst (
.clk (clk ),
.probe0 (r_data ),
.probe1 (r_addr )
);
endmodule
為了能實時看到RAM中讀取的數(shù)據(jù)值,我們這里添加了ila工具來觀察RAM PORTB的數(shù)據(jù)信號和地址信號。關于如何生成ila大家請參考”PL的”Hello World”LED實驗”。

程序結(jié)構(gòu)如下:

綁定引腳
##################Compress Bitstream############################
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]set_property PACKAGE_PIN AB11 [get_ports clk]set_property IOSTANDARD LVCMOS33 [get_ports clk]create_clock -period 40.000 -name clk -waveform {0.000 20.000} [get_ports clk]set_property PACKAGE_PIN AA13 [get_ports rst_n]set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
5. 仿真
仿真方法參考”PL的”Hello World”LED實驗”,仿真結(jié)果如下,從圖中可以看出地址1寫入的數(shù)據(jù)是0002,在下個周期,也就是時刻2,有效數(shù)據(jù)讀出。

6. 板上驗證
生成bitstream,并下載bit文件到FPGA。接下來我們通過ila來觀察一下從RAM中讀出的數(shù)據(jù)是否為我們初始化的數(shù)據(jù)。
在Waveform的窗口設置r_addr地址為0作為觸發(fā)條件,我們可以看到r_addr在不斷的從0累加到1ff, 隨著r_addr的變化, r_data也在變化, r_data的數(shù)據(jù)正是我們寫入到RAM中的512個數(shù)據(jù),這里需要注意,r_addr出現(xiàn)新地址時,r_data對應的數(shù)據(jù)要延時兩個時鐘周期才會出現(xiàn),數(shù)據(jù)比地址出現(xiàn)晚兩個時鐘周期,與仿真結(jié)果一致。

掃碼添加小助手
加入工程師交流群
- Zynq UltraScale+ MPSoC數(shù)據(jù)手冊 3次下載
- Zynq UltraScale+ MPSoC驗證數(shù)據(jù)手冊
- Zynq UltraScale+ MPSoC中的隔離方法
- Zynq UltraScale+ MPSoC的隔離設計示例
- 米爾電子zynq ultrascale+ mpsoc底板外設資源清單分享
- 計算機網(wǎng)絡第六章應用層資源下載 0次下載
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第七章 FPGA片內(nèi)ROM測試實驗
- 如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第八章FPGA片內(nèi)FIFO讀寫測試實驗
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介紹
- STM8S BLDC電機第六章工程的stm8選項字節(jié)配置 8次下載
- 靜噪基礎第六章_EMI靜噪濾波器 4次下載
- 數(shù)字信號處理 第六章 4次下載
- 《測控電路》習題完整參考答案(第六章) 0次下載
- 高頻電子線路第六章答案
- 針對UltraScale/UltraScale+芯片DFX應考慮的因素有哪些(1) 1.6k次閱讀
- Xilinx ZYNQ UltraScale+系列產(chǎn)品介紹 4.6k次閱讀
- FPGAs,Zynq和Zynq MPSoC器件的特點 3.8k次閱讀
- 基于Xilinx Zynq UltraScale+ RFSoC ZCU216評估套件詳細內(nèi)容介紹 1.4w次閱讀
- 基于Xilinx Zynq ultraScale+ 系列FPGA的AXU2CGB 開發(fā)板評測 1.3w次閱讀
- 米爾科技Zynq UltraScale+ MPSoC技術參考手冊介紹 4.1k次閱讀
- 詳解Xilinx公司Zynq? UltraScale+?MPSoC產(chǎn)品 3.9k次閱讀
- Xilinx Zynq UltraScale MPSoC可擴展電源設計 2.4k次閱讀
- Xilinx Kintex UltraScale+ FPGA KCU116評估套件主要性能和優(yōu)勢 7.5k次閱讀
- Zynq UltraScale+ MPSoC ZCU102評估套件解決方案 9.5k次閱讀
- Enea OSE可實現(xiàn)對Xilinx UltraScale+ MPSoC的支持 3.5k次閱讀
- Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞 2.9k次閱讀
- Zynq UltraScale+ MPSoC 上的多個Linux UIO設計 3.7k次閱讀
- 用ZYNQ MPSoC玩DOOM! 3.1k次閱讀
- Ti推出面向Zynq UltraScale+ MPSoC的電源參考設計 4.1k次閱讀
下載排行
本周
- 1MDD品牌三極管MMBT3906數(shù)據(jù)手冊
- 2.33 MB | 次下載 | 免費
- 2MDD品牌三極管S9012數(shù)據(jù)手冊
- 2.62 MB | 次下載 | 免費
- 3聯(lián)想flex2-14D/15D說明書
- 4.92 MB | 次下載 | 免費
- 4收音環(huán)繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 524Pin Type-C連接器設計報告
- 1.06 MB | 次下載 | 免費
- 6新一代網(wǎng)絡可視化(NPB 2.0)
- 3.40 MB | 次下載 | 免費
- 7MS1000TA 超聲波測量模擬前端芯片技術手冊
- 0.60 MB | 次下載 | 免費
- 8MS1022高精度時間測量(TDC)電路數(shù)據(jù)手冊
- 1.81 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
- 0.63 MB | 6次下載 | 1 積分
- 5UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費
- 6技嘉H110主板IT8628E_BX IO電路圖資料
- 2.61 MB | 4次下載 | 1 積分
- 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 8100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論