Coolquest, Inc. Home Products Support About Contact
cbold_logo_gif C++BOLD Example Design: IROD cbold_logo_gif

Design Home <<  File View  >> Class View Output (partial) Parts Library Examples Home

 

// THIS FILE IS IN THE PUBLIC DOMAIN.
// IT IS PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
// NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
#ifndef _QuietPLDH_
#define _QuietPLDH_
 
#include "xc95144xl_100.h"
 
class CM_QuietPLD : public TModule {    // PLD for Clock Generation subsystem
public:
// ***** member bundles ***** //
  CB_JTAG  JTAG;
 
// ***** member ports ***** //
  port VCC;         // 3.3V
  port GND;
  port SOFTRESET_N;
 
  port  QD;              // quiet versions of Host EMIF bus, from Noisy PLD
  port  QA;
  port  QWR_N;
  port  QSTB_N;
 
  port  IRCLK;          // clocks from which SYN_BASE can be derived
  port  ISCLK;
  port  ITCLK;
 
  port  DERIVED_BASE;    // one of the above clock inputs divided down
 
                         // address bits for primary multiplexers
  port  MuxA_RCLK;       //   2 bits
  port  MuxA_SCLK;       //   2
  port  MuxA_TCLK;       //   2
  port  MuxA_DCLK;       //   2
  port  MuxA_DC_CLK;     //   2
  port  MuxA_DX_CLK;     //   2
  port  MuxA_HPU_CLK;    //   1
  port  MuxA_SYN_BASE;   //   1
                         // address bits for secondary multiplexers
  port  SMuxA_RCLK;      //   2 bits
  port  SMuxA_TCLK;      //   2
                         // frequency selects for multipliers
  port  MpyFS_IRCLK;     //   2 bits
  port  MpyFS_ISCLK;     //   2
  port  MpyFS_ITCLK;     //   2
 
  port  DrvSCK_IRCLK;    // serial clocks for CDC319 drivers
  port  DrvSCK_ISCLK;
  port  DrvSCK_ITCLK;
  port  DrvSCK_SYN_BASE;
 
  port  SynSCK_RCLK;     // synthesizer serial clocks
  port  SynSCK_SCLK;
  port  SynSCK_TCLK;
  port  SynSCK_DCLK;
  port  SynSCK_DC_CLK;
  port  SynSCK_DX_CLK;
  port  SynSCK_HPU_CLK;
  port  SynSCK_DPU_CLK;
  port  SynSCK_DXINT_CLK;
 
  port  SynSEL_CD;       // synthesizer SEL_CD, to all synthesizers
 
  port  SD;              // serial data, to all synthesizers and CDC319 drivers
  port  OscOE_HPU;       // output enables for HPU oscillators
 
 
// ***** member modules and parts ***** //
  CP_XC95144XL_100  Cpld;
 
 
  // decoupling
  enum { vc_cdc_count =  4,
         vc_tdc_count =  1 };
  CP_CDC_POS  VC_CDC[ vc_cdc_count ];    // ceramic decoupling
  CP_TDC_POS  VC_TDC[ vc_tdc_count ];    // tantalum decoupling
 
 
  virtual void Register() {
// bundles
    reg( JTAG );
 
// ports
    reg(  VCC      );
    reg(  GND      );
    reg(  SOFTRESET_N  );
 
    regb( QD, 7, 0 );
    reg(  QA       );
    reg(  QWR_N    );
    reg(  QSTB_N   );
 
    reg(  IRCLK );
    reg(  ISCLK );
    reg(  ITCLK );
 
    reg(  DERIVED_BASE );
 
    regb( MuxA_RCLK,   1, 0 );   //   2 bits
    regb( MuxA_SCLK,   1, 0 );   //   2
    regb( MuxA_TCLK,   1, 0 );   //   2
    regb( MuxA_DCLK,   1, 0 );   //   2
    regb( MuxA_DC_CLK, 1, 0 );   //   2
    regb( MuxA_DX_CLK, 1, 0 );   //   2
    reg(  MuxA_HPU_CLK      );   //   1
    reg(  MuxA_SYN_BASE     );   //   1
 
    regb( SMuxA_RCLK,  1, 0 );   //   2 bits
    regb( SMuxA_TCLK,  1, 0 );   //   2
 
    regb( MpyFS_IRCLK, 1, 0 );   //   2 bits
    regb( MpyFS_ISCLK, 1, 0 );   //   2
    regb( MpyFS_ITCLK, 1, 0 );   //   2
 
    reg(  DrvSCK_IRCLK      );
    reg(  DrvSCK_ISCLK      );
    reg(  DrvSCK_ITCLK      );
    reg(  DrvSCK_SYN_BASE   );
 
    reg(  SynSCK_RCLK );
    reg(  SynSCK_SCLK );
    reg(  SynSCK_TCLK );
    reg(  SynSCK_DCLK );
    reg(  SynSCK_DC_CLK     );
    reg(  SynSCK_DX_CLK     );
    reg(  SynSCK_HPU_CLK    );
    reg(  SynSCK_DPU_CLK    );
    reg(  SynSCK_DXINT_CLK  );
 
    reg(  SynSEL_CD );
 
    reg(  SD );
    reg(  OscOE_HPU  );
 
// parts and modules
    reg(  Cpld );
    rega( VC_CDC, vc_cdc_count );
    rega( VC_TDC, vc_tdc_count );
  }
 
