那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【ZYNQ Ultrascale+ MPSOC FPGA教程】第六章FPGA片內(nèi)RAM讀寫測(cè)試實(shí)驗(yàn)

FPGA技術(shù)專欄 ? 來(lái)源:芯驛電子科技 ? 作者:芯驛電子科技 ? 2021-01-22 09:43 ? 次閱讀

原創(chuàng)聲明:

本原創(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)。

o4YBAGAKLa-ABoycAACNMZ5WWzQ972.jpg

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ú)立。

pIYBAGAKLbCAHxvRAABeRlJj_ko400.jpg

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。

o4YBAGAKLbCAD2WqAABShyT6mNs322.jpg

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è)周期。

pIYBAGAKLbGADAkvAACH6bmf4M8590.jpg

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

pIYBAGAKLbKAEUzWAACUvlwFF6U203.jpg

2.6 點(diǎn)擊“Generate”生成RAM IP。

o4YBAGAKLbOAf32xAABSIdRvtuI431.jpg

3. RAM的端口定義和時(shí)序

Simple Dual Port RAM 模塊端口的說(shuō)明如下:

信號(hào)名稱 方向 說(shuō)明
clka in 端口A時(shí)鐘輸入
wea in 端口A使能
addra in 端口A地址輸入
dina in 端口A數(shù)據(jù)輸入
clkb in 端口B時(shí)鐘輸入
addrb in 端口B地址輸入
doutb out 端口B數(shù)據(jù)輸輸出

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

pIYBAGAKLbOAazRcAABZ8mCO9bE588.jpgRAM寫時(shí)序

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

o4YBAGAKLbSAb_86AABW88sIOaA091.jpgRAM讀時(shí)序

4. 測(cè)試程序編寫

下面進(jìn)行RAM的測(cè)試程序的編寫,由于測(cè)試RAM的功能,我們向RAM的端口A寫入一串連續(xù)的數(shù)據(jù),只寫一次,并從端口B中讀出,使用邏輯分析儀查看數(shù)據(jù)。代碼如下

