用FPGA做数字信号处理时,经常会用到滤波器,而滤波器的系数经常是用MATLAB仿真产生的。通常在verilog文件中,我们会把滤波器的系数定义为参数,例如paramater c0 = 8'h11。可是将MATLAB产生的系数加到verilog文件中确实一件很麻烦的事。不仅要进行格式转换,还要按照verilog参数定义的格式去写每一个语句,很是繁琐。特别是在调试滤波器的时候,经常会尝试不同滤波系数,对信号滤波的效果,这样当阶数比较高的时候,在verilog里修改系数就变长了一件很麻烦的事情。为了方便的修改verilog中定义的滤波器系数,可以利用matlab的输出功能,将每次产生的滤波器系数按照verilog中定义参数的格式将系数写入一文本文件中,这样每次修改系数只需要运行一下matlab程序,然后把产生的文件内容复制粘贴到你的.v文件中就可以了。
下面我把将MATLAB产生的滤波器系数写入文件部分代码简单说明一下:
%打开一个txt文件
fid = fopen('mult_phase_filter_coe.txt','w');
%将产生的49个系数先转化为有符号二进制格式,即如果为负数则最高位取反,即加512
for i="1:49"
if(num(i) < 0)
new_num(i) = num(i) +512;????????%num是之前产生的滤波器系数
else
new_num(i) = num(i);
end
%按verilog定义参数的格式写入txt文件
fprintf(fid,'parameter c%d = 9%ch%x;\n',i-1,39,new_num(i));
end
fprintf(fid,'\n');
fclose(fid);
下图为运行MATLAB程序后在txt文件中按照verilog语法产生的FIR滤波器的系数:
这样直接复制这些已经按verilog语法参数格式的滤波器系数语句,粘贴到verilog源程序中,就可以了。大大提高了设计效率。
文章评论(0条评论)
登录后参与讨论