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

Subversion Repositories cic

[/] [cic/] [trunk/] [header/] [cicDecimator.h] - Rev 2

Compare with Previous | Blame | View Log

#include "integrator.h"
#include "comb.h"
#include "downsample.h"
 
#define N 3
 
SC_MODULE(cicDecimator)
{
	sc_in<bool> 	CLR;
	sc_in<bool> 	CLK;
	sc_in<double> 	cicIN;
	sc_out<double> 	cicOUT;
 
	integrator 	*I[N];
	comb 		*C[N];
	downsample 	*D;
 
	sc_signal<double> 	internalI[N];
	sc_signal<double> 	internalC[N];
	sc_signal<bool>		slowclock;
	sc_signal<double>	handoff;
 
	SC_CTOR(cicDecimator)
	{
		SC_METHOD(output);
			sensitive << internalC[N-1];
 
		for (unsigned j = 0; j < N; j++)
		{
			I[j] = new integrator(sc_gen_unique_name("I"));
			if (j == 0)
			{
				I[j] -> CLR 			(CLR);
				I[j] -> CLK 			(CLK);
				I[j] -> integratorIN 	(cicIN);
				I[j] -> integratorOUT 	(internalI[j]);
			}
			else
			{
				I[j] -> CLR 			(CLR);
				I[j] -> CLK 			(CLK);
				I[j] -> integratorIN 	(internalI[j-1]);
				I[j] -> integratorOUT 	(internalI[j]);			
			}
		}
 
		D = new downsample("D");
		D -> 	CLR 		(CLR);
		D -> 	CLK 		(CLK);
		D -> 	samplesIN 	(internalI[N-1]);
		D -> 	sampleOUT	(handoff);
		D -> 	SCLK		(slowclock);
 
		for (unsigned i = 0; i < N; i++)
		{	
			C[i] = new comb(sc_gen_unique_name("C"));
			if (i == 0)
			{
				C[i] -> CLR 		(CLR);
				C[i] -> CLK 		(slowclock);
				C[i] -> combIN 		(handoff);
				C[i] -> combOUT 	(internalC[i]);
			}
			else
			{
				C[i] -> CLR 		(CLR);
				C[i] -> CLK 		(CLK);
				C[i] -> combIN 		(internalC[i-1]);
				C[i] -> combOUT 	(internalC[i]);			
			}			
		}
 
		 cicOUT.initialize(0);	
	}
 
	void output()
	{
		cicOUT.write(internalC[N-1]);		
	}
 
};
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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