打印
[CPLD]

一种基于FPGA实现的高速缓存设计

[复制链接]
1470|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2012-11-27 19:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
随着雷达、通信和图像处理中数字处理技术的飞速发展,现代化生产和科学研究对数据采集系统的要求更加严格。在嵌入式条件下,要求数据获取的速度越来越快,精度越来越高,以致数据量及处理速度要求大增,高速ADC的出现和DSP性能的不断提高也对系统将来的升级提出了更高要求,特别在一些特殊领域,如航空、航天等,其嵌入式系统体积小、功能强、实时性高,为了避免数据处理不及时,发生数据丢失,破坏系统可靠性,更要进一步提高系统实时性,必须研究开发高速嵌入式数据采集系统。
针对具体的任务要求,文中提出了一种通过FPGA实现转换接口的高速数据采集系统的系统结构,即高速A/ D+大容量附+高速DSP的嵌入式高速数据采集系统。模数转换器A/D进行高速数据采集,胁实现对高速A/D采集数据的存储和控制调度,DSP通过查询方式访问前端采集通道,对采集的数据进行高速处理,这种方法大大提高了DSP可以访问的外设数目,提高了DSP的处理能力,同时由于DSP不直接与模数转换芯片接口,所以ADC芯片的升级或者替代都不会影响原来的数据采集,而且采用了时分复用方式读取转换完成的数据,因此这个系统数据采集速率可以达到所采用的√虹)C芯片输出的最高速率,能充分发挥ELqP算法处理功能强大、速度快的优势,而FPGA狐设计灵活、通用性强等特点,使得整个系统具有实时性高、体积小、开发周期短、易于维护和扩展、适合于实时信号处理等多个优点。文中结合成功开发的高速采集系统结构,提出一种基于FPGA实现的最优FIFO结构来实现高速缓存,它可以成倍提高数据流通速率,增加嵌入式系统的实时性。
1 高速数据采集系统结构
实时信号处理系统中,高层处理算法的特点是所处理的数据量较低层算法少,但算法的控制结构复杂,适于用运算速度高、寻址方式灵活、通信机制强大的DSP芯片来实现。特别是TI公司的C6000系列DSP,其峰值处理速度已达每秒数十亿条指令,是当今最先进的DSP之一,非常适合于嵌入式实时系统应用。低层的信号预处理算法处理的数据量大、计算量大、对处理速度的要求高,但运算结构相对比较简单,适于用黜来进行硬件实现,这样能同时兼顾速度及灵活性。目前FPGA的容量已经跨过了百万门级,使得FPGA成为解决系统级设计的重要选择方案之一。它主要应用于协处理器,辅助DSP芯片完成一些计算密集型的算法。
在笔者设计的高速信息处理计算机中,高速ADC模块、FPGA模块以及DSP模块构成了高速数据采集系统,系统结构如图1所示。从此结构中可以看到,DSP可以在未知ADC控制方式的情况下,定时地访问外设来获得模数转换后的数据,而大容量的FPGA协助DSP完成数据的预处理,并可以保证采集数据不丢失。

