; --------------------------------------------------------------------------------
; @Props: NoMetaTags, NoIndex
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: zynq-init.cmm 9703 2016-07-25 20:03:38Z hlohn $


//  On the ZC702 board the only way to use the TRACE port is to attach the
//  XILINX HW_FMC-105-DEBUG board to J3 FMC1 connector.
//  A design that routes TRACECLK, TRACECTRL and TRACEDATA[15:0] signals has
//  to be programmed to the FPGA.
//  Execute the following steps to enable the TRACE port:
//   1) Connnect TDI and TDO (J5) with a jumper on the FMC card
//   2) Set SW10 to 11.
//   3) Call this script

PRINT "init MIO"
Data.Set ASD:0xF8000008 %Long %LE (Data.Long(ASD:0xF8000B00)&~0x0000FFFF)|0x0000DF0D
Data.Set ASD:0xF8000B00 %Long %LE (Data.Long(ASD:0xF8000B00)&~0x00000FFF)|0x00000011
Data.Set ASD:0xF8000B40 %Long %LE (Data.Long(ASD:0xF8000B40)&~0x00000FFF)|0x00000600
Data.Set ASD:0xF8000B44 %Long %LE (Data.Long(ASD:0xF8000B44)&~0x00000FFF)|0x00000600
Data.Set ASD:0xF8000B48 %Long %LE (Data.Long(ASD:0xF8000B48)&~0x00000FFF)|0x00000672
Data.Set ASD:0xF8000B4C %Long %LE (Data.Long(ASD:0xF8000B4C)&~0x00000FFF)|0x00000672
Data.Set ASD:0xF8000B50 %Long %LE (Data.Long(ASD:0xF8000B50)&~0x03FF8FFF)|0x00000674
Data.Set ASD:0xF8000B54 %Long %LE (Data.Long(ASD:0xF8000B54)&~0x00000FFF)|0x00000674
Data.Set ASD:0xF8000B58 %Long %LE (Data.Long(ASD:0xF8000B58)&~0x00000FFF)|0x00000600
Data.Set ASD:0xF8000B5C %Long %LE 0x00D6861C
Data.Set ASD:0xF8000B60 %Long %LE 0x00F9861C
Data.Set ASD:0xF8000B64 %Long %LE 0x00F9861C
Data.Set ASD:0xF8000B68 %Long %LE 0x00D6861C
Data.Set ASD:0xF8000B6C %Long %LE (Data.Long(ASD:0xF8000B6C)&~0x00007FFF)|0x00000E09
Data.Set ASD:0xF8000B70 %Long %LE (Data.Long(ASD:0xF8000B70)&~0x00000021)|0x00000021
Data.Set ASD:0xF8000B70 %Long %LE (Data.Long(ASD:0xF8000B70)&~0x00000021)|0x00000020
Data.Set ASD:0xF8000B70 %Long %LE (Data.Long(ASD:0xF8000B70)&~0x07FFFFFF)|0x00000823
Data.Set ASD:0xF8000704 %Long %LE (Data.Long(ASD:0xF8000704)&~0x00003FFF)|0x00003302
Data.Set ASD:0xF8000708 %Long %LE (Data.Long(ASD:0xF8000708)&~0x00003FFF)|0x00000302
Data.Set ASD:0xF800070C %Long %LE (Data.Long(ASD:0xF800070C)&~0x00003FFF)|0x00000302
Data.Set ASD:0xF8000710 %Long %LE (Data.Long(ASD:0xF8000710)&~0x00003FFF)|0x00000302
Data.Set ASD:0xF8000714 %Long %LE (Data.Long(ASD:0xF8000714)&~0x00003FFF)|0x00000302
Data.Set ASD:0xF8000718 %Long %LE (Data.Long(ASD:0xF8000718)&~0x00003FFF)|0x00002302
Data.Set ASD:0xF8000720 %Long %LE (Data.Long(ASD:0xF8000720)&~0x00003FFF)|0x00002302
Data.Set ASD:0xF8000740 %Long %LE (Data.Long(ASD:0xF8000740)&~0x00003FFF)|0x00003902
Data.Set ASD:0xF8000744 %Long %LE (Data.Long(ASD:0xF8000744)&~0x00003FFF)|0x00003902
Data.Set ASD:0xF8000748 %Long %LE (Data.Long(ASD:0xF8000748)&~0x00003FFF)|0x00003902
Data.Set ASD:0xF800074C %Long %LE (Data.Long(ASD:0xF800074C)&~0x00003FFF)|0x00003902
Data.Set ASD:0xF8000750 %Long %LE (Data.Long(ASD:0xF8000750)&~0x00003FFF)|0x00003902
Data.Set ASD:0xF8000754 %Long %LE (Data.Long(ASD:0xF8000754)&~0x00003FFF)|0x00003902
Data.Set ASD:0xF8000758 %Long %LE (Data.Long(ASD:0xF8000758)&~0x00003FFF)|0x00001903
Data.Set ASD:0xF800075C %Long %LE (Data.Long(ASD:0xF800075C)&~0x00003FFF)|0x00001903
Data.Set ASD:0xF8000760 %Long %LE (Data.Long(ASD:0xF8000760)&~0x00003FFF)|0x00001903
Data.Set ASD:0xF8000764 %Long %LE (Data.Long(ASD:0xF8000764)&~0x00003FFF)|0x00001903
Data.Set ASD:0xF8000768 %Long %LE (Data.Long(ASD:0xF8000768)&~0x00003FFF)|0x00001903
Data.Set ASD:0xF800076C %Long %LE (Data.Long(ASD:0xF800076C)&~0x00003FFF)|0x00001903
Data.Set ASD:0xF8000770 %Long %LE (Data.Long(ASD:0xF8000770)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF8000774 %Long %LE (Data.Long(ASD:0xF8000774)&~0x00003FFF)|0x00001305
Data.Set ASD:0xF8000778 %Long %LE (Data.Long(ASD:0xF8000778)&~0x00003FFF)|0x00003304
Data.Set ASD:0xF800077C %Long %LE (Data.Long(ASD:0xF800077C)&~0x00003FFF)|0x00001305
Data.Set ASD:0xF8000780 %Long %LE (Data.Long(ASD:0xF8000780)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF8000784 %Long %LE (Data.Long(ASD:0xF8000784)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF8000788 %Long %LE (Data.Long(ASD:0xF8000788)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF800078C %Long %LE (Data.Long(ASD:0xF800078C)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF8000790 %Long %LE (Data.Long(ASD:0xF8000790)&~0x00003FFF)|0x00001305
Data.Set ASD:0xF8000794 %Long %LE (Data.Long(ASD:0xF8000794)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF8000798 %Long %LE (Data.Long(ASD:0xF8000798)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF800079C %Long %LE (Data.Long(ASD:0xF800079C)&~0x00003FFF)|0x00001304
Data.Set ASD:0xF80007A0 %Long %LE (Data.Long(ASD:0xF80007A0)&~0x00003FFF)|0x00003380
Data.Set ASD:0xF80007A4 %Long %LE (Data.Long(ASD:0xF80007A4)&~0x00003FFF)|0x00001380
Data.Set ASD:0xF80007A8 %Long %LE (Data.Long(ASD:0xF80007A8)&~0x00003FFF)|0x00001380
Data.Set ASD:0xF80007AC %Long %LE (Data.Long(ASD:0xF80007AC)&~0x00003FFF)|0x00001380
Data.Set ASD:0xF80007B0 %Long %LE (Data.Long(ASD:0xF80007B0)&~0x00003FFF)|0x00001380
Data.Set ASD:0xF80007B4 %Long %LE (Data.Long(ASD:0xF80007B4)&~0x00003FFF)|0x00001380
Data.Set ASD:0xF80007B8 %Long %LE (Data.Long(ASD:0xF80007B8)&~0x00003FFF)|0x00001221
Data.Set ASD:0xF80007BC %Long %LE (Data.Long(ASD:0xF80007BC)&~0x00003FFF)|0x00003220
Data.Set ASD:0xF80007C0 %Long %LE (Data.Long(ASD:0xF80007C0)&~0x00003FFF)|0x000032E0
Data.Set ASD:0xF80007C4 %Long %LE (Data.Long(ASD:0xF80007C4)&~0x00003FFF)|0x000012E1
Data.Set ASD:0xF80007C8 %Long %LE (Data.Long(ASD:0xF80007C8)&~0x00003FFF)|0x00001240
Data.Set ASD:0xF80007CC %Long %LE (Data.Long(ASD:0xF80007CC)&~0x00003FFF)|0x00001240
Data.Set ASD:0xF80007D0 %Long %LE (Data.Long(ASD:0xF80007D0)&~0x00003FFF)|0x00003280
Data.Set ASD:0xF80007D4 %Long %LE (Data.Long(ASD:0xF80007D4)&~0x00003FFF)|0x00001280
Data.Set ASD:0xF8000900 %Long %LE (Data.Long(ASD:0xF8000900)&~0x0000000F)|0x0000000F
Data.Set ASD:0xF8000004 %Long %LE (Data.Long(ASD:0xF8000004)&~0x0000FFFF)|0x0000767B

PRINT "init PLL"
// PS_CLK = 33.3MHz on ZC702 board
Data.Set ASD:0xF8000008 %Long %LE (Data.Long(ASD:0xF8000008)&~0x0000FFFF)|0x0000DF0D // SLCR_UNLOCK
Data.Set ASD:0xF8000110 %Long %LE (Data.Long(ASD:0xF8000110)&~0x003FFFF0)|0x000FA3C0 // ARM_PLL_CFG  (PLL_CP = 3)
Data.Set ASD:0xF8000100 %Long %LE (Data.Long(ASD:0xF8000100)&~0x0007F000)|0x0002B000 // ARM_PLL_CTRL (PLL_FDIV = 43.)
Data.Set ASD:0xF8000100 %Long %LE (Data.Long(ASD:0xF8000100)&~0x00000010)|0x00000010
Data.Set ASD:0xF8000100 %Long %LE (Data.Long(ASD:0xF8000100)&~0x00000001)|0x00000001
Data.Set ASD:0xF8000100 %Long %LE (Data.Long(ASD:0xF8000100)&~0x00000001)|0x00000000
WAIT ((Data.Long(ASD:0xF800010C)&0x00000001)!=0)
Data.Set ASD:0xF8000100 %Long %LE (Data.Long(ASD:0xF8000100)&~0x00000010)|0x00000000
Data.Set ASD:0xF8000120 %Long %LE (Data.Long(ASD:0xF8000120)&~0x1F003F30)|0x1F000200 // ARM_CLK_CTRL (using ARM PLL with DIVISOR = 2)
Data.Set ASD:0xF8000114 %Long %LE (Data.Long(ASD:0xF8000114)&~0x003FFFF0)|0x0012C220 // DDR_PLL_CFG
Data.Set ASD:0xF8000104 %Long %LE (Data.Long(ASD:0xF8000104)&~0x0007F000)|0x00020000 // DDR_PLL_CTRL
Data.Set ASD:0xF8000104 %Long %LE (Data.Long(ASD:0xF8000104)&~0x00000010)|0x00000010
Data.Set ASD:0xF8000104 %Long %LE (Data.Long(ASD:0xF8000104)&~0x00000001)|0x00000001
Data.Set ASD:0xF8000104 %Long %LE (Data.Long(ASD:0xF8000104)&~0x00000001)|0x00000000
WAIT ((Data.Long(ASD:0xF800010C)&0x00000002)!=0)
Data.Set ASD:0xF8000104 %Long %LE (Data.Long(ASD:0xF8000104)&~0x00000010)|0x00000000
Data.Set ASD:0xF8000124 %Long %LE (Data.Long(ASD:0xF8000124)&~0xFFF00003)|0x0C200003 // DDR_CLK_CTRL
Data.Set ASD:0xF8000118 %Long %LE (Data.Long(ASD:0xF8000118)&~0x003FFFF0)|0x001452C0 // IO_PLL_CFG
Data.Set ASD:0xF8000108 %Long %LE (Data.Long(ASD:0xF8000108)&~0x0007F000)|0x0001E000 // IO_PLL_CTRL
Data.Set ASD:0xF8000108 %Long %LE (Data.Long(ASD:0xF8000108)&~0x00000010)|0x00000010
Data.Set ASD:0xF8000108 %Long %LE (Data.Long(ASD:0xF8000108)&~0x00000001)|0x00000001
Data.Set ASD:0xF8000108 %Long %LE (Data.Long(ASD:0xF8000108)&~0x00000001)|0x00000000
WAIT ((Data.Long(ASD:0xF800010C)&0x00000004)!=0)
Data.Set ASD:0xF8000108 %Long %LE (Data.Long(ASD:0xF8000108)&~0x00000010)|0x00000000
Data.Set ASD:0xF8000004 %Long %LE (Data.Long(ASD:0xF8000004)&~0x0000FFFF)|0x0000767B // SLCR_LOCK
// CPU_6X4X := PS_CLK * (ARM_PLL_CTRL[PLL_FDIV]) / ARM_CLK_CTRL[DIVISOR]
// => CPU uses CPU_6X4X which is about 716.67 MHz

PRINT "init clocks"
Data.Set ASD:0xF8000008 %Long %LE (Data.Long(ASD:0xF8000008)&~0x0000FFFF)|0x0000DF0D // SLCR_UNLOCK
Data.Set ASD:0xF8000128 %Long %LE (Data.Long(ASD:0xF8000128)&~0x03F03F01)|0x00302300 // DCI_CLK_CTRL
Data.Set ASD:0xF8000140 %Long %LE (Data.Long(ASD:0xF8000140)&~0x03F03F71)|0x00102801 // GEM0_CLK_CTRL
Data.Set ASD:0xF800014C %Long %LE (Data.Long(ASD:0xF800014C)&~0x00003F31)|0x00000721
Data.Set ASD:0xF8000150 %Long %LE (Data.Long(ASD:0xF8000150)&~0x00003F33)|0x00001401
Data.Set ASD:0xF8000154 %Long %LE (Data.Long(ASD:0xF8000154)&~0x00003F33)|0x00001402
Data.Set ASD:0xF800015C %Long %LE (Data.Long(ASD:0xF800015C)&~0x03F03F33)|0x00300E01
Data.Set ASD:0xF8000164 %Long %LE (Data.Long(ASD:0xF8000164)&~0x00003F73)|0x00000543  // DBG_CLK_CTRL : EMIO trace clock (~ 200.0 MHz)
;Data.Set ASD:0xF8000164 %Long %LE (Data.Long(ASD:0xF8000164)&~0x00003F73)|0x00000223  // DBG_CLK_CTRL : ARM PLL / 2  (~ 477.78 MHz)
Data.Set ASD:0xF8000168 %Long %LE (Data.Long(ASD:0xF8000168)&~0x00003F31)|0x00000501
Data.Set ASD:0xF8000170 %Long %LE (Data.Long(ASD:0xF8000170)&~0x03F03F30)|0x00100500
Data.Set ASD:0xF8000180 %Long %LE (Data.Long(ASD:0xF8000180)&~0x03F03F30)|0x00101400
Data.Set ASD:0xF8000190 %Long %LE (Data.Long(ASD:0xF8000190)&~0x03F03F30)|0x00101400
Data.Set ASD:0xF80001A0 %Long %LE (Data.Long(ASD:0xF80001A0)&~0x03F03F30)|0x00101400
Data.Set ASD:0xF80001B0 %Long %LE (Data.Long(ASD:0xF80001B0)&~0x00000001)|0x00000000
Data.Set ASD:0xF80001C0 %Long %LE (Data.Long(ASD:0xF80001C0)&~0x0000003F)|0x00000001
Data.Set ASD:0xF80001C4 %Long %LE (Data.Long(ASD:0xF80001C4)&~0x00000001)|0x00000001
Data.Set ASD:0xF800012C %Long %LE (Data.Long(ASD:0xF800012C)&~0x01FFCCCD)|0x01ED044D
Data.Set ASD:0xF8000004 %Long %LE (Data.Long(ASD:0xF8000004)&~0x0000FFFF)|0x0000767B

PRINT "init DDR"
Data.Set ASD:0xF8006000 %Long %LE (Data.Long(ASD:0xF8006000)&~0x00003F81)|0x00000080
Data.Set ASD:0xF8006004 %Long %LE (Data.Long(ASD:0xF8006004)&~0x1FFFFFFF)|0x00081081
Data.Set ASD:0xF8006008 %Long %LE (Data.Long(ASD:0xF8006008)&~0x03FFFFFF)|0x03C0780F
Data.Set ASD:0xF800600C %Long %LE (Data.Long(ASD:0xF800600C)&~0x03FFFFFF)|0x02001001
Data.Set ASD:0xF8006010 %Long %LE (Data.Long(ASD:0xF8006010)&~0x03FFFFFF)|0x00014001
Data.Set ASD:0xF8006014 %Long %LE (Data.Long(ASD:0xF8006014)&~0x001FFFFF)|0x0004159B
Data.Set ASD:0xF8006018 %Long %LE (Data.Long(ASD:0xF8006018)&~0xF7FFFFFF)|0x44E438D2
Data.Set ASD:0xF800601C %Long %LE 0x720238E5
Data.Set ASD:0xF8006020 %Long %LE (Data.Long(ASD:0xF8006020)&~0xFFFFFFFC)|0x27287290
Data.Set ASD:0xF8006024 %Long %LE (Data.Long(ASD:0xF8006024)&~0x0FFFFFFF)|0x0000003C
Data.Set ASD:0xF8006028 %Long %LE (Data.Long(ASD:0xF8006028)&~0x00003FFF)|0x00002007
Data.Set ASD:0xF800602C %Long %LE 0x00000008
Data.Set ASD:0xF8006030 %Long %LE 0x00040930
Data.Set ASD:0xF8006034 %Long %LE (Data.Long(ASD:0xF8006034)&~0x13FF3FFF)|0x00010014
Data.Set ASD:0xF8006038 %Long %LE (Data.Long(ASD:0xF8006038)&~0x00001FC3)|0x00000000
Data.Set ASD:0xF800603C %Long %LE (Data.Long(ASD:0xF800603C)&~0x000FFFFF)|0x00000777
Data.Set ASD:0xF8006040 %Long %LE 0xFFF00000
Data.Set ASD:0xF8006044 %Long %LE (Data.Long(ASD:0xF8006044)&~0x0FFFFFFF)|0x0F666666
Data.Set ASD:0xF8006048 %Long %LE (Data.Long(ASD:0xF8006048)&~0x3FFFFFFF)|0x0003C248
Data.Set ASD:0xF8006050 %Long %LE (Data.Long(ASD:0xF8006050)&~0xFF0F8FFF)|0x77010800
Data.Set ASD:0xF8006058 %Long %LE (Data.Long(ASD:0xF8006058)&~0x0001FFFF)|0x00000101
Data.Set ASD:0xF800605C %Long %LE (Data.Long(ASD:0xF800605C)&~0x0000FFFF)|0x00005003
Data.Set ASD:0xF8006060 %Long %LE (Data.Long(ASD:0xF8006060)&~0x000017FF)|0x0000003E
Data.Set ASD:0xF8006064 %Long %LE (Data.Long(ASD:0xF8006064)&~0x00021FE0)|0x00020000
Data.Set ASD:0xF8006068 %Long %LE (Data.Long(ASD:0xF8006068)&~0x03FFFFFF)|0x00284141
Data.Set ASD:0xF800606C %Long %LE (Data.Long(ASD:0xF800606C)&~0x0000FFFF)|0x00001610
Data.Set ASD:0xF80060A0 %Long %LE (Data.Long(ASD:0xF80060A0)&~0x00FFFFFF)|0x00008000
Data.Set ASD:0xF80060A4 %Long %LE 0x10200802
Data.Set ASD:0xF80060A8 %Long %LE 0x0020CB73
Data.Set ASD:0xF80060AC %Long %LE (Data.Long(ASD:0xF80060AC)&~0x000001FF)|0x000001FE
Data.Set ASD:0xF80060B0 %Long %LE (Data.Long(ASD:0xF80060B0)&~0x1FFFFFFF)|0x1CFFFFFF
Data.Set ASD:0xF80060B4 %Long %LE (Data.Long(ASD:0xF80060B4)&~0x000007FF)|0x00000200
Data.Set ASD:0xF80060B8 %Long %LE (Data.Long(ASD:0xF80060B8)&~0x01FFFFFF)|0x00200066
Data.Set ASD:0xF80060BC %Long %LE (Data.Long(ASD:0xF80060BC)&~0x00FFFFFF)|0x00000000
Data.Set ASD:0xF80060C4 %Long %LE (Data.Long(ASD:0xF80060C4)&~0x00000003)|0x00000000
Data.Set ASD:0xF80060C8 %Long %LE (Data.Long(ASD:0xF80060C8)&~0x000000FF)|0x00000000
Data.Set ASD:0xF80060DC %Long %LE (Data.Long(ASD:0xF80060DC)&~0x00000001)|0x00000000
Data.Set ASD:0xF80060F0 %Long %LE (Data.Long(ASD:0xF80060F0)&~0x0000FFFF)|0x00000000
Data.Set ASD:0xF80060F4 %Long %LE (Data.Long(ASD:0xF80060F4)&~0x0000000F)|0x00000008
Data.Set ASD:0xF8006114 %Long %LE (Data.Long(ASD:0xF8006114)&~0x000000FF)|0x00000000
Data.Set ASD:0xF8006118 %Long %LE (Data.Long(ASD:0xF8006118)&~0x7FFFFFFF)|0x40000001
Data.Set ASD:0xF800611C %Long %LE (Data.Long(ASD:0xF800611C)&~0x7FFFFFFF)|0x40000001
Data.Set ASD:0xF8006120 %Long %LE (Data.Long(ASD:0xF8006120)&~0x7FFFFFFF)|0x40000001
Data.Set ASD:0xF8006124 %Long %LE (Data.Long(ASD:0xF8006124)&~0x7FFFFFFF)|0x40000001
Data.Set ASD:0xF800612C %Long %LE (Data.Long(ASD:0xF800612C)&~0x000FFFFF)|0x0003C81D
Data.Set ASD:0xF8006130 %Long %LE (Data.Long(ASD:0xF8006130)&~0x000FFFFF)|0x00036012
Data.Set ASD:0xF8006134 %Long %LE (Data.Long(ASD:0xF8006134)&~0x000FFFFF)|0x0003780C
Data.Set ASD:0xF8006138 %Long %LE (Data.Long(ASD:0xF8006138)&~0x000FFFFF)|0x0003B821
Data.Set ASD:0xF8006140 %Long %LE (Data.Long(ASD:0xF8006140)&~0x000FFFFF)|0x00000035
Data.Set ASD:0xF8006144 %Long %LE (Data.Long(ASD:0xF8006144)&~0x000FFFFF)|0x00000035
Data.Set ASD:0xF8006148 %Long %LE (Data.Long(ASD:0xF8006148)&~0x000FFFFF)|0x00000035
Data.Set ASD:0xF800614C %Long %LE (Data.Long(ASD:0xF800614C)&~0x000FFFFF)|0x00000035
Data.Set ASD:0xF8006154 %Long %LE (Data.Long(ASD:0xF8006154)&~0x000FFFFF)|0x0000009D
Data.Set ASD:0xF8006158 %Long %LE (Data.Long(ASD:0xF8006158)&~0x000FFFFF)|0x00000092
Data.Set ASD:0xF800615C %Long %LE (Data.Long(ASD:0xF800615C)&~0x000FFFFF)|0x0000008C
Data.Set ASD:0xF8006160 %Long %LE (Data.Long(ASD:0xF8006160)&~0x000FFFFF)|0x000000A1
Data.Set ASD:0xF8006168 %Long %LE (Data.Long(ASD:0xF8006168)&~0x001FFFFF)|0x00000147
Data.Set ASD:0xF800616C %Long %LE (Data.Long(ASD:0xF800616C)&~0x001FFFFF)|0x0000012D
Data.Set ASD:0xF8006170 %Long %LE (Data.Long(ASD:0xF8006170)&~0x001FFFFF)|0x00000133
Data.Set ASD:0xF8006174 %Long %LE (Data.Long(ASD:0xF8006174)&~0x001FFFFF)|0x00000143
Data.Set ASD:0xF800617C %Long %LE (Data.Long(ASD:0xF800617C)&~0x000FFFFF)|0x000000DD
Data.Set ASD:0xF8006180 %Long %LE (Data.Long(ASD:0xF8006180)&~0x000FFFFF)|0x000000D2
Data.Set ASD:0xF8006184 %Long %LE (Data.Long(ASD:0xF8006184)&~0x000FFFFF)|0x000000CC
Data.Set ASD:0xF8006188 %Long %LE (Data.Long(ASD:0xF8006188)&~0x000FFFFF)|0x000000E1
Data.Set ASD:0xF8006190 %Long %LE 0x10040080
Data.Set ASD:0xF8006194 %Long %LE (Data.Long(ASD:0xF8006194)&~0x000FFFFF)|0x0001FC82
Data.Set ASD:0xF8006208 %Long %LE (Data.Long(ASD:0xF8006208)&~0x000F03FF)|0x000803FF
Data.Set ASD:0xF800620C %Long %LE (Data.Long(ASD:0xF800620C)&~0x000F03FF)|0x000803FF
Data.Set ASD:0xF8006210 %Long %LE (Data.Long(ASD:0xF8006210)&~0x000F03FF)|0x000803FF
Data.Set ASD:0xF8006214 %Long %LE (Data.Long(ASD:0xF8006214)&~0x000F03FF)|0x000803FF
Data.Set ASD:0xF8006218 %Long %LE (Data.Long(ASD:0xF8006218)&~0x000F03FF)|0x000003FF
Data.Set ASD:0xF800621C %Long %LE (Data.Long(ASD:0xF800621C)&~0x000F03FF)|0x000003FF
Data.Set ASD:0xF8006220 %Long %LE (Data.Long(ASD:0xF8006220)&~0x000F03FF)|0x000003FF
Data.Set ASD:0xF8006224 %Long %LE (Data.Long(ASD:0xF8006224)&~0x000F03FF)|0x000003FF
Data.Set ASD:0xF80062A8 %Long %LE (Data.Long(ASD:0xF80062A8)&~0x00000FF7)|0x00000000
Data.Set ASD:0xF80062B0 %Long %LE (Data.Long(ASD:0xF80062B0)&~0x003FFFFF)|0x00005125
Data.Set ASD:0xF80062B4 %Long %LE (Data.Long(ASD:0xF80062B4)&~0x0003FFFF)|0x000012A8
Data.Set ASD:0xF8006000 %Long %LE (Data.Long(ASD:0xF8006000)&~0x00003F81)|0x00000081


// Load FPGA bitstream
LOCAL &file_name &srcAddr &dstAddr &len
&file_name="~~~~/zynq-fpga.bin"
IF !OS.FILE("&file_name")&&OS.FILE("&file_name.gz")
	UNZIP "&file_name.gz" "&file_name"
&len=(OS.FILE.SIZE("&file_name"))/4
&srcAddr=0x00100000
&dstAddr=0xFFFFFFFF

PRINT "Loading FPGA design to target memory"
Data.LOAD.Binary "&file_name" &srcAddr

PRINT "mio unlock"
Data.Set ZSD:0xF8000008 %Long 0xDF0DDF0D

PRINT "disable axi interface"
Data.Set ZSD:0xF8000240 %Long 0xFFFFFFFF

PRINT "set level shifter"
Data.Set ZSD:0xF8000900 %Long Data.Long(ZSD:0xF8000900)|0x0000000A

PRINT "set PCFG_PROG_B signal to high"
Data.Set ZSD:0xF8007000 %Long Data.Long(ZSD:0xF8007000)|0x40000000

PRINT "set PCFG_PROG_B signal to low"
Data.Set ZSD:0xF8007000 %Long Data.Long(ZSD:0xF8007000)|0x40000000

PRINT "Polling the PCAP_INIT status for Reset"
WAIT (Data.Long(ZSD:0xF8007014)&0x00000010)!=0
//WAIT 1.s

PRINT "Setting PCFG_PROG_B signal to high"
Data.Set ZSD:0xF8007000 %Long Data.Long(ZSD:0xF8007000)|0x40000000

PRINT "Polling the PCAP_INIT status for Set"
WAIT (Data.Long(ZSD:0xF8007014)&0x00000010)!=0

PRINT "slcr lock"
Data.Set ZSD:0xF8000004 %Long 0x767B767B
Data.Set ZSD:0xF8007014 %Long Data.Long(ZSD:0xF8007014)&0x30000000
Data.Set ZSD:0xF8007000 %Long Data.Long(ZSD:0xF8007000)&~0x02000000

PRINT "Disable AES engine"
Data.Set ZSD:0xF8007000 %Long Data.Long(ZSD:0xF8007000)&~0x00000E00

PRINT "set SRC address: &srcAddr"
Data.Set ZSD:0xF8007018 %Long &srcAddr

PRINT "set DST address: &dstAddr"
Data.Set ZSD:0xF800701C %Long &dstAddr

PRINT "set SRC length: &len"
Data.Set ZSD:0xF8007020 %Long &len

PRINT "set DST length: &len"
Data.Set ZSD:0xF8007024 %Long &len

PRINT "poll for completion"
WAIT (Data.Long(ZSD:0xF800700C)&0x00002000)!=0

PRINT "Check FPGA configuration completion"
WAIT (Data.Long(ZSD:0xF800700C)&0x00000004)!=0

// clear out the status
Data.Set ZSD:0xF800700C %Long Data.Long(ZSD:0xF800700C)&0x00002000

PRINT "Finalize initialization"
Data.Set ZSD:0xf8000008 %Long 0xdf0d
Data.Set ZSD:0xf8000900 %Long 0xF
Data.Set ZSD:0xf8000004 %Long 0x767B

PRINT "FPGA configuration done"




