【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章 FPGA片內(nèi)RAM讀寫測(cè)試實(shí)驗(yàn)
資料介紹
作者: ALINX
* 本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號(hào):
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實(shí)驗(yàn)Vivado工程為“ram_test”。
RAM是FPGA中常用的基礎(chǔ)模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎(chǔ)。本實(shí)驗(yàn)將為大家介紹如何使用FPGA內(nèi)部的RAM以及程序?qū)υ揜AM的數(shù)據(jù)讀寫操作。
1.實(shí)驗(yàn)原理
Xilinx在VIVADO里為我們已經(jīng)提供了RAM的IP核, 我們只需通過(guò)IP核例化一個(gè)RAM,根據(jù)RAM的讀寫時(shí)序來(lái)寫入和讀取RAM中存儲(chǔ)的數(shù)據(jù)。實(shí)驗(yàn)中會(huì)通過(guò)VIVADO集成的在線邏輯分析儀ila,我們可以觀察RAM的讀寫時(shí)序和從RAM中讀取的數(shù)據(jù)。
2.創(chuàng)建Vivado工程
在添加RAM IP之前先新建一個(gè)ram_test的工程, 然后在工程中添加RAM IP,方法如下:
2.1 點(diǎn)擊下圖中IP Catalog,在右側(cè)彈出的界面中搜索ram,找到Block Memory Generator,雙擊打開(kāi)。
2.2 將Component Name改為ram_ip,在Basic欄目下,將Memory Type改為Simple Dual Prot RAM,也就是偽雙口RAM。一般來(lái)講"Simple Dual Port RAM"是最常用的,因?yàn)樗莾蓚€(gè)端口,輸入和輸出信號(hào)獨(dú)立。
2.3 切換到Port A Options欄目下,將RAM位寬Port A Width改為16,也就是數(shù)據(jù)寬度。將RAM深度Port A Depth改為512,深度指的是RAM里可以存放多少個(gè)數(shù)據(jù)。使能管腳Enable Port Type改為Always Enable。
2.4 切換到Port B Options欄目下,將RAM位寬Port B Width改為16,使能管腳Enable Port Type改為Always Enable,當(dāng)然也可以Use ENB Pin,相當(dāng)于讀使能信號(hào)。而Primitives Output Register取消勾選,其功能是在輸出數(shù)據(jù)加上寄存器,可以有效改善時(shí)序,但讀出的數(shù)據(jù)會(huì)落后地址兩個(gè)周期。很多情況下,不使能這項(xiàng)功能,保持?jǐn)?shù)據(jù)落后地址一個(gè)周期。
2.5 在Other Options欄目中,這里不像ROM那樣需要初始化RAM的數(shù)據(jù),我們可以在程序中寫入,所以配置默認(rèn)即可,直接點(diǎn)擊OK。
2.6 點(diǎn)擊“Generate”生成RAM IP。
3. RAM的端口定義和時(shí)序
Simple Dual Port RAM 模塊端口的說(shuō)明如下:
RAM的數(shù)據(jù)寫入和讀出都是按時(shí)鐘的上升沿操作的,端口A數(shù)據(jù)寫入的時(shí)候需要置高wea信號(hào),同時(shí)提供地址和要寫入的數(shù)據(jù)。下圖為輸入寫入到RAM的時(shí)序圖。
而端口B是不能寫入數(shù)據(jù)的,只能從RAM中讀出數(shù)據(jù),只要提供地址就可以了,一般情況下可以在下一個(gè)周期采集到有效的數(shù)據(jù)。
RAM讀時(shí)序
4. 測(cè)試程序編寫
下面進(jìn)行RAM的測(cè)試程序的編寫,由于測(cè)試RAM的功能,我們向RAM的端口A寫入一串連續(xù)的數(shù)據(jù),只寫一次,并從端口B中讀出,使用邏輯分析儀查看數(shù)據(jù)。代碼如下
`timescale1ns/1ps ////////////////////////////////////////////////////////////////////////////////// module ram_test( input clk, //25MHz時(shí)鐘 input rst_n //復(fù)位信號(hào),低電平有效 ); //----------------------------------------------------------- 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寫使能信號(hào) always@(posedge clk ornegedge rst_n) begin if(!rst_n) wea <=#11'b0; else begin if(&w_addr)//w_addr的bit位全為1,共寫入512個(gè)數(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個(gè)數(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 //----------------------------------------------------------- //實(shí)例化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 ); //實(shí)例化ila邏輯分析儀 ila_0 ila_0_inst ( .clk (clk ), .probe0 (r_data ), .probe1 (r_addr ) ); endmodule
為了能實(shí)時(shí)看到RAM中讀取的數(shù)據(jù)值,我們這里添加了ila工具來(lái)觀察RAM PORTB的數(shù)據(jù)信號(hào)和地址信號(hào)。關(guān)于如何生成ila大家請(qǐng)參考”PL的”Hello World”LED實(shí)驗(yàn)”。
程序結(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實(shí)驗(yàn)”,仿真結(jié)果如下,從圖中可以看出地址1寫入的數(shù)據(jù)是0002,在下個(gè)周期,也就是時(shí)刻2,有效數(shù)據(jù)讀出。
6. 板上驗(yàn)證
生成bitstream,并下載bit文件到FPGA。接下來(lái)我們通過(guò)ila來(lái)觀察一下從RAM中讀出的數(shù)據(jù)是否為我們初始化的數(shù)據(jù)。
在Waveform的窗口設(shè)置r_addr地址為0作為觸發(fā)條件,我們可以看到r_addr在不斷的從0累加到1ff, 隨著r_addr的變化, r_data也在變化, r_data的數(shù)據(jù)正是我們寫入到RAM中的512個(gè)數(shù)據(jù),這里需要注意,r_addr出現(xiàn)新地址時(shí),r_data對(duì)應(yīng)的數(shù)據(jù)要延時(shí)兩個(gè)時(shí)鐘周期才會(huì)出現(xiàn),數(shù)據(jù)比地址出現(xiàn)晚兩個(gè)時(shí)鐘周期,與仿真結(jié)果一致。
- Zynq UltraScale+ MPSoC驗(yàn)證數(shù)據(jù)手冊(cè)
- Zynq UltraScale+ MPSoC中的隔離方法
- Zynq UltraScale+ MPSoC的隔離設(shè)計(jì)示例
- 米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源清單分享
- 計(jì)算機(jī)網(wǎng)絡(luò)第六章應(yīng)用層資源下載 0次下載
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第七章 FPGA片內(nèi)ROM測(cè)試實(shí)驗(yàn)
- 如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第八章FPGA片內(nèi)FIFO讀寫測(cè)試實(shí)驗(yàn)
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介紹
- 電力系統(tǒng)繼電保護(hù)第六章-變壓器保護(hù)(課件)下載.ppt 0次下載
- STM8S BLDC電機(jī)第六章工程的stm8選項(xiàng)字節(jié)配置 8次下載
- 靜噪基礎(chǔ)第六章_EMI靜噪濾波器 4次下載
- 數(shù)字信號(hào)處理 第六章 4次下載
- 《測(cè)控電路》習(xí)題完整參考答案(第六章) 0次下載
- 高頻電子線路第六章答案
- 針對(duì)UltraScale/UltraScale+芯片DFX應(yīng)考慮的因素有哪些(1) 537次閱讀
- Xilinx ZYNQ UltraScale+系列產(chǎn)品介紹 2405次閱讀
- FPGAs,Zynq和Zynq MPSoC器件的特點(diǎn) 2275次閱讀
- 基于Xilinx Zynq UltraScale+ RFSoC ZCU216評(píng)估套件詳細(xì)內(nèi)容介紹 9162次閱讀
- 基于Xilinx Zynq ultraScale+ 系列FPGA的AXU2CGB 開(kāi)發(fā)板評(píng)測(cè) 9051次閱讀
- 米爾科技Zynq UltraScale+ MPSoC技術(shù)參考手冊(cè)介紹 2975次閱讀
- 詳解Xilinx公司Zynq? UltraScale+?MPSoC產(chǎn)品 3184次閱讀
- Xilinx Zynq UltraScale MPSoC可擴(kuò)展電源設(shè)計(jì) 1950次閱讀
- Xilinx Kintex UltraScale+ FPGA KCU116評(píng)估套件主要性能和優(yōu)勢(shì) 6734次閱讀
- Zynq UltraScale+ MPSoC ZCU102評(píng)估套件解決方案 8640次閱讀
- Enea OSE可實(shí)現(xiàn)對(duì)Xilinx UltraScale+ MPSoC的支持 2790次閱讀
- Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞 2620次閱讀
- Zynq UltraScale+ MPSoC 上的多個(gè)Linux UIO設(shè)計(jì) 3219次閱讀
- 用ZYNQ MPSoC玩DOOM! 2539次閱讀
- Ti推出面向Zynq UltraScale+ MPSoC的電源參考設(shè)計(jì) 3588次閱讀
下載排行
本周
- 1HFSS電磁仿真設(shè)計(jì)應(yīng)用詳解PDF電子教程免費(fèi)下載
- 24.30 MB | 128次下載 | 1 積分
- 2雷達(dá)的基本分類方法
- 1.25 MB | 4次下載 | 4 積分
- 3電感技術(shù)講解
- 827.73 KB | 2次下載 | 免費(fèi)
- 4從 MSP430? MCU 到 MSPM0 MCU 的遷移指南
- 1.17MB | 2次下載 | 免費(fèi)
- 5有源低通濾波器設(shè)計(jì)應(yīng)用說(shuō)明
- 1.12MB | 2次下載 | 免費(fèi)
- 6RA-Eco-RA2E1-48PIN-V1.0開(kāi)發(fā)板資料
- 35.59 MB | 2次下載 | 免費(fèi)
- 7面向熱插拔應(yīng)用的 I2C 解決方案
- 685.57KB | 1次下載 | 免費(fèi)
- 8愛(ài)普生有源晶體振蕩器SG3225EEN應(yīng)用于儲(chǔ)能NPC、新能源
- 317.46 KB | 1次下載 | 免費(fèi)
本月
- 12024年工控與通信行業(yè)上游發(fā)展趨勢(shì)和熱點(diǎn)解讀
- 2.61 MB | 763次下載 | 免費(fèi)
- 2HFSS電磁仿真設(shè)計(jì)應(yīng)用詳解PDF電子教程免費(fèi)下載
- 24.30 MB | 128次下載 | 1 積分
- 3繼電保護(hù)原理
- 2.80 MB | 36次下載 | 免費(fèi)
- 4正激、反激、推挽、全橋、半橋區(qū)別和特點(diǎn)
- 0.91 MB | 32次下載 | 1 積分
- 5labview實(shí)現(xiàn)DBC在界面加載配置
- 0.57 MB | 21次下載 | 5 積分
- 6在設(shè)計(jì)中使用MOSFET瞬態(tài)熱阻抗曲線
- 1.57MB | 15次下載 | 免費(fèi)
- 7GBT 4706.1-2024家用和類似用途電器的安全第1部分:通用要求
- 7.43 MB | 14次下載 | 免費(fèi)
- 8H橋中的電流感測(cè)
- 545.39KB | 7次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935113次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191360次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183329次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81578次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73804次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65985次下載 | 10 積分
評(píng)論
查看更多