在FPGA内对数字信号做处理时,经常需要对信号进行上下采样的处理。在FPGA内做上下采样时,Xilinx提供了两种IP核供用户选择,一种是CIC滤波器,一种是FIR滤波器。这两者的区别在于:前者CIC滤波器IP核需要FPGA内有相应的上采样速率的时钟资源,输出的数据为连续的数据流;后者FIR滤波器对相应的时钟资源不做要求,通过FIR内部IP核的控制,来输出间断的数据流从而达到相应的采样率。
在Xilinx内使用CIC滤波器IP核实现上采样操作相对简单对资源的消耗较少,但是对时钟资源的要求严格。FIR IP核对时钟资源不做要求,不过会相应牺牲FPGA内部资源,这里用户可以根据自己的需求来选择相应的IP核实现上采样插值操作。
- 这里本文重点介绍使用FIR滤波器IP核来实现上采样的操作。全文的章节分为以下四个部分组成:
1、上采样插值滤波器的实验原理;
2、上采样插值滤波器的开发环境;
3、上采样插值滤波器的Verilog HDL实现;
4、上采样插值滤波器的Modelsim仿真结果。
- 实验原理
若希望将信号的采样频率提高L倍,即得到L*fs的采样速率,最简单的方法就是在原始信号的每两个信号值之间插入L-1个零,然后再对该信号做低通滤波器处理,即可获得提高了采样率的新的数据序列。(插值之后的信号频谱为原始序列经过L倍压缩得到的频谱。在插值后,原始一个信号的周期内,多余的L-1个周期为原始信号频谱的镜像。因此,在插值之后,需要使用低通滤波器以滤除多余的镜像频谱)。
![792242534164f2ade69f490a5825e6f9]()
- 开发环境
开发环境:VIVADO 2019.2
仿真环境:Modelsim SE-64 10.7
FPGA型号:XC7Z020CLG400-2
FIR IP核版本:FIR Compiler(7.2)
代码文本编辑器:Microsoft VS Code - Verilog HDL实现
实验前提:输入信号为1M时钟域下,1k频率的单音信号。我们利用FIR IP核,在50M的时钟域下对此单音信号进行插值5倍的操作。
- FIR IP核的页面设置如下图所示:
![fdd72dcd5ee1c540292221bd24bd9992]()
![707ca7994f5a148e9d505206b5a15b2d]()
- 通过Matlab设计低通滤波器的参数设计如下图所示:
![c777f389b005bceed5e722f8c4a57c89]()
- 相应的.v文件:
![1012faf087c6d21972825ac248d0b768]()
- 对应的tb文件:
![7381c5b44869a246841608503fba0c95]()
![2f86d89b53bcbf7bdd26423cdc2ced0e]()
- Modelsim仿真结果
-
Modelsim的仿真结果如下图所示,从Modelsim的仿真结果可以看出,原始1个采样点的间隔内,输出5个采样点。利用FIR IP核进行插值滤波的操作成功,后续大家可以自行试验,小数倍的插值滤波。
![0d6d58573538c08e3410e8a762e0df57]()
-
本文由Always FPGA原创,转载请注明以上来源。同时欢迎大家关注我的微信公众号:Always FPGA,如需交流,欢迎与我联系!








