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

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

3天内不再提示

异构多处理器产品系列在嵌入式评估板上实现

C29F_xilinx_inc 来源:互联网 作者:佚名 2018-02-26 09:52 次阅读

作者: Alex He (何晔),赛灵思高级嵌入式应用工程师

这里的 UIO 即 Userspace I/O,本文中 UIO 泛指 UIO 设备和 UIO 驱动。它在 Linux kernel 的世界里比较小众,主要是一些定制设备和相应的驱动。UIO内核驱动指负责将中断和设备内存暴露给用户空间,再由UIO用户态驱动(Application)来实现具体的业务,随心所欲的玩。学术点叫做高度定制化,柔性设计。

那怎么和 FPGA 扯上了关系呢?是的,FPGA在硬件世界里也是随心所欲的玩,这一硬一软还真是登对,在一起啊在一起。

本实验工程将介绍如何利在赛灵思异构多处理器产品系列 Zynq UtralScale+ MPSoC ZCU102 嵌入式评估板上实现多个 UIO,同时借助赛灵思的工具完成硬件工程和 linux BSP 的开发,最后通过测试应用程序完成测试。

ZCU102上的 MPSoC 集成固化了四核 ARM Cortex-A53,双核Cortex-R5 以及 Mali-400 MP2 GPU,这部分官方称为PS(Processing System)。另外一部分就是FPGA,即 PL(Programmable Logic)。PS端实现控制,PL用来实现应用加速,两者通过AXI连接。跑这个小实验,呵呵,大材小用。只是本人手头正好有这个板子不得不装。筒子们可以去买了个Zybo 或者ZedBoard 开发板, 在板子试试身手。

实 验 报 告

实验人员:本人

实验材料:

硬件设计

建立Vivado工程,适配 ZCU102 EVB。通过 IP Integrator 加入PS,在 PL 侧加入5个UIO输入,其中1个是GPIO模块(包含中断输出和设备内存),另外4个是PIN连接到ZCU102 EVB上的DIP开关,作为中断输入通过一个concat IP连接到PS的ps_pl_irq管脚。板级细节请参考[1] UG1182,芯片资料参考[2] UG1085

添加PIN约束文件,

set_property PACKAGE_PIN AN13 [get_ports pl_irq_ll]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_ll]

set_property PACKAGE_PIN AM14 [get_ports pl_irq_lh]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_lh]

set_property PACKAGE_PIN AP14 [get_ports pl_irq_ef]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_ef]

set_property PACKAGE_PIN AN14 [get_ports pl_irq_er]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_er]

Vivado的图形化的模块设计,丰富的IP库,加上可以上天的智能连接。有点数字电路设计的基础,很快就能完成这个小设计。整个设计如下图。

软件设计

这里用到 Xilinx 针对 Linux BSP 开发的 Petalinux。它基于Yocto,加入Xilinx的Layers实现硬件工程的导入,将复杂的Yocto的设计流程打包简化,支持一定的用户自定义功能,如QEMU仿真运行,增加 out-of-tree 的驱动,Device tree 修改,应用程序编译打包,等等。具体信息请移步 https://china.xilinx.com/products/design-tools/embedded-software/petalinux-sdk.html

这里简单展示一下具体的命令过程。

$petalinux-create -t project --template zynqMP -n zcu102-pl2ps_irq

$cd ./ zcu102-pl2ps_irq

$petalinux-config --get-hw-description

$petalinux-config -c kernel

Enable UIO_PDRV_GENIRQ driver

CONFIG_UIO=y

# CONFIG_UIO_CIF is not set

CONFIG_UIO_PDRV_GENIRQ=y

$petalinux-build -c device-tree

PL侧的dtsi文件生成与./components/plnx_workspace/device-tree-generation/pl.dtsi

这里只有GPIO UIO。 PIN UIO因为不是IP,所以相关信息无法由工具自动生成。所以要做如下修改:

1. 修改GPIO UIO设备端点

1) 将中断号改为93

2) 将compatible改成“generic-uio” //我们后面要用 Linux 自带的 UIO_PDRV_GENIRQ 驱动

2. 增加 DIP UIO 端点

1) 将compatible改成“generic-uio”

2) 依次设置中断值89到93

3) 按照每个 DIP PIN 的 interrupt trigger type 设置属性值

*DTS里的中断号与硬件中断号有32的 offset。

Petalinux 提供了自定义DTS文件./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi,将以上修改定义到system-user.dtsi.

有两个方法来适配UIO端点和 UIO_PDRV_GENIRQ 驱动

1. bootargs use “uio_pdrv_genirq.of_id=generic-uio”,可以通过DTS定义。

