基于FPGA的硬件抽象层设计*

2021-08-06 09:19黄忠凡孙健兴
通信技术 2021年7期
关键词:波形组件传输

黄忠凡,代 荣,孙健兴,李 翔

(武汉中原电子集团有限公司,湖北 武汉 430205)

0 引 言

软件定义无线电[1]平台是基于通用的硬件平台,使用可编程的软件方法来满足不同需求的无线电系统。现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)具有高速并行性及许多常用的无线通信IP核,如低密度奇偶校验码(Low Density Parity Check Code,LDPC)、Turbo等,使得波形开发人员能快速构建波形算法,节省大量代码开发时间。将物理层放在FPGA上实现已成为现代无线通信波形设计主流做法。FPGA波形的可移植性是软件无线电中较为复杂且非常重要的一部分工作,既要体现软件无线电架构的灵活性又要保证波形交互处理的实时性[2]。为此软件无线电的体系标准(Software Communication Architecture,SCA)[3]于 2007年颁布了硬件抽象层(Modem Hardware Abstraction Layer,MHAL)[4]接口标准;在2010年又颁布了片上总线硬件抽象层(MHAL On Chip Bus,MOCB)[5]接口标准。其中,MHAL针对的是FPGA、DSP类处理器间通过总线交互的场景。而随着集成电路往片上系统(System On Chip,SOC)方向发展,一个芯片里面往往集成了多个核,核与核之间通过共享内存交互,MOCB就是针对这种趋势提出的硬件抽象层规范。国内目前关于MHAL的研究有很多,但基于新趋势MOCB的研究还很少,特别是FPGA的MOCB的相关研究几乎没有。此外,SCA规范对MOCB的描述只有总纲和接口规范,并没有描述整个MOCB的工作原理和实现方案。本文结合作者多年SOC开发经验和对软件无线电的理解,详细描述了FPGA中MOCB的设计过程,为其他开发人员提供一种参考。

1 FPGA MOCB概述

FPGA MOCB为运行在FPGA中的波形应用提供标准、统一的接口,并搭建一套消息传输机制实现FPGA内波形应用与其他处理器,如FPGA、数字信号处理器(Digital Signal Processing,DSP)、精简指令处理器(Advanced RISC Machines,ARM)上的波形应用互通。波形开发人员无需关注底层硬件实现,只需将硬件平台研制人员提供的FPGA MOCB实体模块例化到自己的设计中,经过一起编译后形成统一的执行文件加载到FPGA中就能在硬件平台运行,就能实现完整的FPGA功能。

由于MOCB应用在基于共享内存交互的处理器上,因此本文以集成ARM与FPGA的SOC举例说明实际波形应用在MOCB上的部署。如图1所示,ARM与FPGA之间没有直接接口相连,只通过共享内存交互数据。所有波形应用组件、射频组件都封装成MOCB接口与MOCB相连,其中顺序处理类组件如“Mac层组帧波形组件”放在ARM上,并行处理类物理层组件放FPGA上。MOCB的设计宗旨就是对下抽象所有外部硬件接口,包括但不限于处理器接口、射频控制接口、外部存储器访问接口等,且不关心实现方式,只需要最终转换成对上为波形应用组件提供统一的接口,就能实现不同处理单元之间的波形应用组件的任意互通。这样波形不用关心底层实现,尽最大可能实现可移植性。图1中与共享内存的接口将由MOCB自己封装一层“输入输出(Input Output,IO)驱动适配”,FPGA上的“纠错编码波形组件”只需要与MOCB接口相连既可以与ARM上的“Mac组帧波形组件”通信,不用关心底层的共享内存如何控制的问题,体现了波形移植的灵活性。

MOCB接收数据的过程可简单描述为,接收IO驱动发送而来的物理地址和数据,将物理地址映射为逻辑地址,根据逻辑地址将数据存储至目标存储器,而目标存储器、硬件抽象层接口与波形组件三者是为一对一连接关系,因此可将数据路由至目的组件。相应地,硬件抽象层发送数据的过程可描述为:首先,由组件通过硬件抽象层接口将待发送数据发送至对应的存储器;其次,硬件抽象层将数据读出并将逻辑地址映射为物理地址;最后,通过IO接口驱动发送外部。

FPGA MOCB的接口规范如图2所示,分为发起方和目的方,均包括基本信号、可选信号和扩展信号。其中,基本信号定义了一般平台所需要的基本信号子集,而可选信号和扩展信号则是为了满足较为复杂的平台所需要的扩展特性而定义的可选信号。在具体实现时,可根据平台和波形具体的应用需求而合理地选择需要的接口信号,信号的定义在SCA规范[6]里面有详细描述。

