#ifndef _ClockGenerationH_
#define _ClockGenerationH_
#include "jtag.h"
#include "clockdriverscdc.h"
#include "std_drivers.h"
#include "lvds.h"
#include "sn74cbtlv3253.h"
#include "w170_01.h"
#include "std_syn.h"
#include "noisy_pld.h"
#include "quiet_pld.h"
#include "monopins.h"
class CB_PWR_CG : public TBundle {
public:
port DSP_VCOK;
virtual void Register() {
reg( DSP_VCOK );
}
};
class CB_Back_CG : public TBundle {
public:
port RCLKOP;
port RCLKON;
port SCLKOP;
port SCLKON;
port TCLKOP;
port TCLKON;
port DCLKOP;
port DCLKON;
port RCLKIP;
port RCLKIN;
port TCLKIP;
port TCLKIN;
virtual void Register() {
reg( RCLKOP );
reg( RCLKON );
reg( SCLKOP );
reg( SCLKON );
reg( TCLKOP );
reg( TCLKON );
reg( DCLKOP );
reg( DCLKON );
reg( RCLKIP );
reg( RCLKIN );
reg( TCLKIP );
reg( TCLKIN );
}
};
class CB_DX_CG : public TBundle {
public:
port DX_CLK;
port DXINT_CLK;
port DCLK;
virtual void Register() {
regb( DX_CLK, 1, 0 );
regb( DXINT_CLK, 3, 0 );
regb( DCLK, 2, 0 );
}
};
class CB_DC_CG : public TBundle {
public:
port DX_CLK;
port DC_CLK;
port RCLK;
port SCLK;
virtual void Register() {
reg( DX_CLK );
reg( DC_CLK );
reg( RCLK );
reg( SCLK );
}
};
class CB_Front_CG : public TBundle {
public:
port RCLKIP;
port RCLKIN;
port TCLKIP;
port TCLKIN;
port CKOE_DIPSW;
port VBOE_DIPSW;
virtual void Register() {
reg( RCLKIP );
reg( RCLKIN );
reg( TCLKIP );
reg( TCLKIN );
reg( CKOE_DIPSW );
reg( VBOE_DIPSW );
}
};
class CB_Half_CG : public TBundle {
public:
port DC_CLK;
port RCLK;
port SCLK;
port DPU_CLK;
port DX_CLK;
virtual void Register() {
regb( DC_CLK, 5, 0 );
regb( RCLK, 5, 0 );
regb( SCLK, 5, 0 );
regb( DPU_CLK, 5, 0 );
regb( DX_CLK, 5, 0 );
}
};
class CB_Host_CG : public TBundle {
public:
port HPU_CLK;
port DX_CLK;
port DC_CLK;
port RCLK;
port SCLK;
port NSTB_N;
port WR_N;
port D;
port A;
virtual void Register() {
reg( HPU_CLK );
reg( DX_CLK );
reg( DC_CLK );
reg( RCLK );
reg( SCLK );
reg( NSTB_N );
reg( WR_N );
regb( D, 7, 0 );
regb( A, 1, 0 );
}
};
class CB_IC_CG : public TBundle {
public:
port RCLK;
port SCLK;
port TCLK;
virtual void Register() {
regb( RCLK, 3, 0 );
regb( SCLK, 3, 0 );
regb( TCLK, 3, 0 );
}
};
class CB_VME_CG : public TBundle {
public:
port VME_CLK;
port BOOT_CLK;
port SOFTRESET_N;
virtual void Register() {
regb( VME_CLK, 2, 0 );
reg( BOOT_CLK );
reg( SOFTRESET_N );
}
};
class CM_ClockGeneration : public TModule {
public:
CB_Back_CG BK;
CB_DX_CG DX;
CB_DC_CG DC;
CB_Front_CG FP;
CB_Half_CG A;
CB_Half_CG B;
CB_Host_CG HO;
CB_IC_CG IC;
CB_CG_JT JT;
CB_PWR_CG PWR;
CB_VME_CG VME;
port MB_VCC;
port GND;
CM_NoisyPLD NoisyPLD;
CM_QuietPLD QuietPLD;
CP_XOSC_25M OscT_HPU;
CP_XOSC_25M OscT_BASE;
CP_XOSC_50M OscT_VME;
CP_XOSC_SMT_25M OscS_HPU;
CP_XOSC_SMT_25M OscS_BASE;
CP_XOSC_SMT_50M OscS_VME;
CP_R30 STerm_Osc_HPU;
CP_R30 STerm_Osc_BASE;
CP_R30 STerm_BOOT_CLK;
CM_StdSyn Syn_RCLK;
CM_StdSyn Syn_SCLK;
CM_StdSyn Syn_TCLK;
CM_StdSyn Syn_DCLK;
CM_StdSyn Syn_DC_CLK;
CM_StdSyn Syn_DX_CLK;
CM_StdSyn Syn_HPU_CLK;
CM_StdSyn Syn_DPU_CLK;
CM_StdSyn Syn_DXINT_CLK;
CP_SN74CBTLV3253 Mux_RCLK;
CP_SN74CBTLV3253 Mux_SCLK;
CP_SN74CBTLV3253 Mux_TCLK;
CP_SN74CBTLV3253 Mux_DCLK;
CP_SN74CBTLV3253 Mux_DC_CLK;
CP_SN74CBTLV3253 Mux_DX_CLK;
CP_SN74CBTLV3253 Mux_HPU_CLK;
CP_SN74CBTLV3253 Mux_SYN_BASE;
CP_SN74CBTLV3253 SMux_RCLK;
CP_SN74CBTLV3253 SMux_TCLK;
CP_SN74CBTLV3253 SMux_HPU_CLK;
CP_SN74CBTLV3253 SMux_SYN_BASE;
CP_W170_01 Mpy_IRCLK;
CP_W170_01 Mpy_ISCLK;
CP_W170_01 Mpy_ITCLK;
CP_R30 STerm_Mpy_IRCLK;
CP_R30 STerm_Mpy_ISCLK;
CP_R30 STerm_Mpy_ITCLK;
CM_STD_CDC319 Drv_IRCLK;
CM_STD_CDC319 Drv_ISCLK;
CM_STD_CDC319 Drv_ITCLK;
CM_STD_CDC319 Drv_SYN_BASE;
CP_CDC2510 Drv_RCLK0;
CP_CDC2510 Drv_RCLK1;
CP_CDC2516 Drv_SCLK;
CP_CDC2510 Drv_TCLK;
CP_CDC2510 Drv_DCLK;
CP_CDC2516 Drv_DC_CLK;
CP_CDC2516 Drv_DX_CLK;
CP_CDC2510 Drv_HPU_CLK;
CP_CDC2510 Drv_DPU_CLK;
CP_CDC2510 Drv_DXINT_CLK;
CP_CDC2510 Drv_VME_CLK;
CP_SN65LVDS1 Drv_BP_RCLKO;
CP_SN65LVDS1 Drv_BP_SCLKO;
CP_SN65LVDS1 Drv_BP_TCLKO;
CP_SN65LVDS1 Drv_BP_DCLKO;
CP_SN65LVDS9637B Rcv_BP_RCLKI;
CP_SN65LVDS9637B Rcv_BP_TCLKI;
CP_SN65LVDS9637B Rcv_FP_RCLKI;
CP_SN65LVDS9637B Rcv_FP_TCLKI;
CP_R110 DTerm_BP_RCLKI;
CP_R110 DTerm_BP_TCLKI;
CP_R110 DTerm_FP_RCLKI;
CP_R110 DTerm_FP_TCLKI;
CP_R30 STerm_BP_RCLKI;
CP_R30 STerm_BP_TCLKI;
CP_R30 STerm_FP_RCLKI;
CP_R30 STerm_FP_TCLKI;
CP_R30 STerm_DERIVED_BASE;
enum { clc_count = 12 };
CP_C10PF CLC_IRCLK;
CP_C10PF CLC_ISCLK;
CP_C10PF CLC_ITCLK;
CP_C33PF CLC_DC_CLK;
CP_C10PF CLC[ clc_count ];
CP_R10K PulldownSyn_HPU;
CP_R4_7K PullupOsc_BASE;
CP_R4_7K PullupVB_OE;
CP_R1K SeriesVCOK;
enum { mono_count = 51 };
CP_MONOPIN25 Mono[ mono_count ];
enum { ferrite_count = 11 + 3 + 3 };
CP_FERRITE120 Ferrite[ ferrite_count ];
CP_CDC_POS AVCC_CDC[ ferrite_count ];
enum { vc_cdc_count = 72,
vc_tdc_count = 3 };
CP_CDC_POS VC_CDC[ vc_cdc_count ];
CP_TDC_POS VC_TDC[ vc_tdc_count ];
CP_CDC_POS OSC_CDC[ 3 ];
virtual void Register() {
reg( BK );
reg( DX );
reg( DC );
reg( FP );
reg( A );
reg( B );
reg( HO );
reg( IC );
reg( JT );
reg( PWR );
reg( VME );
reg( MB_VCC );
reg( GND );
reg( NoisyPLD );
reg( QuietPLD );
reg( OscT_HPU );
reg( OscT_BASE );
reg( OscT_VME );
reg( OscS_HPU );
reg( OscS_BASE );
reg( OscS_VME );
reg( STerm_Osc_HPU );
reg( STerm_Osc_BASE );
reg( STerm_BOOT_CLK );
reg( Syn_RCLK );
reg( Syn_SCLK );
reg( Syn_TCLK );
reg( Syn_DCLK );
reg( Syn_DC_CLK );
reg( Syn_DX_CLK );
reg( Syn_HPU_CLK );
reg( Syn_DPU_CLK );
reg( Syn_DXINT_CLK );
reg( Mux_RCLK );
reg( Mux_SCLK );
reg( Mux_TCLK );
reg( Mux_DCLK );
reg( Mux_DC_CLK );
reg( Mux_DX_CLK );
reg( Mux_HPU_CLK );
reg( Mux_SYN_BASE );
reg( SMux_RCLK );
reg( SMux_TCLK );
reg( SMux_HPU_CLK );
reg( SMux_SYN_BASE );
reg( Mpy_IRCLK );
reg( Mpy_ISCLK );
reg( Mpy_ITCLK );
reg( STerm_Mpy_IRCLK );
reg( STerm_Mpy_ISCLK );
reg( STerm_Mpy_ITCLK );
reg( Drv_IRCLK );
reg( Drv_ISCLK );
reg( Drv_ITCLK );
reg( Drv_SYN_BASE );
reg( Drv_RCLK0 );
reg( Drv_SCLK );
reg( Drv_TCLK );
reg( Drv_DCLK );
reg( Drv_DC_CLK );
reg( Drv_DX_CLK );
reg( Drv_HPU_CLK );
reg( Drv_DPU_CLK );
reg( Drv_DXINT_CLK );
reg( Drv_VME_CLK );
reg( Drv_BP_RCLKO );
reg( Drv_BP_SCLKO );
reg( Drv_BP_TCLKO );
reg( Drv_BP_DCLKO );
reg( Rcv_BP_RCLKI );
reg( Rcv_BP_TCLKI );
reg( Rcv_FP_RCLKI );
reg( Rcv_FP_TCLKI );
reg( Drv_RCLK1 );
reg( DTerm_BP_RCLKI );
reg( DTerm_BP_TCLKI );
reg( DTerm_FP_RCLKI );
reg( DTerm_FP_TCLKI );
reg( STerm_BP_RCLKI );
reg( STerm_BP_TCLKI );
reg( STerm_FP_RCLKI );
reg( STerm_FP_TCLKI );
reg( STerm_DERIVED_BASE );
reg( CLC_IRCLK );
reg( CLC_ISCLK );
reg( CLC_ITCLK );
reg( CLC_DC_CLK );
rega( CLC, clc_count );
reg( PulldownSyn_HPU );
reg( PullupOsc_BASE );
reg( PullupVB_OE );
reg( SeriesVCOK );
rega( Mono, mono_count );
rega( Ferrite, ferrite_count );
rega( AVCC_CDC, ferrite_count );
rega( VC_CDC, vc_cdc_count );
rega( VC_TDC, vc_tdc_count );
rega( OSC_CDC, 3 );
}
void ConnectDefault( CP_SN74CBTLV3253& Mux ) {
GND << Mux.OE1_N << Mux.OE2_N;
merge( GND, Mux.B2 );
"/NC" << Mux.A2;
}
virtual void Connect() {
wireall( MB_VCC, "VCC" );
wireall( GND );
wireall( GND, "AGND" );
for ( int i = 0; i < vc_cdc_count; ++ i ) MB_VCC << VC_CDC[ i ].POS;
for ( int i = 0; i < vc_tdc_count; ++ i ) MB_VCC << VC_TDC[ i ].POS;
int f = 0;
MB_VCC ^ Ferrite[ f ] ^ "AVCC0" << AVCC_CDC[ f ].POS << Drv_RCLK0.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC1" << AVCC_CDC[ f ].POS << Drv_RCLK1.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC2" << AVCC_CDC[ f ].POS << Drv_SCLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC3" << AVCC_CDC[ f ].POS << Drv_TCLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC4" << AVCC_CDC[ f ].POS << Drv_DCLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC5" << AVCC_CDC[ f ].POS << Drv_DC_CLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC6" << AVCC_CDC[ f ].POS << Drv_DX_CLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC7" << AVCC_CDC[ f ].POS << Drv_HPU_CLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC8" << AVCC_CDC[ f ].POS << Drv_DPU_CLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC9" << AVCC_CDC[ f ].POS << Drv_DXINT_CLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC10" << AVCC_CDC[ f ].POS << Drv_VME_CLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC11" << AVCC_CDC[ f ].POS << Mpy_IRCLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC12" << AVCC_CDC[ f ].POS << Mpy_ISCLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC13" << AVCC_CDC[ f ].POS << Mpy_ITCLK.AVCC; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC14" << AVCC_CDC[ f ].POS << OscT_HPU.AVCC << OscS_HPU.AVCC << OSC_CDC[ 0 ].POS; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC15" << AVCC_CDC[ f ].POS << OscT_BASE.AVCC << OscS_BASE.AVCC << OSC_CDC[ 1 ].POS; f++;
MB_VCC ^ Ferrite[ f ] ^ "AVCC16" << AVCC_CDC[ f ].POS << OscT_VME.AVCC << OscS_VME.AVCC << OSC_CDC[ 2 ].POS; f++;
ConnectDefault( Mux_RCLK );
ConnectDefault( Mux_SCLK );
ConnectDefault( Mux_TCLK );
ConnectDefault( Mux_DCLK );
ConnectDefault( Mux_DC_CLK );
ConnectDefault( Mux_DX_CLK );
ConnectDefault( Mux_HPU_CLK );
ConnectDefault( Mux_SYN_BASE );
ConnectDefault( SMux_RCLK );
ConnectDefault( SMux_TCLK );
ConnectDefault( SMux_HPU_CLK );
ConnectDefault( SMux_SYN_BASE );
VME.SOFTRESET_N << NoisyPLD.SOFTRESET_N;
VME.SOFTRESET_N << QuietPLD.SOFTRESET_N;
JT.NoisyPLD << NoisyPLD.JTAG;
JT.QuietPLD << QuietPLD.JTAG;
JT.PROGRAM_N << NoisyPLD.PROGRAM_N;
wire( HO, NoisyPLD );
"QD" << NoisyPLD.QD << QuietPLD.QD;
"QA" << NoisyPLD.QA << QuietPLD.QA;
"QWR_N" << NoisyPLD.QWR_N << QuietPLD.QWR_N;
"QSTB_N" << NoisyPLD.QSTB_N << QuietPLD.QSTB_N;
"OSC_BASE" << NoisyPLD.BASE_CLK;
VME.BOOT_CLK ^ STerm_BOOT_CLK ^ "LOC_BOOT_CLOCK" << NoisyPLD.BOOT_CLK;
"QPLD_IRCLK" << QuietPLD.IRCLK << Drv_IRCLK.OUT( 8 );
"QPLD_ISCLK" << QuietPLD.ISCLK << Drv_ISCLK.OUT( 8 );
"QPLD_ITCLK" << QuietPLD.ITCLK << Drv_ITCLK.OUT( 8 );
"DERIVED_BASE" ^ STerm_DERIVED_BASE ^ "LOC_DERIVED_BASE" << QuietPLD.DERIVED_BASE;
"MUXA_RCLK" << QuietPLD.MuxA_RCLK << Mux_RCLK.S;
"MUXA_SCLK" << QuietPLD.MuxA_SCLK << Mux_SCLK.S;
"MUXA_TCLK" << QuietPLD.MuxA_TCLK << Mux_TCLK.S;
"MUXA_DCLK" << QuietPLD.MuxA_DCLK << Mux_DCLK.S;
"MUXA_DC_CLK" << QuietPLD.MuxA_DC_CLK << Mux_DC_CLK.S;
"MUXA_DX_CLK" << QuietPLD.MuxA_DX_CLK << Mux_DX_CLK.S;
"MUXA_HPU_CLK" << QuietPLD.MuxA_HPU_CLK << Mux_HPU_CLK.S( 1 );
"MUXA_SYN_BASE" << QuietPLD.MuxA_SYN_BASE << Mux_SYN_BASE.S( 1 );
"SMUXA_RCLK" << QuietPLD.SMuxA_RCLK << SMux_RCLK.S;
"SMUXA_TCLK" << QuietPLD.SMuxA_TCLK << SMux_TCLK.S;
"MPYFS_IRCLK" << QuietPLD.MpyFS_IRCLK << Mpy_IRCLK.FS;
"MPYFS_ISCLK" << QuietPLD.MpyFS_ISCLK << Mpy_ISCLK.FS;
"MPYFS_ITCLK" << QuietPLD.MpyFS_ITCLK << Mpy_ITCLK.FS;
"DRVSCK_IRCLK" << QuietPLD.DrvSCK_IRCLK << Drv_IRCLK.SCLOCK;
"DRVSCK_ISCLK" << QuietPLD.DrvSCK_ISCLK << Drv_ISCLK.SCLOCK;
"DRVSCK_ITCLK" << QuietPLD.DrvSCK_ITCLK << Drv_ITCLK.SCLOCK;
"DRVSCK_SYN_BASE" << QuietPLD.DrvSCK_SYN_BASE << Drv_SYN_BASE.SCLOCK;
"SYNSCK_RCLK" << QuietPLD.SynSCK_RCLK << Syn_RCLK.SCLOCK;
"SYNSCK_SCLK" << QuietPLD.SynSCK_SCLK << Syn_SCLK.SCLOCK;
"SYNSCK_TCLK" << QuietPLD.SynSCK_TCLK << Syn_TCLK.SCLOCK;
"SYNSCK_DCLK" << QuietPLD.SynSCK_DCLK << Syn_DCLK.SCLOCK;
"SYNSCK_DC_CLK" << QuietPLD.SynSCK_DC_CLK << Syn_DC_CLK.SCLOCK;
"SYNSCK_DX_CLK" << QuietPLD.SynSCK_DX_CLK << Syn_DX_CLK.SCLOCK;
"SYNSCK_HPU_CLK" << QuietPLD.SynSCK_HPU_CLK << Syn_HPU_CLK.SCLOCK;
"SYNSCK_DPU_CLK" << QuietPLD.SynSCK_DPU_CLK << Syn_DPU_CLK.SCLOCK;
"SYNSCK_DXINT_CLK" << QuietPLD.SynSCK_DXINT_CLK << Syn_DXINT_CLK.SCLOCK;
"SYNSEL_CD" << QuietPLD.SynSEL_CD;
"SD" << QuietPLD.SD;
"OSCOE_HPU" << QuietPLD.OscOE_HPU;
"SD" << Drv_IRCLK.SDATA
<< Drv_ISCLK.SDATA
<< Drv_ITCLK.SDATA
<< Drv_SYN_BASE.SDATA;
"SD" << Syn_RCLK.SDATA
<< Syn_SCLK.SDATA
<< Syn_TCLK.SDATA
<< Syn_DCLK.SDATA
<< Syn_DC_CLK.SDATA
<< Syn_DX_CLK.SDATA
<< Syn_HPU_CLK.SDATA
<< Syn_DPU_CLK.SDATA
<< Syn_DXINT_CLK.SDATA;
"SYNSEL_CD" << Syn_RCLK.SEL_CD
<< Syn_SCLK.SEL_CD
<< Syn_TCLK.SEL_CD
<< Syn_DCLK.SEL_CD
<< Syn_DC_CLK.SEL_CD
<< Syn_DX_CLK.SEL_CD
<< Syn_HPU_CLK.SEL_CD
<< Syn_DPU_CLK.SEL_CD
<< Syn_DXINT_CLK.SEL_CD;
"SYN_RCLK" << Syn_RCLK.OUT;
"SYN_SCLK" << Syn_SCLK.OUT;
"SYN_TCLK" << Syn_TCLK.OUT;
"SYN_DCLK" << Syn_DCLK.OUT;
"SYN_DC_CLK" << Syn_DC_CLK.OUT;
"SYN_DX_CLK" << Syn_DX_CLK.OUT;
"SYN_HPU_CLK" << Syn_HPU_CLK.OUT ^ PulldownSyn_HPU ^ GND;
"SYN_DPU_CLK" << Syn_DPU_CLK.OUT;
"SYN_DXINT_CLK" << Syn_DXINT_CLK.OUT;
"/NC" << Syn_RCLK.OE;
"/NC" << Syn_SCLK.OE;
"/NC" << Syn_TCLK.OE;
"/NC" << Syn_DCLK.OE;
"/NC" << Syn_DC_CLK.OE;
"/NC" << Syn_DX_CLK.OE;
"/NC" << Syn_DPU_CLK.OE;
"/NC" << Syn_DXINT_CLK.OE;
"/NC" << Drv_IRCLK.OE;
"/NC" << Drv_ISCLK.OE;
"/NC" << Drv_ITCLK.OE;
"/NC" << Drv_SYN_BASE.OE;
"OSC_HPU" ^ STerm_Osc_HPU ^ "LOC_OSC_HPU" << OscT_HPU.OUT << OscS_HPU.OUT;
"OSC_BASE" ^ STerm_Osc_BASE ^ "LOC_OSC_BASE" << OscT_BASE.OUT << OscS_BASE.OUT;
"OSC_VME" << OscT_VME.OUT << OscS_VME.OUT;
"OSCOE_HPU" << OscT_HPU.OE << OscS_HPU.OE;
"IRCLK" << Drv_IRCLK.OUT( 4, 0 );
"ISCLK" << Drv_ISCLK.OUT( 4, 0 );
"ITCLK" << Drv_ITCLK.OUT( 4, 0 );
merge( "/NC", Drv_IRCLK.OUT( 7, 5 ) );
merge( "/NC", Drv_ISCLK.OUT( 7, 5 ) );
merge( "/NC", Drv_ITCLK.OUT( 7, 5 ) );
SMux_RCLK.B1( 0 ) << GND;
SMux_RCLK.B1( 1 ) << "BP_RCLKI";
SMux_RCLK.B1( 2 ) << GND;
SMux_RCLK.B1( 3 ) << "FP_RCLKI";
SMux_RCLK.A1 << "EXT_RCLK";
Mux_RCLK.B1( 0 ) << "EXT_RCLK";
Mux_RCLK.B1( 1 ) << Drv_ISCLK.OUT( 3 );
Mux_RCLK.B1( 2 ) << Drv_ITCLK.OUT( 3 );
Mux_RCLK.B1( 3 ) << "SYN_RCLK";
Mux_RCLK.A1 << "DRVIN_RCLK";
Mux_SCLK.B1( 0 ) << GND;
Mux_SCLK.B1( 1 ) << Drv_IRCLK.OUT( 3 );
Mux_SCLK.B1( 2 ) << Drv_ITCLK.OUT( 4 );
Mux_SCLK.B1( 3 ) << "SYN_SCLK";
Mux_SCLK.A1 << "DRVIN_SCLK";
SMux_TCLK.B1( 0 ) << GND;
SMux_TCLK.B1( 1 ) << "BP_TCLKI";
SMux_TCLK.B1( 2 ) << GND;
SMux_TCLK.B1( 3 ) << "FP_TCLKI";
SMux_TCLK.A1 << "EXT_TCLK";
Mux_TCLK.B1( 0 ) << "EXT_TCLK";
Mux_TCLK.B1( 1 ) << Drv_IRCLK.OUT( 4 );
Mux_TCLK.B1( 2 ) << Drv_ISCLK.OUT( 4 );
Mux_TCLK.B1( 3 ) << "SYN_TCLK";
Mux_TCLK.A1 << "DRVIN_TCLK";
Mux_DCLK.B1( 0 ) << Drv_IRCLK.OUT( 0 );
Mux_DCLK.B1( 1 ) << Drv_ISCLK.OUT( 0 );
Mux_DCLK.B1( 2 ) << Drv_ITCLK.OUT( 0 );
Mux_DCLK.B1( 3 ) << "SYN_DCLK";
Mux_DCLK.A1 << "DRVIN_DCLK";
Mux_DC_CLK.B1( 0 ) << Drv_IRCLK.OUT( 1 );
Mux_DC_CLK.B1( 1 ) << Drv_ISCLK.OUT( 1 );
Mux_DC_CLK.B1( 2 ) << Drv_ITCLK.OUT( 1 );
Mux_DC_CLK.B1( 3 ) << "SYN_DC_CLK";
Mux_DC_CLK.A1 << "DRVIN_DC_CLK";
Mux_DX_CLK.B1( 0 ) << Drv_IRCLK.OUT( 2 );
Mux_DX_CLK.B1( 1 ) << Drv_ISCLK.OUT( 2 );
Mux_DX_CLK.B1( 2 ) << Drv_ITCLK.OUT( 2 );
Mux_DX_CLK.B1( 3 ) << "SYN_DX_CLK";
Mux_DX_CLK.A1 << "DRVIN_DX_CLK";
SMux_HPU_CLK.B1( 0 ) << GND;
SMux_HPU_CLK.B1( 1 ) << "OSC_HPU";
SMux_HPU_CLK.B1( 2 ) << GND;
SMux_HPU_CLK.B1( 3 ) << GND;
SMux_HPU_CLK.A1 << "SMUX_HPU_CLK";
Mux_HPU_CLK.B1( 0 ) << GND;
Mux_HPU_CLK.B1( 1 ) << "SMUX_HPU_CLK";
Mux_HPU_CLK.B1( 2 ) << GND;
Mux_HPU_CLK.B1( 3 ) << "SYN_HPU_CLK";
Mux_HPU_CLK.A1 << "DRVIN_HPU_CLK";
MB_VCC << Mux_HPU_CLK.S( 0 ) << SMux_HPU_CLK.S( 0 );
Mux_HPU_CLK.S( 1 ) << SMux_HPU_CLK.S( 1 ) << Syn_HPU_CLK.OE;
SMux_SYN_BASE.B1( 0 ) << GND;
SMux_SYN_BASE.B1( 1 ) << "OSC_BASE";
SMux_SYN_BASE.B1( 2 ) << GND;
SMux_SYN_BASE.B1( 3 ) << GND;
SMux_SYN_BASE.A1 << "SMUX_SYN_BASE";
Mux_SYN_BASE.B1( 0 ) << GND;
Mux_SYN_BASE.B1( 1 ) << "SMUX_SYN_BASE";
Mux_SYN_BASE.B1( 2 ) << GND;
Mux_SYN_BASE.B1( 3 ) << "DERIVED_BASE";
Mux_SYN_BASE.A1 << "DRVIN_SYN_BASE";
MB_VCC << Mux_SYN_BASE.S( 0 ) << SMux_SYN_BASE.S( 0 );
Mux_SYN_BASE.S( 1 ) << SMux_SYN_BASE.S( 1 );
"DC_SYN_BASE" << Drv_SYN_BASE.OUT;
Drv_SYN_BASE.OUT( 0 ) << Syn_RCLK.IN;
Drv_SYN_BASE.OUT( 1 ) << Syn_SCLK.IN;
Drv_SYN_BASE.OUT( 2 ) << Syn_TCLK.IN;
Drv_SYN_BASE.OUT( 3 ) << Syn_DCLK.IN;
Drv_SYN_BASE.OUT( 4 ) << Syn_DC_CLK.IN;
Drv_SYN_BASE.OUT( 5 ) << Syn_DX_CLK.IN;
Drv_SYN_BASE.OUT( 6 ) << Syn_DPU_CLK.IN;
Drv_SYN_BASE.OUT( 7 ) << Syn_DXINT_CLK.IN;
Drv_SYN_BASE.OUT( 8 ) << "/NC";
Drv_SYN_BASE.OUT( 9 ) << Syn_HPU_CLK.IN;
"CLK_OE" ^ SeriesVCOK ^ PWR.DSP_VCOK;
"CLK_OE" << FP.CKOE_DIPSW;
merge( "CLK_OE", Drv_RCLK0.G );
merge( "CLK_OE", Drv_RCLK1.G );
merge( "CLK_OE", Drv_SCLK.G );
merge( "CLK_OE", Drv_TCLK.G );
merge( "CLK_OE", Drv_DCLK.G );
merge( "CLK_OE", Drv_DC_CLK.G );
merge( "CLK_OE", Drv_DX_CLK.G );
merge( "CLK_OE", Drv_HPU_CLK.G );
merge( "CLK_OE", Drv_DPU_CLK.G );
merge( "CLK_OE", Drv_DXINT_CLK.G );
OscT_BASE.OUT ^ PullupOsc_BASE ^ MB_VCC;
"VB_OE" << FP.VBOE_DIPSW ^ PullupVB_OE ^ MB_VCC;
"VB_OE" << OscT_BASE.OE << OscS_BASE.OE;
merge( "VB_OE", Drv_VME_CLK.G );
"/NC" << OscT_VME.OE << OscS_VME.OE;
"FB_RCLK0" << Mpy_IRCLK.IN;
"MPYI_SCLK" << Mpy_ISCLK.IN;
"MPYI_TCLK" << Mpy_ITCLK.IN;
"MPY_IRCLK" << Mpy_IRCLK.OUT1 ^ STerm_Mpy_IRCLK ^ "DRVIN_IRCLK" << Drv_IRCLK.IN;
"MPY_ISCLK" << Mpy_ISCLK.OUT1 ^ STerm_Mpy_ISCLK ^ "DRVIN_ISCLK" << Drv_ISCLK.IN;
"MPY_ITCLK" << Mpy_ITCLK.OUT1 ^ STerm_Mpy_ITCLK ^ "DRVIN_ITCLK" << Drv_ITCLK.IN;
"/NC" << Mpy_IRCLK.OUT2;
"/NC" << Mpy_ISCLK.OUT2;
"/NC" << Mpy_ITCLK.OUT2;
"DRVIN_RCLK" << Drv_RCLK0.IN;
"DRVIN_RCLK" << Drv_RCLK1.IN;
"DRVIN_SCLK" << Drv_SCLK.IN;
"DRVIN_TCLK" << Drv_TCLK.IN;
"DRVIN_DCLK" << Drv_DCLK.IN;
"DRVIN_DC_CLK" << Drv_DC_CLK.IN;
"DRVIN_DX_CLK" << Drv_DX_CLK.IN;
"DRVIN_HPU_CLK" << Drv_HPU_CLK.IN;
"SYN_DPU_CLK" << Drv_DPU_CLK.IN;
"SYN_DXINT_CLK" << Drv_DXINT_CLK.IN;
"OSC_VME" << Drv_VME_CLK.IN;
"DRVIN_SYN_BASE" << Drv_SYN_BASE.IN;
"FB_IRCLK" << Drv_IRCLK.OUT( 9 ) << Mpy_IRCLK.FBIN ^ CLC_IRCLK ^ GND;
"FB_ISCLK" << Drv_ISCLK.OUT( 9 ) << Mpy_ISCLK.FBIN ^ CLC_ISCLK ^ GND;
"FB_ITCLK" << Drv_ITCLK.OUT( 9 ) << Mpy_ITCLK.FBIN ^ CLC_ITCLK ^ GND;
"FB_RCLK0" << Drv_RCLK0.FBOUT << Drv_RCLK0.FBIN;
"FB_RCLK1" << Drv_RCLK1.FBOUT << Drv_RCLK1.FBIN;
"FB_SCLK" << Drv_SCLK.FBOUT << Drv_SCLK.FBIN;
"FB_TCLK" << Drv_TCLK.FBOUT << Drv_TCLK.FBIN;
"FB_DCLK" << Drv_DCLK.FBOUT << Drv_DCLK.FBIN;
"FB_DC_CLK" << Drv_DC_CLK.FBOUT << Drv_DC_CLK.FBIN;
"FB_DX_CLK" << Drv_DX_CLK.FBOUT << Drv_DX_CLK.FBIN;
"FB_HPU_CLK" << Drv_HPU_CLK.FBOUT << Drv_HPU_CLK.FBIN;
"FB_DPU_CLK" << Drv_DPU_CLK.FBOUT << Drv_DPU_CLK.FBIN;
"FB_DXINT_CLK" << Drv_DXINT_CLK.FBOUT << Drv_DXINT_CLK.FBIN;
"FB_VME_CLK" << Drv_VME_CLK.FBOUT << Drv_VME_CLK.FBIN;
int i = 0, n = 0, m = 0, clc = 0;
n = 6; Drv_RCLK0.OUT( i+n-1, i ) << A.RCLK; i+=n;
n = 4; Drv_RCLK0.OUT( i+n-1, i ) << B.RCLK( 3, 0 ); i+=n;
i = 0;
Drv_RCLK1.OUT( i++) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_RCLK";
n = 1; Drv_RCLK1.OUT( i+n-1, i ) << DC.RCLK; i+=n;
n = 1; Drv_RCLK1.OUT( i+n-1, i ) << HO.RCLK; i+=n;
n = 2; Drv_RCLK1.OUT( i+n-1, i ) << B.RCLK( 5, 4 ); i+=n;
n = 4; Drv_RCLK1.OUT( i+n-1, i ) << IC.RCLK; i+=n;
DC.RCLK ^ CLC[ clc++ ] ^ GND;
IC.RCLK( 3 ) ^ CLC[ clc++ ] ^ GND;
i = 0;
Drv_DX_CLK.OUT( i++) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_DX_CLK";
n = 1; Drv_DX_CLK.OUT( i+n-1, i ) << DC.DX_CLK; i+=n;
n = 1; Drv_DX_CLK.OUT( i+n-1, i ) << HO.DX_CLK; i+=n;
Drv_DX_CLK.OUT( i ) << B.DX_CLK( 0 ); i++;
Drv_DX_CLK.OUT( i ) << B.DX_CLK( 1 )
<< B.DX_CLK( 2 ); i++;
Drv_DX_CLK.OUT( i ) << B.DX_CLK( 3 )
<< B.DX_CLK( 4 ); i++;
Drv_DX_CLK.OUT( i ) << B.DX_CLK( 5 )
<< A.DX_CLK( 0 ); i++;
Drv_DX_CLK.OUT( i ) << A.DX_CLK( 1 )
<< A.DX_CLK( 2 ); i++;
Drv_DX_CLK.OUT( i ) << A.DX_CLK( 3 )
<< A.DX_CLK( 4 ); i++;
Drv_DX_CLK.OUT( i ) << A.DX_CLK( 5 ); i++;
n = 2; Drv_DX_CLK.OUT( i+n-1, i ) << DX.DX_CLK; i+=n;
merge( "/NC", Drv_DX_CLK.OUT( 15, i ) );
DC.DX_CLK ^ CLC[ clc++ ] ^ GND;
HO.DX_CLK ^ CLC[ clc++ ] ^ GND;
DX.DX_CLK( 1 ) ^ CLC[ clc++ ] ^ GND;
i = 0;
Drv_SCLK.OUT( i++) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_SCLK";
n = 1; Drv_SCLK.OUT( i+n-1, i ) << DC.SCLK; i+=n;
n = 1; Drv_SCLK.OUT( i+n-1, i ) << HO.SCLK; i+=n;
Drv_SCLK.OUT( i ) << B.SCLK( 0 ); i++;
Drv_SCLK.OUT( i ) << B.SCLK( 1 )
<< B.SCLK( 2 ); i++;
Drv_SCLK.OUT( i ) << B.SCLK( 3 )
<< B.SCLK( 4 ); i++;
Drv_SCLK.OUT( i ) << B.SCLK( 5 )
<< A.SCLK( 0 ); i++;
Drv_SCLK.OUT( i ) << A.SCLK( 1 )
<< A.SCLK( 2 ); i++;
Drv_SCLK.OUT( i ) << A.SCLK( 3 )
<< A.SCLK( 4 ); i++;
Drv_SCLK.OUT( i ) << A.SCLK( 5 ); i++;
n = 4; Drv_SCLK.OUT( i+n-1, i ) << IC.SCLK; i+=n;
n = 1; Drv_SCLK.OUT( i+n-1, i ) << "MPYI_SCLK"; i+=n;
DC.SCLK ^ CLC[ clc++ ] ^ GND;
IC.SCLK( 3 ) ^ CLC[ clc++ ] ^ GND;
i = 0;
Drv_DC_CLK.OUT( i++) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_DC_CLK";
n = 1; Drv_DC_CLK.OUT( i+n-1, i ) << DC.DC_CLK; i+=n;
n = 1; Drv_DC_CLK.OUT( i+n-1, i ) << HO.DC_CLK; i+=n;
n = 6; Drv_DC_CLK.OUT( i+n-1, i ) << A.DC_CLK; i+=n;
n = 6; Drv_DC_CLK.OUT( i+n-1, i ) << B.DC_CLK; i+=n;
merge( "/NC", Drv_DC_CLK.OUT( 15, i ) );
DC.DC_CLK ^ CLC_DC_CLK ^ GND;
i = 0;
Drv_DPU_CLK.OUT( i++) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_DPU_CLK";
Drv_DPU_CLK.OUT( i ) << B.DPU_CLK( 0 ); i++;
Drv_DPU_CLK.OUT( i ) << B.DPU_CLK( 1 )
<< B.DPU_CLK( 2 ); i++;
Drv_DPU_CLK.OUT( i ) << B.DPU_CLK( 3 )
<< B.DPU_CLK( 4 ); i++;
Drv_DPU_CLK.OUT( i ) << B.DPU_CLK( 5 )
<< A.DPU_CLK( 0 ); i++;
Drv_DPU_CLK.OUT( i ) << A.DPU_CLK( 1 )
<< A.DPU_CLK( 2 ); i++;
Drv_DPU_CLK.OUT( i ) << A.DPU_CLK( 3 )
<< A.DPU_CLK( 4 ); i++;
Drv_DPU_CLK.OUT( i ) << A.DPU_CLK( 5 ); i++;
merge( "/NC", Drv_DPU_CLK.OUT( 9, i ) );
Drv_TCLK.OUT( 0 ) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_TCLK";
Drv_DCLK.OUT( 0 ) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_DCLK";
Drv_HPU_CLK.OUT( 0 ) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_HPU_CLK";
Drv_DXINT_CLK.OUT( 0 ) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_DXINT_CLK";
Drv_VME_CLK.OUT( 0 ) << NoisyPLD.MEAS_IN( m++ ) << "MEAS_VME_CLK";
Drv_DCLK.OUT( 3, 1 ) << DX.DCLK; merge( "/NC", Drv_DCLK.OUT( 8, 4 ) );
Drv_HPU_CLK.OUT( 1 ) << HO.HPU_CLK; merge( "/NC", Drv_HPU_CLK.OUT( 9, 2 ) );
Drv_DXINT_CLK.OUT( 4, 1 ) << DX.DXINT_CLK; merge( "/NC", Drv_DXINT_CLK.OUT( 9, 5 ) );
Drv_VME_CLK.OUT( 3, 1 ) << VME.VME_CLK; merge( "/NC", Drv_VME_CLK.OUT( 9, 4 ) );
Drv_TCLK.OUT( 4, 1 ) << IC.TCLK;
Drv_TCLK.OUT( 5 ) << "MPYI_TCLK";
merge( "/NC", Drv_TCLK.OUT( 8, 6 ) );
IC.TCLK( 3 ) ^ CLC[ clc++ ] ^ GND;
B.DX_CLK( 0 ) ^ CLC[ clc++ ] ^ GND;
A.DX_CLK( 5 ) ^ CLC[ clc++ ] ^ GND;
B.SCLK( 0 ) ^ CLC[ clc++ ] ^ GND;
A.SCLK( 5 ) ^ CLC[ clc++ ] ^ GND;
"BP_RCLKO" << Drv_RCLK1.OUT( 9 ) << Drv_BP_RCLKO.IN;
"BP_SCLKO" << Drv_SCLK.OUT( 15 ) << Drv_BP_SCLKO.IN;
"BP_TCLKO" << Drv_TCLK.OUT( 9 ) << Drv_BP_TCLKO.IN;
"BP_DCLKO" << Drv_DCLK.OUT( 9 ) << Drv_BP_DCLKO.IN;
Drv_BP_RCLKO.OUT_P << BK.RCLKOP;
Drv_BP_RCLKO.OUT_N << BK.RCLKON;
Drv_BP_SCLKO.OUT_P << BK.SCLKOP;
Drv_BP_SCLKO.OUT_N << BK.SCLKON;
Drv_BP_TCLKO.OUT_P << BK.TCLKOP;
Drv_BP_TCLKO.OUT_N << BK.TCLKON;
Drv_BP_DCLKO.OUT_P << BK.DCLKOP;
Drv_BP_DCLKO.OUT_N << BK.DCLKON;
Rcv_BP_RCLKI.IN_P1 << BK.RCLKIP << DTerm_BP_RCLKI.A;
Rcv_BP_RCLKI.IN_N1 << BK.RCLKIN << DTerm_BP_RCLKI.B;
Rcv_BP_TCLKI.IN_P1 << BK.TCLKIP << DTerm_BP_TCLKI.A;
Rcv_BP_TCLKI.IN_N1 << BK.TCLKIN << DTerm_BP_TCLKI.B;
Rcv_FP_RCLKI.IN_P1 << FP.RCLKIP << DTerm_FP_RCLKI.A;
Rcv_FP_RCLKI.IN_N1 << FP.RCLKIN << DTerm_FP_RCLKI.B;
Rcv_FP_TCLKI.IN_P1 << FP.TCLKIP << DTerm_FP_TCLKI.A;
Rcv_FP_TCLKI.IN_N1 << FP.TCLKIN << DTerm_FP_TCLKI.B;
"BP_RCLKI" ^ STerm_BP_RCLKI ^ "LOC_BP_RCLKI" << Rcv_BP_RCLKI.OUT1;
"BP_TCLKI" ^ STerm_BP_TCLKI ^ "LOC_BP_TCLKI" << Rcv_BP_TCLKI.OUT1;
"FP_RCLKI" ^ STerm_FP_RCLKI ^ "LOC_FP_RCLKI" << Rcv_FP_RCLKI.OUT1;
"FP_TCLKI" ^ STerm_FP_TCLKI ^ "LOC_FP_TCLKI" << Rcv_FP_TCLKI.OUT1;
"/NC" << Rcv_BP_RCLKI.IN_P2;
"/NC" << Rcv_BP_RCLKI.IN_N2;
"/NC" << Rcv_BP_RCLKI.OUT2;
"/NC" << Rcv_BP_TCLKI.IN_P2;
"/NC" << Rcv_BP_TCLKI.IN_N2;
"/NC" << Rcv_BP_TCLKI.OUT2;
"/NC" << Rcv_FP_RCLKI.IN_P2;
"/NC" << Rcv_FP_RCLKI.IN_N2;
"/NC" << Rcv_FP_RCLKI.OUT2;
"/NC" << Rcv_FP_TCLKI.IN_P2;
"/NC" << Rcv_FP_TCLKI.IN_N2;
"/NC" << Rcv_FP_TCLKI.OUT2;
property( CR_MatchClock, Match1 );
property( CR_MatchClock, Match2 );
property( CR_MatchClock, Match3 );
property( CR_MatchClock, Match4 );
property( CR_MatchClock, Match5 );
property( CR_MatchClock, Match6 );
property( CR_MatchClock, Match7 );
property( CR_MatchClock, Match8 );
property( CR_MatchClock, Match9 );
int mp = 0;
Match1 <= Drv_RCLK0.OUT <= Drv_RCLK1.OUT;
for ( int i = 0; i <= 9; ++i ) { Mono[ mp++ ].A << Drv_RCLK0.OUT( i ); }
for ( int i = 1; i <= 8; ++i ) { Mono[ mp++ ].A << Drv_RCLK1.OUT( i ); }
Match2 <= Drv_SCLK.OUT;
for ( int i = 3; i <= 13; ++i ) { Mono[ mp++ ].A << Drv_SCLK.OUT( i ); }
Mono[ mp++ ].A << Drv_SCLK.OUT( 1 );
Match3 <= Drv_TCLK.OUT;
for ( int i = 1; i <= 4; ++i ) { Mono[ mp++ ].A << Drv_TCLK.OUT( i ); }
Match4 <= Drv_DCLK.OUT;
Match5 <= Drv_DC_CLK.OUT;
Mono[ mp++ ].A << Drv_DC_CLK.OUT( 1 );
Match6 <= Drv_DX_CLK.OUT;
for ( int i = 1; i <= 11; ++i ) { Mono[ mp++ ].A << Drv_DX_CLK.OUT( i ); }
Match7 <= Drv_DXINT_CLK.OUT;
Match8 <= Drv_VME_CLK.OUT;
Match9 <= Drv_DPU_CLK.OUT; Match9.LongLengthMatchTolerance = -1;
for ( int i = 2; i <= 6; ++i ) { Mono[ mp++ ].A << Drv_DPU_CLK.OUT( i ); }
if ( mp != mono_count )
BEGERR << "CM_ClockGeneration::Connect(): mp value of " << mp << " does not equal mono_count" << ENDERR;
}
};
#endif