--- /dev/null
+UGROUP "ffarr0groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][0][7]
+ ;
+
+UGROUP "ffarr0groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][0][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][0][7]
+ ;
+
+UGROUP "ffarr1groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][1][7]
+ ;
+
+UGROUP "ffarr1groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][1][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][1][7]
+ ;
+
+UGROUP "ffarr2groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][2][7]
+ ;
+
+UGROUP "ffarr2groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][2][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][2][7]
+ ;
+
+UGROUP "ffarr3groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][3][7]
+ ;
+
+UGROUP "ffarr3groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][3][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][3][7]
+ ;
+
+UGROUP "ffarr4groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][4][7]
+ ;
+
+UGROUP "ffarr4groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][4][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][4][7]
+ ;
+
+UGROUP "ffarr5groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][5][7]
+ ;
+
+UGROUP "ffarr5groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][5][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][5][7]
+ ;
+
+UGROUP "ffarr6groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][6][7]
+ ;
+
+UGROUP "ffarr6groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][6][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][6][7]
+ ;
+
+UGROUP "ffarr7groupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][7][7]
+ ;
+
+UGROUP "ffarr7groupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][7][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][7][7]
+ ;
+
+UGROUP "ffarrTgroupA" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[0][8][7]
+ ;
+
+UGROUP "ffarrTgroupB" BBOX 1 2
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][0]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][1]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][2]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][3]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][4]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][5]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][6]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[1][8][7]
+ BLKNAME THE_TDC/gen_channels.0.gen_ffarr_first.0.ffarr[2][8][7]
+ ;
+
+REGION "FFARR0A" "R2C24" 1 2 DEVSIZE;
+REGION "FFARR0B" "R3C24" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr0groupA" REGION "FFARR0A";
+LOCATE UGROUP "ffarr0groupB" REGION "FFARR0B";
+
+REGION "FFARR1A" "R2C15" 1 2 DEVSIZE;
+REGION "FFARR1B" "R3C15" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr1groupA" REGION "FFARR1A";
+LOCATE UGROUP "ffarr1groupB" REGION "FFARR1B";
+
+REGION "FFARR2A" "R2C11" 1 2 DEVSIZE;
+REGION "FFARR2B" "R3C11" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr2groupA" REGION "FFARR2A";
+LOCATE UGROUP "ffarr2groupB" REGION "FFARR2B";
+
+REGION "FFARR3A" "R2C13" 1 2 DEVSIZE;
+REGION "FFARR3B" "R3C13" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr3groupA" REGION "FFARR3A";
+LOCATE UGROUP "ffarr3groupB" REGION "FFARR3B";
+
+REGION "FFARR4A" "R12C3" 1 2 DEVSIZE;
+REGION "FFARR4B" "R13C3" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr4groupA" REGION "FFARR4A";
+LOCATE UGROUP "ffarr4groupB" REGION "FFARR4B";
+
+REGION "FFARR5A" "R12C12" 1 2 DEVSIZE;
+REGION "FFARR5B" "R13C12" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr5groupA" REGION "FFARR5A";
+LOCATE UGROUP "ffarr5groupB" REGION "FFARR5B";
+
+REGION "FFARR6A" "R12C9" 1 2 DEVSIZE;
+REGION "FFARR6B" "R13C9" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr6groupA" REGION "FFARR6A";
+LOCATE UGROUP "ffarr6groupB" REGION "FFARR6B";
+
+REGION "FFARR7A" "R12C24" 1 2 DEVSIZE;
+REGION "FFARR7B" "R13C24" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarr7groupA" REGION "FFARR7A";
+LOCATE UGROUP "ffarr7groupB" REGION "FFARR7B";
+
+REGION "FFARRTA" "R2C17" 1 2 DEVSIZE;
+REGION "FFARRTB" "R3C17" 1 2 DEVSIZE;
+LOCATE UGROUP "ffarrTgroupA" REGION "FFARRTA";
+LOCATE UGROUP "ffarrTgroupB" REGION "FFARRTB";
+
+
+
+
+USE PRIMARY NET "THE_TDC/CLKa*";
+USE PRIMARY NET "THE_TDC_CLKa*";
+USE PRIMARY NET "THE_TDC/CLKa[0]";
+USE PRIMARY NET "THE_TDC/CLKa[1]";
+USE PRIMARY NET "THE_TDC/CLKa[2]";
+USE PRIMARY NET "THE_TDC/CLKa[3]";
+USE PRIMARY NET "THE_TDC_CLKa[0]";
+USE PRIMARY NET "THE_TDC_CLKa[1]";
+USE PRIMARY NET "THE_TDC_CLKa[2]";
+USE PRIMARY NET "THE_TDC_CLKa[3]";
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- library machxo3lf;
+-- use machxo3lf.all;
+
+library work;
+use work.trb_net_std.all;
+
+entity mbo is
+ port(
+ CLK : in std_logic;
+
+ INPUT : in std_logic_vector(7 downto 0);
+
+ PWM : out std_logic;
+ TRG : in std_logic;
+
+ LED : inout std_logic_vector(3 downto 0);
+ RX_OUT : out std_logic;
+ TX_IN : in std_logic;
+ CBUS : in std_logic
+
+ );
+end entity;
+
+architecture arch of mbo is
+
+-- component OSCH
+-- generic (NOM_FREQ: string := "133.00");
+-- port (
+-- STDBY :IN std_logic;
+-- OSC :OUT std_logic;
+-- SEDSTDBY :OUT std_logic
+-- );
+-- end component;
+
+ signal clk_i : std_logic;
+
+ signal uart_rx_data : std_logic_vector(31 downto 0);
+ signal uart_tx_data : std_logic_vector(31 downto 0);
+ signal uart_addr : std_logic_vector(7 downto 0);
+ signal bus_read : std_logic := '0';
+ signal bus_write : std_logic := '0';
+ signal bus_ready : std_logic;
+ signal uart_busy : std_logic;
+
+ signal sed_error : std_logic;
+ signal sed_debug : std_logic_vector(31 downto 0);
+ signal controlsed_i : std_logic_vector(3 downto 0);
+
+ signal f_read, f_empty : std_logic;
+ signal last_f_read, last2_f_read : std_logic;
+ signal f_data : std_logic_vector(31 downto 0);
+
+-- signal reg : std_logic_vector(31 downto 0);
+ signal config : std_logic_vector(3 downto 0);
+ signal config_reg : std_logic_vector(3 downto 0);
+
+ signal pwm_data_i : std_logic_vector(15 downto 0);
+ signal pwm_write_i : std_logic;
+ signal pwm_addr_i : std_logic_vector(4 downto 0);
+
+ signal input_hold : std_logic_vector(7 downto 0);
+ signal input_reg_0, input_reg_1, input_reg_2 : std_logic_vector(7 downto 0);
+
+-- signal edge_rising, edge_falling : std_logic_vector(3 downto 0);
+-- signal pulser : std_logic;
+ signal last_config : std_logic_vector(3 downto 0);
+ signal led_i : std_logic_vector(3 downto 0);
+ signal timer_i : unsigned(31 downto 0) := (others => '0');
+ signal led_highz : std_logic;
+
+ type led_timer_t is array(0 to 3) of unsigned(24 downto 0);
+ signal led_timer : led_timer_t;
+ signal led_state : std_logic_vector(3 downto 0);
+
+ type counter_arr is array(0 to 7) of unsigned(23 downto 0);
+ signal input_counter : counter_arr;
+ signal select_i : std_logic_vector(3 downto 0);
+ signal readcounter : unsigned(15 downto 0);
+ signal uart_debug : std_logic_vector(15 downto 0);
+begin
+
+clk_i <= CLK;
+
+timer_i <= timer_i + 1 when rising_edge(clk_i);
+
+---------------------------------------------------------------------------
+-- UART
+---------------------------------------------------------------------------
+THE_UART : entity work.uart_sctrl
+ generic map(
+ CLOCK_SPEED => 125000000,
+ BAUD => 921076
+ )
+ port map(
+ CLK => clk_i,
+ RESET => sed_error,
+ UART_RX => TX_IN,
+ UART_TX => RX_OUT,
+
+ DATA_OUT => uart_rx_data,
+ DATA_IN => uart_tx_data,
+ ADDR_OUT => uart_addr,
+ WRITE_OUT => bus_write,
+ READ_OUT => bus_read,
+ READY_IN => bus_ready,
+ BUSY_OUT => uart_busy,
+
+ DEBUG => uart_debug
+ );
+
+-- RX_OUT <= TX_IN;
+
+PROC_REGS : process begin
+ wait until rising_edge(clk_i);
+ bus_ready <= '0';
+ f_read <= '0';
+ last2_f_read <= last_f_read; last_f_read <= f_read;
+ pwm_write_i <= '0';
+ if bus_read = '1' then
+ bus_ready <= '1';
+ case uart_addr is
+ when x"00" => uart_tx_data <= x"000000" & config & config_reg;
+ when x"01" => uart_tx_data <= x"00000" & "00" & CBUS & TRG & input_reg_2;
+-- when x"10" => uart_tx_data <= reg;
+ when x"d0" =>
+ f_read <= '1';
+ bus_ready <= '0';
+ when x"ee" => uart_tx_data <= sed_debug;
+ when x"ff" => uart_tx_data(15 downto 0) <= std_logic_vector(readcounter);
+ readcounter <= readcounter + 1;
+ end case;
+ if uart_addr(7 downto 4) = x"2" then
+ uart_tx_data(31 downto 24) <= uart_addr(3 downto 0) & x"0";
+ uart_tx_data(23 downto 0) <= std_logic_vector(input_counter(to_integer(unsigned(uart_addr(3 downto 0)))));
+ end if;
+ elsif bus_write = '1' then
+ case uart_addr is
+ when x"00" =>
+ config_reg <= uart_rx_data(3 downto 0);
+ when x"10" =>
+ select_i <= uart_rx_data(3 downto 0);
+ when x"80" =>
+ pwm_write_i <= '1';
+ pwm_data_i <= uart_rx_data(15 downto 0);
+ pwm_addr_i <= uart_rx_data(28 downto 24);
+-- when x"90" =>
+-- temperature_i <= uart_rx_data(11 downto 0);
+-- when x"91" =>
+-- comp_setting <= uart_rx_data(15 downto 0);
+ when x"ee" =>
+ controlsed_i <= uart_rx_data(3 downto 0);
+ end case;
+ end if;
+ if last2_f_read = '1' then
+ uart_tx_data <= f_data;
+ bus_ready <= '1';
+ end if;
+
+ if config_reg(0) = '1' then
+ if f_empty = '0' and uart_busy = '0' and last2_f_read = '0' and last_f_read = '0' and f_read = '0' and bus_ready = '0' then
+ f_read <= '1';
+ end if;
+ end if;
+
+
+end process;
+
+---------------------------------------------------------------------------
+-- Clock
+---------------------------------------------------------------------------
+-- clk_source: OSCH
+-- generic map ( NOM_FREQ => "2.08" )
+-- port map (
+-- STDBY => '0',
+-- OSC => clk_osc,
+-- SEDSTDBY => open
+-- );
+
+---------------------------------------------------------------------------
+-- PWM
+---------------------------------------------------------------------------
+
+THE_PWM_GEN : entity work.pwm_generator
+ generic map(
+ CHANNELS => 1
+ )
+ port map(
+ CLK => clk_i,
+ DATA_IN => pwm_data_i,
+ DATA_OUT => open,
+ COMP_IN => (others => '0'),
+ WRITE_IN => pwm_write_i,
+ ADDR_IN => pwm_addr_i,
+ PWM(0) => PWM
+ );
+
+
+---------------------------------------------------------------------------
+-- Input Reg
+---------------------------------------------------------------------------
+input_reg_0 <= INPUT when rising_edge(clk_i); --or input_hold
+input_reg_1 <= input_reg_0 when rising_edge(clk_i);
+input_reg_2 <= input_reg_1 when rising_edge(clk_i);
+
+input_hold <= INPUT or (input_hold and not input_reg_0);
+
+
+
+---------------------------------------------------------------------------
+-- Input Counter
+---------------------------------------------------------------------------
+gen_input_counter : for i in 0 to 7 generate
+ proc_cnt : process begin
+ wait until rising_edge(clk_i);
+ if (input_reg_2(i) = '1') and (input_reg_1(i) = '0') then
+ input_counter(i) <= input_counter(i) + 1;
+ end if;
+ end process;
+end generate;
+
+
+---------------------------------------------------------------------------
+-- TDC
+---------------------------------------------------------------------------
+THE_TDC : entity work.ffarray
+ generic map(
+ CHANNELS => 9
+ )
+ port map(
+ CLK => clk_i,
+ RESET_IN => '0',
+ SIGNAL_IN(7 downto 0) => INPUT(7 downto 0),
+ SIGNAL_IN(8) => TRG,
+ SELECT_IN => select_i,
+ DATA_OUT => f_data,
+ READ_IN => f_read,
+ EMPTY_OUT => f_empty
+ );
+
+
+
+
+---------------------------------------------------------------------------
+-- LED
+---------------------------------------------------------------------------
+ PROC_LED : process begin
+ wait until rising_edge(clk_i);
+ if not (config = last_config) and timer_i(27) = '0' then
+ led_i <= config;
+ else
+ led_i <= led_state;
+ end if;
+ end process;
+
+ PROC_LED_STATE : process begin
+ wait until rising_edge(clk_i);
+ for i in 0 to 3 loop
+ if (input_reg_2(i) xor input_reg_1(i)) = '1' and (led_timer(i)(23 downto 21) > 0) then
+ led_state(i) <= not led_state(i);
+ led_timer(i) <= 0;
+ elsif led_timer(i)(23) = '1' then
+ led_state(i) <= input_reg_1(i);
+ else
+ led_timer(i) <= led_timer(i) + 1;
+ end if;
+ end loop;
+ end process;
+
+---------------------------------------------------------------------------
+-- Read configuration switch
+---------------------------------------------------------------------------
+process begin
+ wait until rising_edge(clk_i);
+
+
+ if timer_i(27 downto 10) = 0 then
+ led_highz <= '1';
+ last_config <= config;
+ if timer_i(9 downto 0) = "11"&x"ff" then
+ config <= not LED;
+ end if;
+ else
+ led_highz <= '0';
+ end if;
+end process;
+
+LED <= led_i when led_highz = '0' else
+ "ZZZZ";
+
+
+
+
+-- THE_SED : entity work.sedcheck
+-- port map(
+-- CLK => clk_i,
+-- ERROR_OUT => sed_error,
+--
+-- CONTROL_IN => controlsed_i,
+-- DEBUG => sed_debug
+-- );
+
+
+
+end architecture;
+
+
+
\ No newline at end of file