基于FPGA的FIR complier IP核 学习资料(二)

接上篇,写一下如何只配置一个核就能分别对I、Q两路进行滤波。

首先还是先打开IP核的配置界面(第一页),如下图所示:

在图中1部分,我们仍是既可以选择向量的方式,也可以选择文件的方式。这里是用的文件的方式。如果配置两个IP核的话,就需要用到两个滤波系数文件,这里只配置一个文件,只要一个系数文件就行。系数文件的格式如下:

radix=10;  //十进制表示
coefdata=   //前20个是I路的滤波系数,后20个是Q路的滤波系数。
1,
-3,
6,
-9,
12,
-13,
9,
5,
-47,
413,
179,
-83,
49,
-29,
15,
-7,
2,
0,
-1,
1,    
1,
-1,
0,
2,
-7,
15,
-29,
49,
-83,
179,
413,
-47,
5,
9,
-13,
12,
-9,
6,
-3,
1;

然后把文件加载进去,在图中3部分选择系数集的个数为2个(I路和Q路)。注意:在用这种方法的时候,一定要注意让两个系数集内部的系数个数相等,不然IP核怎么去区分哪些系数是I路的哪些系数是Q路的呢。

其他的参数配置都和(一)中的保持一致就行,这时候再看IP symbol,如下图所示:

多了一个滤波器选择接口。通过这个接口,我们在实例化时候就可以选择两组滤波器系数中的一个了。其实例化的代码如下:

//i路滤波							
my_iqfir ddc2_ifir_inst (
	.clk(clk250), // input clk
	.filter_sel(1'b0), // input [0 : 0] filter_sel,0选择I路(第一组)滤波系数
	.rfd(rfd_i), // output rfd
	.rdy(rdy_i), // output rdy
	.din(i_out), // input [11 : 0] din
	.dout(idataout)); // output [21 : 0] dout	
//q路滤波				
my_iqfir ddc2_qfir_inst (
	.clk(clk250), // input clk
	.filter_sel(1'b1), // input [0 : 0] filter_sel,1选择Q路(第二组)滤波系数
	.rfd(rfd_q), // output rfd
	.rdy(rdy_q), // output rdy
	.din(q_out), // input [11 : 0] din
	.dout(qdataout)); // output [21 : 0] dout	

“filter_sel”这个接口的值filter_sel可以是静态的(如上面的代码所示)也可以是动态的(在送入数据的同时,送入是I路还是Q路的信号),这就看自己所编写的代码了。

然后我就想着仿真吧,但是,在加载仿真文件的时候总是报错“ERROR:HDLCompiler   Instantiating from unknown module (错误:HDLCompiler从未知模块实例化)”,觉得是模块名称在实例化时候写错了,可转念一想,不应该啊,我是从.veo文件直接拷贝过来的,这也能错?!抱着试试看的态度,我把ISE关掉重新启动,然后再次加载仿真文件,成......了......

仿真的结果如下图所示:

结果和matlab仿真结果对着呢。说明可以只配置一个IP核,然后根据 “filter_sel”这个接口来动态的选择使用哪组滤波系数(可以是三组、四组......等等)

关于这个数字下变频中的滤波器的使用,应该就到这儿结束了,如果后期还有改进啥的,再添加吧。

 

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值