#ifndef _HalfRODH_
#define _HalfRODH_
#include "interconnect.h"
#include "dpu_control.h"
#include "clock_generation.h"
#include "data_exchange.h"
#include "gpu.h"
class CM_HalfROD : public TModule {
public:
CB_Half_CG CG;
CB_Half_DC DC;
CB_Half_DX DX;
CB_Half_IC IC;
CB_Half_JT JT;
port DSP_VCC;
port DSP_VB;
port DSP_VA;
port GND;
CM_DPU DPU[ DPU_HalfCount ];
enum { vc_tdc_count = 1,
vb_tdc_count = 1,
va_tdc_count = 1 };
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( CG );
reg( DC );
reg( DX );
reg( IC );
reg( JT );
reg( DSP_VCC );
reg( DSP_VB );
reg( DSP_VA );
reg( GND );
rega( DPU, DPU_HalfCount );
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
DPU[ i ].SetReferenceBase( CSTRING( i ) );
}
rega( VC_TDC, vc_tdc_count );
rega( VB_TDC, vb_tdc_count );
rega( VA_TDC, va_tdc_count );
}
virtual void Connect() {
wireall( DSP_VCC );
wireall( DSP_VB );
wireall( DSP_VA );
wireall( GND );
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;
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
for ( int s = 0; s < 3; ++ s ) {
if ( i & ( 1 << s ) ) DPU[ i ].STRAP( s ) << DSP_VCC;
else DPU[ i ].STRAP( s ) << GND;
}
}
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
CG.DC_CLK( i ) << DPU[ i ].Clocks.DC_CLK;
CG.RCLK( i ) << DPU[ i ].Clocks.RCLK;
CG.DPU_CLK( i ) << DPU[ i ].Clocks.CLKIN;
CG.SCLK( i ) << DPU[ i ].Clocks.SCLK;
CG.DX_CLK( i ) << DPU[ i ].Clocks.DX_CLK;
}
for ( int i = 0; i < DPU_HalfCount; ++ i ) {
DC << DPU[ i ].DC;
DX << DPU[ i ].DX;
IC.IC_BUS << DPU[ i ].IC_BUS;
IC.IC_DPU[ i ] << DPU[ i ].IC_DPU;
JT.EMU[ i ] << DPU[ i ].Emulator;
JT.CONF[ i ] << DPU[ i ].CONF;
}
}
};
#endif