#ifndef _JTAGH_
#define _JTAGH_
#include "std_drivers.h"
#include "sn74lvth162245.h"
#include "sn74cbtlv3253.h"
#include "sn74cbtlv1g125.h"
#include "headers.h"
#include "monopins.h"
class CB_JTAG : public TBundle {
public:
port TMS;
port TDI;
port TDO;
port TCK;
virtual void Register() {
reg( TMS );
reg( TDI );
reg( TDO );
reg( TCK );
}
};
class CB_CONF : public TBundle {
public:
port CCLK;
port DIN;
port PROGRAM_N;
virtual void Register() {
reg( CCLK );
reg( DIN );
reg( PROGRAM_N );
}
};
class CB_CONF2 : public TBundle {
public:
port CCLK;
port DIN;
port PROGRAM0_N;
port PROGRAM1_N;
virtual void Register() {
reg( CCLK );
reg( DIN );
reg( PROGRAM0_N );
reg( PROGRAM1_N );
}
};
class CB_JTAG_CONF : public CB_JTAG {
public:
port CCLK;
port DIN;
port PROGRAM_N;
virtual void Register() {
CB_JTAG::Register();
reg( CCLK );
reg( DIN );
reg( PROGRAM_N );
}
};
class CB_JTAG_CONF2 : public CB_JTAG {
public:
port CCLK;
port DIN;
port PROGRAM0_N;
port PROGRAM1_N;
virtual void Register() {
CB_JTAG::Register();
reg( CCLK );
reg( DIN );
reg( PROGRAM0_N );
reg( PROGRAM1_N );
}
};
class CB_Emulator : public TBundle {
public:
port TMS;
port TDI;
port TDO;
port TCK;
port TRST_N;
port EMU0;
port EMU1;
virtual void Register() {
reg( TMS );
reg( TDI );
reg( TDO );
reg( TCK );
reg( TRST_N );
reg( EMU0 );
reg( EMU1 );
}
};
class CB_Front_JT : public TBundle {
public:
CB_JTAG JTAG;
CB_Emulator Emulator;
port TCK_RET;
port JTAG_DIPSW;
virtual void Register() {
reg( JTAG );
reg( Emulator );
reg( TCK_RET );
regb( JTAG_DIPSW, 2, 0 );
}
};
class CB_Back_JT : public TBundle {
public:
CB_JTAG_CONF2 JTAG_CONF;
virtual void Register() {
reg( JTAG_CONF );
}
};
class CB_CG_JT : public TBundle {
public:
CB_JTAG NoisyPLD;
CB_JTAG QuietPLD;
port PROGRAM_N;
virtual void Register() {
reg( NoisyPLD );
reg( QuietPLD );
regb( PROGRAM_N, 36, 0 );
}
};
class CB_DC_JT : public TBundle {
public:
CB_JTAG_CONF DC_FPGA;
virtual void Register() {
reg( DC_FPGA );
}
};
class CB_DX_JT : public TBundle {
public:
CB_JTAG_CONF DXF_FPGA_A;
CB_JTAG_CONF DXF_FPGA_B;
CB_JTAG_CONF DXB_FPGA;
virtual void Register() {
reg( DXF_FPGA_A );
reg( DXF_FPGA_B );
reg( DXB_FPGA );
}
};
class CB_Half_JT : public TBundle {
public:
CB_Emulator EMU[ DPU_HalfCount ];
CB_CONF2 CONF[ DPU_HalfCount ];
virtual void Register() {
rega( EMU, DPU_HalfCount );
rega( CONF, DPU_HalfCount );
}
};
class CB_Host_JT : public TBundle {
public:
port CCLK;
port DIN;
CB_Emulator HPU_DSP;
CB_JTAG HPU_FPGA;
CB_JTAG HostPLD;
virtual void Register() {
reg( CCLK );
reg( DIN );
reg( HPU_DSP );
reg( HPU_FPGA );
reg( HostPLD );
}
};
class CB_IC_JT : public TBundle {
public:
CB_JTAG_CONF BPI_FPGA[ 6 ];
CB_JTAG_CONF TTC_FPGA;
virtual void Register() {
rega( BPI_FPGA, 6 );
reg( TTC_FPGA );
}
};
class CB_VME_JT : public TBundle {
public:
CB_JTAG VMEC_PLD;
CB_JTAG VMED_PLD;
CB_JTAG FlashPLD;
port CCLK;
port DIN;
virtual void Register() {
reg( VMEC_PLD );
reg( VMED_PLD );
reg( FlashPLD );
reg( CCLK );
reg( DIN );
}
};
class CM_JTAG : public TModule {
public:
CB_Front_JT FP;
CB_Back_JT BK;
CB_CG_JT CG;
CB_DC_JT DC;
CB_DX_JT DX;
CB_Half_JT A;
CB_Half_JT B;
CB_Host_JT HO;
CB_IC_JT IC;
CB_VME_JT VME;
port MB_VCC;
port DSP_VCC;
port GND;
CP_SN74LVTH162245 Buf_Emulator;
CP_SN74LVTH162245 Buf_JTAG;
CM_STD_CDC319 Drv_ETCK;
CM_STD_CDC319 Drv_JTCK;
CM_STD_CDC319 Drv_CCLK;
CP_R30 STerm_ETCK;
CP_R30 STerm_JTCK;
CP_R4_7K Pull_E[ 6 ];
CP_R4_7K Pull_J[ 5 ];
CP_SN74CBTLV3253 Mux_JTMS;
CP_SN74CBTLV3253 Mux_JTDO;
CP_HEADER2 MB_JTAG_Short;
CP_R30 STerm_CCLK;
enum { mono_count = 19 };
CP_MONOPIN25 Mono[ mono_count ];
enum { e_cdc_count = 8,
j_cdc_count = 14,
e_tdc_count = 2,
j_tdc_count = 1 };
CP_CDC_POS E_CDC[ e_cdc_count ];
CP_CDC_POS J_CDC[ j_cdc_count ];
CP_TDC_POS E_TDC[ e_tdc_count ];
CP_TDC_POS J_TDC[ j_tdc_count ];
virtual void Register() {
reg( FP );
reg( BK );
reg( CG );
reg( DC );
reg( DX );
reg( A );
reg( B );
reg( HO );
reg( IC );
reg( VME );
reg( MB_VCC );
reg( DSP_VCC );
reg( GND );
reg( Buf_Emulator );
reg( Buf_JTAG );
reg( Drv_ETCK );
reg( Drv_JTCK );
reg( Drv_CCLK );
reg( STerm_ETCK );
reg( STerm_JTCK );
rega( Pull_E, 6 );
rega( Pull_J, 5 );
reg( Mux_JTMS );
reg( Mux_JTDO );
reg( MB_JTAG_Short );
reg( STerm_CCLK );
rega( Mono, mono_count );
rega( E_CDC, e_cdc_count );
rega( J_CDC, j_cdc_count );
rega( E_TDC, e_tdc_count );
rega( J_TDC, j_tdc_count );
}
virtual void Connect() {
int mp = 0;
wireall( GND );
for ( int i = 0; i < e_cdc_count; ++ i ) DSP_VCC << E_CDC[ i ].POS;
for ( int i = 0; i < j_cdc_count; ++ i ) MB_VCC << J_CDC[ i ].POS;
for ( int i = 0; i < e_tdc_count; ++ i ) DSP_VCC << E_TDC[ i ].POS;
for ( int i = 0; i < j_tdc_count; ++ i ) MB_VCC << J_TDC[ i ].POS;
GND << Buf_JTAG.OE_N;
GND << Buf_Emulator.OE_N;
GND << Buf_JTAG.DIR;
GND << Buf_Emulator.DIR;
"/NC" << Drv_ETCK.OE;
"/NC" << Drv_ETCK.SCLOCK;
"/NC" << Drv_ETCK.SDATA;
"/NC" << Drv_JTCK.SCLOCK;
"/NC" << Drv_JTCK.SDATA;
"/NC" << Drv_CCLK.OE;
"/NC" << Drv_CCLK.SCLOCK;
"/NC" << Drv_CCLK.SDATA;
DSP_VCC << Buf_Emulator.VCC;
DSP_VCC << Drv_ETCK.VCC;
"RAW_ETMS" << FP.Emulator.TMS ^ Pull_E[ 0 ] ^ DSP_VCC;
merge( "RAW_ETMS", Buf_Emulator.B( 6, 0 ) );
"ETMS" << Buf_Emulator.A( 6, 0 );
"/NC" << Buf_Emulator.A( 7 )
<< Buf_Emulator.B( 7 );
FP.Emulator.TCK << Buf_Emulator.B( 8 ) ^ Pull_E[ 1 ] ^ DSP_VCC;
Buf_Emulator.A( 8 ) << "BUFO_ETCK"
^ STerm_ETCK ^ "DRIVIN_ETCK"
<< Drv_ETCK.IN;
"ETCK" << Drv_ETCK.OUT( 8, 0 );
"/NC" << Drv_ETCK.OUT( 9 );
Drv_ETCK.OUT( 8 ) << Buf_Emulator.B( 9 );
FP.TCK_RET << Buf_Emulator.A( 9 );
FP.Emulator.TDI << Buf_Emulator.B( 10 ) ^ Pull_E[ 2 ] ^ DSP_VCC;
"ETDI" << Buf_Emulator.A( 10 );
FP.Emulator.TDO << Buf_Emulator.A( 11 );
"ETDO" << Buf_Emulator.B( 11 );
FP.Emulator.TRST_N << Buf_Emulator.B( 12 ) ^ Pull_E[ 3 ] ^ GND;
"TRST_N" << Buf_Emulator.A( 12 );
FP.Emulator.EMU0 << Buf_Emulator.A( 13 );
FP.Emulator.EMU1 << Buf_Emulator.A( 14 );
"EMU0" << Buf_Emulator.B( 13 ) ^ Pull_E[ 4 ] ^ DSP_VCC;
"EMU1" << Buf_Emulator.B( 14 ) ^ Pull_E[ 5 ] ^ DSP_VCC;
"/NC" << Buf_Emulator.A( 15 )
<< Buf_Emulator.B( 15 );
"TRST_N" << HO.HPU_DSP.TRST_N;
"EMU0" << HO.HPU_DSP.EMU0;
"EMU1" << HO.HPU_DSP.EMU1;
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
"TRST_N" << A.EMU[ i ].TRST_N;
"TRST_N" << B.EMU[ i ].TRST_N;
"EMU0" << A.EMU[ i ].EMU0;
"EMU0" << B.EMU[ i ].EMU0;
"EMU1" << A.EMU[ i ].EMU1;
"EMU1" << B.EMU[ i ].EMU1;
}
int ck = 0;
int ms = 0;
Drv_ETCK.OUT( ck++ ) << HO.HPU_DSP.TCK;
Buf_Emulator.A( ms++ ) << HO.HPU_DSP.TMS;
Drv_ETCK.OUT( ck++ ) << B.EMU[ 0 ].TCK;
Drv_ETCK.OUT( ck++ ) << B.EMU[ 1 ].TCK
<< B.EMU[ 2 ].TCK ^ Mono[ mp++ ];
Drv_ETCK.OUT( ck++ ) << B.EMU[ 3 ].TCK
<< B.EMU[ 4 ].TCK ^ Mono[ mp++ ];
Drv_ETCK.OUT( ck++ ) << B.EMU[ 5 ].TCK
<< A.EMU[ 0 ].TCK ^ Mono[ mp++ ];
Drv_ETCK.OUT( ck++ ) << A.EMU[ 1 ].TCK
<< A.EMU[ 2 ].TCK ^ Mono[ mp++ ];
Drv_ETCK.OUT( ck++ ) << A.EMU[ 3 ].TCK
<< A.EMU[ 4 ].TCK ^ Mono[ mp++ ];
Drv_ETCK.OUT( ck++ ) << A.EMU[ 5 ].TCK;
property( CR_MatchClock, MatchETCK );
MatchETCK <= Drv_ETCK.Term1.A( 5 );
MatchETCK <= Drv_ETCK.Term2.B( 5, 0 );
MatchETCK.LongLengthMatchTolerance = -1;
for ( int i = 0; i < DPU_HalfCount; i += 2 ) {
Buf_Emulator.A( ms++ ) << A.EMU[ i ].TMS << A.EMU[ i+1 ].TMS;
}
for ( int i = 0; i < DPU_HalfCount; i += 2 ) {
Buf_Emulator.A( ms++ ) << B.EMU[ i ].TMS << B.EMU[ i+1 ].TMS;
}
int LastDPU = DPU_HalfCount - 1;
int a = 0;
int b = 0;
"ETDI" << HO.HPU_DSP.TDI;
"ETDO_H" << HO.HPU_DSP.TDO << B.EMU[ b ].TDI;
"ETDO_B0" << B.EMU[ b ].TDO << B.EMU[ b+1 ].TDI; b++;
"ETDO_B1" << B.EMU[ b ].TDO << B.EMU[ b+1 ].TDI; b++;
"ETDO_B2" << B.EMU[ b ].TDO << B.EMU[ b+1 ].TDI; b++;
"ETDO_B3" << B.EMU[ b ].TDO << B.EMU[ b+1 ].TDI; b++;
"ETDO_B4" << B.EMU[ b ].TDO << B.EMU[ b+1 ].TDI; b++;
"ETDO_B5" << B.EMU[ b ].TDO << A.EMU[ a ].TDI;
"ETDO_A0" << A.EMU[ a ].TDO << A.EMU[ a+1 ].TDI; a++;
"ETDO_A1" << A.EMU[ a ].TDO << A.EMU[ a+1 ].TDI; a++;
"ETDO_A2" << A.EMU[ a ].TDO << A.EMU[ a+1 ].TDI; a++;
"ETDO_A3" << A.EMU[ a ].TDO << A.EMU[ a+1 ].TDI; a++;
"ETDO_A4" << A.EMU[ a ].TDO << A.EMU[ a+1 ].TDI; a++;
"ETDO" << A.EMU[ a ].TDO;
MB_VCC << Buf_JTAG.VCC;
MB_VCC << Drv_JTCK.VCC;
MB_VCC << Mux_JTMS.VCC;
MB_VCC << Mux_JTDO.VCC;
GND << Mux_JTMS.OE1_N << Mux_JTMS.OE2_N;
GND << Mux_JTDO.OE1_N << Mux_JTDO.OE2_N;
FP.JTAG_DIPSW( 0 ) ^ Pull_J[ 3 ] ^ MB_VCC;
FP.JTAG_DIPSW( 1 ) ^ Pull_J[ 4 ] ^ MB_VCC;
FP.JTAG_DIPSW( 1, 0 ) << Mux_JTMS.S << Mux_JTDO.S;
FP.JTAG_DIPSW( 2 ) << Drv_JTCK.OE;
"RAW_JTMS" << FP.JTAG.TMS << Buf_JTAG.B( 10 ) ^ Pull_J[ 0 ] ^ MB_VCC;
"BUF_JTMS" << Buf_JTAG.A( 10 );
merge( "BUF_JTMS", Buf_JTAG.B( 3, 0 ) );
merge( "BUF_JTMS_FPGA", Buf_JTAG.B( 8, 4 ) );
merge( "BUF_JTMS_BACK", Buf_JTAG.B( 9 ) );
"JTMS" << Buf_JTAG.A( 9, 0 );
MB_VCC << Mux_JTMS.B1( 0 );
MB_VCC << Mux_JTMS.B1( 1 );
"BUF_JTMS" << Mux_JTMS.B1( 2 );
"BUF_JTMS" << Mux_JTMS.B1( 3 );
"BUF_JTMS_FPGA" << Mux_JTMS.A1;
MB_VCC << Mux_JTMS.B2( 0 );
"BUF_JTMS" << Mux_JTMS.B2( 1 );
MB_VCC << Mux_JTMS.B2( 2 );
"BUF_JTMS" << Mux_JTMS.B2( 3 );
"BUF_JTMS_BACK" << Mux_JTMS.A2;
FP.JTAG.TCK ^ Pull_J[ 1 ] ^ MB_VCC;
FP.JTAG.TCK ^ STerm_JTCK ^ "DRIVIN_JTCK"
<< Drv_JTCK.IN;
"JTCK" << Drv_JTCK.OUT( 9, 0 );
FP.JTAG.TDI << Buf_JTAG.B( 11 ) ^ Pull_J[ 2 ] ^ MB_VCC;
"JTDI" << Buf_JTAG.A( 11 );
FP.JTAG.TDO << Buf_JTAG.A( 12 );
"JTDO" << Buf_JTAG.B( 12 );
Drv_JTCK.OUT( 0 ) << HO.HostPLD.TCK;
Drv_JTCK.OUT( 1 ) << VME.FlashPLD.TCK;
Drv_JTCK.OUT( 2 ) << VME.VMED_PLD.TCK
<< VME.VMEC_PLD.TCK ^ Mono[ mp++ ];
Drv_JTCK.OUT( 3 ) << CG.NoisyPLD.TCK
<< CG.QuietPLD.TCK ^ Mono[ mp++ ];
Drv_JTCK.OUT( 4 ) << HO.HPU_FPGA.TCK;
Drv_JTCK.OUT( 5 ) << DC.DC_FPGA.TCK
<< DX.DXF_FPGA_A.TCK ^ Mono[ mp++ ];
Drv_JTCK.OUT( 6 ) << DX.DXF_FPGA_B.TCK
<< DX.DXB_FPGA.TCK ^ Mono[ mp++ ];
Drv_JTCK.OUT( 7 ) << IC.TTC_FPGA.TCK
<< IC.BPI_FPGA[ 5 ].TCK
<< IC.BPI_FPGA[ 4 ].TCK
<< IC.BPI_FPGA[ 3 ].TCK ^ Mono[ mp++ ];
Drv_JTCK.OUT( 8 ) << IC.BPI_FPGA[ 2 ].TCK
<< IC.BPI_FPGA[ 1 ].TCK
<< IC.BPI_FPGA[ 0 ].TCK ^ Mono[ mp++ ];
Drv_JTCK.OUT( 9 ) << BK.JTAG_CONF.TCK;
property( CR_MatchClock, MatchJTCK );
MatchJTCK <= Drv_JTCK.Term1.A( 5, 1 );
MatchJTCK <= Drv_JTCK.Term2.B( 1, 0 );
MatchJTCK <= Drv_JTCK.Term2.B( 5 );
MatchJTCK.LongLengthMatchTolerance = -1;
MatchJTCK.ShortMaxLength = 3000;
Buf_JTAG.A( 0 ) << HO.HostPLD.TMS;
Buf_JTAG.A( 1 ) << VME.FlashPLD.TMS;
Buf_JTAG.A( 2 ) << VME.VMED_PLD.TMS
<< VME.VMEC_PLD.TMS;
Buf_JTAG.A( 3 ) << CG.NoisyPLD.TMS
<< CG.QuietPLD.TMS;
Buf_JTAG.A( 4 ) << HO.HPU_FPGA.TMS;
Buf_JTAG.A( 5 ) << DC.DC_FPGA.TMS
<< DX.DXF_FPGA_A.TMS;
Buf_JTAG.A( 6 ) << DX.DXF_FPGA_B.TMS
<< DX.DXB_FPGA.TMS;
Buf_JTAG.A( 7 ) << IC.TTC_FPGA.TMS
<< IC.BPI_FPGA[ 5 ].TMS
<< IC.BPI_FPGA[ 4 ].TMS
<< IC.BPI_FPGA[ 3 ].TMS;
Buf_JTAG.A( 8 ) << IC.BPI_FPGA[ 2 ].TMS
<< IC.BPI_FPGA[ 1 ].TMS
<< IC.BPI_FPGA[ 0 ].TMS;
Buf_JTAG.A( 9 ) << BK.JTAG_CONF.TMS;
"JTDI" << HO.HostPLD.TDI;
"JTDO_CPLD0" << HO.HostPLD.TDO << VME.FlashPLD.TDI;
"JTDO_CPLD1" << VME.FlashPLD.TDO << VME.VMED_PLD.TDI;
"JTDO_CPLD2" << VME.VMED_PLD.TDO << VME.VMEC_PLD.TDI;
"JTDO_CPLD3" << VME.VMEC_PLD.TDO << CG.NoisyPLD.TDI;
"JTDO_CPLD4" << CG.NoisyPLD.TDO << CG.QuietPLD.TDI;
"JTDO_CPLD5" << CG.QuietPLD.TDO;
"JTDO_CPLD5" << HO.HPU_FPGA.TDI;
"JTDO_FPGA0" << HO.HPU_FPGA.TDO << DX.DXF_FPGA_A.TDI;
"JTDO_FPGA1" << DX.DXF_FPGA_A.TDO << DX.DXF_FPGA_B.TDI;
"JTDO_FPGA2" << DX.DXF_FPGA_B.TDO << DX.DXB_FPGA.TDI;
"JTDO_FPGA3" << DX.DXB_FPGA.TDO << DC.DC_FPGA.TDI;
"JTDO_FPGA4" << DC.DC_FPGA.TDO << IC.TTC_FPGA.TDI;
"JTDO_FPGA5" << IC.TTC_FPGA.TDO << IC.BPI_FPGA[ 5 ].TDI;
"JTDO_FPGA6" << IC.BPI_FPGA[ 5 ].TDO << IC.BPI_FPGA[ 4 ].TDI;
"JTDO_FPGA7" << IC.BPI_FPGA[ 4 ].TDO << IC.BPI_FPGA[ 3 ].TDI;
"JTDO_FPGA8" << IC.BPI_FPGA[ 3 ].TDO << IC.BPI_FPGA[ 2 ].TDI;
"JTDO_FPGA9" << IC.BPI_FPGA[ 2 ].TDO << IC.BPI_FPGA[ 1 ].TDI;
"JTDO_FPGA10" << IC.BPI_FPGA[ 1 ].TDO << IC.BPI_FPGA[ 0 ].TDI;
"JTDO_FPGA11" << IC.BPI_FPGA[ 0 ].TDO;
"JTDI_BACK" << BK.JTAG_CONF.TDI;
"JTDO_BACK" << BK.JTAG_CONF.TDO;
"JTDO_FPGA0" << MB_JTAG_Short.P( 1 );
"JTDO_FPGA11" << MB_JTAG_Short.P( 2 );
"JTDO_CPLD5" << Mux_JTDO.B1( 0 );
"JTDO_BACK" << Mux_JTDO.B1( 1 );
"JTDO_FPGA11" << Mux_JTDO.B1( 2 );
"JTDO_BACK" << Mux_JTDO.B1( 3 );
"JTDO" << Mux_JTDO.A1;
GND << Mux_JTDO.B2( 0 );
"JTDO_CPLD5" << Mux_JTDO.B2( 1 );
GND << Mux_JTDO.B2( 2 );
"JTDO_FPGA11" << Mux_JTDO.B2( 3 );
"JTDI_BACK" << Mux_JTDO.A2;
MB_VCC << Drv_CCLK.VCC;
"LOC_CCLK" << VME.CCLK ^ STerm_CCLK ^ "DRVIN_CCLK" << Drv_CCLK.IN;
"CCLK" << Drv_CCLK.OUT( 9, 0 );
"RAW_DIN" << VME.DIN;
merge( "RAW_DIN", Buf_JTAG.B( 15, 13 ) );
"DIN_A" << Buf_JTAG.A( 13 );
"DIN_B" << Buf_JTAG.A( 14 );
"DIN_MB" << Buf_JTAG.A( 15 );
"PROGRAM_N" << CG.PROGRAM_N;
int p = 0;
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
CG.PROGRAM_N( p++ ) << A.CONF[ i ].PROGRAM0_N;
CG.PROGRAM_N( p++ ) << A.CONF[ i ].PROGRAM1_N;
}
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
CG.PROGRAM_N( p++ ) << B.CONF[ i ].PROGRAM0_N;
CG.PROGRAM_N( p++ ) << B.CONF[ i ].PROGRAM1_N;
}
CG.PROGRAM_N( p++ ) << BK.JTAG_CONF.PROGRAM0_N;
CG.PROGRAM_N( p++ ) << BK.JTAG_CONF.PROGRAM1_N;
CG.PROGRAM_N( p++ ) << DC.DC_FPGA.PROGRAM_N;
CG.PROGRAM_N( p++ ) << DX.DXF_FPGA_A.PROGRAM_N;
CG.PROGRAM_N( p++ ) << DX.DXF_FPGA_B.PROGRAM_N;
CG.PROGRAM_N( p++ ) << DX.DXB_FPGA.PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.TTC_FPGA.PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.BPI_FPGA[ 0 ].PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.BPI_FPGA[ 1 ].PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.BPI_FPGA[ 2 ].PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.BPI_FPGA[ 3 ].PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.BPI_FPGA[ 4 ].PROGRAM_N;
CG.PROGRAM_N( p++ ) << IC.BPI_FPGA[ 5 ].PROGRAM_N;
int c = 0;
Drv_CCLK.OUT( c ++ ) << B.CONF[ 0 ].CCLK;
Drv_CCLK.OUT( c ++ ) << B.CONF[ 1 ].CCLK
<< B.CONF[ 2 ].CCLK
<< B.CONF[ 3 ].CCLK
<< B.CONF[ 4 ].CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << B.CONF[ 5 ].CCLK
<< A.CONF[ 0 ].CCLK
<< A.CONF[ 1 ].CCLK
<< A.CONF[ 2 ].CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << A.CONF[ 3 ].CCLK
<< A.CONF[ 4 ].CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << A.CONF[ 5 ].CCLK
<< HO.CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << DC.DC_FPGA.CCLK
<< DX.DXF_FPGA_A.CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << DX.DXF_FPGA_B.CCLK
<< DX.DXB_FPGA.CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << IC.TTC_FPGA.CCLK
<< IC.BPI_FPGA[ 5 ].CCLK
<< IC.BPI_FPGA[ 4 ].CCLK
<< IC.BPI_FPGA[ 3 ].CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << IC.BPI_FPGA[ 2 ].CCLK
<< IC.BPI_FPGA[ 1 ].CCLK
<< IC.BPI_FPGA[ 0 ].CCLK ^ Mono[ mp++ ];
Drv_CCLK.OUT( c ++ ) << BK.JTAG_CONF.CCLK;
property( CR_MatchClock, MatchCCLK );
MatchCCLK <= Drv_CCLK.Term1.A( 7, 1 );
MatchCCLK <= Drv_CCLK.Term2.B( 5, 0 );
MatchCCLK.LongLengthMatchTolerance = -1;
MatchCCLK.ShortMaxLength = 3000;
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
"DIN_A" << A.CONF[ i ].DIN
<< HO.DIN;
"DIN_B" << B.CONF[ i ].DIN;
}
"DIN_MB" << BK.JTAG_CONF.DIN
<< DC.DC_FPGA.DIN
<< DX.DXF_FPGA_A.DIN
<< DX.DXF_FPGA_B.DIN
<< DX.DXB_FPGA.DIN
<< IC.TTC_FPGA.DIN
<< IC.BPI_FPGA[ 0 ].DIN
<< IC.BPI_FPGA[ 1 ].DIN
<< IC.BPI_FPGA[ 2 ].DIN
<< IC.BPI_FPGA[ 3 ].DIN
<< IC.BPI_FPGA[ 4 ].DIN
<< IC.BPI_FPGA[ 5 ].DIN;
if ( mp != mono_count )
BEGERR << "CM_JTAG::Connect(): mp value of " << mp << " does not equal mono_count" << ENDERR;
}
};
#endif