0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZYNQ EMIO重用封装实现算法板级验证

454398 来源:博客园 作者: 没落骑士 2020-12-25 17:22 次阅读

为了快速实现算法板级验证,PC端需要通过JTAG或以太网FPGA形成通路。最简单便捷的方案是利用协议栈芯片,用户可以无视底层,利用简单的SPI协议读写寄存器实现复杂的TCP UDP等网络协议。当然带宽会受限于SPI接口有效速率,本文采用芯片为W5500,支持10M/100M自适应,其理论值高达80Mbps,基本达到算法验证的要求。

ZYNQ可以通过灵活的EMIO模拟SPI接口,从而在最少改动官方demo的前提下移植C语言驱动程序。本文着重讲述EMIO的C语言软件驱动方式及可重用封装,封装后可以接口方式被其他应用程序直接调用,非常方便。直接上代码,再加以说明。
/*
* 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封住的库函数有其固定的“套路”。首先查找设备配置,初始化。之后设置EMIO的方向,如果是输出方向还要使能输出。这里将上述预处理部分封装到EMIO_Init()函数中。之后再编写两个函数分别实现EMIO寄存器的读和写,也就是读取输入接口数据以及输出数值,两者内部均调用Xilinx官方提供的API函数。将实现细节隐藏最重要的步骤:将函数声明统一放置.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_ */

此处总结下利用FPGA/SOC连接以太网从简单到难的设计方案是:协议栈芯片 --> LWIP开源库 --> 基于以太网MAC的网络协议逻辑设计--> 从上层网络协议到MAC全部用HDL描述。不同的方案适合不同的需求,能灵活在开发周期和性能 功耗等方面取舍,做到简单实用,应该是各个行业技术人员的所追求的终极目标。

编辑:hfy
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21637

    浏览量

    601347
  • soc
    soc
    +关注

    关注

    38

    文章

    4108

    浏览量

    217802
  • Xilinx
    +关注

    关注

    71

    文章

    2158

    浏览量

    120883
收藏 人收藏

    评论

    相关推荐

    Xilinx ZYNQ开发GPIO的三种方式:MIO、EMIO、AXI_GPIO

    ;AXI_GPIO是封装好的IP核,PS通过M_AXI_GPIO接口控制PL部分实现IO,使用时消耗管脚资源和逻辑资源。 使用的板子是zc702。 1.MIO方式 Zynq7000 系列芯片有 54 个
    的头像 发表于 12-26 10:12 3830次阅读
    Xilinx <b class='flag-5'>ZYNQ</b>开发GPIO的三种方式:MIO、<b class='flag-5'>EMIO</b>、AXI_GPIO

    重用机床编码技术及重构算法研究

    重用机床的组成模块特征,进而将可重用机床的模块编码系统分为模块主码、模块接口特征码和模块图纸管理码三部分组成。通过计算总相似系数得到与目标模块最接近的模块,给出了可重用机床模块选择算法
    发表于 05-17 11:58

    玩转Zynq连载31——[ex53] 基于Zynq PS的EMIO控制

    0、EMIO1和EMIO2循环拉高,逐次点亮3个LED中的1个。 4 调试在Zstar板子上,设置跳线帽P3为JTAG模式,即PIN2-3短接。连接好串口线(USB线连接PC的US
    发表于 10-12 17:35

    【正点原子FPGA连载】第三章EMIO按键控制LED实验-领航者 ZYNQ 之嵌入式开发指南

    熄灭。然后再按下底板上PL端的用户按键PL_KEY0,可以看到核心上PS端的LED2(红色)在按键按下时点亮,释放后熄灭。说明我们通过EMIO扩展GPIO接口,使用PL端按键控制PS端LED的实验在领航者ZYNQ开发
    发表于 08-29 16:20

    MIO/EMIO/AXI_GPIO接口详解

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    发表于 02-02 07:30

    分享!基于Zynq-7010/7020的多路千兆网口实现方案

    评估(Xilinx Zynq-7010/7020)图 1 TLZ7x-EasyEVM评估图 2 SOM-TLZ7x-S核心2 方案实现
    发表于 10-22 09:43

    ZYNQ的学习笔记分享

    通过MIO(Multiuse I/O)模块对器件的引脚做观测(input)和控制(output)。ZYNQ的PS端上的GPIO也可以通过EMIO(Extra MIO)模块对PL端的IP以及引脚实现上述操作。GPIO可以独立且动态
    发表于 02-08 07:30

    实现上位机与zynq7020开发通信的方法

    最近想实现上位机与zynq7020开发通信。采用串口通信方式,利用QT编写一个简易串口助手实现与下位机的通信。 下位机给上位机发送收据,上位机能够正常接受。但是上位机给下位机串口发数
    发表于 02-17 07:08

    ZYNQ 的三种GPIO :MIO、EMIO、AXI

    。 我们先看一下MIO和EMIO:下图EMIO和MIO的结构。其中MIO分布在BANK0,BANK1,而EMIO则分布在BANK2、BANK3。注意一下几项: 首先、MIO在zynq
    发表于 02-08 10:23 3243次阅读
    <b class='flag-5'>ZYNQ</b> 的三种GPIO :MIO、<b class='flag-5'>EMIO</b>、AXI

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

    利用小样本重用技术重新设计均衡器加权系数,提高算法收敛效率,并引入常范数盲均衡算法,通过计算机仿真验证了了新算法有效性,可以极大的降低系统的
    发表于 11-13 11:33 8次下载

    基于可重用激励发生机制的虚拟SoC验证平台

    在系统芯片的设计中,传统的激励发生机制耗费人工多且难以重用,严重影响了仿真验证的效率。针对此问题,构建了一种基于可重用激励发生机制的虚拟SoC验证平台。该平台利用可
    发表于 11-28 17:43 0次下载
    基于可<b class='flag-5'>重用</b>激励发生机制的虚拟SoC<b class='flag-5'>验证</b>平台

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

    ZYNQ-7000系列MIO/EMIO/AXI_GPIO接口
    发表于 07-25 17:41 2616次阅读
    <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接口
    发表于 01-31 06:50 12次下载
    <b class='flag-5'>ZYNQ</b>-7000系列MIO/<b class='flag-5'>EMIO</b>/AXI_GPIO接口

    zynq 串口引脚引到emio 无法进入接收中断问题记录

    最近想实现上位机与zynq7020开发通信。采用串口通信方式,利用QT编写一个简易串口助手实现与下位机的通信。 下位机给上位机发送收据,上位机能够正常接受。但是上位机给下位机串口发数
    发表于 12-20 19:34 17次下载
    <b class='flag-5'>zynq</b> 串口引脚引到<b class='flag-5'>emio</b> 无法进入接收中断问题记录

    重用验证组件中构建测试平台的步骤

    本文介绍了从一组可重用验证组件中构建测试平台所需的步骤。UVM促进了重用,加速了测试平台构建的过程。 首先对 测试平台集成者(testbench integrator) 和 测试编写者(test
    的头像 发表于 06-13 09:14 556次阅读
    可<b class='flag-5'>重用</b>的<b class='flag-5'>验证</b>组件中构建测试平台的步骤