求助,FIR设计问题。
时间:10-02
整理:3721RD
点击:
WAIT:if(flag) begin
cstate<=datafilter;
ENA<=1'b1;
WEA<=1'b0;
counter<=9'd0;
end
else begin
ENA<=1'b0;
WEA<=1'b0;
rdy<=1'b0;
cstate<=WAIT;
sum<=48'd0;
end
datafilter:begin
if(counter<=211)/// 修改为counter<=105
begin
addra<=counter[7:0];
coef<=h;
data<=temp[counter]; // 修改为data<=temp[counter]+temp[211-counter]
sum<=sum+result;
counter<=counter+9'd1;
end
else begin
counter<=9'd0;
cstate<=WAIT;
dataout<=sum[47:24];
rdy<=1'b1;
addra<=8'b0;
end
end
default:cstate<=idle;
endcase
end
mul U0 (
.a(coef), // Bus [23 : 0]
.b(data), // Bus [23 : 0]
.p(result)); // Bus [47 : 0]
coefRAM U1(
.clka(clk),
.ena(ENA),
.wea(WEA), // Bus [0 : 0]
.addra(addra), // Bus [7 : 0]
.dina(DINA), // Bus [23 : 0]
.douta(h)); // Bus [23 : 0]
endmodule
之前的程序是按照212个系数。
修改:只是系数对称,然后将抽头寄存器中的数据对称相加,然后和系数相乘。
仿真后,原程序能够很好滤除杂信号,修改后基本不能。
各位大大,谢谢了!
cstate<=datafilter;
ENA<=1'b1;
WEA<=1'b0;
counter<=9'd0;
end
else begin
ENA<=1'b0;
WEA<=1'b0;
rdy<=1'b0;
cstate<=WAIT;
sum<=48'd0;
end
datafilter:begin
if(counter<=211)/// 修改为counter<=105
begin
addra<=counter[7:0];
coef<=h;
data<=temp[counter]; // 修改为data<=temp[counter]+temp[211-counter]
sum<=sum+result;
counter<=counter+9'd1;
end
else begin
counter<=9'd0;
cstate<=WAIT;
dataout<=sum[47:24];
rdy<=1'b1;
addra<=8'b0;
end
end
default:cstate<=idle;
endcase
end
mul U0 (
.a(coef), // Bus [23 : 0]
.b(data), // Bus [23 : 0]
.p(result)); // Bus [47 : 0]
coefRAM U1(
.clka(clk),
.ena(ENA),
.wea(WEA), // Bus [0 : 0]
.addra(addra), // Bus [7 : 0]
.dina(DINA), // Bus [23 : 0]
.douta(h)); // Bus [23 : 0]
endmodule
之前的程序是按照212个系数。
修改:只是系数对称,然后将抽头寄存器中的数据对称相加,然后和系数相乘。
仿真后,原程序能够很好滤除杂信号,修改后基本不能。
各位大大,谢谢了!