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

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

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

ARM+FPGA開發(fā):基于AXI總線的GPIO IP創(chuàng)建

454398 ? 來(lái)源:CSDN 博主 ? 作者:ChuanjieZhu ? 2020-12-25 14:07 ? 次閱讀

FPGA+ARM是ZYNQ的特點(diǎn),那么PL部分怎么和ARM通信呢,依靠的就是AXI總線。這個(gè)實(shí)驗(yàn)是創(chuàng)建一個(gè)基于AXI總線的GPIO IP,利用PL的資源來(lái)擴(kuò)充GPIO資源。通過(guò)這個(gè)實(shí)驗(yàn)迅速入門開發(fā)基于總線的系統(tǒng)。

使用的板子是zc702。

AXI總線初識(shí):

AXI (Advanced eXtensible Interface),由ARM公司提出的一種總線協(xié)議。總線是一組傳輸通道, 是各種邏輯器件構(gòu)成的傳輸數(shù)據(jù)的通道, 一般由數(shù)據(jù)線、地址線、 控制線構(gòu)成。Xilinx從6系列的 FPGA 開始對(duì) AXI 總線提供支持, 此時(shí) AXI 已經(jīng)發(fā)展到了 AXI4 這個(gè)版本, Vivado里都是基于AIX4的 IP。

ZYNQ支持三種AXI總線,擁有三種AXI接口,用的都是AXI協(xié)議:
AXI4:(For high-performance memory-mapped requirements)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允許最大256輪的數(shù)據(jù)突發(fā)傳輸。
AXI4-Lite:(For simple, low-throughput memory-mapped communication)是一個(gè)輕量級(jí)的地址映射單次傳輸接口, 占用很少的邏輯單元。
AXI4-Stream:(For high-speed streaming data)面向高速流數(shù)據(jù)傳輸,去掉了地址項(xiàng),允許無(wú)限制的數(shù)據(jù)突發(fā)傳輸。

數(shù)據(jù)在總線上是遵守協(xié)議定的規(guī)則來(lái)傳輸?shù)?,AXI信號(hào)傳輸先是傳地址,然后檢測(cè)READY+VALID,都為高電平時(shí)開始傳數(shù)據(jù),當(dāng)主機(jī)發(fā)送最后一個(gè)數(shù)據(jù)時(shí)LAST信號(hào)拉高,通知從機(jī)傳輸結(jié)束。

在介紹讀寫如何進(jìn)行前先介紹握手協(xié)議:

READY,VALID握手通信機(jī)制,主機(jī)產(chǎn)生 VLAID 信號(hào)來(lái)指明何時(shí)數(shù)據(jù)或控制信息有效。從機(jī)產(chǎn)生 READY 信號(hào)來(lái)指明已經(jīng)準(zhǔn)備好接受數(shù)據(jù)或控制信息。傳輸發(fā)生在 VALID和 READY 信號(hào)同時(shí)為高的時(shí)候。(還有一個(gè)LAST信號(hào)表示什么時(shí)候傳到最后一個(gè)數(shù)據(jù)了)

讀時(shí)序:地址線上發(fā)來(lái)地址,地址準(zhǔn)備和地址有效都高時(shí),開始發(fā)送要讀的數(shù)據(jù),讀準(zhǔn)備和讀有效都高時(shí)數(shù)據(jù)被讀取到,發(fā)最后一個(gè)數(shù)據(jù)時(shí)讀LAST信號(hào)拉高。

o4YBAF9uH8WAI1xaAACU82QQce4263.png

寫時(shí)序:地址線上發(fā)來(lái)地址,地址準(zhǔn)備和地址有效都高時(shí),開始發(fā)送要寫的數(shù)據(jù),寫準(zhǔn)備和寫有效都高時(shí)數(shù)據(jù)寫入,發(fā)最后一個(gè)數(shù)據(jù)時(shí)寫LAST信號(hào)拉高。寫數(shù)據(jù)多了一個(gè)反饋信號(hào),反饋給主機(jī),主機(jī)接收到這個(gè)信號(hào),就知道寫成功了。

pIYBAF9uH8aAAs4gAACJSfEm2fE067.png

