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

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

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

關(guān)于AXI BRAM控制器的相關(guān)內(nèi)容

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-11-16 11:33 ? 次閱讀

學(xué)習(xí)內(nèi)容

本文介紹關(guān)于AXI BRAM控制器的相關(guān)內(nèi)容,針對(duì)數(shù)據(jù)量較少、地址不連續(xù)、長(zhǎng)度不規(guī)則的情況,通過(guò) BRAM 來(lái)進(jìn)行數(shù)據(jù)的交互。

開(kāi)發(fā)環(huán)境

vivado 18.3&SDK,PYNQ-Z2開(kāi)發(fā)板。

AXI BRAM控制器

簡(jiǎn)介

BRAM控制器可以用于與 AXI 互連和系統(tǒng)主設(shè)備的集成,以與本地塊 RAM 進(jìn)行通信。內(nèi)核支持到塊 RAM 的單次和突發(fā)傳輸,并針對(duì)性能進(jìn)行了優(yōu)化。AX14或AX14- lite控制器配置中,可以配置到BRAM塊的單個(gè)端口或到BRAM塊的兩個(gè)端口。通過(guò)第二個(gè)AX14-Lite控制端口連接,AXI BRAM控制器IP可以在數(shù)據(jù)路徑上配置ECC功能,并通過(guò)可用的外部ECC寄存器設(shè)置。AXI BRAM Controller IP核的頂級(jí)端口連接和主模塊如下圖所示。展示了AX14-Lite模式下,AXI BRAM核心與BRAM塊的連接??梢岳肂RAM塊的單端口利用率或BRAM塊的雙端口模式(通過(guò)參數(shù)設(shè)置)。

f7d009e8-6541-11ed-8abf-dac502259ad0.png



下圖展示了為支持AX14接口而生成的HDL核心。對(duì)BRAM塊的單端口使用可以配置在雙端口配置中增強(qiáng)的性能設(shè)置。,詳細(xì)結(jié)構(gòu)框圖如下:

f7dfac90-6541-11ed-8abf-dac502259ad0.png




所有與axis主設(shè)備的通信都是通過(guò)一個(gè)5通道的axis接口進(jìn)行的。所有寫(xiě)操作都在AXI總線的寫(xiě)地址通道(AW)上啟動(dòng),該通道指定了寫(xiě)事務(wù)的類(lèi)型和相應(yīng)的地址信息。寫(xiě)數(shù)據(jù)通道(W)為單個(gè)或突發(fā)寫(xiě)操作通信所有寫(xiě)數(shù)據(jù)。寫(xiě)響應(yīng)通道(B)用作寫(xiě)操作的握手或響應(yīng)。

在讀操作上,當(dāng)AXI主程序請(qǐng)求讀傳輸時(shí),讀地址通道(AR)通信所有地址和控制信息。當(dāng)可以處理讀操作時(shí),AXI從AXI BRAM控制器IP響應(yīng)讀地址通道(AR)。當(dāng)讀取數(shù)據(jù)可用時(shí),讀數(shù)據(jù)通道(R)將轉(zhuǎn)換操作的數(shù)據(jù)和狀態(tài)。

支持內(nèi)存大小

AXI BRAM Controller支持的內(nèi)存最大為2mbytes(字節(jié)大小為8或9),支持的內(nèi)存寬度和深度如表1-1所示。

f7f3d1de-6541-11ed-8abf-dac502259ad0.png




AXI BRAM Controller IP支持的最小深度為512字節(jié)。任何小于512的深度都被調(diào)整為512字節(jié)。

系統(tǒng)框圖與工程設(shè)計(jì)

工程功能設(shè)計(jì)為PS 將串口接收到的數(shù)據(jù)寫(xiě)入 BRAM,然后從 BRAM 中讀出數(shù)據(jù),并通過(guò)串口打印出來(lái);與此同時(shí), PL 從 BRAM 中同樣讀出數(shù)據(jù),并通過(guò) ILA 來(lái)觀察讀出的數(shù)據(jù)與串口打印的數(shù)據(jù)是否一致。系統(tǒng)框圖如下:

f8115f7e-6541-11ed-8abf-dac502259ad0.png

硬件平臺(tái)搭建

新建工程,創(chuàng)建 block design。

配置ZYNQ7