2 FPGA MOCB具体实现

本文使用Xilinx XC7Z035 FPGA芯片作为硬件抽象层实现平台。XC7Z035是一款SOC芯片,集成了2个ARM内核即处理系统(Process System,PS)和1个FPGA即可编程逻辑(Programmable Logic,PL),PS与PL基于共享内存的数据传输方式。图3为MOCB在FPGA上的设计结构。图3中测试波形组件是为了测试MOCB性能而构建的测试用例。

2.1 设计要点

通过深入分析MOCB规范总纲和原理,本文总结出以下几点设计要点。

(1)SCA规范中MOCB对上的组件只有两类:一类为通信波形应用组件如编码调制等,另一类为射频控制组件(Radio Frequency Control,RFC)。对射频控制进行统一的原因在于通信波形与射频控制是息息相关的,并且规范了射频控制组件更有利于波形移植。另外,MOCB对下面的硬件平台的IO驱动类并没有要求,只需要尽可能抽象底层硬件驱动即可,方便以后平台到平台的移植。

(2)MOCB即可以作为目的方端也可以作为发起方。与MHAL不同,MOCB的发起方既可以向目的方发送数据,还可以从目的方主动读取数据。从实际无线通信波形设计角度出发,一般是把波形应用组件作为发起方,因此本文在FPGA上实现的MOCB接口只作为目的方。

(3)MOCB对上的每个组件只有一个源逻辑地址(Logical Destination,LD),其目的LD数目没有限制,存在一对多情况。

(4)不同处理器上面的波形组件必须通过MOCB通信,如PS上的波形应用组件与PL中的波形应用组件交互数据必须经过MOCB。

(5)为了兼顾软件无线电架构的灵活性与波形处理的实时性,同一处理器上的组件之间可以通过MOCB通信,也可以不经过MOCB直接互通,因为有些波形组件之间要求处理的实时性,经过MOCB路由后会带来处理延时。本设计支持PL中的两个组件可以直接内部通信也可以通过MOCB通信。另外为了达到波形与具体硬件平台的分离目的,波形应用组件与外设驱动之间必须通过MOCB进行通信。

(6)全部波形应用组件如果部署在不同的基于共享内存交互的处理器上面,需要为每一个波形应用组件分配一块连续的内存,并为其指定初始地址。同时,需要在硬件抽象层内部预存一个地址映射表进行物理地址与逻辑地址之间的相互映射。这里的物理地址是指共享内存的I/O接口地址线的传输地址。特别注意处理器内部波形应用组件与平台自身使用的物理地址空间要分开。而内部波形组件的物理地址可以重叠,但起始地址不能一样,只要MOCB设计者能保持不冲突即可。这样做的目的也是为了体现硬件设备的差异性和波形组件的可移植性,保证共享内存使用的高效性。

(7)共享内存的方式必然会产生读写操作冲突,MOCB允许源端通过MOCB接口的“事件信号”告知目的方一个事件的发生。

2.2 收发处理过程

PL上的波形组件A如果要发送数据包,整个发送过程分为以下4个步骤。

(1)先要经过MOCB接口模块的MOCB接口时序模块子模块与流量控制模块子模块交互启动发时序。如果目的方发缓存模块子模块有足够空间存储数据包,流量控制模块子模块就允许组件A发送数据,同时将数据包的地址信息反馈给本地适配与地址解析模块。

(2)本地适配与地址解析模块根据地址映射表识别出该数据包去往的目的LD,判断是要去往PL内部的组件B还是要去往PS内部的组件C,相应的生成不同的请求信号。同一时刻PL上可能有其他组件也会发送数据包,也会生成请求,请求仲裁模块接收所有请求,如果收到去往同一目的地的多个请求,将根据优先级高低进行仲裁,并将仲裁结果同步反馈给本地适配与地址解析模块和交叉开关。

(3)本地适配与地址解析模块根据仲裁结果通知相应的MOCB接口模块可以发送数据了,交叉开关同步根据仲裁结果打开获胜的发送方与目的地的通道开关。

(4)传输完成后,作为获胜发起方的组件还会驱动事件信号通知目的组件。

PL上的组件如果要读取数据包,整个接收过程分为以下两个步骤。

(1)向流量控制模块子模块请求接收数据。

