你接到要求用FPGA实现FIR滤波器的任务时,也许会想起在学校里所学的FIR基础知识,但是下一步该做什么呢?哪些参数是重要的?做这个设计的最佳方法是什么?还有这个设计应该怎样在FPGA中实现?现在有大虚碰量的低成本IP核和工具来帮助你进行设计,因为FIR是用FPGA实现的最普通的功能差迟谈。
基旦蠢础和主要参数
也许你在听FIR滤波器课时不够专注。这里做一个快速的复习,最简单的形式是, FIR 滤波器的输出 y(n)是求采样数据x(n) 的N个输入的平均值。 存储的每个采样称为抽头。 当然大多数设计都比这个复杂, 要提供优化的滤波器 特性,要用系数乘 每个抽头, 或者对 h(i) 进行加权。
现在fpga设计都用quartus了啊,下面程序中fir0_ast元件在std_logic_1164包中,具体程序如下:
library IEEE
use IEEE.std_logic_1164.all
ENTITY fir0 IS
PORT (
clk : IN STD_LOGIC
reset_n : IN STD_LOGIC
ast_sink_data : IN STD_LOGIC_VECTOR (7 DOWNTO 0)
ast_sink_valid : IN STD_LOGIC
ast_source_ready : IN STD_LOGIC
ast_sink_error : IN STD_LOGIC_VECTOR (1 DOWNTO 0)
ast_source_data : OUT STD_LOGIC_VECTOR (17 DOWNTO 0)
ast_sink_ready : OUT STD_LOGIC
ast_source_valid : OUT STD_LOGIC
ast_source_error : OUT STD_LOGIC_VECTOR (1 DOWNTO 0)
)
END fir0
ARCHITECTURE SYN OF fir0 IS
COMPONENT fir0_ast
PORT (
clk : IN STD_LOGIC
reset_n : IN STD_LOGIC
ast_sink_data : IN STD_LOGIC_VECTOR (7 DOWNTO 0)
ast_sink_valid : IN STD_LOGIC
ast_source_ready : IN STD_LOGIC
ast_sink_error : IN STD_LOGIC_VECTOR (1 DOWNTO 0)
ast_source_data : OUT STD_LOGIC_VECTOR (17 DOWNTO 0)
ast_sink_ready : OUT STD_LOGIC
ast_source_valid : OUT STD_LOGIC
ast_source_error : OUT STD_LOGIC_VECTOR (1 DOWNTO 0)
)
END COMPONENT
BEGIN
fir0_ast_inst : fir0_ast
PORT MAP (
clk => clk,
reset_n => reset_n,
ast_sink_data => ast_sink_data,
ast_source_data => ast_source_data,
ast_sink_valid => ast_sink_valid,
ast_sink_ready => ast_sink_ready,
ast_source_valid => ast_source_valid,
ast_source_ready => ast_source_ready,
ast_sink_error => ast_sink_error,
ast_source_error => ast_source_error
)
END SYN
xilinx有个工具是DSP_TOOL,altera有个工数蠢李具是DSP_BUILDER。两个都能在matlab/simulink下设计FIR滤波器,然档脊后直薯迟接生成VHDL或者Verilog HDL代码。
你需要做的只是设置FIR滤波器的相关参数以及类型就够了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)