PYNQ-Z2 初识(七) MicroBlaze子系统

文章目录

  • MicroBlaze 子系统
    • 内存结构
      • DDR内存
      • 内存映射
    • 在不同的MicroBlaze运行代码
  • 编写应用
    • MicroBlaze 处理器
    • 软件要求
    • 板级支持包
    • 建立工程
    • 二进制文件

MicroBlaze 子系统

PYNQ MicroBlaze子系统使Python能灵活的支持广泛的硬件外围设备。
PYNQ MicroBlaze旨在作为一个offload 处理器,可以处理底层通信协议和数据处理,并提供可以被Python访问的传感器数据。
该子系统具有确定性,适用于实时控制。
MicroBlaze应用程序通常是用C或C++开发的。

内存结构

每个PYNQ MicroBlaze 都有本地内存(在Xilinx BRAMs中实现)和到PS DDR内存的连接。

PYNQ MicroBlaze指令和数据内存在双端口块RAM中实现,一个端口连接到PYNQ MicroBlaze,另一个端口连接到ARM处理器。这允许将可执行的二进制文件从ARM写入到PYNQ MicroBlaze指令内存中。
PYNQ MicroBlaze也可以被ARM重置,允许PYNQ MicroBlaze开始执行新程序。

PYNQ MicroBlaze数据内存,无论是在本地内存,还是在DDR内存中,都可以用作一个 mailbox,用于ARM处理器和PYNQ MicroBlaze之间的通信和数据交换。

DDR内存由运行在Cortex-A9s上的Linux内核管理。因此,必须首先为PYNQ MicroBlaze分配内存区域来访问DRAM。在Linux中,PYNQ allocate函数用于分配内存。它还提供了内存的物理地址。PYNQ应用程序可以将物理地址发送给PYNQ MicroBlaze,然后PYNQ MicroBlaze可以访问缓冲区。

DDR内存

DDR内存全称是DDR SDRAM(Double Data Rate SDRAM,双倍速率SDRAM)
这个具体我也不懂嗷!!!

内存映射

本地PYNQ MicroBlaze内存是64KB的共享数据和指令内存。
PYNQ MicroBlaze的指令内存从地址0x0开始。
PYNQ和运行在PYNQ MicroBlaze上的应用程序可以写入共享内存空间中的任何位置。
不要无意中写入指令内存,因为这将破坏正在运行的应用程序。

在构建MicroBlaze项目时,编译器只会确保分配的应用程序堆栈和堆匹配BRAM和DDR(如果使用的话)。
为了在ARM和MicroBlaze之间进行通信,必须在MicroBlaze地址空间中保留一部分共享内存空间。
PYNQ MicroBlaze中没有内存管理。必须确保应用程序(包括堆栈和堆)不会溢出到定义的数据区域。

声明栈和堆大小仅为栈和堆分配空间,没有创建边界,因此如果没有分配足够的空间,堆栈和堆可能会溢。

如果需要修改应用程序的堆栈和堆,可以在/src/目录中找到linker脚本。

在不同的MicroBlaze运行代码

MicroBlaze本地BRAM内存被映射到MicroBlaze地址空间,也映射到ARM地址空间。这些地址空间是独立的,因此本地内存将位于每个内存空间中的不同地址。

编写应用

MicroBlaze 处理器

如前一节所述,PYNQ MicroBlaze可以用作不同类型外部外设的灵活控制器。
ARM Cortex®-A9是一个应用处理器,在Linux操作系统上运行PYNQ和Jupyter笔记本。
但是这不适用于嵌入式系统的经常需求的实时应用程序。
在基础overlay 有三个PYNQ MicroBlaze。
除了作为一个灵活的控制器,PYNQMicroBlaze可以用作专用的实时控制器。

