用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

短波扩频通信系统中数字相关器的FPGA设计与实现

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:59:34
相乘累加模块是希尔波特变换部分的核心单元,这里用到了Stratix器件独特的嵌入式DSP模块。在Quartus的Megawizard Plus_In Manager中选择ALTMULT_ACCUM(MAC)定制相乘累加模块。首先系统会提示只有Stratix系列才可以定制此类型模块,本例选择的两个输入端分别是10位和14位的有符号数,与RAM和ROM的输出端相连,再将累加后的输出端设为28位。这里有意预留了4位,用来防止在129次累加的过程中出现数据溢出的现象。将时钟、使能、清零等设置好后,即可生成所需的相乘累加模块,在编译的过程中Quartus就会自动把这部分配置到嵌入式DSP模块中,而不去占用片内的逻辑单元。这样就把原本用几个模块完成的功能用单个模块实现了,同时也提高了运行的可靠性。

2.2 相关运算部分

样点值经过希尔波特变换得到的实部和虚部两部分,将分别存储到两个具有80个存储单元的RAM中,同样是采用循环写入的方式,类似于DSP编程中的桶形存储区。由于本文所应用的短波系统采用的是每个码元取五个采样点,而本地序列是一个码元对应一个数值,所以在做相关运算时是从当前的80个样点值里,每隔4个点取一个值,共取出16个样点值,依次与本地序列的16个值做相乘累加。下一次操作就把当前样点向后移一位,按同样的方法取点运算。这样依次进行,每一个样点值都会产生一个与其相对应的相关值。反映在FPGA内部,就要求RAM从当前存入的值开始,向前每隔4个单元取一个值作为输出。这样在一个样点间隔内,就从RAM中依次读出16个值,与从ROM中同步读出的16个本地序列值做相关运算。此时的相关运算中的乘法就需要是复数相乘,其结果也是复数,分两路输出实部和虚部,对这两路结果分别进行累加运算,即可得到所需的相关值的实部和虚部。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    复数相乘模块是相关运算部分中的重要环节。从RAM中读出的实部和虚部组成的信号值,与从ROM中读出的本地序列值,在这里要进行复数相乘运算。复数相乘模块结构图如图4所示,a、b、c、d分别代表信号和本地序列的实部和虚部,按照式子(a+jb)×(c+jd)=(ac-bd)+j(ad+bc)的组合进行相乘加减。这里需要说明的是,考虑到后面要与DSP相连,数据的宽度被限制在32位。所以对于乘法器B和D而言,28bit与9bit相乘得到的结果应是37bit。这里在定制乘法器的时候强行把它限制为32bit,去掉了最高位的多余符号位,舍去了低4位。这样处理带来的后果就是人为地将乘积缩小了16倍。如果对乘法器A和C的结果不做处理,直接进行加减运算,则结果将导致严重的错误。因此对于乘法器A和C,应该人为地将其输出值右移4位,同样地缩小16倍,再进行下一步的加减运算,就可以有效地避免上述的错误。这样输入的4个数值经过几个时钟周期的运算后,输出的两个数值就是所求的复数相乘结果。这里的4个有符号数乘法器都会在编译时自动地配置到Stratix器件的嵌入式DSP模块上去。

2.3 总体控制模块和接口部分

2.3.1 总体控制模块

系统上电后,FPGA内部各模块都处于运行状态,各个模块相互连接,各自有运行时序,所以为了保证各模块依次先后运作,并得出正确的结果,就需要一个指挥控制模块对各模块进行准确的控制。这里采用两个工作在80MHz和40MHz时钟下的主从计数器对相关部分和希尔波特变换部分各模块进行控制。在一个样点间隔内,根据计数器不同的计数值,利用不同的组合逻辑电路产生各个模块的使能、清零等信号,保证各模块在正确的时序下运行。为了提高FPGA处理的效率,希尔波特变换部分和相关部分实际上是并行工作的。在同一个样点间隔时间内,希尔波特变换部分处理的是当前输入的样点数据,而相关部分是在处理上一个样点间隔内希尔波特变换部分输出的结果。这两部分之间之所以能够进行相互协调和并行运行,就是由于有来自总体控制模块的各种控制信息。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    2.3.2 接口部分

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;"/>
   

上一页  [1] [2] [3]  下一页

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:7,390.62500 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号