這個(gè)協(xié)議可以暫時(shí)不去理清,知道大致信號(hào)關(guān)系,后面會(huì)通過(guò)觀察波形進(jìn)一步加深印象,這次實(shí)驗(yàn)的重點(diǎn)是學(xué)習(xí)通過(guò)編程操作寄存器完成讀寫!

第一步,創(chuàng)建AXI總線IP

新建一個(gè)工程,Tools-->Create and Pacakge IP-->選擇Create AXI4 Peripheral

o4YBAF9uH8iAUsGLAADnuwEpkoo789.png

創(chuàng)建完以后(起個(gè)易理解的名字,放到能找到的路徑下),有三項(xiàng)需要設(shè)置:接口類型,數(shù)據(jù)類型和寄存器數(shù)量

pIYBAF9uH8qAG5bqAACxI6pURJo494.png

我們按默認(rèn)這是就好,記住這里的設(shè)置:選擇AXI_Lite總線,數(shù)據(jù)位寬是32位,也就是4字節(jié),寄存器4個(gè),實(shí)際我們用到的只有一個(gè),但這里最低要求4個(gè),沒關(guān)系,多出的不用就是,待會(huì)我們就要通過(guò)操作寄存器完成對(duì)數(shù)據(jù)的讀寫。

然后選擇Edit IP,

打開ip的工程后,先打開這個(gè)文件:

o4YBAF9uH8uAVHppAAAu9EZkD6g451.png

這個(gè)就是基于AXI_Lite總線協(xié)議的模塊,可以看到我們?cè)O(shè)置的數(shù)據(jù)位寬和寄存器數(shù)量:

pIYBAF9uH8yAKfI2AABAxU5Dc7A428.png


o4YBAF9uH82Ab-v2AABskE7zank379.png

AXI總線向寄存器寫數(shù)據(jù):

pIYBAF9uH8-AYHHYAACcvF5rkeQ036.png

AXI總線下讀寄存器的數(shù)據(jù):

o4YBAF9uH9CAPZZYAABokX-L-5U914.png

接下來(lái)我們添加一個(gè)信號(hào),將寄存器綁定到用戶輸出,用這個(gè)輸出控制LED燈,這樣可以通過(guò)觀察LED的亮滅看有沒有寫入成功。

pIYBAF9uH9KAYrmWAABVKth315I408.png


pIYBAF9uH9OAGvfBAAAP5zqyelE589.png

然后打開頂層文件:

pIYBAF9uH9SAGfq5AAAxw0gZuIo667.png

將添加的信號(hào)加上去:

o4YBAF9uH9WAT65uAAAwQMaYLEU644.png


pIYBAF9uH9aADP9XAACLLFD8u9A634.png

保存,Tools-->Create and Package IP:

o4YBAF9uH9iACx97AADMtnuJgAo697.png

overwrite原來(lái)的文件。

在IP自己創(chuàng)建的工程文件夾里,打包好的IP就是這個(gè)文件夾,可以將其拷貝放到任意地方:

pIYBAF9uH9mAcuJGAABA_HOXRd4348.png

至此,基于AXI_Lite總線的IP就完成了??梢詫⑦@個(gè)文件夾拷到你之前建的工程目錄下,我是放在myip文件夾下。

第二步,使用基于AXI總線的IP

將我們自定義的IP添加到庫(kù)里:

o4YBAF9uH9uAMovxAADwxIIyvs8728.png

Create Block Design,命名為GPIO_AXI_LED,

添加zynq核,雙擊修改ddr信號(hào),其他默認(rèn)設(shè)置:

o4YBAF9uH96AGn2NAAFiOx2f3dY398.png

添加我們自己創(chuàng)建的IP,然后點(diǎn)擊自動(dòng)連接:

o4YBAF9uH9-AUV-1AACoeX_AwDs259.png

會(huì)自動(dòng)出現(xiàn)互聯(lián)模塊和復(fù)位模塊,互聯(lián)模塊主要是起管理主從設(shè)備的作用:

pIYBAF9uH-GAKCksAAEtjEgQGJs852.png

本來(lái)我們還應(yīng)該添加邏輯分析儀觀察AXI總線的各信號(hào)波形,但是為了先上手體驗(yàn)怎么開發(fā)基于AXI的系統(tǒng),我們先略過(guò),放在下一個(gè)實(shí)驗(yàn)中。

