在前文中,我们了解到两种 FPGA 嵌入式处理器核方案:软核与硬核。本文将展开讨论软核在一个基于 FPGA 通信系统中的应用。软核,由 FPGA 丰富的可编程逻辑资源在片内构成,其一大特点就是可拓展性。调整逻辑资源的使用数量,比如增大处理器的缓存,增加浮点处理单元等等,可以实现不同性能,面积,外设,甚至不同核数的嵌入式处理器系统。理论上可以在杀鸡刀和屠龙宝刀之间切换,但实际使用中是否如此呢?
作者:LJgibbs
来源: https://zhuanlan.zhihu.com/p/64510738
这里以基于 FPGA 通信和信号处理系统为例,探讨一下软核在其中的应用。
杀鸡刀
以一套光通信系统为例,软核在其中扮演的是辅助角色,性能配置有限,相当于一个嵌入 FPGA 的微控制器。软核不需要使用片外的存储资源,仅例化少量的 BRAM 作为处理器核的数据和指令缓存。软核处理系统中的外设配置也非常有限,只有 GPIO ,IIC 和 UART 外设。
软核的主要工作有:
- 通过 IIC 配置系统中 FPGA 以外的外围芯片,比如 ADC,可编程光芯片等。
- 通过 GPIO 控制系统中的 LED 指示灯和开关输入。
- 通过 UART 在串口打印调试信息。
在这个光通信系统中,有关通信的复杂工作由逻辑资源实现,包括 ADC 采样,光通信中的调制解调,以及较为复杂的同步问题等。使用的是当时最为高端的 FPGA 器件,但软核却性能有限,软核的作用在于为整个系统省去了一个微控制器,可以算得上是作为一把杀鸡刀了。
杀猪刀
在笔者接触的软核应用中,追求更高性能软核的使用集中在以太网应用中。在软核中运行嵌入式协议栈,比如开源的 LwIP 等。利用软核作为媒介,运行协议栈可以大大加快 FPGA 上以太网的开发速度,并能够更方便地实现较复杂的上层网络应用。
以笔者一直在做的一个信号处理系统为例,信号处理的部分,从采集到滤波等信号处理在 FPGA 逻辑中完成。采集的原始数据和经过处理的数据,为了进一步改进算法,都需要传输至上位机,该系统中使用以太网来传输。原始数据的数据量在几 MB 左右。
以太网传输有不少优点,比如传输速度快;再比如通过以太网传输,和当前计算机网络相兼容,可以很便捷地开发上位机应用以及拓展网路拓扑,比如利用互联网进行远程采集与控制。无论何种编程语言都可以调用操作系统的套接字进行 TCP/IP 编程,无需额外的驱动。
为了运行 LwIP 协议栈,软核相比先前的应用,需要增加一些外设 IP,系统缓存也需要设置地更大,但最重要的是添加了一个 MCB 外设,用于访问外部 DDR 存储。因为该应用中处理器需要和逻辑部分进行通信,所以还添加了 AXI 总线的 IP,通过 AXI 总线进行通信。
为协议栈而添加的外设包括:定时器,中断控制器以及以太网 mac。定时器对于以太网应用来说是必须的,用于处理以太网中定时重传等任务。以太网 mac 用于与片外的 phy 芯片通信,方案中使用的是一个百兆的 mac 芯片。而通过 MCB,处理器可以访问片外高达 GB 等级的 DDR 资源,协议栈的变量也存储在外部 DDR 中,以提供更多的存储空间支持更大连接数量以及缓存空间。
处理器工作的时钟为 100Mhz,有限的性能支持的以太网速度也有限,但能够满足基本的传输需求。
屠龙宝刀?
以 Microblaze 为代表的软核从内核设计上更接近于 Cortex-M 系列的微控制器,性能较 A 系列差得很多。在软核上做复杂的运算是没指望的。所以笔者认为的屠龙宝刀可能的方向是多核应用。在一篇文章中,作者使用两个软核分别处理 TCP 的发送与接收,提高协议栈的性能,这就是类似屠龙宝刀的软核应用。(也有可能用的是硬核,不确定)
总体上,使用软核有两个出发点。一是希望通过软核完成一些在逻辑上较难实现,或者说较难调试的应用,作为逻辑系统的补充和辅助。二是希望通过软核来运行一些现有的软件,比如协议栈,实时操作系统等。
从出发点来说,软核不得不与田野乡间的农事为伍,而无缘为屠龙勇士所用了。另一点原因在于软核本身的设计就更偏向于微控制器而不是高性能处理器,FPGA 上的时钟频率和布线特性也进一步限制了软核的性能。
结语
设计和应用决定了软核在整个系统中的辅助地位,无法真正实现软硬件协作,无法运用于嵌入式视觉,神经网络等应用的加速中。在这个背景下,FPGA 厂商开始推出嵌有高性能内核的 FPGA,硬核逐渐成为了 FPGA 嵌入式处理器核们的主角。
在后续的文章中,将会介绍硬核的应用场景,嵌入式处理器核的开发工具以及流程,厂商的产品系列等等有关 FPGA 嵌入式处理器核们的内容。
推荐阅读
关注此系列,请关注专栏FPGA的逻辑