新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种基于ARM和FPGA的环形缓冲区接口设计

一种基于ARM和FPGA的环形缓冲区接口设计

作者:时间:2013-07-15来源:网络

摘要:目前,基于和FPGA架构的嵌入式系统在通信设备中得到广泛的应用。文章提出了一种基于和FPGA的接口设计方案,从而实现了和FPGA之间的数据缓冲和速率匹配。实际测试表明该方案能够有效地对数据速率进行匹配,且具有良好的可扩展性。
关键词:ARM;

0 引言
随着嵌入式系统、软件无线电和无线通信的发展,基于嵌入式系统和软件无线电的实现架构广泛应用到无线通信设备中。其中,采用ARM+FPGA的软件无线电体系结构来实现的通信设备是最近十分流行的一种方案。该方案充分利用ARM CPU灵活便捷的优势,用来处理用户输入、系统控制、网络协议功能,而利用FPGA卓越的实时信号处理优点,对无线通信的物理层信号进行无线收发处理。在这种体系结构中,ARM和FPGA的数据通信信号接口设计是其中十分关键的一个环节。由于无线设备的数据收发往往具有一定的突发性,在高速数据收发情况下,需要设计一种合理的缓冲区进行数据传输速率的匹配和缓冲。另外,对于ARM CPU来说,由于CPU往往需要同时并行处理多种任务,如何尽可能地保证数据的实时接收,也是设计中的一个关键。本文提出了一种基于ARM和FPGA的设计结构,能可靠有效地处理好两者之间数据传输速率匹配和缓冲,且具有很好的扩展性。

1 缓冲区接口硬件设计
本方法设计的硬件接口如图1所示。FPGA作为一个存储器外设与ARM连接,采用的是标准的总线接口,由nGCS片选线、双向数据线DATA、地址线ADDR、以及读写控制线nOE和nWE等信号线组成。另外,EINT是中断信号线,FPGA发起中断向ARM请求处理。

本文引用地址:http://www.eepw.com.cn/article/148003.htm

a.jpg



2 缓冲区接口软件设计
为了设计ARM和FPGA的缓冲区接口,首先要利用图1中的信号线实现ARM对FPGA的基本读写操作,这需要双方遵循拟定的接口时序相互配合进行,这可以通过参考相应的ARM内核CPU用户手册,在FPGA端编写相应的接口代码来配合ARM CPU2端的读写时序实现。
下面重点介绍环形缓冲区接口的软件实现。
2.1 缓冲区空间设计
如上所述,FPGA是作为ARM的一个存储器外设来设计的。在本方案中,FPGA存储器空间包括两个部分:寄存器空间和数据缓冲区空间。
寄存器空间用于设置各种读写的参数,包括缓冲区读写指针、缓冲区忙闲状态等;而缓冲区用于大量数据的临时存储,按作用分为发送缓冲区和接收缓冲区。设计中对所有空间都采用统一编址方式实现,利用ARM与FPGA之间相连的接口地址线(ADDR)的最高两位来区分,例如,00表示寄存器空间,01表示发送缓冲区空间、10表示接收缓冲区空间,11为保留。
在本文的环形缓冲区结构设计中,发送(接收)缓冲区又分为若干大小相同的子缓冲空间,这些子缓冲空间共享同一个地址空间,由FPGA内部的缓冲区忙闲指示寄存器和子缓冲空间的控制指针来引导ARM对子缓冲区的读写。子缓冲空间的控制指针循环依次变化,数据帧也循环依次写入指针指向的子缓冲空间或被读走,这样就构成了环形缓冲区。
以实际项目的设计为例,发送(接收)缓冲区分别由16个子缓冲空间组成,每个子缓冲空间的大小为256双字节,这16个子缓冲空间共享一个地址空间。设计中的接口地址线一共为10位,数据线是16位。每个数据帧的最大长度也设置为256双字节,以便一个缓冲区能够装满一个帧,简化缓冲区管理。以发送缓冲区为例,其结构设计如图2所示。

b.jpg


尽管设置了16个子缓冲空间来应对可能的突发数据流,为了防止ARM将所有的子缓冲区写溢出,在FPGA内部设置了缓冲区忙闲寄存器指示,当所有的子缓冲空间都写满后,缓冲区忙闲指示寄存器设置为忙。

fpga相关文章:fpga是什么



上一页 1 2 3 下一页

评论

技术专区

关闭