小13箩利洗澡无码视频免费网站-亚洲熟妇无码av另类vr影视-国产精品久久久久乳精品爆-宅女午夜福利免费视频

9.基于BRAM的PS-PL數(shù)據(jù)交互實(shí)驗(yàn)
時(shí)間:2023-02-04 21:59:48  來(lái)源:嗶哩嗶哩  
1
聽(tīng)新聞

一、基本概念&本節(jié)任務(wù)

0.寫(xiě)在前面


(資料圖片僅供參考)

本來(lái)是想先做ov5640的LCD顯示實(shí)驗(yàn)的,OV5640和LCD都能點(diǎn)亮了,但是我想當(dāng)然地把OV5640的數(shù)據(jù)直接接到了LCD上,顯示出來(lái)頻閃很厲害,不可用,還是先繼續(xù)學(xué)習(xí)AXI吧。開(kāi)學(xué)之前爭(zhēng)取把AXI總線學(xué)完,能操作內(nèi)存或者直接內(nèi)存訪問(wèn)的話,按幀存儲(chǔ)數(shù)據(jù)再讀出顯示可能會(huì)好很多。

1.本節(jié)任務(wù)

本章的實(shí)驗(yàn)任務(wù)是 PS 將串口接收到的數(shù)據(jù)寫(xiě)入 BRAM,然后從 BRAM 中讀出數(shù)據(jù),并通過(guò)串口打印出來(lái);與此同時(shí),PL 從BRAM中同樣讀出數(shù)據(jù),并通過(guò)ILA來(lái)觀察讀出的數(shù)據(jù)與串口打印的數(shù)據(jù)是否一致。

2.BRAM

BRAM(Block RAM)是PL部分的存儲(chǔ)器陣列,PS和PL通過(guò)對(duì)BRAM進(jìn)行讀寫(xiě)操作,來(lái)實(shí)現(xiàn)數(shù)據(jù)的交互。在PL中,通過(guò)輸出時(shí)鐘、地址、讀寫(xiě)控制等信號(hào)來(lái)對(duì)BRAM 進(jìn)行讀寫(xiě)操作;在PS中,處理器并不需要直接驅(qū)動(dòng)BRAM的端口,而是通過(guò)AXI ?BRAM控制器來(lái)對(duì)BRAM進(jìn)行讀寫(xiě)操作。

對(duì)于少量、不連貫數(shù)據(jù),使用BRAM是很好的選擇,而對(duì)于大量連續(xù)的數(shù)據(jù),ZYNQ7020只有4.9Mb的BRAM,使用DMA(直接內(nèi)存訪問(wèn))是更好的選擇,這個(gè)過(guò)后會(huì)學(xué)到。

AXI BRAM IP核簡(jiǎn)介,可以配置為AXI4或AXI4 Lite接口。

二、程序設(shè)計(jì)

1.Vivado

①新建工程

添加BRAM控制器、BRAM、PS IP核

可以選擇關(guān)掉ECC、安全電路

基本框架搭建完成

②創(chuàng)建讀BRAM IP核

新建一個(gè)帶AXI4接口的IP核

此時(shí)在IP Catalog中就有了剛才打包的IP核

由于選擇了生成一個(gè)帶AXI接口的IP核,VIVADO幫我們做好了AXI接口

新建設(shè)計(jì)文件,添加一個(gè)讀BRAM模塊(這里直接copy正點(diǎn)原子的代碼了):

根據(jù)接口要求,在兩個(gè)上層模塊加入地址、時(shí)鐘、使能、復(fù)位等信號(hào)。

在AXI例化的模塊中加入RAM的端口

在第二層的模塊中例化bram讀取模塊,同時(shí)用寄存器0,1,2分別傳輸讀開(kāi)始、起始地址、讀數(shù)據(jù)長(zhǎng)度等信號(hào)。

③封裝IP核

修改好IP核后進(jìn)行刷新

對(duì)于我們新增的ram端口,我們可以把它封裝成一個(gè)總線。如果不封裝,在Block design中就需要一個(gè)一個(gè)連線。

對(duì)總線接口命名,官方給出了一些接口的類型,我們選擇BRAM,并對(duì)其進(jìn)行映射。

并在Parameters中加入主機(jī)類型,否則后續(xù)會(huì)報(bào)警告

④加入讀BRAM IP核

完成后重新封裝整個(gè)IP,并在原工程中加入這個(gè)IP核,此時(shí)可以看見(jiàn)BRAM的端口封裝好了(寄我才發(fā)現(xiàn)名字錯(cuò)了)

與之前對(duì)應(yīng)的參數(shù)

在Address Editor中可以設(shè)置BRAM的大小,下面可以改為4K(字節(jié)),由于寬度為32位,所以深度為1024位,

⑤添加ILA

綜合好后點(diǎn)擊綜合選項(xiàng)的Set Up Debug,在Netlist中添加BRAM生成器的端口,我們?cè)赑L中讀端口B,所以加入端口B的地址、數(shù)據(jù)輸出、使能信號(hào)的端口,并選擇Domain時(shí)鐘。

深度為1024位

2.Vitis工程

在xparameters.h中,有BRAM控制器、BRAM、自定義IP核pl_bram_rd的各個(gè)參數(shù)。

xbram_hw.h中定義了兩個(gè)函數(shù)如下所示,XBram_WriteReg用于向Bram寫(xiě)數(shù)據(jù),第一個(gè)參數(shù)為Bram器件基地址,第二個(gè)參數(shù)為要寫(xiě)入數(shù)據(jù)的地址(我們選了4K大小,所以這里只能寫(xiě)0~1023),第三個(gè)參數(shù)為要寫(xiě)入Bram的數(shù)據(jù)(最大32位)。

XBram_ReadReg用于向Bram讀數(shù)據(jù),第一個(gè)參數(shù)為Bram器件基地址,第二個(gè)參數(shù)為要讀取數(shù)據(jù)的地址,返回讀出的數(shù)據(jù)。

①寫(xiě)入Bram和PL讀Bram

這里的START_ADDR為0,BRAM_DATA_BYTE為4(即4字節(jié)),即i=0,每次從BRAM的0地址開(kāi)始寫(xiě)入數(shù)據(jù)。當(dāng)i小于4*總數(shù)據(jù)長(zhǎng)度時(shí),i=i+4。

即這里向BRAM寫(xiě)入數(shù)據(jù),每次的地址偏移量為4字節(jié)。

②讀Bram數(shù)據(jù)并發(fā)送至上位機(jī)

③完整代碼

④發(fā)送數(shù)據(jù),觀察ILA

設(shè)置ILA觸發(fā)條件,在向開(kāi)發(fā)板串口發(fā)送“WritetoBram”,開(kāi)發(fā)板返回?cái)?shù)據(jù):

三、總結(jié)

春節(jié)過(guò)完不寫(xiě)Vitis感覺(jué)都快忘了,由于不涉及PS的外設(shè),所以這里不用在查找配置信息、初始化器件之類的了。過(guò)幾天繼續(xù)深挖AXI總線,學(xué)習(xí)AXI寫(xiě)入DDR和DMA。