2. insmod uio_pdrv_genirq.ko of_id=generic-uio when install the driver

修改完后,编译出Image.

$petalinu-build

$cd ./images/linux

$petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga --atf --pmufw --u-boot --force

将生成的BOOT.bin(bootloader)和image.ub(FIT uImage)拷贝到SD卡用于启动。

测试

这里引用下关于uio_pdrv_genirq驱动的介绍

https://01.org/linuxgraphics/gfx-docs/drm/driver-api/uio-howto.html

结合驱动代码./drviver/uio/uio_pdrv_genirq.c)可知,每个UIO设备会有对应的/dev/uioX的设备节点。用户态驱动程序的读操作会阻塞直到UIO硬件中断发生。UIO的中断处理程序uio_pdrv_denirq_handler()会关闭该硬件中断。用户态驱动程序需要通过write函数来触发uio_pdrv_genirq_irqcontrol()以完成中断的使能和关闭。代码如下,

启动内核及加载uio_pdrv_genirq驱动

检查/proc/interrupts

细心的你一定发现了一个坑,少了2个UIO中断(IRQ122和IRQ124),原来是硬件不支持Edge falling和Level Low的触发模式。kernel log如下。

测试DIP UIO方法一

通过拨动2个DIP,观察到

2个DIP中断发生了,可是不论怎么再拨动DIP开关,始终是1。前文铺垫过,这个中断在驱动的中断处理程序里会被关掉,需要通过应用程序调用write()来打开。这里有个easy way,使用万能的echo命令“echo 0x1 > /dev/uioX”,再配合DIP可以触发多次中断。

测试DIP UIO方法二

前面的方法比较low,这里有稍微高级的享受。写个简单的用户态驱动程序,上代码。

借助petalinux提供的交叉编译工具编译出bin文件,拷贝到启动SD卡。

运行测试程序并配合DIP开关测试。(为了更好的体现测试运行情况,在UIO内核驱动里增加了irqcontrol的调用打印)

测试GPIO UIO

UIO驱动会将设备内存(寄存器)空间枚举出来,由用户态驱动程序通过mmap导出进行读写控制。参见AXI_GPIO IP的文档pg144-axi-gpio.pdf,其寄存器如下。

测试应用程序会通过设置GIER和IP_IER来使能中断。上代码。

测试过程

或许你觉得这么贴图代码不厚道而不能施展复制黏贴大法,可不知我拙与WORD,没try出好排版。莫急莫急,这里有GIT,https://gitenterprise.xilinx.com/AlexHe/UIO_Linux_Demo

硬件资源文件和Image,测试代码一个都不能少,统统献上。酸爽否?

实 验 结 论

UIO这种可高度自定义的设备结合Xilinx的MPSoC可以实现非常灵活的应用。Xilinx提供的完备的工具集,给用户带来了高效的开发体验。本例虽然简单,但Xilinx所推崇的All Programmable的概念和实际的FPGA加速应用的的确确是建立在这些软硬件协同技术之上。忘周知!

参考文献

The Userspace I/O HOWTO https://01.org/linuxgraphics/gfx-docs/drm/driver-api/uio-howto.html

[Xilinx Document]

[1] UG1182 - ZCU102 评估板用户指南

[2] UG1085 - Zynq UltraScale+ MPSoC 技术参考手册

[3] UG1144 - PetaLinux 工具文档:参考指南

[4] UG940 - Vivado Design Suite 培训: 嵌入式处理器硬件设计

[5] PG144 - AXI GPIO v2.0 产品指南

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

    关注

    32

    文章

    1794

    浏览量

    131123
  • 异构多处理器

    关注

    0

    文章

    4

    浏览量

    9658
  • zcu102
    +关注

    关注

    0

    文章

    24

    浏览量

    7161

原文标题:如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计

