短波扩频通信系统中数字相关器的FPGA设计与实现
2.2 相关运算部分
样点值经过希尔波特变换得到的实部和虚部两部分,将分别存储到两个具有80个存储单元的RAM中,同样是采用循环写入的方式,类似于DSP编程中的桶形存储区。由于本文所应用的短波系统采用的是每个码元取五个采样点,而本地序列是一个码元对应一个数值,所以在做相关运算时是从当前的80个样点值里,每隔4个点取一个值,共取出16个样点值,依次与本地序列的16个值做相乘累加。下一次操作就把当前样点向后移一位,按同样的方法取点运算。这样依次进行,每一个样点值都会产生一个与其相对应的相关值。反映在FPGA内部,就要求RAM从当前存入的值开始,向前每隔4个单元取一个值作为输出。这样在一个样点间隔内,就从RAM中依次读出16个值,与从ROM中同步读出的16个本地序列值做相关运算。此时的相关运算中的乘法就需要是复数相乘,其结果也是复数,分两路输出实部和虚部,对这两路结果分别进行累加运算,即可得到所需的相关值的实部和虚部。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2.3 总体控制模块和接口部分
2.3.1 总体控制模块
系统上电后,FPGA内部各模块都处于运行状态,各个模块相互连接,各自有运行时序,所以为了保证各模块依次先后运作,并得出正确的结果,就需要一个指挥控制模块对各模块进行准确的控制。这里采用两个工作在80MHz和40MHz时钟下的主从计数器对相关部分和希尔波特变换部分各模块进行控制。在一个样点间隔内,根据计数器不同的计数值,利用不同的组合逻辑电路产生各个模块的使能、清零等信号,保证各模块在正确的时序下运行。为了提高FPGA处理的效率,希尔波特变换部分和相关部分实际上是并行工作的。在同一个样点间隔时间内,希尔波特变换部分处理的是当前输入的样点数据,而相关部分是在处理上一个样点间隔内希尔波特变换部分输出的结果。这两部分之间之所以能够进行相互协调和并行运行,就是由于有来自总体控制模块的各种控制信息。
javascript:window.open(this.src);" style="cursor:pointer;"/>
FPGA有两个接口,一个与A/D接口,另一个与DSP接口。在与A/D的接口部分中,有三个输入端data_in、FS和SLCK,data_in用来串行输入A/D转换来的样点值;FS为帧同步信号,它在输入到FPGA后用来驱动FPGA内部的总体控制模块;SCLK为移位时钟,它控制A/D与FPGA之间数据串行传输的移位。在与DSP的接口部分中,data_out[15..0]用来输出FPGA运算的结果,与DSP的数据总线挂接在一起,在FPGA内部设置一个三态门,开门信号就是FPGA的片选信号CE。当CE不选通的时候,三态门输出为高阻状态,不会影响DSP的数据总线。在每一个样点间隔的时间内,FPGA运算出相关值的实部和虚部,将它们分别锁存在四个16bit锁存器中,并将与DSP相连的data_ready信号置高电平,表示数据已经准备好。DSP检测到data_ready为高后会进行读操作,用地址总线的高几位产生出片选信号将FPGA选通,通过地址总线的低两位A0、A1来选择四个锁存器的其中一个,依次读取实部和虚部两个32位数的高16位和低16位。FPGA内部会对DSP的读操作计数,确认数据分四次读出后,则将data_ready置低,直到下一次运算完毕后再抬高。
3 仿真和校验
各子模块设计好后,可以用图形方式或文本方式将各个模块连接起来,对顶层设计进行编译。这里选用的是Stratix系列中容量最小的一种:EP1S10F780C7,编译后产生的编译报告如图5所示。
无论是片内逻辑单元、片内RAM还是DSP嵌入块,所选的EP1S10F780C7芯片都还有相当一部分余量。但是,如果是选用其它系列的芯片,没有嵌入式的DSP模块,最后其所占用的片内逻辑单元会远不止这么多。
javascript:window.open(this.src);" style="cursor:pointer;"/>