在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ARM+FPGA開發:基于AXI總線的GPIO IP創建

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

FPGA+ARM是ZYNQ的特點,那么PL部分怎么和ARM通信呢,依靠的就是AXI總線。這個實驗是創建一個基于AXI總線的GPIO IP,利用PL的資源來擴充GPIO資源。通過這個實驗迅速入門開發基于總線的系統。

使用的板子是zc702。

AXI總線初識:

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

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

數據在總線上是遵守協議定的規則來傳輸的,AXI信號傳輸先是傳地址,然后檢測READY+VALID,都為高電平時開始傳數據,當主機發送最后一個數據時LAST信號拉高,通知從機傳輸結束。

在介紹讀寫如何進行前先介紹握手協議:

READY,VALID握手通信機制,主機產生 VLAID 信號來指明何時數據或控制信息有效。從機產生 READY 信號來指明已經準備好接受數據或控制信息。傳輸發生在 VALID和 READY 信號同時為高的時候。(還有一個LAST信號表示什么時候傳到最后一個數據了)

讀時序:地址線上發來地址,地址準備和地址有效都高時,開始發送要讀的數據,讀準備和讀有效都高時數據被讀取到,發最后一個數據時讀LAST信號拉高。

o4YBAF9uH8WAI1xaAACU82QQce4263.png

寫時序:地址線上發來地址,地址準備和地址有效都高時,開始發送要寫的數據,寫準備和寫有效都高時數據寫入,發最后一個數據時寫LAST信號拉高。寫數據多了一個反饋信號,反饋給主機,主機接收到這個信號,就知道寫成功了。

pIYBAF9uH8aAAs4gAACJSfEm2fE067.png

這個協議可以暫時不去理清,知道大致信號關系,后面會通過觀察波形進一步加深印象,這次實驗的重點是學習通過編程操作寄存器完成讀寫!

第一步,創建AXI總線IP

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

o4YBAF9uH8iAUsGLAADnuwEpkoo789.png

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

pIYBAF9uH8qAG5bqAACxI6pURJo494.png

我們按默認這是就好,記住這里的設置:選擇AXI_Lite總線,數據位寬是32位,也就是4字節,寄存器4個,實際我們用到的只有一個,但這里最低要求4個,沒關系,多出的不用就是,待會我們就要通過操作寄存器完成對數據的讀寫。

然后選擇Edit IP,

打開ip的工程后,先打開這個文件:

o4YBAF9uH8uAVHppAAAu9EZkD6g451.png

這個就是基于AXI_Lite總線協議的模塊,可以看到我們設置的數據位寬和寄存器數量:

pIYBAF9uH8yAKfI2AABAxU5Dc7A428.png


o4YBAF9uH82Ab-v2AABskE7zank379.png

AXI總線向寄存器寫數據:

pIYBAF9uH8-AYHHYAACcvF5rkeQ036.png

AXI總線下讀寄存器的數據:

o4YBAF9uH9CAPZZYAABokX-L-5U914.png

接下來我們添加一個信號,將寄存器綁定到用戶輸出,用這個輸出控制LED燈,這樣可以通過觀察LED的亮滅看有沒有寫入成功。

pIYBAF9uH9KAYrmWAABVKth315I408.png


pIYBAF9uH9OAGvfBAAAP5zqyelE589.png

然后打開頂層文件:

pIYBAF9uH9SAGfq5AAAxw0gZuIo667.png

將添加的信號加上去:

o4YBAF9uH9WAT65uAAAwQMaYLEU644.png


pIYBAF9uH9aADP9XAACLLFD8u9A634.png

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

o4YBAF9uH9iACx97AADMtnuJgAo697.png

overwrite原來的文件。

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

pIYBAF9uH9mAcuJGAABA_HOXRd4348.png

至此,基于AXI_Lite總線的IP就完成了。可以將這個文件夾拷到你之前建的工程目錄下,我是放在myip文件夾下。

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

將我們自定義的IP添加到庫里:

o4YBAF9uH9uAMovxAADwxIIyvs8728.png

Create Block Design,命名為GPIO_AXI_LED,

添加zynq核,雙擊修改ddr信號,其他默認設置:

o4YBAF9uH96AGn2NAAFiOx2f3dY398.png

添加我們自己創建的IP,然后點擊自動連接:

o4YBAF9uH9-AUV-1AACoeX_AwDs259.png

會自動出現互聯模塊和復位模塊,互聯模塊主要是起管理主從設備的作用:

pIYBAF9uH-GAKCksAAEtjEgQGJs852.png

