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

Subversion Repositories spacewiresystemc

[/] [spacewiresystemc/] [trunk/] [systemC/] [main.cc] - Diff between revs 29 and 40

Only display areas with differences | Details | Blame | View Log

Rev 29 Rev 40
//+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------------------------------------------------------------------------
 
#include <systemc.h>
#include <systemc.h>
#include <stdio.h>
#include <stdio.h>
#include <vector>
#include <vector>
#include <string>
#include <string>
#include <stdlib.h> 
#include <stdlib.h> 
#include <gtkmm.h>
#include <gtkmm.h>
#include <random>
#include <random>
#include <boost/thread.hpp>
#include <boost/thread.hpp>
 
 
using namespace std;
using namespace std;
using namespace Gtk;
using namespace Gtk;
using namespace boost;
using namespace boost;
 
 
#include "../gladicapi/data_recorder.h"
#include "../gladicapi/data_recorder.h"
#include "../gladicapi/data_check.h"
#include "../gladicapi/data_check.h"
 
 
bool enable_null;
 
bool enable_fct;
 
bool enable_time_code;
 
bool enable_n_char;
 
 
 
bool EEP_EOP;
bool EEP_EOP;
 
 
unsigned int finish = 0;
unsigned int finish = 0;
bool link_start = false;
bool link_start = false;
bool link_disable = false;
bool link_disable = false;
bool auto_start = false;
bool auto_start = false;
 
 
//systemc and verilog
//systemc and verilog
bool global_reset = false;
bool global_reset = false;
 
 
//verilog variables
//verilog variables
bool verilog_link_start = false;
bool verilog_link_start = false;
bool verilog_link_disable = false;
bool verilog_link_disable = false;
bool verilog_auto_start = false;
bool verilog_auto_start = false;
int frquency_nano_second = 500;
int frquency_nano_second = 500;
 
 
vector<string> data_col_store;
vector<string> data_col_store;
data_recorder *REC_TX_SPW;
data_recorder *REC_TX_SPW;
data_check    *COMPARE_SPW;
data_check    *COMPARE_SPW;
 
 
vector<string> data_col_store0;
vector<string> data_col_store0;
data_recorder *REC_TX_SPWSC;
data_recorder *REC_TX_SPWSC;
data_check    *COMPARE_SPW_RX;
data_check    *COMPARE_SPW_RX;
 
 
unsigned long int a = 0;
unsigned long int a = 0;
int clock_systemc   = 2;
int clock_systemc   = 2;
 
 
//send data systemC
//send data systemC
 
 
bool start_send_data_verilog  = false;
bool start_send_data_verilog  = false;
bool enable_time_code_verilog = false;
bool enable_time_code_verilog = false;
 
 
bool start_send_data = false;
bool start_send_data = false;
bool start_tick_data = false;
bool start_tick_data = false;
 
 
vector<sc_uint<9> > data_generated_sc;
vector<sc_uint<9> > data_generated_sc;
sc_uint<9> intermediate_systemc;
sc_uint<9> intermediate_systemc;
sc_uint<9> intermediate_sc;
sc_uint<9> intermediate_sc;
unsigned int data_iteration_sc_aux = 0;
unsigned int data_iteration_sc_aux = 0;
unsigned int data_iteration_sc = 0;
unsigned int data_iteration_sc = 0;
 
 
vector<sc_uint<9> > data_generated_verilog;
vector<sc_uint<9> > data_generated_verilog;
sc_uint<9> intermediate;
sc_uint<9> intermediate;
sc_uint<9> intermediate_verilog;
sc_uint<9> intermediate_verilog;
 
 
unsigned int data_iteration = 0;
unsigned int data_iteration = 0;
unsigned int data_iteration_vlog = 0;
unsigned int data_iteration_vlog = 0;
sc_uint<9> intermediate_data;
sc_uint<9> intermediate_data;
 
 
 
 
 
