OpenCores
URL https://opencores.org/ocsvn/gppd/gppd/trunk

Subversion Repositories gppd

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 5 to Rev 6
    Reverse comparison

Rev 5 → Rev 6

/gppd/trunk/ppd.h
0,0 → 1,111
#include "fir.h"
#include <math.h>
 
/*
* This function takes an array of FIR filter coefficients
* and convert it to 2D matrix for polyphase decimation filter.
*/
double** eMat(int rows, int columns, double *h)
{
double **m = new double*[rows];
for (int i = 0; i < rows; i++) {m[i] = new double[columns];}
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
m[i][j] = h[j*rows+i];
}
}
return m;
}
 
/*
* This function takes an 2D matrix, polyphase matrix,
* and export an array for each phase or row in the
* polyphase decimation filter. This is corresponding
* to the E's.
*/
double* eVec(int row, int columns, double **Matrix)
{
double *v = new double[columns];
for (int i = 0; i < columns; i++)
{
v[i] = Matrix[row][i];
}
return v;
}
 
/// Core/Static design constans, as VHDL generic list.
#define N 36 // Filter length
#define M 3 // Decimation factor
#define P 12 // P = ceil(N/M)
class ppd : public sc_module
{
public:
sc_in<bool> RST;
sc_in<bool> CLOCK;
sc_in<double> ppdIN;
sc_out<double> ppdOUT;
 
sc_signal<double> delay[M];
sc_signal<double> sum[M];
double **Matrix;
double *tmpE;
 
fir<double,P> *E[M];
SC_HAS_PROCESS(ppd);
ppd(sc_module_name name, double* _h) :
sc_module(name),
h(_h)
{
SC_METHOD(algorithm);
sensitive << CLOCK.pos();
Matrix = eMat(M,P,h);
for (unsigned int i = 0; i < M; i++)
{
tmpE = eVec(i,P,Matrix);
E[i] = new fir<double,P>(sc_gen_unique_name("E"),tmpE);
E[i] -> CLR (RST);
E[i] -> CLK (CLOCK);
E[i] -> firIN (delay[i]);
E[i] -> firOUT (sum[i]);
}
}
void algorithm()
{
delay[0].write(ppdIN.read());
double add = sum[0].read();
for (unsigned int i = 1; i < M; i++)
{
delay[i].write(delay[i-1].read());
}
for (unsigned int i = 0; i < M; i++)
{
add = add + sum[i];
}
ppdOUT.write(sum[0]);
cout << ppdOUT << endl;
}
~ppd()
{
}
double* h;
};

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.