本來我們還應該添加邏輯分析儀觀察AXI總線的各信號波形,但是為了先上手體驗怎么開發基于AXI的系統,我們先略過,放在下一個實驗中。

再點擊Run Block Automatiom:

pIYBAF9uH-OAG3lpAAE20_CPgik910.png

將LED信號也輸出出來,右擊GPIO_LED,Make External。

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

o4YBAF9uH-WAdMCPAAFAWNjWEYw582.png

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

檢驗一下我們的設計:

pIYBAF9uH-eAN2c_AACxuQ_PVzQ464.png

保存一下我們的設計:

pIYBAF9uH-mARURiAACF3K_7flY544.png

右鍵bd文件,復位一下系統,Reset Output Products:

pIYBAF9uH-qAL5F1AAAh0Tdzl3I817.png

右鍵bd文件,Geberate Output Products,

右鍵bd文件,Create HDL Wrapper。

然后就是添加管腳約束,把GPIO_LED信號連接到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]}]

添加完先綜合一下,看看連線有沒有錯誤。綜合完成生成比特流文件。
至此,大功告成,下面就到了本實現的重點,進入SDK寫代碼來讀寫寄存器!

將硬件系統信息和bit文件導入SDK:

o4YBAF9uH-uAIEpkAABIrdXdz4g497.png

然后Lanch SDK,新建一個空的工程:

o4YBAF9uH-2ASGTxAAC_s1bXKrQ584.png

在src文件下建一個c文件:

o4YBAF9uH-6AYonwAACW2pwVVlo534.png

c大家都知道,用到什么函數要將這個函數所在的文件添加到頭文件,這類先把頭文件添加進去:

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

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

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

o4YBAF9uH--ARMLvAAAWt2hh5Ns808.png

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

pIYBAF9uH_GABZmoAABVlLGA_Hc177.png

寄存器0所在地址就是基地址,偏移量為0,因為我們定義的位寬是32位,4個字節,寄存器1所在地址就是基地址+4,依次類推。

這里我們讓8個Led燈依次閃爍,1秒移動一次,并讀取寄存器的數據打印到串口:
#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移動一次
}
i=0;
}
}

板子上電,連接好,以Debug方式運行:

o4YBAF9uH_eAeJ28AAaGfUhX_sY455.png

下載好后,打開串口:

o4YBAF9uH_iAVZnFAAAj1vfG5Aw199.png


o4YBAF9uH_qADLLuAABbqvT4jow911.png

點擊開始運行:

pIYBAF9uH_uAaZY5AAB3EupWqSQ056.png

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

pIYBAF9uH_yAK8lHAABT0z28o6o501.png

至此,實驗成功,開啟了我們ARM+FPGA開發之路!以后可以嘗試開發更復雜的系統。

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Xilinx
    +關注

    關注

    73

    文章

    2177

    瀏覽量

    123723
  • AXI
    AXI
    +關注

    關注

    1

    文章

    132

    瀏覽量

    16997
