"s.fffffffffffffff" format
"s.fffffffffffffff" format
// Fixed-point 16 bit N-tap FIR filter module -----------------------------module FIRfilter #(parameter NTAPS = 4)(input wire[15:0] indata,input wire update,input wire inputmode,output wire[15:0] outdata);reg [15:0] coef[NTAPS-1:0]; // coefficientswire signed [31:0] mulline[NTAPS-1:0]; // input multiplied with coefficientsreg signed [31:0] addline[NTAPS-1:0]; // adder buffer// input controlinteger n;always @(posedge update) begin// coefficients input modeif(inputmode==1) beginfor(n=0;n<NTAPS-1;n=n+1) begincoef[NTAPS-n-1] <=coef[NTAPS-n-2];endcoef[0] <= indata;end// nomal input modeelse beginaddline[0] <= mulline[0];for(n=0;n<NTAPS-1;n=n+1) beginaddline[n+1] <= addline[n]+mulline[n+1]; // accumulationendendend// multiplicationgenvar i;generatefor(i=0;i<NTAPS;i=i+1) begin : genfilmultiplier mul(.clk(update),.a(indata),.b(coef[i]),.p(mulline[i]));// Optimized 'black-box' module : p = a * b// input clk// input [15:0] a// input [15:0] b// output [31:0] pendendgenerate// output assignmentassign outdata = addline[NTAPS-1]>>>15;endmodule