嵌入式系统中的FPGA

前言

      FPGA 可以实现高速硬件电路,如各种时钟,PWM,高速接口,DSP计算等硬件功能。这是Cortex-M 处理器软件无法比拟的。要实现FPGA 的逻辑设计,对于嵌入式系统工程师又是比较复杂和具有一定难度。而且要更改FPGA内部的逻辑也不是十分灵活。本文探讨一种在嵌入式系统中,灵活,方便地动态配置FPGA 的方法。

       具有FPGA 设计能力的硬件工程师可以设计各种FPGA IP 库。而软件应用工程师可以不关注内部的设计逻辑就能直接地应用这些IP核。实现硬件IP库重复使用和分享。

系统结构

    本系统由一个Cortex-M 单片微处理器和一个Intel Cyclone FPGA 构成。这样的结构是为了实现Cyclone FPGA 的动态配置。第三方可以设计各种FPGA 的IP核。通过方便的方式写入板上的FPGA 芯片中。为每个FPGA IP编写了cortex-M 的C++驱动类。应用程序可以方便地使用该硬件IP外设。

嵌入式系统中的FPGA_第1张图片

 

动态配置FPGA 的具体方法如下:

  使用Intel 提供的FPGA 设计工具quartus 设计FPGA 的控制逻辑。产生FPGA 二进制代码文件(sof 格式,或者rbf格式)。拷贝到SD卡中。

   当系统上电时,cortex-M 应用程序将程序首先检测SD卡上是否有sof文件,如果存在,就首先读入二进制文件,通过SPI1 写入SPI Flash 存储器。然后从SPI Flash 中读出,通过passtive serial 串口写入FPGA。

理论上FPGA的二进制代码可以烧写到cortex-M 的flash ROM 中。不过要占用大量处理器的flash ROM。所以使用外部 SPI Flash ROM 是一个折中的方法。

  当然,也可以通过网络,实现FPGA 逻辑的云更新。

实现细节

FPGA 配置的模式

 Intel cyclone FPGA 配置方式有如下几种方式:

AS –主动串口模式

PS-被动串口模式

JTAG 模式

intel 的cyclone FPGA 通过MSEL1和MSEL0来选择:

MSEL1

MSEL0

Mode

0

0

AS

0

1

PS

0

0 or 1

JTAG

注意:

  不能让MSEL 悬空。可以接高电平,或者低电平。用于非jtag模式下使用。如果你的设计中只使用JTAG 应将MSEL0接VCC。

jtag 模式优先于其它模式,这时可以或略MSEL 的设置。

 二进制文件的大小

嵌入式系统中的FPGA_第2张图片

数据的压缩

   quartus 生成的二进制代码文件是SOF 文件。cyclone FPGA 是第一个具有数据压缩能力的FPGA。它实现了将原始二进制数据压缩成rbf文件。直接下载到FPGA。压缩比达到35%~60%。在device option 中可以设置。输出rbf 格式输出。

   存放二进制文件的是SPI Flash 存储器。例如:MICRON 公司的M25P16 就是16Mbits 的Flash 存储器。

   在STM32F4xx_StdPeriph_Examples 中可以找到SPI Flash 存储器的驱动的例子。

一些想法

    研究FPGA 动态配置的目的,有开发一个产品的想法:

     设计一个基于STM32F4 的单板嵌入式单板产品,运行Arm 公司的Mbed OS。板上配置一个FPGA 芯片,SD 卡座,DAP-Link,USB 。引脚主要由FPGA 引出。使该低价格平台成为学习,交流FPGA技术,嵌入式程序设计的智能硬件平台。也将Arm 公司的Mbed OS 物联网操作系统和FPGA 紧密结合。拓展Mbed OS 新的应用领域。

你可能感兴趣的:(mbed,iot)