# EEPROM Connections
NET "pEeprom_C"		LOC = "F14";
NET "pEeprom_nS"	LOC = "B5";
NET "pEeprom_D"		LOC = "F15";
NET "pEeprom_Q"		LOC = "F13";
NET "pIO<0>"		LOC = "C1";
NET "pIO<1>"		LOC = "C2";
NET "pIO<2>"		LOC = "B1";
NET "pIO<3>"		LOC = "A2";
NET "pIO<4>"		LOC = "B3";
NET "pIO<5>"		LOC = "A3";
NET "pIO<6>"		LOC = "B4";
NET "pIO<7>"		LOC = "A4";
NET "pIO<8>"		LOC = "C5";
NET "pIO<9>"		LOC = "A5";
NET "pIO<10>"		LOC = "D6";
NET "pIO<11>"		LOC = "C6";
NET "pIO<12>"		LOC = "E7";
NET "pIO<13>"		LOC = "C7";
NET "pIO<14>"		LOC = "A7";
NET "pIO<15>"		LOC = "D8";
NET "pIO<16>"		LOC = "D9";
NET "pIO<17>"		LOC = "A9";
NET "pIO<18>"		LOC = "D10";
NET "pIO<19>"		LOC = "C10";
NET "pIO<20>"		LOC = "E11";
NET "pIO<21>"		LOC = "C11";
NET "pIO<22>"		LOC = "A11";
NET "pIO<23>"		LOC = "D12";
NET "pIO<24>"		LOC = "A12";
NET "pIO<25>"		LOC = "B13";
NET "pIO<26>"		LOC = "A14";
NET "pIO<27>"		LOC = "B16";
NET "pIO<28>"		LOC = "D16";
NET "pIO<29>"		LOC = "E14";
NET "pIO<30>"		LOC = "E16";
NET "pIO<31>"		LOC = "F12";
NET "pIO<32>"		LOC = "E15";
NET "pIO<33>"		LOC = "E13";
NET "pIO<34>"		LOC = "C16";
NET "pIO<35>"		LOC = "C15";
NET "pIO<36>"		LOC = "A13";
NET "pIO<37>"		LOC = "C13";
NET "pIO<38>"		LOC = "B12";
NET "pIO<39>"		LOC = "C12";
NET "pIO<40>"		LOC = "B11";
NET "pIO<41>"		LOC = "D11";
NET "pIO<42>"		LOC = "A10";
NET "pIO<43>"		LOC = "B10";
NET "pIO<44>"		LOC = "E10";
NET "pIO<45>"		LOC = "B9";
NET "pIO<46>"		LOC = "A8";
NET "pIO<47>"		LOC = "C8";
NET "pIO<48>"		LOC = "B7";
NET "pIO<49>"		LOC = "D7";
NET "pIO<50>"		LOC = "A6";
NET "pIO<51>"		LOC = "B6";
NET "pIO<52>"		LOC = "E6";
#
NET "pTestLed" LOC = "D5";
NET "pIRQ<0>"		LOC = G5 | IOBDELAY = NONE | PULLUP;
#NET "pIRQ<1>"		LOC = F1
#NET "pIRQ<2>"		LOC = E2
#NET "pIRQ<3>"		LOC = E3
#NET "XF<0>"		LOC = D2
#NET "XF<1>"		LOC = E1
NET "pFpgaCS<0>" LOC = "H2" | IOBDELAY = NONE  | SLEW = FAST;
NET "pFpgaCS<1>" LOC = "G2";
NET "pFpgaCS<2>" LOC = "F5";
NET "pFpgaCS<3>" LOC = "F3";
NET "pPFpgaCS<0>" LOC = "H1" | IOBDELAY = NONE  | SLEW = FAST;
NET "pPFpgaCS<1>" LOC = "F4";
NET "pPFpgaCS<2>" LOC = "F2";
NET "pPFpgaCS<3>" LOC = "E4";
NET "pnLRESET"	LOC = D1;
NET "pProgram<0>" LOC = "H3";
NET "pProgram<1>" LOC = "G3";
NET "pProgram<2>" LOC = "G4";
NET "pProgram<3>" LOC = "G1";
NET "pnSysRamWE" LOC = F16; # Send out slow so it is framed by CS
NET "pnSysRamOE" LOC = "K2" | IOBDELAY = NONE  | SLEW = FAST;
NET "pnSysRamCS" LOC = "K1" | IOBDELAY = NONE  | SLEW = FAST;
NET "pFpgaBusy" LOC = "H4";
NET "pFpgaCClk" LOC = "J4";
NET "pFpgaDone" LOC = "J1";
NET "pLD<0>"		LOC = K5 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<1>"		LOC = L1 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<2>"		LOC = L2 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<3>"		LOC = L3 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<4>"		LOC = L4 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<5>"		LOC = L5 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<6>"		LOC = M1 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<7>"		LOC = M2 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<8>"		LOC = M3 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<9>"		LOC = M4 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<10>"		LOC = N1 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<11>"		LOC = N2 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<12>"		LOC = P1 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<13>"		LOC = R1 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<14>"		LOC = T2 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<15>"		LOC = T3 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<16>"		LOC = T4 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<17>"		LOC = T5 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<18>"		LOC = R5 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<19>"		LOC = P5 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<20>"		LOC = N5 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<21>"		LOC = T6 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<22>"		LOC = R6 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<23>"		LOC = P6 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<24>"		LOC = N6 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<25>"		LOC = M6 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<26>"		LOC = T7 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<27>"		LOC = R7 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<28>"		LOC = P7 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<29>"		LOC = N7 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<30>"		LOC = M7 | IOBDELAY = NONE  | SLEW = FAST;
NET "pLD<31>"		LOC = T8 | IOBDELAY = NONE  | SLEW = FAST;
NET "pFpgaWrite" LOC = "J2";
NET "pFpgaInit" LOC = "J3";
##NET "DP<0>"		LOC = K4
##NET "DP<1>"		LOC = K3
##NET "DP<2>"		LOC = K16
##NET "DP<3>"		LOC = L14
NET "pLWnR"     LOC = P8;
NET "pLCLKA" LOC = "R8";
##NET "LCLKB"		LOC = N8
NET "pLA<2>" LOC = "N9" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<3>" LOC = "P9" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<4>" LOC = "R9" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<5>" LOC = "T9" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<6>" LOC = "M10" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<7>" LOC = "N10" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<8>" LOC = "P10" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<9>" LOC = "R10" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<10>" LOC = "T10" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<11>" LOC = "M11" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<12>" LOC = "N11" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<13>" LOC = "P11" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<14>" LOC = "R11" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<15>" LOC = "T11" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<16>" LOC = "N12" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<17>" LOC = "P12" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<18>" LOC = "R12" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<19>" LOC = "T12" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<20>" LOC = "P13" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<21>" LOC = "R13" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<22>" LOC = "T13" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<23>" LOC = "T14" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<24>" LOC = "T15" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<25>" LOC = "R16" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<26>" LOC = "P16" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<27>" LOC = "N14" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<28>" LOC = "N16" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<29>" LOC = "M13" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<30>" LOC = "M14" | IOBDELAY = NONE  | SLEW = FAST;
NET "pLA<31>" LOC = "M15" | IOBDELAY = NONE  | SLEW = FAST;
NET "pnBTERM" LOC = "L12";
NET "pnREADY" LOC = "L13" | IOBDELAY = NONE  | SLEW = FAST;
##NET "SYSINIT"		LOC = N15
NET "pBREQi" LOC = "M16" | SLEW = FAST;
##NET "BREQO"		LOC = H13
##NET "LSERR"		LOC = J16
NET "pnADS" LOC = "J15" | PULLUP;
##NET "PMEREQ"		LOC = K14
##NET "LINTO"		LOC = H15
NET "pLINTI"		LOC = L16;
##NET "DACK0"		L0C = K13
##NET "DACK1"		LOC = G15
##NET "DREQ0"		LOC = G12
##NET "DREQ1"		LOC = K12
##NET "WAIT"		LOC = L15
NET "pnBLAST" LOC = "J14";
NET "pLHOLD" LOC = "K15";
NET "pLHOLDA" LOC = "J13" | IOBDELAY = NONE  | SLEW = FAST;
##NET "DMPAF_EOT"		LOC = H14
NET "pnCCS" LOC = "G14";
NET "LCLKA" PERIOD = 15 ns HIGH 50 %;
NET "LCLKA" TNM_NET = "LCLK_BE";
#
# Timegroup containing all FFs clocked by the rising edge of LCLKA
TIMEGRP "LCLK_RE" = RISING  LCLK_BE;
#
# Timegroup containing all FFs clocked by the falling edge of LCLKA
TIMEGRP "LCLK_FE" = FALLING  LCLK_BE;
#
### Add constraints from inputs to FFs
TIMESPEC TS_InToFFsRe=FROM:PADS(*):TO:LCLK_RE:12;  # 3ns setup time, plenty
TIMESPEC TS_InToFFsFe=FROM:PADS(*):TO:LCLK_FE:5;   # 2.5ns setup time
TIMESPEC TS_LAToFFsRe=FROM:PADS(pLA*):TO:LCLK_RE:6;
#TIMESPEC TS_LDToFFsRe=FROM:PADS(pLD*):TO:LCLK_RE:6; # min of 1 cycle + 6ns, so not relevant
#
TIMESPEC TS_EEPROM_QTOFFsRE=FROM:PADS(pEeprom_Q):TO:LCLK_RE:12;
#
TIMESPEC TS_nADSTOFFsRE=FROM:PADS(pnADS):TO::LCLK_RE:6; ## Allow for 9ns clock to out time from PLX chip
TIMESPEC TS_nBLASTTOFFsRE=FROM:PADS(pnBLAST):TO::LCLK_RE:6; ## Allow for 9ns clock to out time from PLX chip
TIMESPEC TS_LHOLDTOFFsRE=FROM:PADS(pLHOLD):TO::LCLK_RE:6; ## Allow for 9ns clock to out time from PLX chip
TIMESPEC TS_LWnRTOFFsRE=FROM:PADS(pLWnR):TO::LCLK_RE:6; ## Allow for 9ns clock to out time from PLX chip
#
### Add constraints from FFs to outputs
TIMESPEC TS_FFsReToSysRamCS=FROM:LCLK_RE:TO:PADS(pnSysRamCS):6;
TIMESPEC TS_FFsReToSysRamOe=FROM:LCLK_RE:TO:PADS(pnSysRamOE):6;
TIMESPEC TS_FFsReToSysRamWe=FROM:LCLK_RE:TO:PADS(pnSysRamWE):6;
TIMESPEC TS_FFsReToLD=FROM:LCLK_RE:TO:PADS(pLD*):9.5;
TIMESPEC TS_FFsReToLA=FROM:LCLK_RE:TO:PADS(pLA*):9.5;
TIMESPEC TS_FFsReToEEPROM=FROM:LCLK_RE:TO:PADS(pEeprom_*):13;
TIMESPEC TS_FFsReToLHOLDA=FROM:LCLK_RE:TO:PADS(pLHOLDA):5;
TIMESPEC TS_FFsReTonREADY=FROM:LCLK_RE:TO:PADS(pnREADY):5;
TIMESPEC TS_FFsReTonBTERM=FROM:LCLK_RE:TO:PADS(pnBTERM):5;
#TIMESPEC TS_FFsReTonCCI=FROM:LCLK_RE:TO:PADS(pnCCI):5;
TIMESPEC TS_FFsReToBREQi=FROM:LCLK_RE:TO:PADS(pBREQi):8;

