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

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

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

ZYNQ EMIO重用封裝實現(xiàn)算法板級驗證

454398 ? 來源:博客園 ? 作者: 沒落騎士 ? 2020-12-25 17:22 ? 次閱讀

為了快速實現(xiàn)算法板級驗證,PC端需要通過JTAG或以太網(wǎng)FPGA形成通路。最簡單便捷的方案是利用協(xié)議棧芯片,用戶可以無視底層,利用簡單的SPI協(xié)議讀寫寄存器實現(xiàn)復雜的TCP UDP等網(wǎng)絡(luò)協(xié)議。當然帶寬會受限于SPI接口有效速率,本文采用芯片為W5500,支持10M/100M自適應,其理論值高達80Mbps,基本達到算法驗證的要求。

ZYNQ可以通過靈活的EMIO模擬SPI接口,從而在最少改動官方demo的前提下移植C語言驅(qū)動程序。本文著重講述EMIO的C語言軟件驅(qū)動方式及可重用封裝,封裝后可以接口方式被其他應用程序直接調(diào)用,非常方便。直接上代碼,再加以說明。
/*
* EMIO_ope.c
*
*/

#include "xgpiops.h"
#include "xparameters.h"
#include "xstatus.h"
#include "W5500.h"
#include "EMIO_ope.h"

static XGpioPs psGpioInstancePtr;

int EMIO_init()
{
XGpioPs_Config* GpioConfigPtr;
int xStatus;

//--EMIO的初始化
GpioConfigPtr = XGpioPs_LookupConfig(GPIO_DEVICE_ID);
if(GpioConfigPtr == NULL)
return XST_FAILURE;

xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr, GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED /n/r");

//--EMIO的輸入輸出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, ETH_NRST_BASE,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, USER_SPI_MOSI_BASE,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, USER_SPI_CSN_BASE,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, USER_SPI_SCLK_BASE,1);
XGpioPs_SetDirectionPin(&psGpioInstancePtr, USER_SPI_MISO_BASE,0);

//使能輸出端口
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, ETH_NRST_BASE,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, USER_SPI_MOSI_BASE,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, USER_SPI_CSN_BASE,1);
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, USER_SPI_SCLK_BASE,1);

return xStatus;
}

void writePin(u32 pinNum,u32 value)
{
XGpioPs_WritePin(&psGpioInstancePtr, pinNum, value);
}

u32 readPin(u32 pinNum)
{
return XGpioPs_ReadPin(&psGpioInstancePtr,pinNum);
}

Xilinx封住的庫函數(shù)有其固定的“套路”。首先查找設(shè)備配置,初始化。之后設(shè)置EMIO的方向,如果是輸出方向還要使能輸出。這里將上述預處理部分封裝到EMIO_Init()函數(shù)中。之后再編寫兩個函數(shù)分別實現(xiàn)EMIO寄存器的讀和寫,也就是讀取輸入接口數(shù)據(jù)以及輸出數(shù)值,兩者內(nèi)部均調(diào)用Xilinx官方提供的API函數(shù)。將實現(xiàn)細節(jié)隱藏最重要的步驟:將函數(shù)聲明統(tǒng)一放置.h文件。
/*
* EMIO_ope.h
*
*/

#ifndef SRC_EMIO_OPE_H_
#define SRC_EMIO_OPE_H_

#define GPIO_DEVICE_ID XPAR_PS7_GPIO_0_DEVICE_ID

int EMIO_init();
void writePin(u32 pinNum,u32 value);
u32 readPin(u32 pinNum);

#endif /* SRC_EMIO_OPE_H_ */

此處總結(jié)下利用FPGA/SOC連接以太網(wǎng)從簡單到難的設(shè)計方案是:協(xié)議棧芯片 --> LWIP開源庫 --> 基于以太網(wǎng)MAC的網(wǎng)絡(luò)協(xié)議邏輯設(shè)計--> 從上層網(wǎng)絡(luò)協(xié)議到MAC全部用HDL描述。不同的方案適合不同的需求,能靈活在開發(fā)周期和性能 功耗等方面取舍,做到簡單實用,應該是各個行業(yè)技術(shù)人員的所追求的終極目標。

編輯:hfy
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21568

    瀏覽量

    600608
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4069

    瀏覽量

    217566
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2147

    瀏覽量

    120715
