fir

module fir_lowpass
(
	input			clk_50m,
	input			rst_n,
	input [7:0]		pid_fir,
	
	output [7:0]	pod_fir
);

parameter	a0	=	8'hf4,
			a1	=	8'he6,
			a2	=	8'h0e,
			a3	=	8'h59,
			a4	=	8'h7f,
			a5	=	8'h59,
			a6	=	8'h0e,
			a7	=	8'he6,
			a8	=	8'hf4;
			
reg	[7:0]	dly1,
			dly2,
			dly3,
			dly4,
			dly5,
			dly6,
			dly7,
			dly8;

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
	begin
		dly1 = 8`d0;
		dly2 = 8`d0;
		dly3 = 8`d0;
		dly4 = 8`d0;
		dly5 = 8`d0;
		dly6 = 8`d0;
		dly7 = 8`d0;
		dly8 = 8`d0;
	end
	else
	begin
		dly1 = pid_fir;
		dly2 = dly1;
		dly3 = dly2;
		dly4 = dly3;
		dly5 = dly4;
		dly6 = dly5;
		dly7 = dly6;
		dly8 = dly7;
	end
end

reg	[8:0]	add1,
			add2,
			add3,
			add4;

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add1 <= 9'd0;
	else
		add1 <= pid_fir + dly8;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add2 <= 9'd0;
	else
		add2 <= dly1 + dly7;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add3 <= 9'd0;
	else
		add33 <= dly2 + dly6;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add4 <= 9'd0;
	else
		add4 <= dly3 + dly5;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add5 <= 9'd0;
	else
		add5 <= {1'b0,dly4};
end

reg	[24:0]	mult1,
			mult2,
			mult3,
			mult4,
			mult5;
			
always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		mult1 <= 25'd0;
	else
		mult1 <= add1 * a1;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		mult2 <= 25'd0;
	else
		mult2 <= add2 * a2;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		mult3 <= 25'd0;
	else
		mult3 <= add3 * a33;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		mult4 <= 25'd0;
	else
		mult4 <= add4 * a4;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		mult5 <= 25'd0;
	else
		mult5 <= add5 * a5;
end

reg [25:0]	add11,add12,add13;

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add11 <= 26'd0;
	else
		add11 <= mult1 + mult5;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add12 <= 26'd0;
	else
		add12 <= mult2 + mult4;
end

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add13 <= 26'd0;
	else
		add13 <= {1'b0,mult3};
end

reg [26:0] add21,add22;
always @ (posedge clk_50m or rst_n)
begin
	if (!rst_n)
		add21 <= 27'd0;
	else
		add21 <= add11 + add13;
end

always @ (posedge clk_50m or rst_n)
begin
	if (!rst_n)
		add22 <= 27'd0;
	else
		add22 <= {1'b0,add12};
end

reg [27:0] add31;

always @ (posedge clk_50m or negedge rst_n)
begin
	if (!rst_n)
		add31 <= 28'd0;
	else
		add31 <= add21 + add22;
end

assign pod_fir = add31[7:0];

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值