#ifndef _GpuH_
#define _GpuH_
#include "cb_base.h"
#include "cb_shorthand.h"
#include "interconnect.h"
#include "dpu_control.h"
#include "data_exchange.h"
#include "gpuconn.h"
#include "sn74cbtlv1g125.h"
#include "standardheaders.h"
class CB_GPU_Clocks : public TBundle {
public:
port CLKIN;
port RCLK;
port SCLK;
port DC_CLK;
port DX_CLK;
virtual void Register() {
reg( CLKIN );
reg( RCLK );
reg( SCLK );
reg( DC_CLK );
reg( DX_CLK );
}
};
class CM_GPU : public TModule {
protected:
CM_GPU(){};
public:
CB_GPU_Clocks Clocks;
CB_Emulator Emulator;
port DSP_VCC;
port DSP_VB;
port DSP_VA;
port GND;
CP_GPU_CONN Conn;
CP_SN74CBTLV1G125DBV SwitchEMU;
CP_R4_7K PulldownPRESENT;
CP_R4_7K PullupFINIT_N;
CP_R4_7K PullupEFINIT_N;
CP_R360 PullupVREF;
CP_R360 PulldownVREF;
enum { vc_cdc_count = 4,
vb_cdc_count = 4,
va_cdc_count = 4,
vc_tdc_count = 1,
vb_tdc_count = 1,
va_tdc_count = 1 };
CP_CDC_POS VC_CDC[ vc_cdc_count ];
CP_CDC_POS VB_CDC[ vb_cdc_count ];
CP_CDC_POS VA_CDC[ va_cdc_count ];
CP_TDC_POS VC_TDC[ vc_tdc_count ];
CP_TDC_POS VB_TDC[ vb_tdc_count ];
CP_TDC_POS VA_TDC[ va_tdc_count ];
virtual void Register() {
reg( Clocks );
reg( Emulator );
reg( DSP_VCC );
reg( DSP_VB );
reg( DSP_VA );
reg( GND );
reg( Conn );
reg( SwitchEMU );
reg( PulldownPRESENT );
reg( PullupFINIT_N );
reg( PullupEFINIT_N );
reg( PullupVREF );
reg( PulldownVREF );
rega( VC_CDC, vc_cdc_count );
rega( VB_CDC, vb_cdc_count );
rega( VA_CDC, va_cdc_count );
rega( VC_TDC, vc_tdc_count );
rega( VB_TDC, vb_tdc_count );
rega( VA_TDC, va_tdc_count );
}
virtual void Connect() {
wire( Emulator, Conn );
Clocks.CLKIN << Conn.CLKIN;
Clocks.RCLK << Conn.RCLK << Conn.EGCK0;
Clocks.SCLK << Conn.SCLK;
Clocks.DC_CLK << Conn.XCLKIN;
Clocks.DX_CLK << Conn.EGCK1;
wireall( DSP_VCC, "VCC" );
DSP_VB << Conn.VCCINT;
DSP_VA << Conn.VCORE;
wireall( GND );
for ( int i = 0; i < vc_cdc_count; ++ i ) DSP_VCC << VC_CDC[ i ].POS;
for ( int i = 0; i < vb_cdc_count; ++ i ) DSP_VB << VB_CDC[ i ].POS;
for ( int i = 0; i < va_cdc_count; ++ i ) DSP_VA << VA_CDC[ i ].POS;
for ( int i = 0; i < vc_tdc_count; ++ i ) DSP_VCC << VC_TDC[ i ].POS;
for ( int i = 0; i < vb_tdc_count; ++ i ) DSP_VB << VB_TDC[ i ].POS;
for ( int i = 0; i < va_tdc_count; ++ i ) DSP_VA << VA_TDC[ i ].POS;
"VREF" << Conn.VREF;
DSP_VCC ^ PullupVREF ^ "VREF" ^ PulldownVREF ^ GND;
"/NC" << Conn.FM0;
"/NC" << Conn.FM1;
GND << Conn.FM2;
"PRESENT" << Conn.PRESENT << SwitchEMU.OE_N ^ PulldownPRESENT ^ GND;
Conn.TDO << SwitchEMU.A;
Conn.TDI << SwitchEMU.B;
"FINIT_N" << Conn.FINIT_N ^ PullupFINIT_N ^ DSP_VCC;
"EFINIT_N" << Conn.EFINIT_N ^ PullupEFINIT_N ^ DSP_VCC;
"/NC" << Conn.NC;
"/NC" << Conn.FDOUT;
"/NC" << Conn.EFDOUT;
"/NC" << Conn.CE3_N;
}
};
class CM_HPU : public CM_GPU {
public:
CB_CONF2 CONF;
CB_JTAG JTAG;
port GEN;
port EGEN;
port PRESENT;
port RESET_N;
port FINIT_N;
port EFINIT_N;
port FDONE;
port EFDONE;
port AOE_N;
port ARE_N;
port AWE_N;
port ARDY;
port CE0_N;
port CE1_N;
port CE2_N;
port DX0;
port CLKX0;
port CLKR0;
port FSX0;
CP_R1K PullupRESET_N;
virtual void Register() {
CM_GPU::Register();
reg( CONF );
reg( JTAG );
regb( GEN, 76, 0 );
regb( EGEN, 74, 0 );
reg( PRESENT );
reg( RESET_N );
reg( FINIT_N );
reg( EFINIT_N );
reg( FDONE );
reg( EFDONE );
reg( AOE_N );
reg( ARE_N );
reg( AWE_N );
reg( ARDY );
reg( CE0_N );
reg( CE1_N );
reg( CE2_N );
reg( DX0 );
reg( CLKX0 );
reg( CLKR0 );
reg( FSX0 );
reg( PullupRESET_N );
}
virtual void Connect() {
CM_GPU::Connect();
CONF.CCLK << Conn.FCCLK;
CONF.DIN << Conn.FDIN;
CONF.PROGRAM0_N << Conn.FPROGRAM_N;
CONF.PROGRAM1_N << Conn.EFPROGRAM_N;
GEN << Conn.GEN;
EGEN << Conn.EGEN;
JTAG.TCK << Conn.FTCK;
JTAG.TMS << Conn.FTMS;
JTAG.TDI << Conn.FTDI;
JTAG.TDO << Conn.FTDO;
RESET_N ^ PullupRESET_N ^ DSP_VCC;
wire( PRESENT );
wire( RESET_N );
wire( FINIT_N );
wire( EFINIT_N );
wire( FDONE );
wire( EFDONE );
wire( AOE_N );
wire( ARE_N );
wire( AWE_N );
wire( ARDY );
wire( CE0_N );
wire( CE1_N );
wire( CE2_N );
wire( DX0 );
wire( CLKX0 );
wire( CLKR0 );
wire( FSX0 );
"/NC" << Conn.DR0;
"/NC" << Conn.CLKS0;
"/NC" << Conn.FSR0;
}
};
class CM_DPU : public CM_GPU {
public:
CB_Half_DC DC;
CB_Half_DX DX;
CB_CONF2 CONF;
port IC_DPU;
port IC_BUS;
port STRAP;
CP_R1K PulldownRESET_N;
virtual void Register() {
CM_GPU::Register();
reg( DC );
reg( DX );
reg( CONF );
regb( IC_DPU, 24, 0 );
regb( IC_BUS, 5, 0 );
regb( STRAP, 2, 0 );
reg( PulldownRESET_N );
}
virtual void Connect() {
CM_GPU::Connect();
CONF.CCLK << Conn.FCCLK;
CONF.DIN << Conn.FDIN;
CONF.PROGRAM0_N << Conn.FPROGRAM_N;
CONF.PROGRAM1_N << Conn.EFPROGRAM_N;
GND ^ PulldownRESET_N ^ "RESET_N" << Conn.RESET_N;
STRAP << Conn.GEN( 70, 68 );
IC_DPU << Conn.GEN( 67, 43 );
DC.DCC << Conn.GEN( 42, 32 );
DC.DCD << Conn.GEN( 31, 0 );
DX.DXD << Conn.EGEN( 31, 0 );
DX.DXC << Conn.EGEN( 41, 32 );
IC_BUS << Conn.EGEN( 47, 42 );
merge( "/NC", Conn.GEN( 76, 71 ) );
merge( "/NC", Conn.EGEN( 74, 48 ) );
"/NC" << Conn.FTCK;
"/NC" << Conn.FTMS;
"/NC" << Conn.FTDI;
"/NC" << Conn.FTDO;
"/NC" << Conn.FDONE;
"/NC" << Conn.EFDONE;
"/NC" << Conn.CE0_N;
"/NC" << Conn.CE1_N;
"/NC" << Conn.CE2_N;
"/NC" << Conn.CE3_N;
"/NC" << Conn.AWE_N;
"/NC" << Conn.ARE_N;
"/NC" << Conn.AOE_N;
"/NC" << Conn.ARDY;
"/NC" << Conn.DX0;
"/NC" << Conn.DR0;
"/NC" << Conn.CLKX0;
"/NC" << Conn.CLKR0;
"/NC" << Conn.CLKS0;
"/NC" << Conn.FSX0;
"/NC" << Conn.FSR0;
}
};
#endif