添加ZYNQ7 IP,對(duì)zynq進(jìn)行初始化配置,勾選配置uart資源,

f81fc60e-6541-11ed-8abf-dac502259ad0.png

使能clock復(fù)位和 M_GP0接口,

f83c9874-6541-11ed-8abf-dac502259ad0.png

配置時(shí)鐘,

f84859b6-6541-11ed-8abf-dac502259ad0.png

配置BRAM控制器和BRAM

接著配置BRAM控制器,基本是默認(rèn)配置。

f876b220-6541-11ed-8abf-dac502259ad0.png

配置BRAM

f8db58b0-6541-11ed-8abf-dac502259ad0.png

連接連線后系統(tǒng)如下,

f8fc8b7a-6541-11ed-8abf-dac502259ad0.png

設(shè)計(jì)讀取控制模塊

首先點(diǎn)擊tools創(chuàng)建一個(gè)新的IP,

f906ef52-6541-11ed-8abf-dac502259ad0.png

選擇創(chuàng)建一個(gè)AXI4接口的IP。

f9168958-6541-11ed-8abf-dac502259ad0.png

編輯IP名稱(chēng)等信息,設(shè)計(jì)IP的接口信息,

f92241d0-6541-11ed-8abf-dac502259ad0.png

點(diǎn)擊finish,完成IP創(chuàng)建。

f9593fa0-6541-11ed-8abf-dac502259ad0.png

在IP目錄下找到自己創(chuàng)建好的IP,右鍵進(jìn)行IP的編輯。

f96b0c1c-6541-11ed-8abf-dac502259ad0.png

在頂層進(jìn)行例化ram接口。

f97c0a26-6541-11ed-8abf-dac502259ad0.png

在AXI總線協(xié)議實(shí)現(xiàn)的文件中添加IP的例化,實(shí)現(xiàn)AXI-Lite接口的功能進(jìn)行參數(shù)的傳遞。

f98d11ae-6541-11ed-8abf-dac502259ad0.png

這里引用正點(diǎn)原子的BRAM的讀取模塊,bram_rd.v


		
module bram_rd(
    input                clk        , //時(shí)鐘信號(hào)
    input                rst_n      , //復(fù)位信號(hào)
    input                start_rd   , //讀開(kāi)始信號(hào)
    input        [31:0]  start_addr , //讀開(kāi)始地址  
    input        [31:0]  rd_len     , //讀數(shù)據(jù)的長(zhǎng)度
    //RAM端口
    output               ram_clk    , //RAM時(shí)鐘
    input        [31:0]  ram_rd_data, //RAM中讀出的數(shù)據(jù)
    output  reg          ram_en     , //RAM使能信號(hào)
    output  reg  [31:0]  ram_addr   , //RAM地址
    output  reg  [3:0]   ram_we     , //RAM讀寫(xiě)控制信號(hào)
    output  reg  [31:0]  ram_wr_data, //RAM寫(xiě)數(shù)據(jù)
    output               ram_rst      //RAM復(fù)位信號(hào),高電平有效
);


//reg define
reg  [1:0]   flow_cnt;
reg          start_rd_d0;
reg          start_rd_d1;


//wire define
wire         pos_start_rd;


//*****************************************************
//**                  main code
//*****************************************************


assign  ram_rst = 1'b0;
assign  ram_clk = clk ;
assign pos_start_rd = ~start_rd_d1 & start_rd_d0;


//延時(shí)兩拍,采start_rd信號(hào)的上升沿
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        start_rd_d0 <= 1'b0;   
        start_rd_d1 <= 1'b0; 
    end
    else begin
        start_rd_d0 <= start_rd;   
        start_rd_d1 <= start_rd_d0;     
    end
end


//根據(jù)讀開(kāi)始信號(hào),從RAM中讀出數(shù)據(jù)
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        flow_cnt <= 2'd0;
        ram_en <= 1'b0;
        ram_addr <= 32'd0;
        ram_we <= 4'd0;
    end
    else begin
        case(flow_cnt)
            2'd0 : begin
                if(pos_start_rd) begin
                    ram_en <= 1'b1;
                    ram_addr <= start_addr;
                    flow_cnt <= flow_cnt + 2'd1;
                end
            end
            2'd1 : begin
                if(ram_addr - start_addr == rd_len - 4) begin  //數(shù)據(jù)讀完
                    ram_en <= 1'b0;
                    flow_cnt <= flow_cnt + 2'd1;
                end
                else
                    ram_addr <= ram_addr + 32'd4;              //地址累加4
            end
            2'd2 : begin
                ram_addr <= 32'd0; 
                flow_cnt <= 2'd0;
            end
        endcase    
    end
