process
begin
wait until clk=’1’;
if add(8)=’0’ then
address<=add(7 downto 0);
else
address<=”11111111”-add(7 downto 0);
end if;
if add(9)=’0’ then
qou(7)<=’0’;
qou(6 downto 0)<=q;
else
qou(7)<=’1’;
qou(6 downto 0)<= ”1111111”-q;
end if;
end process;
其中N为级数,M为延迟,R为抽取倍数。
本设计中,CIC滤波器需要完成10倍的抽取,采用4级级联来实现,由于输入、输出数据均为8bit,故内部寄存器所需的最大位宽为,旁瓣容限可达到4×13.46=43.44dB。
CIC滤波器实现的关键是抽取器的分频设计,其VHDL代码如下:
signal count : integer range 0 to 9;
signal clk2 : std_logic;
if (count=9) then --抽取器分频实现
clk2<=’1’;
else
clk2<=’0’;
end if;
comb : process --抽取器代码
begin
wait until clk2=’1’;
i3d1<=c0;
…………
c4<=c3/2-c3d1;
end process comb;