再點(diǎn)擊Run Block Automatiom:

pIYBAF9uH-OAG3lpAAE20_CPgik910.png

將LED信號(hào)也輸出出來(lái),右擊GPIO_LED,Make External。

右擊空白處,選擇Regenerate layout,美化一下排版:

o4YBAF9uH-WAdMCPAAFAWNjWEYw582.png

這樣我們的系統(tǒng)就搭建成功了,下面就是一些例行操作:

檢驗(yàn)一下我們的設(shè)計(jì):

pIYBAF9uH-eAN2c_AACxuQ_PVzQ464.png

保存一下我們的設(shè)計(jì):

pIYBAF9uH-mARURiAACF3K_7flY544.png

右鍵bd文件,復(fù)位一下系統(tǒng),Reset Output Products:

pIYBAF9uH-qAL5F1AAAh0Tdzl3I817.png

右鍵bd文件,Geberate Output Products,

右鍵bd文件,Create HDL Wrapper。

然后就是添加管腳約束,把GPIO_LED信號(hào)連接到LED燈上:

zc702的管教約束如下:

#GPIO PMOD1
set_property PACKAGE_PIN E15 [get_ports {GPIO_LED[7]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[7]}]
set_property PACKAGE_PIN D15 [get_ports {GPIO_LED[6]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[6]}]
set_property PACKAGE_PIN W17 [get_ports {GPIO_LED[5]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[5]}]
set_property PACKAGE_PIN W5 [get_ports {GPIO_LED[4]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[4]}]
#GPIO PMOD2
set_property PACKAGE_PIN V7 [get_ports {GPIO_LED[3]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[3]}]
set_property PACKAGE_PIN W10 [get_ports {GPIO_LED[2]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[2]}]
set_property PACKAGE_PIN P18 [get_ports {GPIO_LED[1]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[1]}]
set_property PACKAGE_PIN P17 [get_ports {GPIO_LED[0]}]
set_property IOSTANDARD LVCMOS25 [get_ports {GPIO_LED[0]}]

添加完先綜合一下,看看連線有沒有錯(cuò)誤。綜合完成生成比特流文件。
至此,大功告成,下面就到了本實(shí)現(xiàn)的重點(diǎn),進(jìn)入SDK寫代碼來(lái)讀寫寄存器!

硬件系統(tǒng)信息和bit文件導(dǎo)入SDK:

o4YBAF9uH-uAIEpkAABIrdXdz4g497.png

然后Lanch SDK,新建一個(gè)空的工程:

o4YBAF9uH-2ASGTxAAC_s1bXKrQ584.png

在src文件下建一個(gè)c文件:

o4YBAF9uH-6AYonwAACW2pwVVlo534.png

c大家都知道,用到什么函數(shù)要將這個(gè)函數(shù)所在的文件添加到頭文件,這類先把頭文件添加進(jìn)去:

#include
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h"
#include "xil_types.h"

Xinlin提供的讀函數(shù)是Xil_Out32((BaseAddr) + (u32)(RegOffset)),寫函數(shù)是Xil_Out32((BaseAddr) + (u32)(RegOffset), (u32)(Data)),讀寫都是相對(duì)于Master而言的,讀當(dāng)然是In,寫當(dāng)然是Out了。

前面我們提到了,讀寫是對(duì)我們定義的寄存器操作,我們這里8個(gè)led燈,只要用到寄存器0的低8位就可以了。既然要操作寄存器,肯定要知道寄存器的地址,所有設(shè)備的地址都放在bsp文件下的include文件里的xparameters.h文件里,并且以宏定義,方便調(diào)用:

o4YBAF9uH--ARMLvAAAWt2hh5Ns808.png

例如我們的自定義IP在這里,GPIO_Zhu,第一個(gè)是基地址,第二個(gè)是最高地址,:

pIYBAF9uH_GABZmoAABVlLGA_Hc177.png

寄存器0所在地址就是基地址,偏移量為0,因?yàn)槲覀兌x的位寬是32位,4個(gè)字節(jié),寄存器1所在地址就是基地址+4,依次類推。

