数字匹配滤波器的优化设计与FPGA实现
滤波系数即移位抽头系数取值只能为1或-1,所以将有符号数的二进制补码的乘法运算变为求补码运算是完全可行的,这就避免了乘法运算对于资源的大量需求,运算速度也可大大提高。 数字匹配滤波器的移位寄存器每一级抽头进行1次乘法运算,结果输出到累加器进行累加,当运算到最后一级时,输出累加结果,送入门限判决器进行判决。 较优累加器的运算形式是串行,而优化累加器的运算形式是并行。 笔者通过Quatus仿真实验验证了优化数字匹配滤波器的性能。 在本次仿真中,clk为时钟信号,address为地址信号,输入信号为din,数字匹配滤波器抽头信号为m。为了方便起见,做了2个只读存储器din_rom和m_rom。din_rom中存储了63 bit的m序列的二进制补码表示作为输入,其中0表示11,l表示Ol,16进制表示分别为3和l。m_rom中存储了63 bit m序列的二进制码元,作为数字匹配滤波器的抽头同步模块的输入。result为计算出的相关值,tongbu为同步信号。
在补码运算中,对每个移位抽头输出同时并行运算,并在后两个时钟得到并行求补码运算输出数据。
传统设计乘法器时,输入n1,n2位的2路有符号补码,结果输出为nl+n2位二进制补码数据。
随着移位寄存器输入有符号二进制补码矢量数据,时钟改变一次,移位寄存器每个抽头输出均和相应的抽头系数做一次相乘运算。
求补码运算代替乘法器时,不同于传统的乘法器设计,寄存器中每一数据只需求其补码即可,省略了相乘运算。从根本上说.用求补代替相乘运算只是功能相同,但可以大大减少资源浪费并提高运算速度,所以有很大的应用优势。
4 累加器
当对2个二进制补码相加时,若2个加数都为B bit,考虑到数据可能溢出,则加法器的输出只需要(B+1)bit;而当3个bit二进制补码相加时,输出则需要(B+2)bit。通过观察可以发现:2N个B bit二进制补码的值可以用(B+N)bit二进制表示。
4.1 传统的累加器设计
考虑到传统累加器数据可能溢出,故将数据位展宽,比如在本仿真中,63个4位有符号补码求和,最后结果最多为4+6位,其中4为每一加数的位数,因为26<64,故扩展位为6位。所以计算,如果数据位不足10位,正数在数据前加O,负数在数据前加1,这样每一数据都是10位(包括符号位),不用考虑溢出问题,完全用62个10位加法器可以实现。
4.2 较优的累加器设计
随着移位级数的增加,加法器的位数当然也要相应增加,第1级加法器用(B+1)位,第2、3级用(B+2)位,第4级到第7级用(B+3)位,后面依次类推。这样设计,每一级并没有用考虑溢出结果的最多位的加法器,而是递推增加,可以减少资源浪费。
4.3 优化的累加器设计
将匹配滤波器的乘法器输出数据进行分组,并执行加法运算,第一级的加法器用(B+1)位,第二级用位,第三级用(B+3)位,后面依次类推。每一级的加法器数量是前面的大约一半,依几何级数递减,这样的设计在低位相加时用了较多的加法器并以几何级数递减,也就避免了高位相加的资源浪费。
以63位m序列为例,设有符号补码数为B位:
将前62位输入分为2组,每一组输入和另一组中相应输入作相加运算,总共用到31个(B+1)位加法器;
余l位输入和31个(B+1)位加法器输出再次分组,用到16个(B+2)位加法器;
16个(B+2)位加法器输出再次分组,用到8个(B+3)位加法器;
16个(B+2)位加法器输出再次分组,用到8个(B+3)位加法器;
8个(B+2)位加法器输出再次分组,用到4个(B+4)位加法器;
4个(B+4)位加法器输出再次分组,用到2个(B+5)位加法器;
2个(B+5)位加法器输出再次分组,用到1个(B+6)位加法器。
63位累加器占用加法器的比较如表1所示。
可以很明显看出,优化的累加器比较优的累加器更能减少资源占用,运行效率也可大大提高。
4.4 Quatus模块化设计法
Quatus仿真软件的MegaWizard Plug-In Manag-er中提供了parallel_add模块,用户可以自由设计输入数据位宽,累加数据个数,定义累加输入数据类型,模块最终自动生成适当位宽的数据输出(考虑了所有的数据溢出)。
与上面的累加器设计比较,这样的设计很方便,可读性强,程序简练。实际中逻辑单元占用也不是很多,只比上面多出10%左右。所以,如果不是特别关注资源占用问题,这样的设计也不失为一种好方法。
5 仿真实验
仿真中采用Altera公司的FPGA,利用6级线性移位反馈寄存器生成长度为63的m序列。
图3是数字匹配滤波器的2个周期的相关同步过程,图4是放大后的相关同步。
每来一个时钟脉冲,地址加1,依次读取din_rom中的数据,图4中的地址为10进制表示。m_rom地址始终置"0",图3和图4中是m_rom中二进制数据的16进制表示。
63级移位滤波器同时做补码运算,当m_rom输出的二进制矢量位为1时,不改变相应位原补码值,矢量位为0时,求其相反数(-1的相反数为1,1的相反数为-1)的补码值。将相关门限设为63,当同步未完成时,相关值信号result的16进制表示为FF,二进制即为1111lll(1表示正数);当同步完成时,相关值信号result的16进制表示为3F,二进制即为0111111(0表示正数)。
每个时钟脉冲,计算1次相关系数,并和判决门限比较,高于门限表示完成同步捕获,否则表示没有同步,继续运算,直到达到同步为止。
- 一种基于FPGA的接口电路设计(11-18)
- 利用Virtex-5 FPGA实现更高性能的方法(03-08)
- 设计性能:物理综合与优化(04-28)
- 使用 PlanAhead Design 工具提高设计性能(04-28)
- 采用灵活的汽车FPGA 提高片上系统级集成和降低物料成本(04-28)
- 面向 FPGA 的 ESL 工具(04-29)