biquad.h
Generated by XSLT script syscblkgen.xsl.
#ifndef BIQUAD // needed for multiple instantiations. #define BIQUAD
/* Copyright (C) 2006-2007 Silicon DSP Corporation, Portland, Oregon
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
http://capsimtmk.sourceforge.net */ /*
Implements biquad. */ /*
*/
/* * SystemC code for block generated by Capsim */ #include <stdio.h> #include <math.h>
SC_MODULE(biquad) {
sc_in_clk CLK; sc_in<bool> rst_n;
/* * Input Signal Definitions */ sc_in < float> x;
/* * Output Signals */ sc_out < float > y;
/* * STATES */
float xs_A[3]; float ys_A[3];
/* * Parameters */ float zsec1; float zsec2; float psec1; float psec2;
SC_CTOR(biquad) { SC_METHOD(entry); dont_initialize();
/* * sensitivity list */ sensitive_pos(CLK); sensitive_neg << rst_n;
} void entry();
};
/* * Entry Code */ void biquad::entry() {
/* * Declarations */
if(!rst_n) {
/* * User Init Code */
xs_A[2]=0; xs_A[1]=0; xs_A[0]=0;
ys_A[2]=0; ys_A[1]=0; ys_A[0]=0;
} else {
/* * Main Code */
float xx; float yy;
xx=x.read(); xs_A[2]=xs_A[1]; xs_A[1]=xs_A[0]; xs_A[0]=xx;
yy=xs_A[0]+(zsec1*xs_A[1])+(zsec2*xs_A[2])-(psec1*ys_A[1])-(psec2*ys_A[2]);
ys_A[2]=ys_A[1]; ys_A[1]=yy; y.write(yy);
} }
#endif