0 引 言
在高动态接收机的时域相关+FFT捕获算法中需要进行大量的高速相关运算[1?2],因此在FPGA实现中需要产生大量的相关器。为了节省有限的FPGA资源、降低成本,同时相关运算频率[f1]是相关输入数据(后简称“输入数据”)频率[f2]的整数倍,因此时分复用相关器是达到目的的可行方法[3?4]。
输入数据在频率的FIFO实现循环移位寄存器。
1 FIFO简介
FIFO(First Input First Output)是一种先进先出的数据缓存器,如图1所示。它与普通存储器的区别是没有外部读写地址线,控制逻辑简单。缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址[5]。
FIFO的主要参数是它的宽度和深度。FIFO的宽度指的是FIFO一次读写操作的数据位;深度指的是FIFO可以存储N(设宽度为N)位数据的个数[6]。
根据FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO[7]。同步FIFO是指读时钟和写时钟为同一个时钟。在时钟沿来临时同时发生读写操作。异步FIFO是指读写时钟不一致,读写时钟是互相独立的。在本文中采用的是同步FIFO。
2 方案设计
在工程中需要2 560个相关器在124 MHz时钟下做2 560次相关运算。输入数据频率为15.5 MHz,因此在124 MHz时钟下可以使用320个相关器时分复用8次以实现2 560次相关。FPGA中的320个同步FIFO核在124 MHz时钟下对输入数据进行循环移位,每一个FIFO的输出数据作为320个相关器的输入数据进行相关运算[8]。整体方案结构如图2所示。
320个FIFO模块以串联模式工作。图2中FIFO_0和FIFO_1分别为前后两个串联的FIFO模块。每个FIFO的深度为8,宽度为6 b。输入数据在15.5 MHz时钟下写入至FIFO_0,每124 MHz时钟FIFO内部数据进行一次移位,同时将最先进入FIFO的数据即移位到0位置的数据输出给累加器ADD做相关运算。一个ADD模块在124 MHz时钟下时分复用8次,相当于8个相关器add7~add0。在15.5 MHz时钟的控制下,将当前0位置上第一次输出给ADD模块的数据同时输出给下一个FIFO模块FIFO_1。每个FIFO的工作模式均与FIFO_0的一致。
以第一个FIFO为例说明FIFO模块的具体工作过程。假设依次输入的数据为1,2,3,4,5,6,7,8,9,10,…。具体实现过程如图3所示。
FIFO在124 MHz时钟下工作。一个时段指8拍124 MHz时钟即一个15.5 MHz输入数据时钟,每一个时段输入一个新数据。从第1个时段可看出,当向FIFO写了7个数据后,读出一个数据,按照FIFO先进先出的原则,读出的是第一个写进去的数据“1”(如第一时段第1行所示);下一个124 MHz时钟将第八个数据“8”(在此称为新进数)写入FIFO,同时读出第二个写进去的数据“2” (如第一时段第2行所示);在第一时段内由于除了第一个写入的数据“1”外,其他的数据均要被后面的时段采用,所以在读出数据“2”后,下一个时钟再将其回写入FIFO,同时读出第三个写进去的数据“3” (如第一时段第3行所示);同理下一个时钟将数据“3”回写入FIFO,读出第四个写进去的数据“4”,依次类推。
第一时段第1行读取的数据“1”和第二时段第1行读取的数据“2”依次输入到下一个FIFO中。两个相邻FIFO之间同一级数据应该相差8个124 MHz时钟,即当第[i]个FIFO写入第9个数据的同时,写入第[i]个FIFO的第一个数据写入第[i+1]个FIFO;也可以理解为同一个数据写入前后两个FIFO的时间上相差8个124 MHz时钟。
而从图3可以看出,第一个时段中当写入第八个数据“8”的同时已经将写入第一个数据“1”读出了,所以为了满足上述的时序关系,将读出的数据“1”在124 MHz时钟下打8拍再送入下一个FIFO;同理第二时段第一行读出的数据“2”也在124 MHz时钟下打8拍再送入下一个FIFO。将320个FIFO按照上述时序关系串联起来就实现了2 560级循环移位寄存器。
3 仿真与分析
3.1 仿真条件
在FPGA中对上述方案进行仿真。调用320个FIFO内核以实现循环移位寄存器,320个FIFO的输出分别作为320个相关器的输入,320个相关器在主时钟124 MHz下时分复用8次实现2 560个相关器。其中FIFO输入数据的频率为15.5 MHz,整个运算过程在主时钟124 MHz下工作。调用的FIFO内核如图4所示,其宽度为6 b,深度为8。输入数据为:-2,0,0,0,-2,-6,2,6,0,0,2,2,6,0,4,2,…。
3.2 仿真结果
320个FIFO核串联工作,连续两个相邻的FIFO_0和FIFO_1的时序逻辑如图5所示相邻两个FIFO的时序关系都与FIFO_0和FIFO_1的一样。320个FIFO核就是以这样的方式连接实现循环移位寄存器。
一个FIFO同一时段在124 MHz时钟下连续输出八个数据,该八个数据依次在124 MHz时钟下作相关运算,每个相关结果均打八拍等待下一个数据的到来。以图3为例说明,最右一列的数据为FIFO的输出数据。第一时段最右一列的数据1,2,3,4,5,6,7,8依次作相关运算,其中数据“1”的相关结果打八拍等待第二时段最右一列第一行数据“2”再作累加相关,数据“2”的相关结果打八拍等待第二时段最右一列第二行数据“3”再作累加相关,依次类推。此过程的FPGA仿真图如图6所示,sum0~sum7为一个FIFO输出作相关运算的8个相关结果。
4 结 语
高动态接收机的时域相关+FFT捕获算法需要大量相关运算,为了减少硬件
资源采用了时分复用技术实现大量的相关运算。本方案将输入数据经过多级串联FIFO进行循环移位,再作相关运算实现了相关器的时分复用。
参考文献
[1] 李菊,陈禾,金俊昆,等.基于FFT的两种伪码快速捕获方案的研究与实现[J].电子与信息学报,2006(10):1778?1781.
[2] 谢钢.GPS原理与接收机设计[M].北京:电子工业出版社,2012.
[3] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008.
[4] 劳有兰,陈锦.基于FPGA时分复用数字基带通信系统的设计[J].广西工学院学报,2003(2):34?37.
[5] 张奇山,刘安芝,刘希顺.基于FPGA的FIFO设计和应用[J].嵌入式技术,2009(18):50?52.
[6] 周晓波,李锐菁,赵强.基于FPGA 的高速存储器接口应用开发[J].铁路计算机应用,2013(5):8?11.
[7] 唐清善,费玮玮,蔡惠智,等.基于FPGA的高速异步FIFO的设计与实现[J].微计算机信息,2009(29):6?8.