`timescale1ns/1ps//////////////////////////////////////////////////////////////////////////////////moduleram_test(
			inputclk,			//25MHz時(shí)鐘			inputrst_n		//復(fù)位信號(hào),低電平有效	
		);//-----------------------------------------------------------reg		[8:0]		w_addr;			//RAMPORTA寫地址reg		[15:0]		w_data;			//RAMPORTA寫數(shù)據(jù)reg			wea;		//RAMPORTA使能reg		[8:0]		r_addr;			//RAMPORTB讀地址wire	[15:0]		r_data;			//RAMPORTB讀數(shù)據(jù)//產(chǎn)生RAMPORTB讀地址always@(posedgeclkornegedgerst_n)beginif(!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;elsebeginif(&w_addr)//w_addr的bit位全為1,共寫入512個(gè)數(shù)據(jù),寫入完成????????wea?<=#11'b0;else
????????wea	<=#11'b1;//ram寫使能endend//產(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;endelsebeginif(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
	endendend//-----------------------------------------------------------//實(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)”。

pIYBAGAKLbWADcTfAAARCnDQRRw720.jpg

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

o4YBAGAKLbWAGIwkAAA-pCtbTBw591.jpg

綁定引腳

##################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ù)讀出。

pIYBAGAKLbWAZFtOAACcKwiyrUE562.jpg

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é)果一致。

o4YBAGAKLbaAXm88AAB0M0szrlg978.jpg

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21798

    瀏覽量

    606048
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    575

    瀏覽量

    85991
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1369

    瀏覽量

    115024
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    610

    瀏覽量

    47298
  • MPSoC
    +關(guān)注

    關(guān)注

    0

    文章

    199

    瀏覽量

    24322
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)采集光盤實(shí)例第一第六章

    數(shù)據(jù)采集光盤實(shí)例第一第六章
    發(fā)表于 06-28 21:02

    如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器

      如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器  Zynq UltraScale+
    發(fā)表于 01-07 16:02

    如何調(diào)試Zynq UltraScale+ MPSoC VCU DDR控制器

    如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
    發(fā)表于 01-22 06:29

    ZYNQ Ultrascale+ MPSOC FPGA教程

    ZYNQ Ultrascale+ MPSOC FPGA教程
    發(fā)表于 02-02 07:53

    高頻電子線路第六章答案

    高頻電子線路第六章答案.
    發(fā)表于 06-05 10:41 ?41次下載

    《測(cè)控電路》習(xí)題完整參考答案(第六章

    《測(cè)控電路》習(xí)題完整參考答案(第六章
    發(fā)表于 02-07 15:17 ?0次下載

    數(shù)字信號(hào)處理 第六章

    數(shù)字信號(hào)處理 第六章
    發(fā)表于 10-19 09:34 ?4次下載
    數(shù)字信號(hào)處理 <b class='flag-5'>第六章</b>

    STM8S BLDC電機(jī)第六章工程的stm8選項(xiàng)字節(jié)配置

    STM8S BLDC電機(jī)第六章工程的stm8選項(xiàng)字節(jié)配置
    發(fā)表于 03-05 15:07 ?8次下載

    Zynq UltraScale+ MPSoC的發(fā)售消息

    Zynq?UltraScale+?MPSoC,現(xiàn)已開(kāi)始發(fā)售。視頻向您重點(diǎn)介紹了Xilinx UltraScale +產(chǎn)品組合的第一位成員
    的頭像 發(fā)表于 11-27 06:47 ?3641次閱讀

    ZYNQ Ultrascale+ MPSOC FPGA教程】第八FPGA內(nèi)FIFO讀寫測(cè)試實(shí)驗(yàn)

    FIFO是FPGA應(yīng)用當(dāng)中非常重要的模塊,廣泛用于數(shù)據(jù)的緩存,跨時(shí)鐘域數(shù)據(jù)處理等。學(xué)好FIFO是FPGA的關(guān)鍵,靈活運(yùn)用好FIFO是一個(gè)FPGA工程師必備的技能。本章主要介紹利用XILINX提供的FIFO IP進(jìn)行
    發(fā)表于 02-02 06:24 ?11次下載
    【<b class='flag-5'>ZYNQ</b> <b class='flag-5'>Ultrascale+</b> <b class='flag-5'>MPSOC</b> <b class='flag-5'>FPGA</b>教程】第八<b class='flag-5'>章</b><b class='flag-5'>FPGA</b><b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b>FIFO<b class='flag-5'>讀寫</b><b class='flag-5'>測(cè)試</b><b class='flag-5'>實(shí)驗(yàn)</b>

    ZYNQ Ultrascale+ MPSOC FPGA教程】第七 FPGA內(nèi)ROM測(cè)試實(shí)驗(yàn)

    FPGA本身是SRAM架構(gòu)的,斷電之后,程序就消失,那么如何利用FPGA實(shí)現(xiàn)一個(gè)ROM呢,我們可以利用FPGA內(nèi)部的RAM資源實(shí)現(xiàn)ROM,但不是真正意義上的ROM,而是每次上電都會(huì)把初
    發(fā)表于 02-26 06:22 ?3次下載
    【<b class='flag-5'>ZYNQ</b> <b class='flag-5'>Ultrascale+</b> <b class='flag-5'>MPSOC</b> <b class='flag-5'>FPGA</b>教程】第七<b class='flag-5'>章</b> <b class='flag-5'>FPGA</b><b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b>ROM<b class='flag-5'>測(cè)試</b><b class='flag-5'>實(shí)驗(yàn)</b>

    ZYNQ Ultrascale+ MPSOC FPGA教程】第六章 FPGA內(nèi)RAM讀寫測(cè)試實(shí)驗(yàn)

    RAMFPGA中常用的基礎(chǔ)模塊,可廣泛用于緩存數(shù)據(jù)的情況,同樣它也是ROM,F(xiàn)IFO的基礎(chǔ)。本實(shí)驗(yàn)將為大家介紹如何使用FPGA內(nèi)部的RAM
    發(fā)表于 03-15 06:09 ?14次下載
    【<b class='flag-5'>ZYNQ</b> <b class='flag-5'>Ultrascale+</b> <b class='flag-5'>MPSOC</b> <b class='flag-5'>FPGA</b>教程】<b class='flag-5'>第六章</b> <b class='flag-5'>FPGA</b><b class='flag-5'>片</b><b class='flag-5'>內(nèi)</b><b class='flag-5'>RAM</b><b class='flag-5'>讀寫</b><b class='flag-5'>測(cè)試</b><b class='flag-5'>實(shí)驗(yàn)</b>

    ZYNQ Ultrascale+ MPSoC系列FPGA芯片設(shè)計(jì)

    基于 Xilinx 公司ZYNQ Ultrascale+ MPSoC系列 FPGA 芯片設(shè)計(jì),應(yīng)用于工廠自動(dòng)化、機(jī)器視覺(jué)、工業(yè)質(zhì)檢等工業(yè)領(lǐng)域
    發(fā)表于 11-02 14:35 ?1629次閱讀

    Zynq UltraScale+ MPSoC的隔離設(shè)計(jì)示例

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC的隔離設(shè)計(jì)示例.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 11:28 ?3次下載
    <b class='flag-5'>Zynq</b> <b class='flag-5'>UltraScale+</b> <b class='flag-5'>MPSoC</b>的隔離設(shè)計(jì)示例

    Zynq UltraScale+ MPSoC數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《Zynq UltraScale+ MPSoC數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 12-30 14:37 ?2次下載
    赌球网| 大发888娱乐场下载ypu rd| 如何看百家乐官网的路纸| 全讯网娱乐353788| 百家乐拍是什么| 真人百家乐官网赌法| 最好的网上真人赌博| 网上百家乐解密| 百家乐官网游戏玩法技巧| bet365公司欧赔| 卢克索百家乐的玩法技巧和规则 | BET365官方网| 大发888平台| 百家乐博彩桌出租| 百家乐官网斗地主| 游戏百家乐官网押发| 百家乐破解秘籍| 鼎龙百家乐官网的玩法技巧和规则 | 百家乐赢家电子书| 中国百家乐官网澳门真人娱乐平台网址| 博彩百家乐官网规则| 巴塘县| 德州扑克哪个平台好| 新澳门百家乐的玩法技巧和规则| 代理百家乐最多占成| 金彩百家乐官网的玩法技巧和规则| 百家乐官网有方式赢钱吗| 湟中县| 皇家一号娱乐城| 大发888捕鱼游戏| 全景网百家乐的玩法技巧和规则| 正规百家乐游戏下载| 百家乐官网路单显示程序| 百家乐官网赢钱lv| 德州扑克 术语| 太阳城房价| 百家乐赌机玩法| 大佬百家乐现金网| 百家乐官网最好投| 百家乐官网历史路单| 清镇市|