#
# Local bus signals which need to be out by the next rising clock edge
TIMESPEC TS_FFsReToFpgaCCLK=FROM:LCLK_RE:TO:PADS(pFpgaCClk):9;
TIMESPEC TS_FFsReToFpgaWrite=FROM:LCLK_RE:TO:PADS(pFpgaWrite):9;
TIMESPEC TS_FFsReToFpgaCS=FROM:LCLK_RE:TO:PADS(pFpgaCS*):8;
TIMESPEC TS_FFsReToPFpgaCS=FROM:LCLK_RE:TO:PADS(pPFpgaCS*):8;
TIMESPEC TS_FFsReToProgram=FROM:LCLK_RE:TO:PADS(pProgram*):10;
#
# Non-critical signals
TIMESPEC TS_FFsReToTestLed=FROM:LCLK_RE:TO:PADS(pTestLed):18;
#
### Add constraints from inputs to outputs
TIMESPEC TS_InToOut=FROM:PADS(*):TO:PADS(*):10;
#
# IO constraints
TIMESPEC TS_FFsReToIo=FROM:LCLK_RE:TO:PADS(pIO*):15;  # No hurry
TIMESPEC TS_IoToFFsRe=FROM:PADS(pIO*):TO:LCLK_RE:15;  # No hurry
#