end


endmodule

創(chuàng)建引腳接口,選擇任意一個(gè)BRAM引腳,創(chuàng)建封裝

f9a00d54-6541-11ed-8abf-dac502259ad0.png

設(shè)置接口和名稱(chēng),

f9d1e1f8-6541-11ed-8abf-dac502259ad0.png

完成接口映射。

f9eb52be-6541-11ed-8abf-dac502259ad0.png

然后點(diǎn)擊完成IP封裝。

f9fc7f30-6541-11ed-8abf-dac502259ad0.png

完成系統(tǒng)設(shè)計(jì)

完成IP的創(chuàng)建后,添加IP,完成連線,整體設(shè)計(jì)如下圖所示:

fa0a4886-6541-11ed-8abf-dac502259ad0.png

然后在完成綜合后進(jìn)行setup debug ,抓取b端口有關(guān)的信號(hào)。

fa15ba54-6541-11ed-8abf-dac502259ad0.png

完成添加DEDUG信號(hào)后,進(jìn)行綜合生成bit流,然后導(dǎo)出硬件,launch SDK。

SDK軟件部分

新建應(yīng)用工程,main.c中輸入以下代碼:


		
#include "xil_printf.h"
#include "stdio.h"
#include "xbram_hw.h"
#include "ps_pl_rd_ip.h"
#include "xparameters.h"


#define PL_BRAM_START  PS_PL_RD_IP_S00_AXI_SLV_REG0_OFFSET
#define PL_BRAM_START_ADDR PS_PL_RD_IP_S00_AXI_SLV_REG1_OFFSET
#define PL_BRAM_LEN PS_PL_RD_IP_S00_AXI_SLV_REG2_OFFSET
#define PS_PL_BASEADDR XPAR_PS_PL_RD_IP_0_S00_AXI_BASEADDR


