⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 firinterp.v

📁 一种基于LUT的预失真方法。其中的一部分
💻 V
字号:
//16倍插值Fir滤波module FIRInterp(RST,sysclk,DInEn,LDin,RDin,DOutEn,LDout,RDout);parameter IO_WIDTH=16;input RST,sysclk,DInEn;input signed[IO_WIDTH-1:0] LDin,RDin;output DOutEn;output signed[IO_WIDTH-1:0] LDout,RDout;reg signed[IO_WIDTH-1:0] RDout,LDout;reg DOutEn;reg[IO_WIDTH*2-1:0] mem[15:0];reg[IO_WIDTH*2-1:0] d,q;reg[3:0] a;reg we;reg signed[IO_WIDTH-1:0] Md;reg signed[17:0] Rcof;wire[17:0] wcof;wire signed[IO_WIDTH+17:0] MultR;reg signed[IO_WIDTH+17:0] LTDt,RTDt;//integer m;reg[8:0] TapCnt;reg[7:0] RomAdd;assign MultR=Md*Rcof;always@(posedge sysclk or posedge RST) begin	if(RST) begin		LTDt<=0;RTDt<=0;RDout<=0;LDout<=0;		TapCnt<=9'h0;RomAdd<=8'h0;DOutEn<=1'b0;a<=4'h0;d<=0;Md<=0;Rcof<=18'h0;	end	else begin		Rcof<=wcof;		if(TapCnt[0])			Md<=q[IO_WIDTH*2-1:IO_WIDTH];		else			Md<=q[IO_WIDTH-1: 0];		if(TapCnt[4:0]==5'h3) begin			RTDt<=MultR;			LDout<=LTDt[IO_WIDTH+16:17];			RDout<=RTDt[IO_WIDTH+16:17];			DOutEn<=1'b1;		end		else if(TapCnt[4:0]==5'h4) begin			LTDt<=MultR;				DOutEn<=1'b0;		end		else begin 			DOutEn<=1'b0;			if(TapCnt[0])				RTDt<=RTDt+MultR;			else 				LTDt<=LTDt+MultR;		end		if((DInEn)) begin			TapCnt<=9'h1e2;			d[IO_WIDTH*2-1:IO_WIDTH]<=LDin;			d[IO_WIDTH-1: 0]<=RDin;			we<=1'b1;		end		else begin			TapCnt<=TapCnt+9'd1;			we<=1'b0;		end		if(TapCnt==9'h0) begin			a<=a+4'h2;		end 		else if(TapCnt[0]==0)begin			a<=a+4'h1;		end		RomAdd<={TapCnt[4:1],~TapCnt[8:5]};	endendMyCofRom CofTab(.clk(sysclk),.Address(RomAdd),.Data(wcof));//always @ (posedge sysclk or posedge RST) begin //data ram/*	if(RST) begin	    for(m=0;m<16;m=m+1) begin	        mem[m]<=0;	    end	    q<=0;	end	else begin*/always @ (posedge sysclk) begin //data ram	   if (we)		   mem[a] <= d;	   q <= mem[a]; // q doesn't get d in this clock cycle//	endendendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -