Vivado DDS IP协议的一些思考。

  • Post author:
  • Post category:其他


由于项目需求,需要一个高精度的DDS/NCO模块,现在的DDS基本上都是基于查找表形成的,在高精度的要求下,比如频率控制字高达32位甚至48位的情况下,ROM的开销是远远不能接受的比如在32位幅度在10位的情况下,ROM的开销高达2^(32+10),其开销太大。




由于项目需求笔者仔细阅读了Xilinx提供的DDS IP手册看能否得到相应的启发,在VIVADO的IP库中,相位精度最高可达48位,笔者设置了精度12位和48位的IP,并分别通过综合和布局布线去考证其资源利用率,对应的结果如下所示:


48位:

12位:

笔者发现在LUT查找表和DFF触发器的使用上差别较大,其他差别较小,多出来的IO就是多出来的相位位宽,但是有一点,Xilinx IP形成的DDS在资源上只占用了FPGA很小的一部分,所以其必然有某种算法减少ROM或RAM的使用数量,所以DDS的手册是一个突破口;

Xilinx IP手册,在高精度的相位情况下,也就是相位位宽较大的情况下,IP的结构是怎么样的是如何工作的,通过何种方法去减小LUT资源的使用。

Xilinx IP在使用查找表比较大的情况下会自动使用1/4对称法,实现内存资源最小化



在标准模式下计算出来的相位增量可能是小数,而在FPGA中需要对相位进行截断取整,存在相位误差,对噪声要求较高的场合,可以使用8处的噪声整形配置来弥补,使用相位抖动(Phase Dithering)或者泰勒级数纠正(Taylor Series Correct)来补偿相位误差;

综上可以看到在Vivado的DDS IP中实现位宽比价大时使用了如下的方法:

波形对称减少位宽,高位截取压缩Rom,泰勒修正对截取后的幅值相位输出进行修正。



版权声明:本文为Bradji原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。