收藏 人收藏

    評論

    相關(guān)推薦

    Xilinx ZYNQ開發(fā)GPIO的三種方式:MIO、EMIO、AXI_GPIO

    ;AXI_GPIO是封裝好的IP核,PS通過M_AXI_GPIO接口控制PL部分實現(xiàn)IO,使用時消耗管腳資源和邏輯資源。 使用的板子是zc702。 1.MIO方式 Zynq7000 系列芯片有 54 個
    的頭像 發(fā)表于 12-26 10:12 ?3761次閱讀
    Xilinx <b class='flag-5'>ZYNQ</b>開發(fā)GPIO的三種方式:MIO、<b class='flag-5'>EMIO</b>、AXI_GPIO

    重用機床編碼技術(shù)及重構(gòu)算法研究

    重用機床的組成模塊特征,進而將可重用機床的模塊編碼系統(tǒng)分為模塊主碼、模塊接口特征碼和模塊圖紙管理碼三部分組成。通過計算總相似系數(shù)得到與目標模塊最接近的模塊,給出了可重用機床模塊選擇算法
    發(fā)表于 05-17 11:58

    玩轉(zhuǎn)Zynq連載31——[ex53] 基于Zynq PS的EMIO控制

    0、EMIO1和EMIO2循環(huán)拉高,逐次點亮3個LED中的1個。 4 調(diào)試在Zstar板子上,設(shè)置跳線帽P3為JTAG模式,即PIN2-3短接。連接好串口線(USB線連接PC的US
    發(fā)表于 10-12 17:35

    【正點原子FPGA連載】第三章EMIO按鍵控制LED實驗-領(lǐng)航者 ZYNQ 之嵌入式開發(fā)指南

    熄滅。然后再按下底板上PL端的用戶按鍵PL_KEY0,可以看到核心上PS端的LED2(紅色)在按鍵按下時點亮,釋放后熄滅。說明我們通過EMIO擴展GPIO接口,使用PL端按鍵控制PS端LED的實驗在領(lǐng)航者ZYNQ開發(fā)
    發(fā)表于 08-29 16:20

    MIO/EMIO/AXI_GPIO接口詳解

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    發(fā)表于 02-02 07:30

    分享!基于Zynq-7010/7020的多路千兆網(wǎng)口實現(xiàn)方案

    評估(Xilinx Zynq-7010/7020)圖 1 TLZ7x-EasyEVM評估圖 2 SOM-TLZ7x-S核心2 方案實現(xiàn)
    發(fā)表于 10-22 09:43

    ZYNQ的學習筆記分享

    通過MIO(Multiuse I/O)模塊對器件的引腳做觀測(input)和控制(output)。ZYNQ的PS端上的GPIO也可以通過EMIO(Extra MIO)模塊對PL端的IP以及引腳實現(xiàn)上述操作。GPIO可以獨立且動態(tài)
    發(fā)表于 02-08 07:30

    實現(xiàn)上位機與zynq7020開發(fā)通信的方法

    最近想實現(xiàn)上位機與zynq7020開發(fā)通信。采用串口通信方式,利用QT編寫一個簡易串口助手實現(xiàn)與下位機的通信。 下位機給上位機發(fā)送收據(jù),上位機能夠正常接受。但是上位機給下位機串口發(fā)數(shù)
    發(fā)表于 02-17 07:08

    ZYNQ 的三種GPIO :MIO、EMIO、AXI

    。 我們先看一下MIO和EMIO:下圖EMIO和MIO的結(jié)構(gòu)。其中MIO分布在BANK0,BANK1,而EMIO則分布在BANK2、BANK3。注意一下幾項: 首先、MIO在zynq
    發(fā)表于 02-08 10:23 ?3194次閱讀
    <b class='flag-5'>ZYNQ</b> 的三種GPIO :MIO、<b class='flag-5'>EMIO</b>、AXI

    基于小樣本重用的混合盲均衡算法

    利用小樣本重用技術(shù)重新設(shè)計均衡器加權(quán)系數(shù),提高算法收斂效率,并引入常范數(shù)盲均衡算法,通過計算機仿真驗證了了新算法有效性,可以極大的降低系統(tǒng)的
    發(fā)表于 11-13 11:33 ?8次下載

    基于可重用激勵發(fā)生機制的虛擬SoC驗證平臺

    在系統(tǒng)芯片的設(shè)計中,傳統(tǒng)的激勵發(fā)生機制耗費人工多且難以重用,嚴重影響了仿真驗證的效率。針對此問題,構(gòu)建了一種基于可重用激勵發(fā)生機制的虛擬SoC驗證平臺。該平臺利用可
    發(fā)表于 11-28 17:43 ?0次下載
    基于可<b class='flag-5'>重用</b>激勵發(fā)生機制的虛擬SoC<b class='flag-5'>驗證</b>平臺

    ZYNQ-7000系列MIO、EMIO、AXI_GPIO接口

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    發(fā)表于 07-25 17:41 ?2530次閱讀
    <b class='flag-5'>ZYNQ</b>-7000系列MIO、<b class='flag-5'>EMIO</b>、AXI_GPIO接口

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    發(fā)表于 01-31 06:50 ?12次下載
    <b class='flag-5'>ZYNQ</b>-7000系列MIO/<b class='flag-5'>EMIO</b>/AXI_GPIO接口

    zynq 串口引腳引到emio 無法進入接收中斷問題記錄

    最近想實現(xiàn)上位機與zynq7020開發(fā)通信。采用串口通信方式,利用QT編寫一個簡易串口助手實現(xiàn)與下位機的通信。 下位機給上位機發(fā)送收據(jù),上位機能夠正常接受。但是上位機給下位機串口發(fā)數(shù)
    發(fā)表于 12-20 19:34 ?17次下載
    <b class='flag-5'>zynq</b> 串口引腳引到<b class='flag-5'>emio</b> 無法進入接收中斷問題記錄

    重用驗證組件中構(gòu)建測試平臺的步驟

    本文介紹了從一組可重用驗證組件中構(gòu)建測試平臺所需的步驟。UVM促進了重用,加速了測試平臺構(gòu)建的過程。 首先對 測試平臺集成者(testbench integrator) 和 測試編寫者(test
    的頭像 發(fā)表于 06-13 09:14 ?539次閱讀
    可<b class='flag-5'>重用</b>的<b class='flag-5'>驗證</b>組件中構(gòu)建測試平臺的步驟