這里我們讓8個(gè)Led燈依次閃爍,1秒移動(dòng)一次,并讀取寄存器的數(shù)據(jù)打印到串口:
#include
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h"
#include "xil_types.h"

int main(){
u8 i=0;
u8 ledValue=0;
Xil_Out32(XPAR_GPIO_ZHU_V1_0_0_BASEADDR+0*4,0X00);
while(1){
for(i=0;i Xil_Out32(XPAR_GPIO_ZHU_V1_0_0_BASEADDR+0*4,1 ledValue=Xil_In32(XPAR_GPIO_ZHU_V1_0_0_BASEADDR+0*4);
xil_printf("ledValue=%x/r/n",ledValue); //打印到串口
sleep(1); //1s移動(dòng)一次
}
i=0;
}
}

板子上電,連接好,以Debug方式運(yùn)行:

o4YBAF9uH_eAeJ28AAaGfUhX_sY455.png

下載好后,打開串口:

o4YBAF9uH_iAVZnFAAAj1vfG5Aw199.png


o4YBAF9uH_qADLLuAABbqvT4jow911.png

點(diǎn)擊開始運(yùn)行:

pIYBAF9uH_uAaZY5AAB3EupWqSQ056.png

Led開始依次閃爍了!,并且在串口看到打印出的數(shù)據(jù):

pIYBAF9uH_yAK8lHAABT0z28o6o501.png

至此,實(shí)驗(yàn)成功,開啟了我們ARM+FPGA開發(fā)之路!以后可以嘗試開發(fā)更復(fù)雜的系統(tǒng)。

編輯:hfy


聲明:本文內(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)投訴
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2140

    瀏覽量

    120680
  • AXI
    AXI
    +關(guān)注

    關(guān)注

    1

    文章

    127

    瀏覽量

    16556
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    實(shí)測(cè)52.4MB/s!全國(guó)產(chǎn)ARM+FPGA的CSI通信案例分享!

    高速AD數(shù)據(jù)的傳輸需求。開發(fā)難度低:CSI總線采用并行數(shù)據(jù)和控制信號(hào)分離方式,時(shí)序簡(jiǎn)單,FPGA端接口開發(fā)難度低。低成本:CSI總線采用并行
    發(fā)表于 07-17 11:25

    國(guó)產(chǎn)RK3568J基于FSPI的ARM+FPGA通信方案分享

    優(yōu)勢(shì),亦可相互協(xié)作處理更復(fù)雜的問(wèn)題。 ARM + FPGA常見的通信方式有PCIe、FSPI、I2C、SDIO、CSI等,今天主要介紹基于FSPI的ARM + FPGA通信方式。 FS
    發(fā)表于 07-17 10:50

    SoC設(shè)計(jì)中總線協(xié)議AXI4與AXI3的主要區(qū)別詳解

    AXI4和AXI3是高級(jí)擴(kuò)展接口(Advanced eXtensible Interface)的兩個(gè)不同版本,它們都是用于SoC(System on Chip)設(shè)計(jì)中的總線協(xié)議,用于處理器和其它外設(shè)之間的高速數(shù)據(jù)傳輸。
    的頭像 發(fā)表于 05-10 11:29 ?5217次閱讀
    SoC設(shè)計(jì)中<b class='flag-5'>總線</b>協(xié)議<b class='flag-5'>AXI</b>4與<b class='flag-5'>AXI</b>3的主要區(qū)別詳解

    FPGA通過(guò)AXI總線讀寫DDR3實(shí)現(xiàn)方式

    AXI總線由一些核心組成,包括AXI主處理器接口(AXI4)、AXI處理器到協(xié)處理器接口(AXI
    發(fā)表于 04-18 11:41 ?1125次閱讀

    實(shí)測(cè)52.4MB/s!全國(guó)產(chǎn)ARM+FPGA的CSI通信案例分享!

    方式,時(shí)序簡(jiǎn)單,FPGA端接口開發(fā)難度低。 ? 低成本:CSI總線采用并行傳輸方式,FPGA端使用資源少
    的頭像 發(fā)表于 03-28 09:03 ?594次閱讀
    實(shí)測(cè)52.4MB/s!全國(guó)產(chǎn)<b class='flag-5'>ARM+FPGA</b>的CSI通信案例分享!

    AMBA總線AXI設(shè)計(jì)的關(guān)鍵問(wèn)題講解

    首先我們看一下針對(duì)AXI接口的IP設(shè)計(jì),在介紹之前我們先回顧一下AXI所具有的一些feature。
    的頭像 發(fā)表于 02-20 17:12 ?1472次閱讀
    AMBA<b class='flag-5'>總線</b>之<b class='flag-5'>AXI</b>設(shè)計(jì)的關(guān)鍵問(wèn)題講解

    國(guó)產(chǎn)RK3568J基于FSPI的ARM+FPGA通信方案分享

    近年來(lái),隨著中國(guó)新基建、中國(guó)制造 2025 規(guī)劃的持續(xù)推進(jìn),單 ARM 處理器越來(lái)越難勝任工業(yè)現(xiàn)場(chǎng)的功能要求,特別是如今能源電力、工業(yè)控制、智慧醫(yī)療等行業(yè),往往更需要 ARM + FPGA 架構(gòu)
    的頭像 發(fā)表于 01-29 15:13 ?2276次閱讀
    國(guó)產(chǎn)RK3568J基于FSPI的<b class='flag-5'>ARM+FPGA</b>通信方案分享

    RK3568-ARM+FPGA通信案例開發(fā)手冊(cè) (一)

    RK3568-ARM+FPGA通信案例開發(fā)手冊(cè) (一)
    的頭像 發(fā)表于 01-19 10:31 ?923次閱讀
    RK3568-<b class='flag-5'>ARM+FPGA</b>通信案例<b class='flag-5'>開發(fā)</b>手冊(cè) (一)

    AXI總線協(xié)議總結(jié)

    由數(shù)據(jù)線、地址線、控制線等構(gòu)成。 接口是一種連接標(biāo)準(zhǔn),又常常被稱之為物理接口。 協(xié)議是傳輸數(shù)據(jù)的規(guī)則。 1.簡(jiǎn)介 AXI4總線協(xié)議是 ARM 公司 提出的AMBA( Ad vanced Microcontroller Bus A
    的頭像 發(fā)表于 12-16 15:55 ?706次閱讀

    XILINX FPGA IPAXI Traffic Generator

    AXI Traffic Generator IP 用于在AXI4和AXI4-Stream互連以及其他AXI4系統(tǒng)外設(shè)上生成特定序列(流量)。
    的頭像 發(fā)表于 11-23 16:03 ?2136次閱讀
    XILINX <b class='flag-5'>FPGA</b> <b class='flag-5'>IP</b>之<b class='flag-5'>AXI</b> Traffic Generator

    Arm AMBA AXI-K規(guī)范中的一些功能更新

    Arm最近宣布推出了下一版本的Arm AMBA 5 AXI協(xié)議規(guī)范即AXI Issue K(AXI-K)。
    的頭像 發(fā)表于 11-15 10:06 ?641次閱讀

    基于ARM9平臺(tái)和FPGA的1553B總線測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于ARM9平臺(tái)和FPGA的1553B總線測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 11-08 10:10 ?0次下載
    基于<b class='flag-5'>ARM</b>9平臺(tái)和<b class='flag-5'>FPGA</b>的1553B<b class='flag-5'>總線</b>測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

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

    使用AXI4_Lite)總線把數(shù)據(jù)寫入RAM中,PS端從RAM中讀取數(shù)據(jù)。 3.PL端 (1)首先創(chuàng)建一個(gè)Block Design,加入以下IP核:
    發(fā)表于 11-03 10:51

    AXI傳輸數(shù)據(jù)的過(guò)程

    AXI4為例,有AXI full/lite/stream之分。 在Xilinx系列FPGA及其有關(guān)IP核中,經(jīng)常見到AXI
    的頭像 發(fā)表于 10-31 15:37 ?981次閱讀
    <b class='flag-5'>AXI</b>傳輸數(shù)據(jù)的過(guò)程

    ARM處理器中有些總線APB AHB AXI 3 AXI 4有什么不同?

    ARM處理器中有些總線APB AHB AXI 3 AXI 4,他們的有什么不同,各自作用?
    發(fā)表于 10-24 07:16