文章出处:【微信号:xilinx_inc,微信公众号:赛灵思】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于全志T113-i多核异构处理器的全国产嵌入式核心简介

    一、嵌入式核心产品介绍 基于全志公司的T113-i处理器精心设计的多核异构处理器、工业级ECK
    的头像 发表于 10-25 13:40 142次阅读

    对称多处理器的特点是什么

    的主要特点是处理器之间的对称性,这意味着每个处理器都可以执行任何任务,并且它们处理能力是等价的。 1. SMP的定义和历史 对称
    的头像 发表于 10-10 16:36 199次阅读

    对称多处理器和非对称多处理器的区别

    随着计算需求的日益增长,单处理器系统已经无法满足高性能计算的需求。多处理器系统应运而生,它们通过将多个处理器集成到一个系统中来提高计算能力。多处理
    的头像 发表于 10-10 15:58 359次阅读

    为Xilinx® Zynq®UltraScale™系列多处理器中的VCCINT_VCU轨供电

    电子发烧友网站提供《为Xilinx® Zynq®UltraScale™系列多处理器中的VCCINT_VCU轨供电.pdf》资料免费下载
    发表于 09-25 10:54 0次下载
    为Xilinx® Zynq®UltraScale™<b class='flag-5'>系列</b><b class='flag-5'>多处理器</b>中的VCCINT_VCU轨供电

    一文解析嵌入式多核异构方案,东胜物联RK3588多核异构核心系列一览

    嵌入式人工智能快速发展,对于高性能计算需求越来越大。为了解决性能与功耗的平衡、通过并行化加速计算等,越来越多地嵌入式处理器使用同构多核、异构多核和协
    的头像 发表于 06-17 15:45 1774次阅读
    一文解析<b class='flag-5'>嵌入式</b>多核<b class='flag-5'>异构</b>方案,东胜物联RK3588多核<b class='flag-5'>异构</b>核心<b class='flag-5'>板</b><b class='flag-5'>系列</b>一览

    嵌入式微处理器的分类 嵌入式微处理器的种类和型号

    嵌入式微处理器是指内部集成了CPU、存储、外设接口等功能的微型芯片,被广泛应用于各种嵌入式系统中。嵌入式系统是指嵌入
    的头像 发表于 05-04 16:31 2029次阅读

    嵌入式微处理器有哪几类 嵌入式微处理器包含哪些重要参数

    等。本文中,我们将详细介绍嵌入式微处理器的几类以及包含的重要参数。 一、嵌入式微处理器的几类 通用微处理器 通用微处理器是指那些不专为
    的头像 发表于 05-04 14:58 809次阅读

    什么是嵌入式微处理器? 嵌入式微处理器的区别

    的任务或控制其他硬件设备。 嵌入式微处理器的出现可以追溯到20世纪70年代末以及80年代初。嵌入式微处理器通过集成了处理器核心、内存、输入输出控制以及其他必要的外围接口等功能,
    的头像 发表于 04-21 15:44 1425次阅读

    嵌入式微处理器有哪些类型 嵌入式微处理器有哪些产品

    不同的领域和应用中发挥作用,如消费电子产品、智能家居、工业自动化、汽车电子、医疗器械等。 以下是一些常见的嵌入式微处理器类型和产品: ARM Cortex-M
    的头像 发表于 04-21 14:48 1810次阅读

    什么是嵌入式微处理器嵌入式微处理器有哪些?

    嵌入式微处理器是指嵌入到特定应用系统中的微处理器,它是整个嵌入式系统的核心,由通用处理器演变而来,具有体积小、重量轻、成本低、可靠性高等优点
    的头像 发表于 03-29 11:39 901次阅读

    嵌入式微处理器的原理和应用

    嵌入式微处理器是专为嵌入式系统设计的微处理器,它们是嵌入式系统的核心组件,负责执行程序指令、处理数据和控制其他硬件设备。与通用微
    的头像 发表于 03-28 15:51 787次阅读

    如何在多处理器系统中使用EMIF?

    我想在多处理器系统中使用 EMIF。 为此,应不时将地址和数据总线设置为高阻抗状态。 可能吗? 我找不到图纸中连接 EMIF 总线的位置? 直接连接到 PIN 或
    发表于 03-05 06:51

    低功耗嵌入式计算解决方案:选择处理器的几个关键因素

    供广泛的处理器产品组合。这些处理器的多样性使原始设备制造商能够评估特定应用和部署的最佳性能。嵌入式计算解决方案选择
    的头像 发表于 12-04 16:45 473次阅读
    低功耗<b class='flag-5'>嵌入式</b>计算解决方案:选择<b class='flag-5'>处理器</b>的几个关键因素

    AMD 推出 Ryzen 嵌入式 7000 系列处理器

    ,纳斯达克股票代码:AMD)今日 2023 智能生产解决方案展( Smart Production Solutions 2023 )宣布推出 AMD Ryzen(锐龙)嵌入式 7000
    的头像 发表于 11-15 09:10 581次阅读
    AMD 推出 Ryzen <b class='flag-5'>嵌入式</b> 7000 <b class='flag-5'>系列</b><b class='flag-5'>处理器</b>

    基于VPX6-460的多处理器通信设计

    电子发烧友网站提供《基于VPX6-460的多处理器通信设计.pdf》资料免费下载
    发表于 11-13 10:13 0次下载
    基于VPX6-460的<b class='flag-5'>多处理器</b>通信设计