其中ADC是一个12位精度、65M№采样速率的高速模数转换器,可进行高速采样,处理器选用TI公司的TMS320C6701。DSP内部最高时钟频率可以达到167MHz,DSP读取外部SDRAM的最高时钟频率是1/2 xCPU,而读取外部异步存储器的时钟频率可以通过CE空间控制寄存器来编程控制,其参数需要满足一定要求,即CLK>(Setup+Strobe+Hold)>2个时钟周期,时钟频率最高可达80MHz。如果DSP不通过缓存直接与A/D相连,在采样过程中,若A/D连续采样数据,DSP一直处于连续的间隔取数的状态,这将占用DSP大部分处理时间,导致DSP不能从事其他工作。也有可能出现上一次的数据还没有被计算机处理完,下一次采集过程就开始的情况。如果选取更高速的A/D,更会发生数据丢失,破坏系统的可靠性。因此最好的做法是采用高速缓存来存储采样到的数据,再集中传输一批数据,保证IXSP有充足的时间去处理、计算。
系统中采用容量比较大的FPGA,利用自主设计的IP核,主要协助主处理器实现数据的预处理(如FFT)功能。为了保证设计的硬件系统体积尽可能小,因此在不增加系统的硬件负担的前提条件下,利用系统中现有的FPGA,设计了基于FPGA实现的异步FIFO存储器作为高速缓存器,它满足前后读写时钟频率不同的硬件环境,可使采集系统设计灵活、简单、方便,具有很强的可扩展性。FIFO存储器具有两个特点:数据进出有序;输出输入口独立。灵活使用FIFO,可根据需要设计为不同速率、不同容量的数字系统,接口电路简洁且不占用系统地址资源,系统移植或升级换代方便,而且控制简单。
2 基于FPGA实现的异步FIFO的设计
2.1 FIFO结构设计
设计一个异步FIFO,读写使能由不同的时钟激励来控制输入数据和输出数据,空倩标志来防止数据的上溢和下溢,以及“半满”状态标志,在字宽和容量深度两方面都可以扩展。读写操作自动访问存储空间连续的存储单元,读出的数据和写入的数据顺序相同,不需要额外的地址信息。首先,由复位信号清空存储器数据;然后,在写使能和写时钟控制下向存储器中写数据,当FIFO写半满,half—full将有效(同步予写时钟),触发C6701中断,C6701中断服务程序通过DMA将FIFO中的数据取走并写入C6701片内数据存储器或SDMA中去,FIFO中的数据空间存满后,full信号有效,外部设备就不再向FIFO中写数据了;同理,在读时钟和读使能控制下从存储器中读数据时,若FIFO中的数据被外部设备取空了,则empty信号有效,外部设备停止对FIFO的读取。FIFO的外部接口见图2。

相关帖子

沙发
gaochy1126|  楼主 | 2012-11-27 19:39 | 只看该作者


本系统数据宽度根据需要,两个端口可以设计为两端是12位、16位、32位。
一般常用的FIFO设计,都是两端数据宽度相同的FIFO结构。这很容易在XILINX公司提供的IP核中找到,或者用行为级语言描述得到。
但是,在笔者设计的硬件平台下,这些设计有局限性,分析如下:
因为TI公司的DSP C6701的EMIF支持32bit宽度的ASRAM,SDRAM和SBSRAM等存储器,只有CEI空间支持16bit和8bit的ROM接口,本系统设计的FPGA是CE2和CE3空间寻址,物理接口是32bit。那么如果FIFO读写端口设计为12位,DSP接收的32位数据仅低12位有效,而高20位是无效数据,一方面,这将大大降低DSP读取数据的吞吐率,另一方面由于需要处理无效数据而降低系统的实时性。
为了改进系统的性能,提高系统的实时性,可以采取两个措施:一是设计整字节宽度的FlFO端口,基于前端A/D的要求,最佳的数据宽度是16位;二是设计宽位数端口的FIFO,提高数据的吞吐率,基于后端DSP的要求,最佳的数据宽度是32位。由于C6701可以对数据存储器进行8bit/16bit/32bit的数据访问,数据从FIFO中读取数据到DSP的数据存储器后,可以根据需要决定是按字节、字、还是双字处理。
针对笔者的硬件系统,提出了一种基于FPGA的新型FIFO结构,输入数据宽度与输出数据宽度不同,即输入为16位、输出为32位的异步FIFo。分析系统的数据吞吐率:由于A/D数据输入口的速度固定,数据按采样频率输人FIFO,因此输入数据的时间是不变的,而C6701一次访问可以取走两个有效数据,在相同数据量的条件下明显降低数据读取时间。大大增加了DSP读取数据的吞吐率,提高系统实时处理时间。
如果输入数据的高4位不接地,则传给DSP的数据高4位是任意值,所以取完数后要将取得的数进行预处理,这将降低DSP的实时处理时间。因此在设计硬件电路时将FIFO的datain(15:12)硬件置0,避免了DSP的软件复位,省去DSP对数据的预处理过程,从而提高了DSP的实时处理能力。
笔者设计的FIFO是利用两个16位RAM并行连接,输入数据在写控制模块的调度下依次写入两个RAM中,两个RAM的输出经过缓存器直接与DSP相应数据线相连,保证了32位的数据宽度,内部实现如图3所示,其中的写控制逻辑实现见图4。其中写控制逻辑分别产生两个片选信号实现对两个存储器交替按字(16bit)进行写,读控制逻辑对两个存储器按双字(32bit)同时读,可以实现两端读写数据宽度的不同。