#define START_ADDR  0
#define BRAM_DATA_BYTE 4
char input_data[1024];
int len_input_data;
int main(){
  while(1){
    int i=0;
    int wr_cnt=0;
    printf("ps_pl_bram test
");
    scanf("%s",input_data);
    len_input_data= strlen(input_data);
    for(i = START_ADDR*BRAM_DATA_BYTE;i<(START_ADDR + len_input_data)*BRAM_DATA_BYTE;i+=BRAM_DATA_BYTE)
    {
      PS_PL_RD_IP_mWriteReg(XPAR_BRAM_0_BASEADDR,i,input_data[wr_cnt]);
      wr_cnt++;
    }
    //配置起始地址
    PS_PL_RD_IP_mWriteReg(PS_PL_BASEADDR,PL_BRAM_START_ADDR,START_ADDR*BRAM_DATA_BYTE);
    //配置讀取長(zhǎng)度
    PS_PL_RD_IP_mWriteReg(PS_PL_BASEADDR,PL_BRAM_LEN,len_input_data*BRAM_DATA_BYTE);
    //使能脈沖
    PS_PL_RD_IP_mWriteReg(PS_PL_BASEADDR,PL_BRAM_START,1);
    PS_PL_RD_IP_mWriteReg(PS_PL_BASEADDR,PL_BRAM_START,0);
    for(i = START_ADDR*BRAM_DATA_BYTE;i<(START_ADDR + len_input_data)*BRAM_DATA_BYTE;i+=BRAM_DATA_BYTE)
    {
      printf("bram address : %d ,read data : %c
",i/BRAM_DATA_BYTE,PS_PL_RD_IP_mReadReg(XPAR_BRAM_0_BASEADDR,i));
    }
  }
}

部分代碼講解

本次工程比較簡(jiǎn)單,在while循環(huán)中實(shí)現(xiàn)了對(duì)串口輸入的存儲(chǔ)和顯示打印。

運(yùn)行效果

fa348cd6-6541-11ed-8abf-dac502259ad0.png

在這里插入圖片描述

ila抓取數(shù)據(jù)

通過(guò)ILA抓取的讀取數(shù)據(jù)和發(fā)送寫(xiě)入的數(shù)據(jù)一致。

fa46e156-6541-11ed-8abf-dac502259ad0.png



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    15888

    瀏覽量

    175408
  • BRAM
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    10914

原文標(biāo)題:SDK軟件部分

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Xilinx NVMe AXI4主機(jī)控制器,AXI4接口高性能版本介紹

    NVMe AXI4 Host Controller IP可以連接高速存儲(chǔ)PCIe SSD,無(wú)需CPU,自動(dòng)加速處理所有的NVMe協(xié)議命令,具備獨(dú)立的數(shù)據(jù)寫(xiě)入和讀取AXI4接口,不但適用高性能、順序
    的頭像 發(fā)表于 07-18 09:17 ?293次閱讀
    Xilinx NVMe <b class='flag-5'>AXI</b>4主機(jī)<b class='flag-5'>控制器</b>,<b class='flag-5'>AXI</b>4接口高性能版本介紹

    如何在psoc 4控制器 (CY8C4245AXI-483) 中實(shí)現(xiàn)RC5協(xié)議?

    如何在 psoc 4 控制器 (CY8C4245AXI-483) 中實(shí)現(xiàn) RC5 協(xié)議
    發(fā)表于 07-04 07:38

    PCIe-AXI-Cont用戶(hù)手冊(cè)

    Transaction layer的所有功能特性,不僅內(nèi)置DMA控制器,而且具備AXI4用戶(hù)接口,提供一個(gè)高性能,易于使用,可定制化的PCIe-AXI互連解決方案,同時(shí)適用于ASIC和FPGA。
    發(fā)表于 02-22 09:15 ?3次下載

    PCIe控制器(FPGA或ASIC),PCIe-AXI-Controller

    Transaction Layer的所有功能特性,不僅內(nèi)置DMA控制器,而且具備AXI4用戶(hù)接口,提供一個(gè)高性能,易于使用,可定制化的PCIe-AXI互連解決方案,同時(shí)適用于ASIC和FPGA。
    的頭像 發(fā)表于 02-21 15:15 ?654次閱讀
    PCIe<b class='flag-5'>控制器</b>(FPGA或ASIC),PCIe-<b class='flag-5'>AXI</b>-Controller

    蘋(píng)果獲取頭顯專(zhuān)利:可精準(zhǔn)控制地理位置相關(guān)內(nèi)容展示

     這項(xiàng)名為《限制指定私人內(nèi)容的方法及設(shè)備》的專(zhuān)利旨在讓用戶(hù)只在特定環(huán)境下才可通過(guò) Vision Pro 頭顯獲取相應(yīng)數(shù)據(jù)。以 IT之家提供的專(zhuān)利實(shí)例來(lái)看,用戶(hù)可以設(shè)定 Vision Pro 的權(quán)限,令家中或者辦公室特定區(qū)域的用戶(hù)方能看見(jiàn)所需的數(shù)據(jù)。
    的頭像 發(fā)表于 01-31 10:23 ?430次閱讀
    蘋(píng)果獲取頭顯專(zhuān)利:可精準(zhǔn)<b class='flag-5'>控制</b>地理位置<b class='flag-5'>相關(guān)內(nèi)容</b>展示

    伺服電機(jī)控制器的是三種類(lèi)型介紹

    伺服電機(jī)控制器的類(lèi)型包括降壓起動(dòng)、調(diào)速驅(qū)動(dòng)、智能控制器等三種分類(lèi),另外控制方面主要以方波控制
    發(fā)表于 11-19 10:00 ?728次閱讀

    一文了解Python的Pytest架構(gòu)及相關(guān)內(nèi)容

    我們首先需要知道測(cè)試一般分為四個(gè)方面的測(cè)試: 單元測(cè)試:稱(chēng)模塊測(cè)試,針對(duì)軟件設(shè)計(jì)中的最小單位——程序模塊,進(jìn)行正確性檢查的測(cè)試工作 集成測(cè)試:稱(chēng)組裝測(cè)試,通常在單元測(cè)試的基礎(chǔ)上,將所有程序模塊進(jìn)行有序的、遞增測(cè)試,重點(diǎn)測(cè)試不同模塊的接口部分 系統(tǒng)測(cè)試:將整個(gè)軟件系統(tǒng)看成一個(gè)整體進(jìn)行測(cè)試,包括對(duì)功能、性能以及軟件所運(yùn)行的軟硬件環(huán)境進(jìn)行測(cè)試
    的頭像 發(fā)表于 11-15 10:12 ?691次閱讀

    一文解讀SCI通信的相關(guān)內(nèi)容

    SCI:串行通信接口,串行通信技術(shù)的一種總稱(chēng);
    的頭像 發(fā)表于 11-08 10:34 ?4483次閱讀
    一文解讀SCI通信的<b class='flag-5'>相關(guān)內(nèi)容</b>

    TMS320F28335學(xué)習(xí)之中斷和定時(shí)相關(guān)內(nèi)容

    本次總結(jié)為中斷和定時(shí)相關(guān)內(nèi)容。除了基本的寄存配置,初始化,中斷主要是掌握三級(jí)中斷制,定時(shí)主要關(guān)注定時(shí)的工作原理和中斷時(shí)間的設(shè)置。
    的頭像 發(fā)表于 11-08 10:17 ?2081次閱讀
    TMS320F28335學(xué)習(xí)之中斷和定時(shí)<b class='flag-5'>器</b>的<b class='flag-5'>相關(guān)內(nèi)容</b>

    LDO相關(guān)內(nèi)容介紹

    在電壓轉(zhuǎn)換電路中,LDO和DC-DC電路是最常用的兩種方式,本篇主要介紹LDO相關(guān)內(nèi)容。 LDO是線性電源的一種,它可以實(shí)現(xiàn)電源電壓的轉(zhuǎn)換,不過(guò)主要用在降壓領(lǐng)域。它的全稱(chēng)是Low Dropout
    的頭像 發(fā)表于 11-06 11:09 ?536次閱讀
    LDO<b class='flag-5'>相關(guān)內(nèi)容</b>介紹

    ZYNQ的ARM和FPGA數(shù)據(jù)交互——AXI交互最重要的細(xì)節(jié)

    的存儲(chǔ)。 ⑥ACP : PL端可以直接從PS的Cache中拿到CPU計(jì)算的結(jié)果,延時(shí)低 ⑦DMA :DMA控制接口,用于控制高速數(shù)據(jù)傳輸?shù)耐ǖ馈?(3)AXI協(xié)議
    發(fā)表于 11-03 10:51

    51單片機(jī)控制步進(jìn)電機(jī)硬件連接部分

    本案例講解的內(nèi)容是51單片機(jī)控制步進(jìn)電機(jī)硬件連接部分。后續(xù)會(huì)分別講解單片機(jī)程序,S曲線加減速方法,上位機(jī)等相關(guān)內(nèi)容
    的頭像 發(fā)表于 10-26 11:11 ?2096次閱讀
    51單片機(jī)<b class='flag-5'>控制</b>步進(jìn)電機(jī)硬件連接部分

    CRC應(yīng)用指南

    CRC應(yīng)用指南主要介紹如何使用硬件CRC 外設(shè)及CRC 原理相關(guān)內(nèi)容。
    發(fā)表于 10-25 07:03

    LogiCORE IP AXI UART 16550內(nèi)核簡(jiǎn)介

    LogiCORE IP AXI 通用異步接收發(fā)送 (UART) 16550 連接到高級(jí)微控制器總線架構(gòu) (AMBA) AXI,為異步串行數(shù)據(jù)傳輸提供
    的頭像 發(fā)表于 10-16 11:02 ?3611次閱讀
    LogiCORE IP <b class='flag-5'>AXI</b> UART 16550內(nèi)核簡(jiǎn)介

    AXI中斷控制器(INTC)v4.1簡(jiǎn)介

    LogiCORE? IP AXI中斷控制器(INTC)內(nèi)核接收來(lái)自外圍設(shè)備的多個(gè)中斷輸入,并將它們合并到或中斷輸出到系統(tǒng)處理
    的頭像 發(fā)表于 10-07 11:45 ?1315次閱讀
    <b class='flag-5'>AXI</b>中斷<b class='flag-5'>控制器</b>(INTC)v4.1簡(jiǎn)介