PYNQ MicroBlazes还可以单独使用,从主处理器offload一些处理。
然而,请注意,在基础覆盖的PYNQ MicroBlaze内部的MicroBlaze 处理器运行在100 MHz,而双核ARM Cortex-A9运行在650 MHz。
在卸载纯应用程序代码时,应该考虑时钟速度、不同的处理器架构和特性。
例如,矢量处理在ARM Cortex-A9 Neon处理单元将比在MicroBlaze上运行更有效。
MicroBlaze最适用于低层次、background或实时应用。

软件要求

Xilinx SDK(软件开发工具包)包含MicroBlaze交叉编译器,可用于在PYNQ MicroBlaze内部为MicroBlaze构建软件。
SDK作为Xilinx Vivado WebPack的一部分是免费的。

所有受支持的PYNQ MicroBlaze外围设备的完整源代码可以从GitHub项目获得。
PYNQ附带了预编译的PYNQ MicroBlaze可执行文件,以支持各种外围设备(请参阅PYNQ库),因此,只有当您打算修改现有代码或构建自己的PYNQ MicroBlaze应用程序/外围设备驱动程序时,才需要Xilinx软件。

板级支持包

每个SDK应用项目需要一个Board Support Package项目(板支持包)和一个硬件平台项目。应用程序项目将包括用户代码(C/ c++)。
应用程序项目链接到BSP。BSP(板支持包)包含软件库和驱动程序,以支持系统中的底层外设。

在内部,BSP连接到一个硬件平台。硬件平台定义了PYNQ MicroBlaze子系统中的外设和系统的内存映射。BSP使用它来构建软件库来支持底层硬件。

所有应用程序项目都可以使用makefile从命令行编译,或者导入到SDK GUI中。

您还可以使用现有项目作为起点来创建自己的项目。

Arduino PYNQ MicroBlaze的BSP: /pynq/lib/arduino/bsp_iop_arduino/
Pmod PYNQ MicroBlaze 的 BSP: /pynq/lib/pmod/bsp_iop_pmod

BSP是特定于处理器子系统的。根据系统中可用的处理器类型,可以有许多与覆盖相关联的BSPs。
Pmod PYNQ microblaze的申请将与Pmod PYNQ MicroBlazeBSP连接。由于两个Pmod PYNQ MicroBlaze是相同的,因此为一个Pmod PYNQ MicroBlaze编写的应用程序可以在另一个Pmod PYNQ MicroBlaze上运行。
Arduino应用程序将链接到Arduino PYNQ MicroBlaze BSP。

建立工程

要构建所有的软件项目,可以运行相应的makefile:

< PYNQ库> / PYNQ / lib / arduino / makefile
< PYNQ库> / PYNQ / lib / pmod / makefile

PYNQ附带的外设应用程序项目(例如Pmod和Arduino外设)也可以在同一个位置找到。每个项目都包含在一个单独的文件夹中。

makefile根据在正确位置提供的BSP编译应用程序项目。

makefile需要安装SDK,可以从Windows或Linux运行。
要从Windows运行make,请打开SDK并选择临时工作区(确保此路径位于下载的PYNQ存储库的外部)。从Xilinx Tools菜单中,选择Launch Shell

PYNQ-Z2 初识(七) MicroBlaze子系统_第1张图片

二进制文件

编译代码将生成一个可执行文件(.elf)及其二进制格式(.bin),该文件将被下载到PYNQ MicroBlaze中。

在SDK shell中运行以下命令,可以从.elf中生成.bin文件:

mb-objcopy -O binary .elf .bin

这是由现有应用程序项目的makefile自动完成的。makefile还将所有.bin文件复制到

/pynq/lib//

复制和重命名工程,然后用C代码替换src文件夹里的.c文件

比如c代码是 abc.c,就会生成abc.elf和abc.bin

外设应用的命名一般约定俗成为_

如果使用SDK的GUI的话,和lab1最后的SDK就差不多了。
PYNQ-Z2 初识(七) MicroBlaze子系统_第2张图片

你可能感兴趣的:(PYNQ)