Digital Signal Processing Reference
In-Depth Information
yncsd_v = pp[0]+pp[1]+pp[2]+pp[3]+pp[4]+pp[5]+
pp[6]+pp[7]+pp[8]+pp[9]+pp[10]+pp[11]+
pp[12]+pp[13]+pp[14]+pp[15];
end
endmodule
// Module uses a global correction vector by eliminating sign extension logic
module FIRfilterCV (
input signed [15:0] x,
input clk,
output reg signed [31:0] yn
);
reg signed [31:0] yn_v;
reg signed [15:0] xn_0, xn_1, xn_2, xn_3, xn_4;
reg signed [31:0] pp[0:15];
// The GCV is computed for sign extension elimination
reg signed [31:0] gcv = 32 ' b0110_1111_0111_0000_0001_0000_1001_0000;
always @(posedge clk)
begin
// Tap delay line of FIR filter
xn_0 <= x;
xn_1 <= xn_0;
xn_2 <= xn_1;
xn_3 <= xn_2;
xn_4 <= xn_3;
yn <= yn_v; // registering the output
end
always @ (*)
begin
// Generating PPs for 5 coefficients
// PPs for coefficient h 0 with sign extension elimination
pp[0]= {5 ' b0, xn_0[15], xn_0[14:0], 11 ' b0};
pp[1] = {7 ' b0, xn_0[15], xn_0[14:0], 9 ' b0};
pp[2] = {10 ' b0, xn_0[15], xn_0[14:0],6 ' b0};
pp[3] = {13 ' b0, xn_0[15], xn_0[14:0],3 ' b0};
// PPs for coefficient h1 with sign extension elimination
pp[4] = {2 ' b0, xn_1[15], xn_1[14:0], 14 ' b0};
pp[5] = {6 ' b0, xn_1[15], xn_1[14:0], 10 ' b0};
// PPs for coefficient h 2 with sign extension elimination
pp[6] = {1 ' b0, xn_2[15], xn_2[14:0], 15 ' b0};
pp[7] = {6 ' b0, xn_2[15], xn_2[14:0], 10 ' b0};
pp[8] = {9 ' b0, xn_2[15], xn_2[14:0], 7 ' b0};
pp[9] = {12 ' b0, xn_2[15], xn_2[14:0], 4 ' b0};
// PPs for coefficient h 3 with sign extension elimination
pp[10] = {2 ' b0, xn_3[15], xn_3[14:0], 14 ' b0};
pp[11] = {6 ' b0, xn_3[15], xn_3[14:0], 10 ' b0};
// PPs for coefficient h 4 with sign extension elimination
pp[12]= {5 ' b0, xn_4[15], xn_4[14:0], 11 ' b0};
pp[13] = {7 ' b0, xn_4[15], xn_4[14:0], 9 ' b0};
pp[14] = {10 ' b0, xn_4[15], xn_4[14:0],6 ' b0};
pp[15] = {13 ' b0, xn_4[15], xn_4[14:0],3 ' b0};
Search WWH ::




Custom Search