#ifndef _CRB_PowerH_ #define _CRB_PowerH_ #include "Headers.h" // The backplane subsystem supplies decoupling capacitors for the points of power entry onto the backplane. // Additional decoupling capacitors are provided in the other subsystems, i.e., in T_TimSlot and T_RodSlot // T_Power: class T_Power : public TModule { // Power subsystem public: // ***** member collections ***** // // ***** member ports ***** // port VCC5; // 5.0 V port VCC3; // 3.3 V port GND; // ***** member modules and parts ***** // T__HEADER10X2CS AuxPower; // auxiliary power connector: 9A max per voltage <<< Label this header on the silkscreen: "AUX Power" T__CHIP_LED_RED LedVcc5_[ 2 ]; // power indication LED's, one per supply per side (front/back) T__CHIP_LED_GRN LedVcc3_[ 2 ]; T__R220 Rled5_[ 2 ]; // resistors for LED's T__R110 Rled3_[ 2 ]; enum { // number of power and ground bugs v33_bug_count = 9, v50_bug_count = 9, gnd_bug_count = 18 }; T__UNIV_POWER_SITE_10 V3_Bug[ v33_bug_count ]; // for VCC3 (3.3V) T__UNIV_POWER_SITE_10 V5_Bug[ v50_bug_count ]; // for VCC5 (5.0V) T__UNIV_POWER_SITE_10 GndBug[ gnd_bug_count ]; // for GND (0.0V) // decoupling enum { // in addition to these decoupling capacitors, each slot has 2 caps per voltage -- see T_RodSlot and T_TimSlot v3_cdc_count = v33_bug_count, // >>> place one decoupling capacitor near each 3.3V power bug v5_cdc_count = v50_bug_count }; // >>> place one decoupling capacitor near each 5.0V power bug T__CDC_POS V3_CDC[ v3_cdc_count ]; // ceramic decoupling for backplane 3.3V T__CDC_POS V5_CDC[ v5_cdc_count ]; // ceramic decoupling for backplane 5.0V // >>> the mounting hole arrangement below matches that of the LHC standard VME64x backplane // >>> it allows the backplane ground to be connected to the chassis ground or not, depending on which mounting holes are populated enum { even_mounting_hole_count = 18, // >>> two mounting holes per slot, including unused slot 4 odd_mounting_hole_count = 18 }; // >>> two mounting holes per slot T__CRB_MOUNTING_HOLE EvenMountingHoles[ even_mounting_hole_count ]; // >>> mounting holes for even slots: two holes per slot, connected to ground T__CRB_MOUNTING_HOLE OddMountingHoles[ odd_mounting_hole_count ]; // >>> mounting holes for odd slots: two holes per slot, not connected virtual void Register() { // collections // ports reg( VCC5 ); reg( VCC3 ); reg( GND ); // parts and modules reg( AuxPower ); rega( LedVcc5_, 2 ); rega( LedVcc3_, 2 ); rega( Rled5_, 2 ); rega( Rled3_, 2 ); rega( V3_Bug, v33_bug_count ); rega( V5_Bug, v50_bug_count ); rega( GndBug, gnd_bug_count ); rega( V3_CDC, v3_cdc_count ); rega( V5_CDC, v5_cdc_count ); rega( EvenMountingHoles, even_mounting_hole_count ); rega( OddMountingHoles, odd_mounting_hole_count ); } virtual void Connect() { wireall( GND ); // mounting holes for ( int i = 0; i < even_mounting_hole_count; ++ i ) GND << EvenMountingHoles[ i ].A; for ( int i = 0; i < odd_mounting_hole_count; ++ i ) "/NC" << OddMountingHoles[ i ].A; // decoupling: for ( int i = 0; i < v3_cdc_count; ++ i ) VCC3 << V3_CDC[ i ].POS; for ( int i = 0; i < v5_cdc_count; ++ i ) VCC5 << V5_CDC[ i ].POS; // power bugs: for ( int i = 0; i < v33_bug_count; ++ i ) { VCC3 ^ V3_Bug[ i ]; } for ( int i = 0; i < v50_bug_count; ++ i ) { VCC5 ^ V5_Bug[ i ]; } for ( int i = 0; i < gnd_bug_count; ++ i ) { GND ^ GndBug[ i ]; } // <<< place AuxPower connector on back of backplane in unused slot 4 area, avoiding bus bar regions // the installed connector may be either a 10x1 x 3-amp or 10x2 x 1-amp connector // aux power connector: // cols 1 row x 3A/pin 2 row x 1A/pin merge( VCC5, AuxPower.P( 6, 1 ) ); // 3 9A 6A merge( GND, AuxPower.P( 16, 7 ) ); // 5 15A 10A merge( VCC3, AuxPower.P( 20, 17 ) ); // 2 6A 4A // LED's: int i = 0; // <<< place LED's in unused slot 4 area, avoiding bus bar regions VCC3 ^ Rled3_[ 0 ] ^ "LED_V3_0" << LedVcc3_[ 0 ].ANODE; // <<< place one Vcc3 LED on the front of the backplane, one on the back VCC3 ^ Rled3_[ 1 ] ^ "LED_V3_1" << LedVcc3_[ 1 ].ANODE; VCC5 ^ Rled5_[ 0 ] ^ "LED_V5_0" << LedVcc5_[ 0 ].ANODE; // <<< place one Vcc5 LED on the front of the backplane, one on the back VCC5 ^ Rled5_[ 1 ] ^ "LED_V5_1" << LedVcc5_[ 1 ].ANODE; // <<< place all Rled's on back of backplane GND << LedVcc3_[ 0 ].CATHODE; // <<< for best solderability, trace between LED's and ground via should be >= 1 inch GND << LedVcc3_[ 1 ].CATHODE; GND << LedVcc5_[ 0 ].CATHODE; GND << LedVcc5_[ 1 ].CATHODE; } }; #endif