void data_rx_sc_o(unsigned int type_char, sc_uint<4> control, sc_uint<4> last_control_sys , sc_uint<10> data , sc_uint<10> timecode_sys);
 
 
#include "top_spw.h"
#include "top_spw.h"
 
 
//Data generation
//Data generation
unsigned long int max_data = 100;
unsigned long int max_data = 255;
 
 
std::random_device rd;
std::random_device rd;
std::uniform_int_distribution<unsigned long int> data_in(0,255);
std::uniform_int_distribution<unsigned long int> data_in(0,255);
std::uniform_int_distribution<unsigned long int> nchar(1,max_data-1);//eop-eep
std::uniform_int_distribution<unsigned long int> nchar(1,max_data);//eop-eep
 
 
class sc_TOP_SPW;
class sc_TOP_SPW;
 
 
SC_MODULE(sc_TOP_SPW)
SC_MODULE(sc_TOP_SPW)
{
{
 
 
        sc_clock CLOCK;
        sc_clock CLOCK;
        sc_signal<bool>  RESET;
        sc_signal<bool>  RESET;
        sc_signal<bool> LINK_START;
        sc_signal<bool> LINK_START;
        sc_signal<bool> LINK_DISABLE;
        sc_signal<bool> LINK_DISABLE;
        sc_signal<bool> AUTO_START;
        sc_signal<bool> AUTO_START;
        sc_signal<sc_uint<4> > FSM_SPW_OUT;
        sc_signal<sc_uint<4> > FSM_SPW_OUT;
        sc_signal<sc_uint<4> > FSM_TX;
        sc_signal<sc_uint<4> > FSM_TX;
 
 
        sc_signal<sc_uint<10> > CLOCK_GEN;
        sc_signal<sc_uint<10> > CLOCK_GEN;
        sc_signal<bool> E_SEND_DATA;
        sc_signal<bool> E_SEND_DATA;
        //sc_signal<bool> TICKIN_TX;
 
        //sc_signal<sc_uint<8> > TIMEIN_CONTROL_FLAG_TX;
 
 
 
        //sc_signal<bool> TXWRITE_TX;
 
        //sc_signal<sc_uint<9> > TXDATA_FLAGCTRL_TX;
 
 
 
        //sc_signal<bool> READY_TX;
 
        //sc_signal<bool> READY_TICK;
 
 
 
        sc_signal<bool> BUFFER_READY;
        sc_signal<bool> BUFFER_READY;
        sc_signal<sc_uint<9> > DATARX_FLAG;
        sc_signal<sc_uint<9> > DATARX_FLAG;
        sc_signal<bool> BUFFER_WRITE;
        sc_signal<bool> BUFFER_WRITE;
 
 
        sc_signal<sc_uint<8> > TIME_OUT;
        sc_signal<sc_uint<8> > TIME_OUT;
        sc_signal<bool> TICK_OUT;
        sc_signal<bool> TICK_OUT;
        sc_signal<bool> CONTROL_FLAG_OUT;
        sc_signal<bool> CONTROL_FLAG_OUT;
 
 
        sc_signal<uint> DOUT;
        sc_signal<uint> DOUT;
        sc_signal<uint> SOUT;
        sc_signal<uint> SOUT;
        sc_signal<uint>  DIN;
        sc_signal<uint>  DIN;
        sc_signal<uint>  SIN;
        sc_signal<uint>  SIN;
 
 
        sc_TOP DUT;
        sc_TOP DUT;
 
 
        SC_CTOR(sc_TOP_SPW) :CLOCK("CLOCK",20,SC_NS),
        SC_CTOR(sc_TOP_SPW) :CLOCK("CLOCK",20,SC_NS),
                           RESET("RESET"),
                           RESET("RESET"),
                           LINK_DISABLE("LINK_DISABLE"),
                           LINK_DISABLE("LINK_DISABLE"),
                           LINK_START("LINK_START"),
                           LINK_START("LINK_START"),
                           AUTO_START("AUTO_START"),
                           AUTO_START("AUTO_START"),
                           FSM_SPW_OUT("FSM_SPW_OUT"),
                           FSM_SPW_OUT("FSM_SPW_OUT"),
                           CLOCK_GEN("CLOCK_GEN"),
                           CLOCK_GEN("CLOCK_GEN"),
                           E_SEND_DATA("E_SEND_DATA"),
                           E_SEND_DATA("E_SEND_DATA"),
                           //TICKIN_TX("TICKIN_TX"),
 
                           //TIMEIN_CONTROL_FLAG_TX("TIMEIN_CONTROL_FLAG_TX"),
 
                           //TXWRITE_TX("TXWRITE_TX"),
 
                           //TXDATA_FLAGCTRL_TX("TXDATA_FLAGCTRL_TX"),
 
 
 
                           //READY_TX("READY_TX"),
 
                          //READY_TICK("READY_TICK"),
 
                           DOUT("DOUT"),
                           DOUT("DOUT"),
                           SOUT("SOUT"),
                           SOUT("SOUT"),
 
 
                           FSM_TX("FSM_TX"),
                           FSM_TX("FSM_TX"),
                           DIN("DIN"),
                           DIN("DIN"),
                           SIN("SIN"),
                           SIN("SIN"),
                           BUFFER_READY("BUFFER_READY"),
                           BUFFER_READY("BUFFER_READY"),
                           DATARX_FLAG("DATARX_FLAG"),
                           DATARX_FLAG("DATARX_FLAG"),
                           BUFFER_WRITE("BUFFER_WRITE"),
                           BUFFER_WRITE("BUFFER_WRITE"),
                           TIME_OUT("TIME_OUT"),
                           TIME_OUT("TIME_OUT"),
                           TICK_OUT("TICK_OUT"),
                           TICK_OUT("TICK_OUT"),
                           CONTROL_FLAG_OUT("CONTROL_FLAG_OUT"),
                           CONTROL_FLAG_OUT("CONTROL_FLAG_OUT"),
 
 
 
 
        DUT("DUT") {
        DUT("DUT") {
        DUT.CLOCK(CLOCK);
        DUT.CLOCK(CLOCK);
        DUT.RESET(RESET);
        DUT.RESET(RESET);
        DUT.LINK_DISABLE(LINK_DISABLE);
        DUT.LINK_DISABLE(LINK_DISABLE);
        DUT.AUTO_START(AUTO_START);
        DUT.AUTO_START(AUTO_START);
        DUT.LINK_START(LINK_START);
        DUT.LINK_START(LINK_START);
        DUT.FSM_SPW_OUT(FSM_SPW_OUT);
        DUT.FSM_SPW_OUT(FSM_SPW_OUT);
        DUT.CLOCK_GEN(CLOCK_GEN);
        DUT.CLOCK_GEN(CLOCK_GEN);
        DUT.E_SEND_DATA(E_SEND_DATA);
        DUT.E_SEND_DATA(E_SEND_DATA);
        //DUT.TICKIN_TX(TICKIN_TX);
 
        //DUT.TIMEIN_CONTROL_FLAG_TX(TIMEIN_CONTROL_FLAG_TX);
 
        //DUT.TXWRITE_TX(TXWRITE_TX);
 
        //DUT.TXDATA_FLAGCTRL_TX(TXDATA_FLAGCTRL_TX);
 
        DUT.FSM_TX(FSM_TX);
        DUT.FSM_TX(FSM_TX);
        //DUT.READY_TX(READY_TX);
 
        //DUT.READY_TICK(READY_TICK);
 
        DUT.DOUT(DOUT);
        DUT.DOUT(DOUT);
        DUT.SOUT(SOUT);
        DUT.SOUT(SOUT);
 
 
        DUT.DIN(DIN);
        DUT.DIN(DIN);
        DUT.SIN(SIN);
        DUT.SIN(SIN);
        DUT.BUFFER_READY(BUFFER_READY);
        DUT.BUFFER_READY(BUFFER_READY);
        DUT.DATARX_FLAG(DATARX_FLAG);
        DUT.DATARX_FLAG(DATARX_FLAG);
        DUT.BUFFER_WRITE(BUFFER_WRITE);
        DUT.BUFFER_WRITE(BUFFER_WRITE);
        DUT.TIME_OUT(TIME_OUT);
        DUT.TIME_OUT(TIME_OUT);
        DUT.TICK_OUT(TICK_OUT);
        DUT.TICK_OUT(TICK_OUT);
        DUT.CONTROL_FLAG_OUT(CONTROL_FLAG_OUT);
        DUT.CONTROL_FLAG_OUT(CONTROL_FLAG_OUT);
 
 
        cout << "SC_CTOR(sc_TOP_SPW)" << endl;
        cout << "SC_CTOR(sc_TOP_SPW)" << endl;
        }
        }
 
 
};
};
 
 
Glib::RefPtr<Gtk::Builder> builder;
Glib::RefPtr<Gtk::Builder> builder;
 
 
Gtk::Window *window;
Gtk::Window *window;
 
 
Gtk::Button *BtnFinsihSimulation;
Gtk::Button *BtnFinsihSimulation;
Gtk::Button *BtnLinkEnable;
Gtk::Button *BtnLinkEnable;
Gtk::Button *BtnLinkDisable;
Gtk::Button *BtnLinkDisable;
Gtk::Button *BtnAutoStart;
Gtk::Button *BtnAutoStart;
Gtk::Button *BtnReset;
Gtk::Button *BtnReset;
 
 
Gtk::Button *BtnSpaceWireVerilog;
Gtk::Button *BtnSpaceWireVerilog;
Gtk::CheckButton *CheckbtnLinkEnable;
Gtk::CheckButton *CheckbtnLinkEnable;
Gtk::CheckButton *CheckbtnAutoStart;
Gtk::CheckButton *CheckbtnAutoStart;
Gtk::CheckButton *CheckbtnLinkDisable;
Gtk::CheckButton *CheckbtnLinkDisable;
 
 
//Execute test
//Execute test
Gtk::Button *BtnSimpleTest;
Gtk::Button *BtnSimpleTest;
Gtk::CheckButton *CheckBtnEop;
Gtk::CheckButton *CheckBtnEop;
Gtk::CheckButton *CheckBtnEep;
Gtk::CheckButton *CheckBtnEep;
Gtk::CheckButton *CheckBtnTimeCode;
Gtk::CheckButton *CheckBtnTimeCode;
 
 
//Generate data
//Generate data
Gtk::Button *BtnGenerationDataVerilog;
Gtk::Button *BtnGenerationDataVerilog;
Gtk::CheckButton *CheckBtnEopGenVerilog;
Gtk::CheckButton *CheckBtnEopGenVerilog;
Gtk::CheckButton *CheckBtnEepGenVerilog;
Gtk::CheckButton *CheckBtnEepGenVerilog;
Gtk::CheckButton *CheckBtnTimeCodeGenVerilog;
Gtk::CheckButton *CheckBtnTimeCodeGenVerilog;
 
 
Gtk::Button *BtnTxFrequency;
Gtk::Button *BtnTxFrequency;
Gtk::Entry  *EntryFrequency;
Gtk::Entry  *EntryFrequency;
 
 
Gtk::Button *BtnChangeFrequencyVerilog;
Gtk::Button *BtnChangeFrequencyVerilog;
Gtk::Entry  *EntryFrequencyVerilog;
Gtk::Entry  *EntryFrequencyVerilog;
 
 
Gtk::Button *BtnSendDataScTx;
Gtk::Button *BtnSendDataScTx;
Gtk::Button *BtnTimeCodeScTx;
Gtk::Button *BtnTimeCodeScTx;
Gtk::Button *BtnGenerateDataSc;
Gtk::Button *BtnGenerateDataSc;
 
 
Gtk::CheckButton *CheckBtnEepGenSystemC;
Gtk::CheckButton *CheckBtnEepGenSystemC;
Gtk::CheckButton *CheckBtnEopGenSystemC;
Gtk::CheckButton *CheckBtnEopGenSystemC;
 
 
 
 
Gtk::Label *lblStatus;
Gtk::Label *lblStatus;
 
 
 
 
sc_TOP_SPW *sn_top;
sc_TOP_SPW *sn_top;
 
 
extern "C" Control_SC* create_object()
extern "C" Control_SC* create_object()
{
{
  return new Control_SC;
  return new Control_SC;
}
}
 
 
extern "C" void destroy_object( Control_SC* object )
extern "C" void destroy_object( Control_SC* object )
{
{
  delete object;
  delete object;
}
}
 
 
/*GTKMM CONTROL*/
/*GTKMM CONTROL*/
void on_BtnFinsihSimulation_clicked()
void on_BtnFinsihSimulation_clicked()
{
{
        cout<< "End Simulation" <<endl;
        cout<< "End Simulation" <<endl;
        Gtk::Main::quit();
        Gtk::Main::quit();
        finish = 1;
        finish = 1;
        REC_TX_SPW->endsimulation();
        REC_TX_SPW->endsimulation();
        REC_TX_SPWSC->endsimulation();
        REC_TX_SPWSC->endsimulation();
}
}
 
 
void on_BtnLinkEnable_clicked()
void on_BtnLinkEnable_clicked()
{
{
        link_start = !link_start;
        link_start = !link_start;
}
}
 
 
void on_BtnLinkDisable_clicked()
void on_BtnLinkDisable_clicked()
{
{
        link_disable = !link_disable;
        link_disable = !link_disable;
}
}
 
 
void on_BtnAutoStart_clicked()
void on_BtnAutoStart_clicked()
{
{
        auto_start = !auto_start;
        auto_start = !auto_start;
}
}
 
 
void on_BtnReset_clicked()
void on_BtnReset_clicked()
{
{
        global_reset = !global_reset;
        global_reset = !global_reset;
}
}
 
 
 
 
void on_BtnSpaceWireVerilog_clicked()
void on_BtnSpaceWireVerilog_clicked()
{
{
 
 
 
 
        if(!CheckbtnLinkEnable->get_active())
        if(!CheckbtnLinkEnable->get_active())
        {
        {
                verilog_link_start = false;
                verilog_link_start = false;
                lblStatus->set_text("LINKENABLE VERILOG IS OFF");
                lblStatus->set_text("LINKENABLE VERILOG IS OFF");
        }
        }
 
 
        if(!CheckbtnAutoStart->get_active())
        if(!CheckbtnAutoStart->get_active())
        {
        {
                verilog_auto_start = false;
                verilog_auto_start = false;
                lblStatus->set_text("AUTOSTART VERILOG IS OFF");
                lblStatus->set_text("AUTOSTART VERILOG IS OFF");
        }
        }
 
 
        if(!CheckbtnLinkDisable->get_active())
        if(!CheckbtnLinkDisable->get_active())
        {
        {
                verilog_link_disable = false;
                verilog_link_disable = false;
                lblStatus->set_text("AUTOSTART VERILOG IS OFF");
                lblStatus->set_text("AUTOSTART VERILOG IS OFF");
        }
        }
 
 
        if(CheckbtnLinkEnable->get_active())
        if(CheckbtnLinkEnable->get_active())
        {
        {
                verilog_link_start = true;
                verilog_link_start = true;
                lblStatus->set_text("LINKENABLE VERILOG IS ON");
                lblStatus->set_text("LINKENABLE VERILOG IS ON");
        }
        }
 
 
        if(CheckbtnAutoStart->get_active())
        if(CheckbtnAutoStart->get_active())
        {
        {
                verilog_auto_start = true;
                verilog_auto_start = true;
                lblStatus->set_text("AUTOSTART VERILOG IS ON");
                lblStatus->set_text("AUTOSTART VERILOG IS ON");
        }
        }
 
 
        if(CheckbtnLinkDisable->get_active())
        if(CheckbtnLinkDisable->get_active())
        {
        {
                verilog_link_disable = true;
                verilog_link_disable = true;
                lblStatus->set_text("LINKDISABLE VERILOG IS ON");
                lblStatus->set_text("LINKDISABLE VERILOG IS ON");
        }
        }
 
 
}
}
 
 
 
 
void on_BtnSimpleTest_clicked()
void on_BtnSimpleTest_clicked()
{
{
 
 
        if(CheckBtnEopGenVerilog->get_active())
        if(CheckBtnEopGenVerilog->get_active())
        {
        {
                start_send_data_verilog = true;
                start_send_data_verilog = true;
        }
        }
        else
        else
        {
        {
                start_send_data_verilog = false;
                start_send_data_verilog = false;
        }
        }
 
 
        if(CheckBtnTimeCodeGenVerilog->get_active())
        if(CheckBtnTimeCodeGenVerilog->get_active())
        {
        {
                enable_time_code_verilog = true;
                enable_time_code_verilog = true;
        }
        }
        else
        else
        {
        {
                enable_time_code_verilog = false;
                enable_time_code_verilog = false;
        }
        }
 
 
        /*
 
        data_generated.clear();
 
        data_iteration=0;
 
        data_iteration_vlog=0;
 
        if(CheckBtnEop->get_active())
 
        {
 
                for(int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
 
                {
 
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
 
                        {
 
                                intermediate(8,8) = 1;
 
                                intermediate(7,0) = 0;
 
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
 
                        {
 
                                intermediate(7,0) = data_in(rd);
 
                                intermediate(8,8) = 0;
 
                        }
 
                        data_generated.push_back(intermediate);
 
                }
 
                start_send_data_verilog = true;
 
        }else if(CheckBtnEep->get_active())
 
        {
 
                for(int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
 
                {
 
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
 
                        {
 
                                intermediate(8,8) = 1;
 
                                intermediate(7,0) = 1;
 
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
 
                        {
 
                                intermediate(7,0) = data_in(rd);
 
                                intermediate(8,8) = 0;
 
                        }
 
                        data_generated.push_back(intermediate);
 
                }
 
                intermediate(7,0) = 1;
 
                intermediate(8,8) = 1;
 
                data_generated[nchar(rd)] = intermediate;
 
                start_send_data_verilog = true;
 
        }
 
 
 
        if(CheckBtnTimeCode->get_active())
 
        {
 
                enable_time_code_verilog = true;
 
        }
 
        */
 
 
 
 
 
}
}
 
 
void on_BtnGenerationDataVerilog_clicked()
void on_BtnGenerationDataVerilog_clicked()
{
{
        data_generated_verilog.clear();
        data_generated_verilog.clear();
        data_iteration=0;
        data_iteration=0;
        data_iteration_vlog=0;
        data_iteration_vlog=0;
        if(CheckBtnEopGenVerilog->get_active())
        if(CheckBtnEopGenVerilog->get_active())
        {
        {
                for(unsigned int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                for(int cnt_max_data = 0; cnt_max_data < max_data;cnt_max_data++)
                {
 
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
 
                        {
                        {
                                intermediate_verilog(8,8) = 1;
                        if(cnt_max_data >= 0 && cnt_max_data < max_data)
                                intermediate_verilog(7,0) = 0;
 
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
 
                        {
                        {
                                intermediate_verilog(7,0) = data_in(rd);
                                intermediate_verilog(7,0) = data_in(rd);
                                intermediate_verilog(8,8) = 0;
                                intermediate_verilog(8,8) = 0;
                        }
 
                        data_generated_verilog.push_back(intermediate_verilog);
                        data_generated_verilog.push_back(intermediate_verilog);
                }
                }
 
                        intermediate_verilog=0;
 
 
 
                }
 
 
 
                intermediate_verilog(8,8) = 1;
 
                intermediate_verilog(7,0) = 0;
 
 
 
                data_generated_verilog.push_back(intermediate_verilog);
 
                intermediate_verilog=0;
        }else if(CheckBtnEepGenVerilog->get_active())
        }else if(CheckBtnEepGenVerilog->get_active())
        {
        {
                for(unsigned int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                for(unsigned int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                {
                {
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
                        {
                        {
                                intermediate_verilog(8,8) = 1;
                                intermediate_verilog(8,8) = 1;
                                intermediate_verilog(7,0) = 1;
                                intermediate_verilog(7,0) = 1;
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
                        {
                        {
                                intermediate_verilog(7,0) = data_in(rd);
                                intermediate_verilog(7,0) = data_in(rd);
                                intermediate_verilog(8,8) = 0;
                                intermediate_verilog(8,8) = 0;
                        }
                        }
 
                        else
 
                        {
 
                                intermediate_verilog(7,0) = data_in(rd);
 
                                intermediate_verilog(8,8) = 0;
 
                        }
                        data_generated_verilog.push_back(intermediate_verilog);
                        data_generated_verilog.push_back(intermediate_verilog);
 
                        intermediate_verilog=0;
                }
                }
                intermediate_verilog(7,0) = 1;
                intermediate_verilog(7,0) = 1;
                intermediate_verilog(8,8) = 1;
                intermediate_verilog(8,8) = 1;
                data_generated_verilog[nchar(rd)] = intermediate_verilog;
                data_generated_verilog[nchar(rd)] = intermediate_verilog;
        }
        }
}
}
 
 
void on_BtnTxFrequency_clicked()
void on_BtnTxFrequency_clicked()
{
{
 
 
        string aux = EntryFrequency->get_text();
        string aux = EntryFrequency->get_text();
        switch(atoi(aux.c_str()))
        switch(atoi(aux.c_str()))
        {
        {
                case 2:
                case 2:
                        sn_top->CLOCK_GEN = 1;
                        sn_top->CLOCK_GEN = 1;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 2MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 2MHz");
                break;
                break;
                case 10:
                case 10:
                        sn_top->CLOCK_GEN = 2;
                        sn_top->CLOCK_GEN = 2;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 10MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 10MHz");
                break;
                break;
                case 20:
                case 20:
                        sn_top->CLOCK_GEN = 4;
                        sn_top->CLOCK_GEN = 4;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 20MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 20MHz");
                break;
                break;
                case 50:
                case 50:
                        sn_top->CLOCK_GEN = 8;
                        sn_top->CLOCK_GEN = 8;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 50MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 50MHz");
                break;
                break;
                case 100:
                case 100:
                        sn_top->CLOCK_GEN = 16;
                        sn_top->CLOCK_GEN = 16;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 100MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 100MHz");
                break;
                break;
                case 150:
                case 150:
                        sn_top->CLOCK_GEN = 32;
                        sn_top->CLOCK_GEN = 32;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 150MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 150MHz");
                break;
                break;
                case 200:
                case 200:
                        sn_top->CLOCK_GEN = 64;
                        sn_top->CLOCK_GEN = 64;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 200MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 200MHz");
                break;
                break;
                case 201:
                case 201:
                        sn_top->CLOCK_GEN = 128;
                        sn_top->CLOCK_GEN = 128;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 201MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 201MHz");
                break;
                break;
                case 250:
                case 250:
                        sn_top->CLOCK_GEN = 256;
                        sn_top->CLOCK_GEN = 256;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 250MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 250MHz");
                break;
                break;
                case 280:
                case 280:
                        sn_top->CLOCK_GEN = 512;
                        sn_top->CLOCK_GEN = 512;
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 280MHz");
                        lblStatus->set_text("TX CLOCK SYSTEMC SET IN 280MHz");
                break;
                break;
        }
        }
 
 
}
}
 
 
void on_BtnTimeCodeScTx_clicked()
void on_BtnTimeCodeScTx_clicked()
{
{
        start_tick_data = !start_tick_data;
        start_tick_data = !start_tick_data;
        if(start_tick_data)
        if(start_tick_data)
        {lblStatus->set_text("TIME CODE ENABLED ON TX SYSTEMC");}
        {lblStatus->set_text("TIME CODE ENABLED ON TX SYSTEMC");}
        else
        else
        {lblStatus->set_text("TIME CODE DISABLED ON TX SYSTEMC");}
        {lblStatus->set_text("TIME CODE DISABLED ON TX SYSTEMC");}
}
}
 
 
void on_BtnSendDataScTx_clicked()
void on_BtnSendDataScTx_clicked()
{
{
        start_send_data = !start_send_data;
        start_send_data = !start_send_data;
        if(start_send_data)
        if(start_send_data)
        {lblStatus->set_text("SEND DATA ENABLED TX SYSTEMC");}
        {lblStatus->set_text("SEND DATA ENABLED TX SYSTEMC");}
        else
        else
        {lblStatus->set_text("SEND DATA DISABLED TX SYSTEMC");}
        {lblStatus->set_text("SEND DATA DISABLED TX SYSTEMC");}
}
}
 
 
void on_BtnGenerateDataSc_clicked()
void on_BtnGenerateDataSc_clicked()
{
{
        data_generated_sc.clear();
        data_generated_sc.clear();
        data_iteration_sc_aux=0;
        data_iteration_sc_aux=0;
        data_iteration_sc=0;
        data_iteration_sc=0;
        if(CheckBtnEopGenSystemC->get_active())
        if(CheckBtnEopGenSystemC->get_active())
        {
        {
                for(unsigned int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                for(int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                {
 
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
 
                        {
                        {
                                intermediate_sc(8,8) = 1;
                        if(cnt_max_data > 0 && cnt_max_data < max_data)
                                intermediate_sc(7,0) = 0;
 
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
 
                        {
                        {
                                intermediate_sc(7,0) = data_in(rd);
                                intermediate_sc(7,0) = data_in(rd);
                                intermediate_sc(8,8) = 0;
                                intermediate_sc(8,8) = 0;
                        }
                        }
                        data_generated_sc.push_back(intermediate_sc);
                        data_generated_sc.push_back(intermediate_sc);
                }
                }
 
 
 
                intermediate_sc(8,8) = 1;
 
                intermediate_sc(7,0) = 0;
 
 
 
                data_generated_sc.push_back(intermediate_verilog);
 
                intermediate_sc=0;
 
 
        }else if(CheckBtnEepGenSystemC->get_active())
        }else if(CheckBtnEepGenSystemC->get_active())
        {
        {
                for(unsigned int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                for(unsigned int cnt_max_data = 0; cnt_max_data <= max_data;cnt_max_data++)
                {
                {
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
                        if(cnt_max_data == 0 || cnt_max_data == max_data)
                        {
                        {
                                intermediate_sc(8,8) = 1;
                                intermediate_sc(8,8) = 1;
                                intermediate_sc(7,0) = 1;
                                intermediate_sc(7,0) = 1;
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
                        }else if(cnt_max_data > 0 && cnt_max_data < max_data)
                        {
                        {
                                intermediate_sc(7,0) = data_in(rd);
                                intermediate_sc(7,0) = data_in(rd);
                                intermediate_sc(8,8) = 0;
                                intermediate_sc(8,8) = 0;
                        }
                        }
                        data_generated_sc.push_back(intermediate_sc);
                        data_generated_sc.push_back(intermediate_sc);
                }
                }
                intermediate_sc(7,0) = 1;
                intermediate_sc(7,0) = 1;
                intermediate_sc(8,8) = 1;
                intermediate_sc(8,8) = 1;
                data_generated_sc[nchar(rd)] = intermediate_sc;
                data_generated_sc[nchar(rd)] = intermediate_sc;
        }
        }
}
}
 
 
 
 
void on_BtnChangeFrequencyVerilog_clicked()
void on_BtnChangeFrequencyVerilog_clicked()
{
{
        string aux = EntryFrequencyVerilog->get_text();
        string aux = EntryFrequencyVerilog->get_text();
 
 
        switch(atoi(aux.c_str()))
        switch(atoi(aux.c_str()))
        {
        {
                case 2:
                case 2:
                        frquency_nano_second = 500;
                        frquency_nano_second = 500;
                break;
                break;
                case 10:
                case 10:
                        frquency_nano_second = 100;
                        frquency_nano_second = 100;
                break;
                break;
                case 20:
                case 20:
                        frquency_nano_second = 50;
                        frquency_nano_second = 50;
                break;
                break;
                case 50:
                case 50:
                        frquency_nano_second = 20;
                        frquency_nano_second = 20;
                break;
                break;
                case 100:
                case 100:
                        frquency_nano_second = 10;
                        frquency_nano_second = 10;
                break;
                break;
                case 150:
                case 150:
                        frquency_nano_second = 7;
                        frquency_nano_second = 7;
                break;
                break;
                case 200:
                case 200:
                        frquency_nano_second = 5;
                        frquency_nano_second = 5;
                break;
                break;
                case 201:
                case 201:
                        frquency_nano_second = 4;
                        frquency_nano_second = 4;
                break;
                break;
                case 250:
                case 250:
                        frquency_nano_second = 4;
                        frquency_nano_second = 4;
                break;
                break;
                case 280:
                case 280:
                        frquency_nano_second = 3;
                        frquency_nano_second = 3;
                break;
                break;
                default:
                default:
                        frquency_nano_second = 500;
                        frquency_nano_second = 500;
                break;
                break;
        }
        }
 
 
}
}
 
 
void thread_gtkmm_run()
void thread_gtkmm_run()
{
{
        //GRAPHICAL INTERFACE
        //GRAPHICAL INTERFACE
        Main Application(true);
        Main Application(true);
        builder = Gtk::Builder::create_from_file("SpaceWrireTestSuit.glade");
        builder = Gtk::Builder::create_from_file("SpaceWrireTestSuit.glade");
 
 
        builder->get_widget("SpaceWireTestStress", window);
        builder->get_widget("SpaceWireTestStress", window);
        builder->get_widget("BtnFinsihSimulation", BtnFinsihSimulation);
        builder->get_widget("BtnFinsihSimulation", BtnFinsihSimulation);
        builder->get_widget("BtnLinkEnable", BtnLinkEnable);
        builder->get_widget("BtnLinkEnable", BtnLinkEnable);
        builder->get_widget("BtnLinkDisable", BtnLinkDisable);
        builder->get_widget("BtnLinkDisable", BtnLinkDisable);
        builder->get_widget("BtnAutoStart", BtnAutoStart);
        builder->get_widget("BtnAutoStart", BtnAutoStart);
        builder->get_widget("BtnReset", BtnReset);
        builder->get_widget("BtnReset", BtnReset);
 
 
        builder->get_widget("BtnSpaceWireVerilog", BtnSpaceWireVerilog);
        builder->get_widget("BtnSpaceWireVerilog", BtnSpaceWireVerilog);
        builder->get_widget("CheckbtnLinkDisable", CheckbtnLinkDisable);
        builder->get_widget("CheckbtnLinkDisable", CheckbtnLinkDisable);
        builder->get_widget("CheckbtnAutoStart", CheckbtnAutoStart);
        builder->get_widget("CheckbtnAutoStart", CheckbtnAutoStart);
        builder->get_widget("CheckbtnLinkEnable", CheckbtnLinkEnable);
        builder->get_widget("CheckbtnLinkEnable", CheckbtnLinkEnable);
 
 
        builder->get_widget("BtnGenerationDataVerilog", BtnGenerationDataVerilog);
        builder->get_widget("BtnGenerationDataVerilog", BtnGenerationDataVerilog);
        builder->get_widget("BtnSimpleTest", BtnSimpleTest);
        builder->get_widget("BtnSimpleTest", BtnSimpleTest);
        builder->get_widget("CheckBtnEopGenVerilog", CheckBtnEopGenVerilog);
        builder->get_widget("CheckBtnEopGenVerilog", CheckBtnEopGenVerilog);
        builder->get_widget("CheckBtnEepGenVerilog", CheckBtnEepGenVerilog);
        builder->get_widget("CheckBtnEepGenVerilog", CheckBtnEepGenVerilog);
        builder->get_widget("CheckBtnTimeCodeGenVerilog", CheckBtnTimeCodeGenVerilog);
        builder->get_widget("CheckBtnTimeCodeGenVerilog", CheckBtnTimeCodeGenVerilog);
 
 
        builder->get_widget("BtnChangeFrequencyVerilog", BtnChangeFrequencyVerilog);
        builder->get_widget("BtnChangeFrequencyVerilog", BtnChangeFrequencyVerilog);
        builder->get_widget("EntryFrequencyVerilog", EntryFrequencyVerilog);
        builder->get_widget("EntryFrequencyVerilog", EntryFrequencyVerilog);
 
 
        builder->get_widget("BtnTxFrequency", BtnTxFrequency);
        builder->get_widget("BtnTxFrequency", BtnTxFrequency);
        builder->get_widget("EntryFrequency", EntryFrequency);
        builder->get_widget("EntryFrequency", EntryFrequency);
 
 
        builder->get_widget("BtnSendDataScTx", BtnSendDataScTx);
        builder->get_widget("BtnSendDataScTx", BtnSendDataScTx);
        builder->get_widget("BtnTimeCodeScTx", BtnTimeCodeScTx);
        builder->get_widget("BtnTimeCodeScTx", BtnTimeCodeScTx);
        builder->get_widget("BtnGenerateDataSc", BtnGenerateDataSc);
        builder->get_widget("BtnGenerateDataSc", BtnGenerateDataSc);
        builder->get_widget("CheckBtnEepGenSystemC", CheckBtnEepGenSystemC);
        builder->get_widget("CheckBtnEepGenSystemC", CheckBtnEepGenSystemC);
        builder->get_widget("CheckBtnEopGenSystemC", CheckBtnEopGenSystemC);
        builder->get_widget("CheckBtnEopGenSystemC", CheckBtnEopGenSystemC);
 
 
        builder->get_widget("lblStatus",lblStatus);
        builder->get_widget("lblStatus",lblStatus);
 
 
        BtnFinsihSimulation->signal_clicked().connect(sigc::ptr_fun(&on_BtnFinsihSimulation_clicked));
        BtnFinsihSimulation->signal_clicked().connect(sigc::ptr_fun(&on_BtnFinsihSimulation_clicked));
        BtnLinkEnable->signal_clicked().connect(sigc::ptr_fun(&on_BtnLinkEnable_clicked));
        BtnLinkEnable->signal_clicked().connect(sigc::ptr_fun(&on_BtnLinkEnable_clicked));
        BtnLinkDisable->signal_clicked().connect(sigc::ptr_fun(&on_BtnLinkDisable_clicked));
        BtnLinkDisable->signal_clicked().connect(sigc::ptr_fun(&on_BtnLinkDisable_clicked));
        BtnAutoStart->signal_clicked().connect(sigc::ptr_fun(&on_BtnAutoStart_clicked));
        BtnAutoStart->signal_clicked().connect(sigc::ptr_fun(&on_BtnAutoStart_clicked));
        BtnReset->signal_clicked().connect(sigc::ptr_fun(&on_BtnReset_clicked));
        BtnReset->signal_clicked().connect(sigc::ptr_fun(&on_BtnReset_clicked));
 
 
        BtnSpaceWireVerilog->signal_clicked().connect(sigc::ptr_fun(&on_BtnSpaceWireVerilog_clicked));
        BtnSpaceWireVerilog->signal_clicked().connect(sigc::ptr_fun(&on_BtnSpaceWireVerilog_clicked));
 
 
        BtnSimpleTest->signal_clicked().connect(sigc::ptr_fun(&on_BtnSimpleTest_clicked));
        BtnSimpleTest->signal_clicked().connect(sigc::ptr_fun(&on_BtnSimpleTest_clicked));
 
 
        BtnChangeFrequencyVerilog->signal_clicked().connect(sigc::ptr_fun(&on_BtnChangeFrequencyVerilog_clicked));
        BtnChangeFrequencyVerilog->signal_clicked().connect(sigc::ptr_fun(&on_BtnChangeFrequencyVerilog_clicked));
 
 
        BtnGenerationDataVerilog->signal_clicked().connect(sigc::ptr_fun(&on_BtnGenerationDataVerilog_clicked));
        BtnGenerationDataVerilog->signal_clicked().connect(sigc::ptr_fun(&on_BtnGenerationDataVerilog_clicked));
 
 
        BtnTxFrequency->signal_clicked().connect(sigc::ptr_fun(&on_BtnTxFrequency_clicked));
        BtnTxFrequency->signal_clicked().connect(sigc::ptr_fun(&on_BtnTxFrequency_clicked));
 
 
        BtnSendDataScTx->signal_clicked().connect(sigc::ptr_fun(&on_BtnSendDataScTx_clicked));
        BtnSendDataScTx->signal_clicked().connect(sigc::ptr_fun(&on_BtnSendDataScTx_clicked));
        BtnTimeCodeScTx->signal_clicked().connect(sigc::ptr_fun(&on_BtnTimeCodeScTx_clicked));
        BtnTimeCodeScTx->signal_clicked().connect(sigc::ptr_fun(&on_BtnTimeCodeScTx_clicked));
        BtnGenerateDataSc->signal_clicked().connect(sigc::ptr_fun(&on_BtnGenerateDataSc_clicked));
        BtnGenerateDataSc->signal_clicked().connect(sigc::ptr_fun(&on_BtnGenerateDataSc_clicked));
 
 
        window->set_title("GLADIC SPACEWIRE TEST TOOL");
        window->set_title("GLADIC SPACEWIRE TEST TOOL");
 
 
        Application.run(*window);
        Application.run(*window);
}
}
 
 
Control_SC::Control_SC()
Control_SC::Control_SC()
{
{
        clock_systemc  = 2;
        clock_systemc  = 2;
        sn_top = new sc_TOP_SPW("sc_TOP_SPW");
        sn_top = new sc_TOP_SPW("sc_TOP_SPW");
        boost::thread workerThreadGTKMM(thread_gtkmm_run);
        boost::thread workerThreadGTKMM(thread_gtkmm_run);
 
 
        data_col_store.push_back("CONTROL TYPE");
        data_col_store.push_back("CONTROL TYPE");
        data_col_store.push_back("NUMBER GENERATED");
        data_col_store.push_back("NUMBER GENERATED");
        data_col_store.push_back("NUMBER RECEIVED");
        data_col_store.push_back("NUMBER RECEIVED");
        data_col_store.push_back("COMPARE");
        data_col_store.push_back("COMPARE");
        data_col_store.push_back("TIME STAMP");
        data_col_store.push_back("TIME STAMP");
        REC_TX_SPW = new data_recorder("test_suit_vlog_sc.html",data_col_store,"test_suit_vlog_sc.html","TX VERILOG 2 RX SYSTEMC");
        REC_TX_SPW = new data_recorder("test_suit_vlog_sc.html",data_col_store,"test_suit_vlog_sc.html","TX VERILOG 2 RX SYSTEMC");
        REC_TX_SPW->initialize();
        REC_TX_SPW->initialize();
        COMPARE_SPW = new data_check();
        COMPARE_SPW = new data_check();
        data_col_store.clear();
        data_col_store.clear();
 
 
        data_col_store0.push_back("CONTROL TYPE");
        data_col_store0.push_back("CONTROL TYPE");
        data_col_store0.push_back("NUMBER GENERATED");
        data_col_store0.push_back("NUMBER GENERATED");
        data_col_store0.push_back("NUMBER RECEIVED");
        data_col_store0.push_back("NUMBER RECEIVED");
        data_col_store0.push_back("COMPARE");
        data_col_store0.push_back("COMPARE");
        data_col_store0.push_back("TIME STAMP");
        data_col_store0.push_back("TIME STAMP");
        REC_TX_SPWSC = new data_recorder("test_suit_sc_vlog.html",data_col_store0,"test_suit_sc_vlog.html","TX SYSTEMC 2 RX VERILOG");
        REC_TX_SPWSC = new data_recorder("test_suit_sc_vlog.html",data_col_store0,"test_suit_sc_vlog.html","TX SYSTEMC 2 RX VERILOG");
        COMPARE_SPW_RX = new data_check();
        COMPARE_SPW_RX = new data_check();
        REC_TX_SPWSC->initialize();
        REC_TX_SPWSC->initialize();
        data_col_store0.clear();
        data_col_store0.clear();
}
}
 
 
void Control_SC::init()
void Control_SC::init()
{
{
 
 
        sn_top->RESET     = true;
        sn_top->RESET     = true;
 
 
        sn_top->LINK_DISABLE  = false;
        sn_top->LINK_DISABLE  = false;
        sn_top->LINK_START    = false;
        sn_top->LINK_START    = false;
        sn_top->AUTO_START = false;
        sn_top->AUTO_START = false;
 
 
        sn_top->E_SEND_DATA = false;
        sn_top->E_SEND_DATA = false;
 
 
        sn_top->CLOCK_GEN = 1;
        sn_top->CLOCK_GEN = 1;
        frquency_nano_second = 500;
        frquency_nano_second = 500;
        //sn_top->TICKIN_TX = false;
 
        //sn_top->TIMEIN_CONTROL_FLAG_TX = 0;
 
 
 
        //sn_top->TXWRITE_TX = false;
 
        //sn_top->TXDATA_FLAGCTRL_TX = 0;
 
}
}
 
 
void autostart()
void autostart()
{
{
        if(auto_start)
        if(auto_start)
        {
        {
                sn_top->AUTO_START = true;
                sn_top->AUTO_START = true;
                //lblStatus->set_text("AUTOSTART ENABLED ON TX SYSTEMC");
                //lblStatus->set_text("AUTOSTART ENABLED ON TX SYSTEMC");
        }
        }
        else
        else
        {
        {
                sn_top->AUTO_START = false;
                sn_top->AUTO_START = false;
                //lblStatus->set_text("AUTOSTART DISABLED ON TX SYSTEMC");
                //lblStatus->set_text("AUTOSTART DISABLED ON TX SYSTEMC");
        }
        }
}
}
 
 
void linkstart()
void linkstart()
{
{
        if(link_start)
        if(link_start)
        {
        {
                sn_top->LINK_START = true;
                sn_top->LINK_START = true;
                //lblStatus->set_text("LINKSTART ENABLED ON TX SYSTEMC");
                //lblStatus->set_text("LINKSTART ENABLED ON TX SYSTEMC");
        }
        }
        else
        else
        {
        {
                sn_top->LINK_START = false;
                sn_top->LINK_START = false;
                //lblStatus->set_text("LINKSTART DISABLED ON TX SYSTEMC");
                //lblStatus->set_text("LINKSTART DISABLED ON TX SYSTEMC");
        }
        }
}
}
 
 
void linkdisable()
void linkdisable()
{
{
        if(link_disable)
        if(link_disable)
        {
        {
                sn_top->LINK_DISABLE = true;
                sn_top->LINK_DISABLE = true;
                //lblStatus->set_text("LINKDISABLE ENABLED ON TX SYSTEMC");
                //lblStatus->set_text("LINKDISABLE ENABLED ON TX SYSTEMC");
        }
        }
        else
        else
        {
        {
                sn_top->LINK_DISABLE = false;
                sn_top->LINK_DISABLE = false;
                //lblStatus->set_text("LINKDISABLE DISABLED ON TX SYSTEMC");
                //lblStatus->set_text("LINKDISABLE DISABLED ON TX SYSTEMC");
        }
        }
}
}
 
 
void send_data_tx_sc()
void send_data_tx_sc()
{
{
        if(start_send_data)
        if(start_send_data)
        {
        {
                sn_top->E_SEND_DATA = true;
                sn_top->E_SEND_DATA = true;
        }
        }
        else
        else
        {
        {
                sn_top->E_SEND_DATA = false;
                sn_top->E_SEND_DATA = false;
        }
        }
 
 
}
}
 
 
void Control_SC::run_sim()
void Control_SC::run_sim()
{
{
 
 
        autostart();
        autostart();
        linkstart();
        linkstart();
        linkdisable();
        linkdisable();
        send_data_tx_sc();
        send_data_tx_sc();
 
 
        sc_start(clock_systemc,SC_NS);
        sc_start(clock_systemc,SC_NS);
 
 
}
}
 
 
/*        END OF SIMULATION      */
/*        END OF SIMULATION      */
void Control_SC::stop_sim()
void Control_SC::stop_sim()
{
{
        sc_stop();
        sc_stop();
}
}
 
 
/*         RESET HIGH           */
/*         RESET HIGH           */
bool Control_SC::reset_set()
bool Control_SC::reset_set()
{
{
 
 
        if(global_reset)
        if(global_reset)
        {
        {
                sn_top->RESET = false;
                sn_top->RESET = false;
        }else
        }else
        {
        {
                sn_top->RESET = true;
                sn_top->RESET = true;
        }
        }
 
 
        return sn_top->RESET;
        return sn_top->RESET;
}
}
 
 
unsigned int Control_SC::get_value_dout()
unsigned int Control_SC::get_value_dout()
{
{
        return sn_top->DOUT.read();
        return sn_top->DOUT.read();
}
}
 
 
unsigned int Control_SC::get_value_sout()
unsigned int Control_SC::get_value_sout()
{
{
        return sn_top->SOUT.read();
        return sn_top->SOUT.read();
}
}
 
 
void Control_SC::set_rx_sin(unsigned int strobe)
void Control_SC::set_rx_sin(unsigned int strobe)
{
{
        sn_top->SIN = strobe;
        sn_top->SIN = strobe;
}
}
 
 
void Control_SC::set_rx_din(unsigned int data)
void Control_SC::set_rx_din(unsigned int data)
{
{
        sn_top->DIN = data;
        sn_top->DIN = data;
}
}
 
 
unsigned int Control_SC::get_spw_fsm()
unsigned int Control_SC::get_spw_fsm()
{
{
        return sn_top->FSM_SPW_OUT.read();
        return sn_top->FSM_SPW_OUT.read();
}
}
 
 
unsigned int  Control_SC::finish_simulation()
unsigned int  Control_SC::finish_simulation()
{
{
        return finish;
        return finish;
}
}
 
 
//verilog variables
//verilog variables
bool Control_SC::verilog_linkenable()
bool Control_SC::verilog_linkenable()
{
{
        return verilog_link_start;
        return verilog_link_start;
}
}
 
 
bool Control_SC::verilog_autostart()
bool Control_SC::verilog_autostart()
{
{
        return verilog_auto_start;
        return verilog_auto_start;
}
}
 
 
bool Control_SC::verilog_linkdisable()
bool Control_SC::verilog_linkdisable()
{
{
        return verilog_link_disable;
        return verilog_link_disable;
}
}
 
 
float Control_SC::verilog_frequency()
float Control_SC::verilog_frequency()
{
{
        return frquency_nano_second;
        return frquency_nano_second;
}
}
 
 
//Test verilog
//Test verilog
bool Control_SC::start_tx_test()
bool Control_SC::start_tx_test()
{
{
        return start_send_data_verilog;
        return start_send_data_verilog;
}
}
 
 
bool Control_SC::enable_time_code_tx_test()
bool Control_SC::enable_time_code_tx_test()
{
{
        return enable_time_code_verilog;
        return enable_time_code_verilog;
}
}
 
 
void Control_SC::end_tx_test()
void Control_SC::end_tx_test()
{
{
        start_send_data_verilog = enable_time_code_verilog = false;
        start_send_data_verilog = enable_time_code_verilog = false;
}
}
 
 
int Control_SC::size_data_test()
int Control_SC::size_data_test_vlog()
 
{
 
        return data_generated_verilog.size();
 
}
 
 
 
int Control_SC::size_data_test_sc()
{
{
        return data_generated_verilog.size()-1;
        return data_generated_sc.size();
}
}
 
 
unsigned int Control_SC::take_data(unsigned int a)
unsigned int Control_SC::take_data(unsigned int a)
{
{
        intermediate = data_generated_verilog[a];
        intermediate = data_generated_verilog[a];
        return intermediate(8,0);
        return intermediate(8,0);
}
}
 
 
void Control_SC::data_o(unsigned int data, unsigned int pos)
void Control_SC::data_o(unsigned int data, unsigned int pos)
{
{
                sc_uint<9> intermediate = data;
                sc_uint<9> intermediate = data;
 
 
                data_col_store0.clear();
                data_col_store0.clear();
                if(data_iteration_sc <= data_generated_sc.size()-1)
                if(data_iteration_sc <= data_generated_sc.size()-1)
                {
                {
                        data_col_store0.push_back("DATA");
                        data_col_store0.push_back("DATA");
 
 
                        intermediate_sc=data_generated_sc[pos];
                        intermediate_sc=data_generated_sc[pos];
                        data_col_store0.push_back(intermediate_sc.to_string(SC_HEX));
                        data_col_store0.push_back(intermediate_sc.to_string(SC_HEX));
 
 
                        data_col_store0.push_back(intermediate.to_string(SC_HEX));
                        data_col_store0.push_back(intermediate.to_string(SC_HEX));
 
 
                        data_col_store0.push_back(" ");
                        data_col_store0.push_back(" ");
                        COMPARE_SPW_RX->compare_test(&data_col_store0);
                        COMPARE_SPW_RX->compare_test(&data_col_store0);
 
 
                        data_col_store0.push_back(sc_time_stamp().to_string());
                        data_col_store0.push_back(sc_time_stamp().to_string());
                        REC_TX_SPWSC->storedata(data_col_store0);
                        REC_TX_SPWSC->storedata(data_col_store0);
                        data_iteration_sc++;
                        data_iteration_sc++;
                }else
                }else
                {
                {
                        data_iteration_sc = 0;
                        data_iteration_sc = 0;
                }
                }
}
}
 
 
 
 
 
void  Control_SC::data_rx_vlog_loopback_o(unsigned int data, unsigned int pos)
 
{
 
 
 
        sc_uint<9> intermediate;
 
 
 
        data_col_store.clear();
 
 
 
        data_col_store.push_back("DATA");
 
        intermediate = data_generated_verilog[pos];
 
        data_col_store.push_back(intermediate.to_string(SC_HEX));
 
 
 
        intermediate = data;
 
        data_col_store.push_back(intermediate(8,0).to_string(SC_HEX));
 
        data_col_store.push_back(" ");
 
        COMPARE_SPW->compare_test(&data_col_store);
 
 
 
        data_col_store.push_back(sc_time_stamp().to_string());
 
        REC_TX_SPW->storedata(data_col_store);
 
}
 
 
 
void data_rx_sc_o(unsigned int type_char, sc_uint<4> control, sc_uint<4> last_control_sys , sc_uint<10> data , sc_uint<10> timecode_sys)
 
{
 
        data_col_store.clear();
 
 
 
        switch(type_char)
 
        {
 
                case 0:
 
                        data_col_store.push_back("NULL");
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(last_control_sys(2,0).to_string(SC_HEX) + control(2,0).to_string());
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                break;
 
                case 1:
 
                        data_col_store.push_back("FCT");
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(last_control_sys(2,0).to_string(SC_HEX) + control(2,0).to_string());
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                break;
 
                case 2:
 
                        data_col_store.push_back("EOP");
 
                        intermediate_data = data_generated_verilog[data_iteration];
 
                        data_col_store.push_back(intermediate_data.to_string(SC_HEX));
 
                        data_col_store.push_back(last_control_sys(2,0).to_string(SC_HEX) + control(2,0).to_string());
 
                        data_col_store.push_back(" ");
 
                        COMPARE_SPW->compare_test(&data_col_store);
 
                        data_iteration++;
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                break;
 
                case 3:
 
                        data_col_store.push_back("EEP");
 
                        intermediate_data = data_generated_verilog[data_iteration];
 
                        data_col_store.push_back(intermediate_data.to_string(SC_HEX));
 
 
 
                        data_col_store.push_back(last_control_sys(2,0).to_string(SC_HEX) + control(2,0).to_string());
 
                        data_col_store.push_back(" ");
 
                        COMPARE_SPW->compare_test(&data_col_store);
 
                        data_iteration++;
 
 
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                break;
 
                case 4:
 
                        data_col_store.push_back("INVALID CONNECTION");
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(last_control_sys(2,0).to_string(SC_HEX) + control(2,0).to_string());
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                break;
 
                case 5:
 
                        data_col_store.push_back("DATA");
 
                        intermediate_data = data_generated_verilog[data_iteration];
 
                        data_col_store.push_back(intermediate_data.to_string(SC_HEX));
 
 
 
                        data_col_store.push_back(data(8,0).to_string(SC_HEX));
 
                        data_col_store.push_back(" ");
 
                        COMPARE_SPW->compare_test(&data_col_store);
 
 
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                        data_iteration++;
 
                break;
 
                case 6:
 
                        data_col_store.push_back("TIMECODE");
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(timecode_sys(7,0).to_string());
 
                        data_col_store.push_back(" - ");
 
                        data_col_store.push_back(sc_time_stamp().to_string());
 
                        REC_TX_SPW->storedata(data_col_store);
 
                break;
 
        }
 
 
 
}
 
 
unsigned int Control_SC::clock_tx()
unsigned int Control_SC::clock_tx()
{
{
        return sn_top->DUT.CLOCK_TX_OUT.read();
        return sn_top->DUT.CLOCK_TX_OUT.read();
}
}
 
 
 
 

powered by: WebSVN 2.1.0

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