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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [systemC/] [send_module_sc.h] - Rev 29

Go to most recent revision | Compare with Previous | Blame | View Log

//+FHDR------------------------------------------------------------------------
//Copyright (c) 2013 Latin Group American Integhrated Circuit, Inc. All rights reserved
//GLADIC Open Source RTL
//-----------------------------------------------------------------------------
//FILE NAME	 :
//DEPARTMENT	 : IC Design / Verification
//AUTHOR	 : Felipe Fernandes da Costa
//AUTHOR’S EMAIL :
//-----------------------------------------------------------------------------
//RELEASE HISTORY
//VERSION DATE AUTHOR DESCRIPTION
//1.0 YYYY-MM-DD name
//-----------------------------------------------------------------------------
//KEYWORDS : General file searching keywords, leave blank if none.
//-----------------------------------------------------------------------------
//PURPOSE  : ECSS_E_ST_50_12C_31_july_2008
//-----------------------------------------------------------------------------
//PARAMETERS
//PARAM NAME		RANGE	: DESCRIPTION : DEFAULT : UNITS
//e.g.DATA_WIDTH	[32,16]	: width of the DATA : 32:
//-----------------------------------------------------------------------------
//REUSE ISSUES
//Reset Strategy	:
//Clock Domains		:
//Critical Timing	:
//Test Features		:
//Asynchronous I/F	:
//Scan Methodology	:
//Instantiations	:
//Synthesizable (y/n)	:
//Other			:
//-FHDR------------------------------------------------------------------------
 
#ifndef SPW_TX_SEND
#define SPW_TX_SEND
 
class SPW_TX_SEND_DATA;
 
SC_MODULE(SPW_TX_SEND_DATA)
{
	sc_in<bool> CLOCK_SEND_DATA;
	sc_in<bool> RESET_SEND_DATA;
	sc_in<bool> E_SEND_DATA;
 
	sc_out<bool> TICKIN_TX_SEND_DATA;
	sc_out<sc_uint<8> > TIMEIN_CONTROL_FLAG_TX_SEND_DATA;
 
	sc_out<bool> TXWRITE_TX_SEND_DATA;
	sc_out<sc_uint<9> > TXDATA_FLAGCTRL_TX_SEND_DATA;
 
	sc_in<bool> READY_TX_SEND_DATA;
	sc_in<bool> READY_TICK_DATA;
 
	sc_uint<9> data_send;
 
	int a = 0;
	int c = 0;
 
	void SEND_DATA()
	{
		if(!RESET_SEND_DATA)
		{
			TXWRITE_TX_SEND_DATA = false;
			a=0;
		}
		else
		{
			if(E_SEND_DATA && data_generated_sc.size() > 0)
			{
 
				if(a < data_generated_sc.size()-(unsigned int)1)
				{
					data_send = data_generated_sc[a];
					if(!READY_TX_SEND_DATA)
					{
						TXWRITE_TX_SEND_DATA = true;
					}else
					{
						TXWRITE_TX_SEND_DATA = false;
						TXDATA_FLAGCTRL_TX_SEND_DATA= data_send;
					}
				}
				//cout << TXDATA_FLAGCTRL_TX_SEND_DATA.read().to_string(SC_HEX) << " " << READY_TX_SEND_DATA << " " << TXWRITE_TX_SEND_DATA << endl;
 
			}
 
		}
	}
 
 
	void INCREMMENT_DATA()
	{
		if(a < data_generated_sc.size()-(unsigned int)1)
			a++;
		else
			a=0;
	}
 
	void SEND_TIME_CODE()
	{
		if(!RESET_SEND_DATA)
		{
			TICKIN_TX_SEND_DATA = false;
			TIMEIN_CONTROL_FLAG_TX_SEND_DATA = 0;
			c=0;
		}
		else
		{
			if(start_tick_data)
			{
				if( c < 256)
				{
 
					if(!READY_TICK_DATA)
					{
						TICKIN_TX_SEND_DATA = true;
					}
					else
					{
						TICKIN_TX_SEND_DATA = false;
						c++;
						TIMEIN_CONTROL_FLAG_TX_SEND_DATA = TIMEIN_CONTROL_FLAG_TX_SEND_DATA.read() +1;
					}
				}
				else
				{
					c=0;
					TIMEIN_CONTROL_FLAG_TX_SEND_DATA = 0;
				}
			}
		}
	}
	SC_CTOR(SPW_TX_SEND_DATA)
	{
		SC_METHOD(SEND_DATA);
		sensitive << CLOCK_SEND_DATA;
		SC_METHOD(INCREMMENT_DATA);
		sensitive << READY_TX_SEND_DATA.pos();
		SC_METHOD(SEND_TIME_CODE);
		sensitive << CLOCK_SEND_DATA.pos();
	}
};
#endif
 

Go to most recent revision | 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.