#ifndef _TTM_RxTxH_
#define _TTM_RxTxH_
#include "hdmp.h"
class CB_Tx_Bussed : public TBundle {
public:
port TX;
port TXFLAG;
port TXDATA;
port TXCNTL;
port TXFLGENB;
port TXESMPXENB;
port TXDIV0;
port TXDIV1;
virtual void Register() {
regb( TX, 15, 0 );
reg( TXFLAG );
reg( TXDATA );
reg( TXCNTL );
reg( TXFLGENB );
reg( TXESMPXENB );
reg( TXDIV0 );
reg( TXDIV1 );
}
};
class CB_Tx_PtToPt : public TBundle {
public:
port TXLOCKED;
virtual void Register() {
reg( TXLOCKED );
}
};
class CB_Tx_Back : public TBundle {
public:
CB_Tx_Bussed Bussed;
CB_Tx_PtToPt PtToPt;
virtual void Register() {
reg( Bussed );
reg( PtToPt );
}
};
class CM_Wrapped1032 : public TModule {
public:
CB_Tx_Back Back;
port VCC;
port GND;
port TXCLK;
port HSOUT_N;
port HSOUT_P;
CP_HDMP_1032 Tx;
CP_C100NF FilterCap;
enum { vc_cdc_count = 5
+2
+1 };
CP_CDC_POS VC_CDC[ vc_cdc_count ];
CP_CDC_POS VCA1_CDC;
CP_CDC_POS VCA2_CDC;
CP_FERRITE120 VCA1_Ferrite;
CP_FERRITE120 VCA2_Ferrite;
virtual void Register() {
reg( Back );
reg( VCC );
reg( GND );
reg( TXCLK );
reg( HSOUT_N );
reg( HSOUT_P );
reg( Tx );
reg( FilterCap );
rega( VC_CDC, vc_cdc_count );
reg( VCA1_CDC );
reg( VCA2_CDC );
reg( VCA1_Ferrite );
reg( VCA2_Ferrite );
}
virtual void Connect() {
wire( Back, Tx );
Back.Bussed.TXESMPXENB << Tx.ESMPXENB;
Back.PtToPt.TXLOCKED << Tx.LOCKED;
wire( TXCLK );
wire( HSOUT_N );
wire( HSOUT_P );
wireall( GND );
GND << Tx.GND_TTL;
GND << Tx.GND_HS;
GND << Tx.GND_A1;
GND << Tx.GND_A2;
VCC << Tx.VCC;
VCC << Tx.VCC_TTL;
VCC << Tx.VCC_HS;
for ( int i = 0; i < vc_cdc_count; ++ i ) VCC << VC_CDC[ i ].POS;
VCC ^ VCA1_Ferrite ^ "AVCC1" << Tx.VCC_A1 << VCA1_CDC.POS;
VCC ^ VCA2_Ferrite ^ "AVCC2" << Tx.VCC_A2 << VCA2_CDC.POS;
Tx.TXCAP0 << "CAP0" ^ FilterCap ^ "CAP1" << Tx.TXCAP1;
GND << Tx.TCLKENB;
"/NC" << Tx.NC;
}
};
class CB_Rx_Bussed : public TBundle {
public:
port RXFLGENB;
port RXESMPXENB;
port RXDIV0;
port RXDIV1;
virtual void Register() {
reg( RXFLGENB );
reg( RXESMPXENB );
reg( RXDIV0 );
reg( RXDIV1 );
}
};
class CB_Rx_PtToPt : public TBundle {
public:
port RX;
port RXFLAG;
port RXDATA;
port RXERROR;
port RXREADY;
virtual void Register() {
regb( RX, 15, 0 );
reg( RXFLAG );
reg( RXDATA );
reg( RXERROR );
reg( RXREADY );
}
};
class CB_Rx_Back : public TBundle {
public:
CB_Rx_Bussed Bussed;
CB_Rx_PtToPt PtToPt;
virtual void Register() {
reg( Bussed );
reg( PtToPt );
}
};
class CM_Wrapped1034 : public TModule {
public:
CB_Rx_Back Back;
port VCC;
port GND;
port REFCLK;
port HSIN_N;
port HSIN_P;
CP_HDMP_1034 Rx;
CP_C100NF FilterCap;
CP_EXB2HV560JV STermL;
CP_EXB2HV560JV STermH;
CP_EXB2HV560JV STermV;
enum { vc_cdc_count = 3
+5
+1 };
CP_CDC_POS VC_CDC[ vc_cdc_count ];
CP_CDC_POS VCA_CDC;
CP_FERRITE120 VCA_Ferrite;
virtual void Register() {
reg( Back );
reg( VCC );
reg( GND );
reg( REFCLK );
reg( HSIN_N );
reg( HSIN_P );
reg( Rx );
reg( FilterCap );
reg( STermL );
reg( STermH );
reg( STermV );
rega( VC_CDC, vc_cdc_count );
reg( VCA_CDC );
reg( VCA_Ferrite );
}
virtual void Connect() {
wire( Back.Bussed, Rx );
Back.Bussed.RXESMPXENB << Rx.ESMPXENB;
"LOC_RX" << Rx.RX;
Back.PtToPt.RX( 7, 0) << STermL.B; STermL.A << Rx.RX( 7, 0 );
Back.PtToPt.RX( 15, 8) << STermH.B; STermH.A << Rx.RX( 15, 8 );
int i = 0;
Back.PtToPt.RXREADY << STermV.B( i ); STermV.A( i++ ) << Rx.RXREADY << "LOC_RXREADY";
"/NC" << STermV.B( i ); STermV.A( i++ ) << "/NC";
Back.PtToPt.RXERROR << STermV.B( i ); STermV.A( i++ ) << Rx.RXERROR << "LOC_RXERROR";
"/NC" << STermV.B( i ); STermV.A( i++ ) << "/NC";
Back.PtToPt.RXFLAG << STermV.B( i ); STermV.A( i++ ) << Rx.RXFLAG << "LOC_RXFLAG";
"/NC" << STermV.B( i ); STermV.A( i++ ) << "/NC";
Back.PtToPt.RXDATA << STermV.B( i ); STermV.A( i++ ) << Rx.RXDATA << "LOC_RXDATA";
"/NC" << STermV.B( i ); STermV.A( i++ ) << "/NC";
wire( REFCLK );
wire( HSIN_N );
wire( HSIN_P );
wireall( GND );
GND << Rx.GND_TTL;
GND << Rx.GND_HS;
GND << Rx.GND_A;
VCC << Rx.VCC;
VCC << Rx.VCC_TTL;
VCC << Rx.VCC_HS;
for ( int i = 0; i < vc_cdc_count; ++ i ) VCC << VC_CDC[ i ].POS;
VCC ^ VCA_Ferrite ^ "AVCC" << Rx.VCC_A << VCA_CDC.POS;
Rx.RXCAP0 << "CAP0" ^ FilterCap ^ "CAP1" << Rx.RXCAP1;
VCC << Rx.TSTCLK;
VCC << Rx.RESET_N;
GND << Rx.WSYNCDSB;
GND << Rx.PASSENB;
"/NC" << Rx.SRQIN;
"/NC" << Rx.SRQOUT;
"/NC" << Rx.SHFIN;
"/NC" << Rx.SHFOUT;
"/NC" << Rx.RXDSLIP;
"/NC" << Rx.RXCLK0;
"/NC" << Rx.RXCLK1;
"/NC" << Rx.RXCNTL;
"/NC" << Rx.NC;
}
};
#endif