• <strike id="44quq"></strike>
      <s id="44quq"><em id="44quq"></em></s>
            <pre id="44quq"></pre>
          • 9.基于BRAM的PS-PL數據交互實驗
            時間:2023-02-04 21:59:48  來源:嗶哩嗶哩  
            1
            聽新聞

            一、基本概念&本節任務

            0.寫在前面


            (資料圖片僅供參考)

            本來是想先做ov5640的LCD顯示實驗的,OV5640和LCD都能點亮了,但是我想當然地把OV5640的數據直接接到了LCD上,顯示出來頻閃很厲害,不可用,還是先繼續學習AXI吧。開學之前爭取把AXI總線學完,能操作內存或者直接內存訪問的話,按幀存儲數據再讀出顯示可能會好很多。

            1.本節任務

            本章的實驗任務是 PS 將串口接收到的數據寫入 BRAM,然后從 BRAM 中讀出數據,并通過串口打印出來;與此同時,PL 從BRAM中同樣讀出數據,并通過ILA來觀察讀出的數據與串口打印的數據是否一致。

            2.BRAM

            BRAM(Block RAM)是PL部分的存儲器陣列,PS和PL通過對BRAM進行讀寫操作,來實現數據的交互。在PL中,通過輸出時鐘、地址、讀寫控制等信號來對BRAM 進行讀寫操作;在PS中,處理器并不需要直接驅動BRAM的端口,而是通過AXI ?BRAM控制器來對BRAM進行讀寫操作。

            對于少量、不連貫數據,使用BRAM是很好的選擇,而對于大量連續的數據,ZYNQ7020只有4.9Mb的BRAM,使用DMA(直接內存訪問)是更好的選擇,這個過后會學到。

            AXI BRAM IP核簡介,可以配置為AXI4或AXI4 Lite接口。

            二、程序設計

            1.Vivado

            ①新建工程

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

            可以選擇關掉ECC、安全電路

            基本框架搭建完成

            ②創建讀BRAM IP核

            新建一個帶AXI4接口的IP核

            此時在IP Catalog中就有了剛才打包的IP核

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

            新建設計文件,添加一個讀BRAM模塊(這里直接copy正點原子的代碼了):

            根據接口要求,在兩個上層模塊加入地址、時鐘、使能、復位等信號。

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

            在第二層的模塊中例化bram讀取模塊,同時用寄存器0,1,2分別傳輸讀開始、起始地址、讀數據長度等信號。

            ③封裝IP核

            修改好IP核后進行刷新

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

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

            并在Parameters中加入主機類型,否則后續會報警告

            ④加入讀BRAM IP核

            完成后重新封裝整個IP,并在原工程中加入這個IP核,此時可以看見BRAM的端口封裝好了(寄我才發現名字錯了)

            與之前對應的參數

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

            ⑤添加ILA

            綜合好后點擊綜合選項的Set Up Debug,在Netlist中添加BRAM生成器的端口,我們在PL中讀端口B,所以加入端口B的地址、數據輸出、使能信號的端口,并選擇Domain時鐘。

            深度為1024位

            2.Vitis工程

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

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

            XBram_ReadReg用于向Bram讀數據,第一個參數為Bram器件基地址,第二個參數為要讀取數據的地址,返回讀出的數據。

            ①寫入Bram和PL讀Bram

            這里的START_ADDR為0,BRAM_DATA_BYTE為4(即4字節),即i=0,每次從BRAM的0地址開始寫入數據。當i小于4*總數據長度時,i=i+4。

            即這里向BRAM寫入數據,每次的地址偏移量為4字節。

            ②讀Bram數據并發送至上位機

            ③完整代碼

            ④發送數據,觀察ILA

            設置ILA觸發條件,在向開發板串口發送“WritetoBram”,開發板返回數據:

            三、總結

            春節過完不寫Vitis感覺都快忘了,由于不涉及PS的外設,所以這里不用在查找配置信息、初始化器件之類的了。過幾天繼續深挖AXI總線,學習AXI寫入DDR和DMA。

            免费又黄又爽又猛大片午夜,免费观看成人碰视频公开,大香一本蕉伊线亚洲网,国产精品美女免费视频大全
            • <strike id="44quq"></strike>
              <s id="44quq"><em id="44quq"></em></s>
                    <pre id="44quq"></pre>
                  • 主站蜘蛛池模板: 扒开双腿猛进入喷水免费视频| 精品综合久久久久久98| 果冻传媒和91制片厂| 日本电影痴汉电车| 国产精品美女一区二区视频 | sihu国产精品永久免费| 国产精品亚洲四区在线观看 | 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 精品久久中文网址| 日本高清视频网址| 国产精品亚洲综合五月天| 伊人色综合久久大香| 中文字幕亚洲综合久久| 老师让我她我爽了好久视频| 无码人妻精品一区二区三区久久久 | 国产欧美在线观看| 亚洲精品网站在线观看不卡无广告 | а√最新版在线天堂| 精品一久久香蕉国产二月| 好男人资源在线播放看| 免费中文字幕乱码电影麻豆网| 久久天天躁狠狠躁夜夜躁2020| 香蕉成人伊视频在线观看| 欧美人与动欧交视频| 国产激情无码一区二区三区| 亚洲日韩国产二区无码| 9lporm自拍视频区在线| 污污动漫在线观看| 天天爽夜夜爽夜夜爽| 另类视频色综合| 中文字幕侵犯一色桃子视频| 精品福利一区二区三区免费视频| 小泽码利亚射射射| 亚洲综合区小说区激情区| ipx-412天海翼在线播放| 精品国产免费一区二区| 成人自拍视频在线观看| 四虎国产精品永免费| 中文字幕在线观看不卡| 第一章岳婿之战厨房沈浩 | 国产校园另类小说区|