  virtual void Connect() {
    wireall( GND );
    wire(    VCC );
    VCC << Cpld.VCCIO;
 
    for ( int i = 0; i < vc_cdc_count; ++ i )  VCC << VC_CDC[ i ].POS;
    for ( int i = 0; i < vc_tdc_count; ++ i )  VCC << VC_TDC[ i ].POS;
 
    wire( JTAG, Cpld );
 
    "/NC"         <<  Cpld.IO1_GTS3;
    "/NC"         <<  Cpld.IO2_GTS4;
 
    "QGTS"        <<  Cpld.IO3_GTS1;      // may be helpful for readback
    "QGTS"        <<  Cpld.IO4_GTS2;
 
    "/NC"         <<  Cpld.IO6;
    "/NC"         <<  Cpld.IO7;
 
    IRCLK         <<  Cpld.IO8;
    ISCLK         <<  Cpld.IO9;
    ITCLK         <<  Cpld.IO10;
 
    "/NC"         <<  Cpld.IO11;
 
    OscOE_HPU     <<  Cpld.IO12;
 
    "/NC"         <<  Cpld.IO13;
    "/NC"         <<  Cpld.IO14;
    "/NC"         <<  Cpld.IO15;
 
    DERIVED_BASE  <<  Cpld.IO16;
 
    "/NC"         <<  Cpld.IO17;
    "/NC"         <<  Cpld.IO18;
 
    SynSEL_CD     <<  Cpld.IO19;
    "/NC"         <<  Cpld.IO20;
 
    "/NC"         <<  Cpld.IO22_GCK1;
 
    QSTB_N        <<  Cpld.IO23_GCK2;
 
    "/NC"         <<  Cpld.IO24;
    "/NC"         <<  Cpld.IO25;
 
    "DERIVED_OUT"     <<  Cpld.IO27_GCK3;    // clock to be divided to get DERIVED_BASE
    "DERIVED_OUT"     <<  Cpld.IO28;         // avoid possible HDL synthesizer confusion
 
    "/NC"             <<  Cpld.IO29;
    "/NC"             <<  Cpld.IO30;
 
    SD                <<  Cpld.IO32;
 
    MuxA_RCLK( 0 )    <<  Cpld.IO33;
    MuxA_RCLK( 1 )    <<  Cpld.IO34;
    MuxA_SCLK( 0 )    <<  Cpld.IO35;
    MuxA_SCLK( 1 )    <<  Cpld.IO36;
    MuxA_TCLK( 0 )    <<  Cpld.IO37;
    MuxA_TCLK( 1 )    <<  Cpld.IO39;
    MuxA_DCLK( 0 )    <<  Cpld.IO40;
    MuxA_DCLK( 1 )    <<  Cpld.IO41;
    MuxA_DC_CLK( 0 )  <<  Cpld.IO42;
    MuxA_DC_CLK( 1 )  <<  Cpld.IO43;
    MuxA_DX_CLK( 0 )  <<  Cpld.IO46;
    MuxA_DX_CLK( 1 )  <<  Cpld.IO49;
    MuxA_HPU_CLK      <<  Cpld.IO50;
    MuxA_SYN_BASE     <<  Cpld.IO52;
 
    SMuxA_RCLK( 0 )   <<  Cpld.IO53;
    SMuxA_RCLK( 1 )   <<  Cpld.IO54;
    SMuxA_TCLK( 0 )   <<  Cpld.IO55;
    SMuxA_TCLK( 1 )   <<  Cpld.IO56;
    "/NC"             <<  Cpld.IO58;
    "/NC"             <<  Cpld.IO59;
 
    MpyFS_IRCLK( 0 )  <<  Cpld.IO60;
    MpyFS_IRCLK( 1 )  <<  Cpld.IO61;
    MpyFS_ISCLK( 0 )  <<  Cpld.IO63;
    MpyFS_ISCLK( 1 )  <<  Cpld.IO64;
    MpyFS_ITCLK( 0 )  <<  Cpld.IO65;
    MpyFS_ITCLK( 1 )  <<  Cpld.IO66;
 
 
    DrvSCK_IRCLK      <<  Cpld.IO67;
    DrvSCK_ISCLK      <<  Cpld.IO68;
    DrvSCK_ITCLK      <<  Cpld.IO70;
    DrvSCK_SYN_BASE   <<  Cpld.IO71;
 
    SynSCK_RCLK       <<  Cpld.IO72;
    SynSCK_SCLK       <<  Cpld.IO73;
    SynSCK_TCLK       <<  Cpld.IO74;
    SynSCK_DCLK       <<  Cpld.IO76;
    SynSCK_DC_CLK     <<  Cpld.IO77;
    SynSCK_DX_CLK     <<  Cpld.IO78;
    SynSCK_HPU_CLK    <<  Cpld.IO79;
    SynSCK_DPU_CLK    <<  Cpld.IO80;
    SynSCK_DXINT_CLK  <<  Cpld.IO81;
 
    "/NC"             <<  Cpld.IO82;
    "/NC"             <<  Cpld.IO85;
 
    int i = 0;
    QD( i++ )  <<  Cpld.IO86;   // bus from Noisy PLD
    QD( i++ )  <<  Cpld.IO87;
    QD( i++ )  <<  Cpld.IO89;
    QD( i++ )  <<  Cpld.IO90;
    QD( i++ )  <<  Cpld.IO91;
    QD( i++ )  <<  Cpld.IO92;
    QD( i++ )  <<  Cpld.IO93;
    QD( i++ )  <<  Cpld.IO94;
 
    QA           <<  Cpld.IO95;
    QSTB_N       <<  Cpld.IO96;     // avoid possible HDL synthesizer confusion
    QWR_N        <<  Cpld.IO97;
    SOFTRESET_N  <<  Cpld.IO99_GSR;
  }
};
 
#endif

 

Design Home <<  File View  >> Class View Output (partial) Parts Library Examples Home

Legal Copyright © 2007 by Coolquest, Inc. Contact