收藏 人收藏

    評論

    相關推薦

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小凌派-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發。例程將創建一個任務,通過配置
    的頭像 發表于 04-11 15:36 ?130次閱讀
    基于小凌派RK2206<b class='flag-5'>開發</b>板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b>外設

    一文詳解AXI DMA技術

    AXI直接數值存取(Drect Memory Access,DMA)IP核在AXI4內存映射和AXI4流IP接口之間提供高帶寬的直接內存訪問
    的頭像 發表于 04-03 09:32 ?509次閱讀
    一文詳解<b class='flag-5'>AXI</b> DMA技術

    一文詳解Video In to AXI4-Stream IP

    Video In to AXI4-Stream IP核用于將視頻源(帶有同步信號的時鐘并行視頻數據,即同步sync或消隱blank信號或者而后者皆有)轉換成AXI4-Stream接口形式,實現了接口轉換。該
    的頭像 發表于 04-03 09:28 ?535次閱讀
    一文詳解Video In to <b class='flag-5'>AXI</b>4-Stream <b class='flag-5'>IP</b>核

    AXI接口FIFO簡介

    AXI接口FIFO是從Native接口FIFO派生而來的。AXI內存映射接口提供了三種樣式:AXI4、AXI3和AXI4-Lite。除了Na
    的頭像 發表于 03-17 10:31 ?599次閱讀
    <b class='flag-5'>AXI</b>接口FIFO簡介

    16通道AD采集方案,基于復旦微ARM + FPGA國產SoC處理器平臺

    FMQL20S400M評估板(TLFM20S-EVM)、TL7606P模塊、TL7616P模塊和TL1278P模塊。 復旦微FMQL20SM ARM+FPGA SoC國產平臺介紹 FMQL20S400M是復旦微四核ARM Cortex-A7(PS端) +
    的頭像 發表于 01-23 10:39 ?445次閱讀
    16通道AD采集方案,基于復旦微<b class='flag-5'>ARM</b> + <b class='flag-5'>FPGA</b>國產SoC處理器平臺

    ZYNQ基礎---AXI DMA使用

    通道,從ddr讀出數據通道和向ddr寫入數據通道。其IP結構的兩邊分別對應著用于訪問內存的AXI總線和用于用戶簡
    的頭像 發表于 01-06 11:13 ?1426次閱讀
    ZYNQ基礎---<b class='flag-5'>AXI</b> DMA使用

    ARM開發板與FPGA的結合應用

    一、引言 ARM開發板是一種基于ARM架構的嵌入式開發平臺,具有高性能、低功耗的特點。FPGA是一種可編程的數字電路,可以根據需要配置不同的
    的頭像 發表于 11-05 11:42 ?1173次閱讀

    AMBA AXI4接口協議概述

    AMBA AXI4(高級可擴展接口 4)是 ARM 推出的第四代 AMBA 接口規范。AMD Vivado Design Suite 2014 和 ISE Design Suite 14 憑借半導體產業首個符合 AXI4 標準的
    的頭像 發表于 10-28 10:46 ?558次閱讀
    AMBA <b class='flag-5'>AXI</b>4接口協議概述

    實測52.4MB/s!全國產ARM+FPGA的CSI通信案例分享!

    高速AD數據的傳輸需求。開發難度低:CSI總線采用并行數據和控制信號分離方式,時序簡單,FPGA端接口開發難度低。低成本:CSI總線采用并行
    發表于 07-17 11:25

    國產RK3568J基于FSPI的ARM+FPGA通信方案分享

    優勢,亦可相互協作處理更復雜的問題。 ARM + FPGA常見的通信方式有PCIe、FSPI、I2C、SDIO、CSI等,今天主要介紹基于FSPI的ARM + FPGA通信方式。 FS
    發表于 07-17 10:50

    FPGAIP軟核使用技巧

    夠與所使用的FPGA平臺和開發工具無縫集成。 閱讀和理解IP軟核的文檔 : 在使用IP軟核之前,務必仔細閱讀和理解其提供的文檔,包括用戶手冊、技術參考手冊、示例代碼等。這將有助于您更
    發表于 05-27 16:13

    SoC設計中總線協議AXI4與AXI3的主要區別詳解

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

    關于FPGA IP

    對于深入學習使用FPGA的小伙伴們,特別是一些復雜的、大規模的設計應用,適宜的IP核對開發能起到事半功倍的作用。IP核的概念與我們sdk里庫的概念相似。
    發表于 04-29 21:01

    FPGA開發如何降低成本,比如利用免費的IP內核

    FPGA開發過程中,利用免費的IP內核可以顯著提高開發效率,減少設計成本。以下是一些關于如何利用免費IP內核進行
    發表于 04-28 09:41

    FPGA通過AXI總線讀寫DDR3實現方式

    AXI總線由一些核心組成,包括AXI主處理器接口(AXI4)、AXI處理器到協處理器接口(AXI
    發表于 04-18 11:41 ?1600次閱讀
    主站蜘蛛池模板: 97影院理论午夜论不卡 | brazzers720欧美丰满 | 一区二区三区欧美在线 | 就操| 亚洲福利一区二区三区 | 成人午夜毛片 | 黄色一级片网址 | 久久久午夜精品理论片 | 97视频碰碰车 | 无毒在线 | 国产在线观看午夜不卡 | 久久国产乱子伦精品免费午夜 | 日本毛片在线观看 | 亚洲天堂电影在线观看 | 丁香花的视频免费观看 | 色多多视频在线观看免费大全 | 日本人69xxxxxxx69| 日本wwww色| 特黄日韩免费一区二区三区 | 午夜精品久久久久久久第一页 | 69久久夜色精品国产69小说 | 色噜噜狠狠大色综合 | 亚洲狠狠网站色噜噜 | 国产一二三区在线观看 | 黄色永久网站 | 成人亚洲欧美 | 五月婷婷六月丁香激情 | 久久草在线视频国产一 | 国产理论最新国产精品视频 | 2018国产精品 | 九九久久九九久久 | 新版天堂中文资源8在线 | 午夜在线观看网站 | 手机看片日韩在线 | 欧美高清xx| 欧美黄色片一级 | 爱爱免费网站 | 美女视频黄的免费视频网页 | 全黄毛片 | 亚洲人成毛片线播放 | 亚洲高清一区二区三区 |