地址产生逻辑图见图5,读写地址产生利用相同的地址产生逻辑,在不同的时钟和使能信号控制下实现地址的增加。写地址产生器用CEl作为允许增控制信号,读地址产生器用rd-en作为允许增控制信号来实现地址的产生。

2.2异步FIFO的FPGA实现
由于FIFO是一种RAM的结构,在大多数参考资料中对洲的描述都是建立在数组存取的基础上的。在大多数EDA软件中,对VHDL硬件描述语言的编译都是通过综合器来完成的,综合器将VHDL转变成物理可形成的电路格式。然而遗憾的是,综合器对数组的综合一般是将其转变成寄存器的结构。可编程器件中的寄存器个数是有限的,而FIFO是一种基于RAM的器件,需要有大量的存储空间,也就会用掉大量的寄存器。所以,当直接用数组的形式来描述FIFO结构时,综合后的结构都会非常庞大。
幸运的是,XILINX FPGA器件提供的片内的RAM可直接使用,而不必使用寄存器来构成存储空间,从而大大提高了芯片的利用率。在XILINX FPGA产品中,根据型号的不同,提供了两种RAM结构:分布式RAM和BLOCK RAM。
分布式RAM存在于所有的XILINX FPGA器件中, 而对于BLOCK RAM。只有最新的SPARTAN VETEX系列中才提供。分布式RAM存储器是由CLB中的RAM结构实现的(LUT),每个CIB最多可以组成32×1或16×2容量的RAM。
BLOCK RAM存储器按列排列,左边从0列开始,每隔12列CLB排列一个BLOCK RAM存储器。每个BLOCK RAM是一个完全同步的双端口蝴,每个端口都有独立的控制信号,非常适合予FIFO器件的编写。
其中XCV1000E的Block SelectRAM共有96块BLOCK RAM,这种嵌入式的块RAM每块含有4096一bit存储单元,用户可以根据需要灵活配置,如表1所示。

单个块RAM所存储的数据宽度最高可为16位,可以多个块RAM级连以构成更大的数据宽度,最多可有64个块级连构成1024位的数据存储器。

使用特权

评论回复
板凳
gaochy1126|  楼主 | 2012-11-27 19:39 | 只看该作者
表2为用两种方法使用FPGA资源情况的比较。
由表2可以看出,基于寄存器FIFo在综合后用掉了Virtex™-E器件大量的SLICES资源,而充分考虑FPGA器件结构,用其自带的存储器BLOCK RAM来设计,则仅用掉1%的SLICES资源,两厢一比较,明显后一种设计可以充分节省现有的FPGA资源,设计出容量更大的存储器,且更经济、有效。

3 结束语
由于现在ADC的精度和速度一对矛盾,高速度难以做到高精度,所以采集到的数据位数较低,而后端处理器的处理位数越来越高。现在的DSP一般都可以做到32位,因此,如何实现高速ADC和DSP的接口,提高系统的实时性是数据采集系统普遍关注的问题。文中针对自己设计的高速数据采集通道的硬件平台,提出了一种新型的存储器设计思想,输入输出数据宽度不同的高速FIFO缓存,并根据所选用的FPGA器件特点,选择了资源占用最少、效率最高的实现方法,解决了高速数据采集通道数据容量大、实时性要求高的问题。对其他高速采集系统同样具有参考价值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1051

主题

11300

帖子

26

粉丝