(2)流量控制模块子模块监控目的方收缓存模块子模块中是否存有完整一包数据。如果有就立刻响应组件的请求,将数据通过MOCB接口时序模块子模块送给波形组件;如果没有就执行与发送过程类似的请求仲裁操作,通过交叉开关通道从目的地址读回数据包。

2.3 接口时序

本文实现的MOCB接口时序适合于突发长度传输模式,读写都是一次性完成一整包数据传输。

写时序如图4所示,主要步骤如下文所述。

(1)在第2个周期,波形应用组件作为发起方通过发起写使能(WR_EN)来开始一次写传输,同时发出有效的地址(A1)、数据(D1)、突发大小有效(SizeV)和突发大小(Size)。

(2)MOCB作为目的方,经过内部逻辑处理后能受理发起方的写传输,则将命令接收信号CmdA置高,发起方继续后面的写传输。直到整个突发传输过程全部完成。例如,发起方连续地向同一个地址A1写4次,可表示为向一个内存映射物理地址为A1的波形应用组件连续写4个数据。

(3)目的方在每个时钟周期采样写使能、地址、数据、突发大小有效和突发大小信号,并在其内部使用这些信号执行写操作。

读时序如图5所示,主要步骤如下文所述。

(1)在第2个周期,波形应用组件作为发起方通过发起读使能(RD_EN)来开始一次读传输,同时发出有效的地址(A1)、突发大小有效(SizeV)和突发大小(Size)。

(2)如果MOCB作为目的方,经过内部逻辑处理后能受理发起方的读操作,则将命令接收信号CmdA置高,发起方继续后面的读传输。直到整个突发传输过程全部完成。例如,发起方连续地向同一个地址A1读4次,可表示为向一个内存映射物理地址为A1的波形应用组件连续读4个数据。

(3)目的方在每个时钟周期采样读使能、地址、突发大小有效和突发大小信号,并在其内部使用这些信号执行读操作。目的方判断发送方的DataA信号,为高则开始发出DataV和Data信号。

(4)发送方根据DataV信号接收相应长度的Data,DataA为高表示发起方能一直接收目的方的数据。

3 性能测试

FPGA MOCB的引入必然会带来时延与吞吐率的开销。本文搭建如图3所示实际测试环境来测试其性能,其中PS端跑freertos操作系统构建了只有1个测试波形组件的简化版PS_MOCB,该组件完成与PL上组件交互,同时统计收包数、校验对错及性能统计,PL端构建了两个测试波形组件。测试结果有效性以PL与PS都不掉包为标准,性能如表1所示,表中值表示发10 000包统计的每包传输速率,分不同包长进行了对比测试,结果显示包长越长性能越优,并且无论大包还是小包,包时延均小于32 μs。经分析,包长变短的时候性能下降的原因在于PS端从内存搬数据的任务占用固定时间较长,传输短包时候没有优势。该问题属于平台驱动问题,可以后续优化。

表1 FPGA MOCB的性能

通过结果可知,PL上的测试波形组件与PS测试波形组件的经过共享内存交互速率能达到1 901 Mb/s,因此FPGA MOCB完全能满足波形应用组件需求,同时如果PL上的两个组件不直接互通而是经过FPGA MOCB互通。经过Modelsim仿真,延时也只有5个时钟处理周期,能保证波形处理的实时性。

4 结 语

本文结合实际应用场景对MOCB的原理进行了深入研究,提炼出设计要点,基于FPGA给出了详细的实现方案,为他人设计MOCB给出一种参考。同时经过实际环境测试MOCB性能得出,MOCB实现了软件无线电架构移植灵活性的同时,兼顾了波形处理的实时性结论。但本文没有将MOCB置于基于SCA架构开发的实际无线通信波形环境中进行验证,后续将设计一套基于该MOCB的通用软件无线电验证平台。

猜你喜欢
波形组件传输
基于时域波形掩护的间歇采样干扰对抗研究
无人机智能巡检在光伏电站组件诊断中的应用
轨道交通信号系统无线传输应用
Kistler全新的Kitimer2.0系统组件:使安全气囊和安全带测试更加可靠和高效
5G高新视频的双频段协同传输
5G 16K虚拟现实视频传输关键技术
牵引8K超高清传输时代 FIBBR Pure38K
3月光伏组件出口量增长164.6%至7.49GW!单价创新低
一种嵌入式软件组件更新方法的研究与实现
通用6T系列变速器离合器鼓失效的解决方案