####################################################### # Hub project Configuration file for BackDrillGen.py # ####################################################### # Rev 22-Nov-2016 ####################################################### ####################################################### # This section provides the name of a Mentor Trace file to read as input # e.g. # input_trace_file_name = "traces.traces_512" # This configuration parameter is required input_trace_file_name = "traces.traces_569" # from 22-Nov-2016 10:51 ####################################################### # This section provides a list of entries describing the net names that will be analysed and included in output files # Each entry in the list is also a list made of fields that need to be matched. # Each field can be a string (made of characters and numbers) or one of two special wildcard characters. # "#" specifies that at least one digit must appear at this position. # "&" specifies that either "_CMP" or "_DIR" has to appear at this position # (note: we could easily add _P and _N if needed). # By defaul the pattern must be matched exactly, piece-wise, with no Extremitya character. # A variable "pattern_match_strict" may be overriden to False to enable looser pattern match and allow Extremitya characters net_name_pattern_list = ( ( "GTH_FO_CH_", "#", "_IN", "&" ), # GTH_FO_CH_*_IN FEX Data from Backplane to Fanout ( "GTH_FO_CH_", "#", "_OUT_ROD", "&" ), # GTH_FO_CH_*_OUT_ROD FEX Data from Fanout to MegArray Conn ( "GTH_FO_CH_", "#", "_OUT_HUB", "&" ), # GTH_FO_CH_*_OUT_HUB FEX Data from Fanout to Hub FPGA ( "MINIPOD_TRANS_FIBER_", "#", "_DATA", "&" ), # MINIPOD_TRANS_FIBER_*_DATA From FPGA to Transition MiniPOD ( "REC_MP_FIBER_", "#", "_TO_FPGA", "&" ), # REC_MP_FIBER_*_TO_FPGA From Rec MiniPOD Capacitor to FPGA ( "THIS_HUBS_RO_", "#", "_CAP_TO_OTHER_ROD", "&" ), # THIS_HUBS_RO_*_CAP_TO_OTHER_ROD From Coupling Cap through DPV # to the backplane zone 2 conn ( "THIS_RODS_READOUT_CTRL_TO_GTH_INPUT", "&" ), # THIS_RODS_READOUT_CTRL_TO_GTH_INPUT From the bottom of the S2 MegArray # to the Hub's FPGA ) # Net names have to exactly match the pattern requirements above. # A looser definition may be applied where the pattern(s) only need to be present within the net name # The default is a strict match but may be overrriden here # pattern_match_strict = True # A switch to generate additional messages to watch parsing and matching of pattern names. # The default is no extra information # debug_patterns = False # To allow differential signal names ending in _P and _N, just add them to the list below # The default is : # lst_suffix_diff = ( "_DIR", "_CMP" ) ####################################################### # This section provides entries for a dictionary of Named Rectangular Regions on the board. # Each Region is specified by its lower-left (X_min, Y_min) and upper-right (X_max, Y_max) coordinates # For each Named Region the coordinate information must be given in the form of a list # ( X_min, Y_min, X_max, Y_max ) # The coordinates are expected in units of millimeters # As many Named Regions as necessary may be specified. # e.g. # named_regions_dict [ "ATCA_Zone2" ] = ( 275.00, 75.00, 276.50, 220.00 ) # This configuration is optional and the default is to not specify any Named Region # The program will, for each wire within each seleved net, # show in the logfile which region is matched # show a "WARNING" if one end of the other is not within a defined region # Falling outside of a named region prevents a wire end become a candidate for further rule processing named_regions_dict [ "FPGA_U1" ] = ( 101.9, 114.9, 140.1, 165.1 ) named_regions_dict [ "Fanout_Main" ] = ( 196.7, 76.7, 248.2, 171.5 ) named_regions_dict [ "Fanout_Top_Row" ] = ( 196.7, 177.5, 258.5, 184.1 ) # named_regions_dict [ "Zone_2_MGT" ] = ( 263.1, 93.2, 278.0, 155.9 ) named_regions_dict [ "Meg_S1_Main" ] = ( 139.9, 231.8, 143.9, 280.2 ) named_regions_dict [ "Meg_S2_Main" ] = ( 216.1, 231.8, 220.1, 280.2 ) named_regions_dict [ "Meg_S2_NE" ] = ( 223.7, 272.4, 225.2, 275.2 ) named_regions_dict [ "Meg_S2_SE" ] = ( 223.7, 231.7, 225.2, 232.0 ) named_regions_dict [ "MiniPOD_Trns_MP1" ] = ( 18.0, 185.9, 26.1, 198.1 ) named_regions_dict [ "MiniPOD_Rec_MP2" ] = ( 23.7, 159.6, 33.5, 170.4 ) named_regions_dict [ "Routing_DPVs" ] = ( 182.4, 90.5, 187.8, 95.9 ) named_regions_dict [ "Hub_RO_AC_Caps" ] = ( 167.1, 94.5, 171.5, 97.9 ) ####################################################### # This section provides entries for a translation dictionary describing # every Mentor physical layer number found in the traces file. # # For each entry two pieces of information are given. # The first is an arbitrary name to associate with the Mentor physical layer number. # This arbitraty name could for example describe our stackup layer name. # This name is only used for cosmetic purposes in screen output and the log file. # The second is a dictionary that provides the information necessary (i.e. the "rules") # to direct the program on what to do for # all net extremities found on that layer. # all transisitions between that layer and another layer # Note: rules for layer transition only need to be specfied for the smaller # to the bigger physical Mentor layer number, as the trace data is sorted in that way. # # The rule names are arbitrary strings and these names will be used # in the screen output and log file # and in drill_output_files_dict below to specify the name of the associated drill file # # Filling entries in the dictionaries takes two steps. # The first step is to give the stackup layer name and create an empty (sub-)dicitonary. # e.g. if physical layer 2 is used for Stackup layer L3 # drill_rules_dict ["2"] = ( "L3", {} ) # The second step or set of steps to finish filling that entry is to specify # as many rule names as necessary for (at least) all cases which will be encountered. # e.g. if we want to say that an extremity found on layer 2 will be drilled from the bottom: # drill_rules_dict ["2"][idx_rules_drill_dict][key_net_extremity] = "Drill From Bot & Keep L3-L1" # Note the use of the cosmetic variable "idx_rules_drill_dict" to aim at the dictionary. # Note the use of the cosmetic variable "key_net_extremity" to specify a rule for the net extremity. # e.g. if we want to say that a transtion from layer 9 to 13 will be drilled from the top: # drill_rules_dict ["9"][idx_rules_drill_dict]["13"] = "Drill From Top & Keep L14-L22" # As many "rules" need to be specified as cases will be encountered in the trace file. # A missing rule will be flagged as an "ERROR". # For cases where the intention is to do nothing (no drilling), use the variable "Keyword_No_Drill", e.g. # drill_rules_dict ["1"][idx_rules_drill_dict]["12"] = Keyword_No_Drill # # As many physical layer entries as necessary may be specified. # This information is required for any layer that the program will find. # If an entry is completly missing, python will crash with a fairly descriptive "KeyError" referring to drill_rules_dict drill_rules_dict [ "1" ] = ( "L1-Top" , {} ) drill_rules_dict [ "2" ] = ( "L3" , {} ) drill_rules_dict [ "3" ] = ( "L5" , {} ) drill_rules_dict [ "4" ] = ( "L7" , {} ) drill_rules_dict [ "5" ] = ( "L9" , {} ) drill_rules_dict [ "6" ] = ( "L11-Power" , {} ) drill_rules_dict [ "7" ] = ( "GND Planes" , {} ) drill_rules_dict [ "8" ] = ( "L12-Power" , {} ) drill_rules_dict [ "9" ] = ( "L14" , {} ) drill_rules_dict [ "10" ] = ( "L16" , {} ) drill_rules_dict [ "11" ] = ( "L18" , {} ) drill_rules_dict [ "12" ] = ( "L20" , {} ) drill_rules_dict [ "13" ] = ( "L22-Bot" , {} ) # Back-Drills from the TOP # When the Signal is Going # To Bottom Layer P13: # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P1: No Back-Drill Possible # And no layer transition of that type were found # but there are net extremities, see below, with same outcome = No Drill # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Type | Location | From Layer | To Layer | Drill | Stop Before | Stop Before | # | | | | | | Ideal | Settle for | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Transition | Routing_DPVs | 2 = L3 | 13 = L22 (bot) | From Top | 2 = L3 | 2 = L3 | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P2: Ideal - cut down through L2 keep connection to L3 # expected stub is 0.0711 mm drill_rules_dict [ "2" ][idx_rules_drill_dict] [ "13" ] = "Drill From Top & Keep L3-L22" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Transition | Fanout_Main | 3 = L5 | 13 = L22 (bot) | From Top | 3 = L5 | 2 = L3 | # | Transition | Fanout_Top_Row | 3 = L5 | 13 = L22 (bot) | From Top | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P3: Ideal - cut down through L4 keep connection to L5 # expected stub is 0.0711 mm # Settle for - cut down through L2 keep connection to L3 # expected stub is 0.3707 mm drill_rules_dict [ "3" ][idx_rules_drill_dict] [ "13" ] = "Drill From Top & Keep L3-L22" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Transition | Fanout_Main | 4 = L7 | 13 = L22 (bot) | From Top | 4 = L7 | 4 = L7 | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P4: Ideal - cut down through L6 keep connection to L7 # expected stub is 0.0711 mm drill_rules_dict [ "4" ][idx_rules_drill_dict] [ "13" ] = "Drill From Top & Keep L7-L22" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Transition | Fanout_Main | 5 = L9 | 13 = L22 (bot) | From Top | 5 = L9 | 4 = L7 | # | Transition | Fanout_Top_Row | 5 = L9 | 13 = L22 (bot) | From Top | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P5: Ideal - cut down through L8 keep connection to L9 # expected stub is 0.0711 mm # Settle for - cut down through L6 keep connection to L7 # expected stub is 0.3707 mm drill_rules_dict [ "5" ][idx_rules_drill_dict] [ "13" ] = "Drill From Top & Keep L7-L22" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Transition | Fanout_Main | 9 = L14 | 13 = L22 (bot) | From Top | 9 = L14 | 9 = L14 | # | Transition | Fanout_Top_Row | 9 = L14 | 13 = L22 (bot) | From Top | | | # | Transition | Routing_DPVs | 9 = L14 | 13 = L22 (bot) | From Top | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P9: Ideal - cut down through L13 keep connection to L14 # expected stub is 0.0775 mm drill_rules_dict [ "9" ][idx_rules_drill_dict] [ "13" ] = "Drill From Top & Keep L14-L22" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P10: This transition pair is not used in the Hub design. # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Transition | Fanout_Main | 11 = L18 | 13 = L22 (bot) | From Top | 11 = L18 | 11 = L18 | # | Transition | Fanout_Top_Row | 11 = L18 | 13 = L22 (bot) | From Top | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P11: Ideal - cut down through L17 keep connection to L18 # expected stub is 0.0787 mm drill_rules_dict [ "11" ][idx_rules_drill_dict] [ "13" ] = "Drill From Top & Keep L18-L22" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P13 from P12: This transition pair is not used in the Hub design. # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # Back-Drills from the BOTTOM # When the Signal is Going # To Top Layer P1: # # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Type | Location | From Layer | To Layer | Drill | Stop Before | Stop Before | # | | | | | | Ideal | Settle for | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | Fanout_Main | 13 = L22 (bot) | | No Drill | | | # | Extremity | Fanout_Top_Row | 13 = L22 (bot) | | | | | # | Extremity | Hub_RO_AC_Caps | 13 = L22 (bot) | | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P13: No Back-Drill Possible drill_rules_dict [ "13" ][idx_rules_drill_dict] [key_net_extremity] = Keyword_No_Drill # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 12 = L20 | | From Bottom | 12 = L20 | 12 = L20 | # | Extremity | Meg_S1_Main | 12 = L20 | | | | | # | Extremity | Meg_S2_Main | 12 = L20 | | | | | # | Extremity | MiniPOD_Trns_MP1 | 12 = L20 | | | | | # |------------+------------------+----------------+----------------| | | | # | Transition | Fanout_Main | 1 = L1 (top) | 12 = L20 | | | | # | Transition | Fanout_Top_Row | 1 = L1 (top) | 12 = L20 | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P12: Ideal - cut up through L21 keep connection to L20 # expected stub is 0.0711 mm drill_rules_dict [ "12" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L20-L1" drill_rules_dict [ "1" ][idx_rules_drill_dict] [ "12" ] = "Drill From Bot & Keep L20-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 11 = L18 | | From Bottom | 11 = L18 | 12 = L20 | # | Extremity | Meg_S1_Main | 11 = L18 | | | | | # | Extremity | Meg_S2_Main | 11 = L18 | | | | | # | Extremity | Meg_S2_NE | 11 = L18 | | | | | # | Extremity | MiniPOD_Trns_MP1 | 11 = L18 | | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P11: Ideal - cut up through L19 keep connection to L18 # expected stub is 0.0711 mm # # Settle for - cut up through L21 keep connection to L20 # expected stub is 0.3707 mm drill_rules_dict [ "11" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L20-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | Meg_S1_Main | 10 = L16 | | From Bottom | 10 = L16 | 10 = L16 | # | Extremity | Meg_S2_Main | 10 = L16 | | | | | # |------------+------------------+----------------+----------------| | | | # | Transition | Fanout_Main | 1 = L1 (top) | 10 = L16 | | | | # | Transition | Fanout_Top_Row | 1 = L1 (top) | 10 = L16 | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P10: Ideal - cut up through L17 keep connection to L16 # expected stub is 0.0711 mm drill_rules_dict [ "10" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L16-L1" drill_rules_dict [ "1" ][idx_rules_drill_dict] [ "10" ] = "Drill From Bot & Keep L16-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | Meg_S1_Main | 9 = L14 | | From Bottom | 9 = L14 | 10 = L16 | # | Extremity | Meg_S2_Main | 9 = L14 | | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P9: Ideal - cut up through L15 keep connection to L14 # expected stub is 0.0711 mm # # Settle for - cut up through L17 keep connection to L16 # expected stub is 0.3707 mm drill_rules_dict [ "9" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L16-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 5 = L9 | | From Bottom | 5 = L9 | 5 = L9 | # | Extremity | Meg_S2_SE | 5 = L9 | | | | | # |------------+------------------+----------------+----------------| | | | # | Transition | FPGA_U1 | 1 = L1 (top) | 5 = L9 | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P5: Ideal - cut up through L10 keep connection to L9 # expected stub is 0.0775 mm drill_rules_dict [ "5" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L9-L1" drill_rules_dict [ "1" ][idx_rules_drill_dict] [ "5" ] = "Drill From Bot & Keep L9-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 4 = L7 | | From Bottom | 4 = L7 | 5 = L9 | # |------------+------------------+----------------+----------------| | | | # | Transition | FPGA_U1 | 1 = L1 (top) | 4 = L7 | | | | # | Transition | Fanout_Main | 1 = L1 (top) | 4 = L7 | | | | # | Transition | Fanout_Top_Row | 1 = L1 (top) | 4 = L7 | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P4: Ideal - cut up through L8 keep connection to L7 # expected stub is 0.0787 mm # # Settle for - cut up through L10 keep connection to L9 # expected stub is 0.3771 mm drill_rules_dict [ "4" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L9-L1" drill_rules_dict [ "1" ][idx_rules_drill_dict] [ "4" ] = "Drill From Bot & Keep L9-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 3 = L5 | | From Bottom | 3 = L5 | 3 = L5 | # |------------+------------------+----------------+----------------| | | | # | Transition | FPGA_U1 | 1 = L1 (top) | 3 = L5 | | | | # | Transition | Fanout_Main | 1 = L1 (top) | 3 = L5 | | | | # | Transition | MiniPOD_Rec_MP2 | 1 = L1 (top) | 3 = L5 | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P3: Ideal - cut up through L6 keep connection to L5 # expected stub is 0.0787 mm drill_rules_dict [ "3" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L5-L1" drill_rules_dict [ "1" ][idx_rules_drill_dict] [ "3" ] = "Drill From Bot & Keep L5-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 2 = L3 | | From Bottom | 2 = L3 | 3 = L5 | # |------------+------------------+----------------+----------------| | | | # | Transition | FPGA_U1 | 1 = L1 (top) | 2 = L3 | | | | # | Transition | Fanout_Main | 1 = L1 (top) | 2 = L3 | | | | # | Transition | Fanout_Top_Row | 1 = L1 (top) | 2 = L3 | | | | # | Transition | MiniPOD_Rec_MP2 | 1 = L1 (top) | 2 = L3 | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # to P1 from P2: Ideal - cut up through L4 keep connection to L3 # expected stub is 0.0787 mm # # Settle for - cut up through L6 keep connection to L5 # expected stub is 0.3783 mm drill_rules_dict [ "2" ][idx_rules_drill_dict] [key_net_extremity] = "Drill From Bot & Keep L5-L1" drill_rules_dict [ "1" ][idx_rules_drill_dict] [ "2" ] = "Drill From Bot & Keep L5-L1" # |------------+------------------+----------------+----------------+-------------+--------------+-------------| # | Extremity | FPGA_U1 | 1 = L1 (top) | | No Drill | | | # | Extremity | Fanout_Main | 1 = L1 (top) | | | | | # | Extremity | Fanout_Top_Row | 1 = L1 (top) | | | | | # | Extremity | MiniPOD_Rec_MP2 | 1 = L1 (top) | | | | | # |------------+------------------+----------------+----------------+-------------+--------------+-------------| drill_rules_dict [ "1" ][idx_rules_drill_dict] [key_net_extremity] = Keyword_No_Drill ####################################################### # This section provides entries for a translation dictionary that must include information # for EVERY Drill "rule" which has been given an otherwise arbitrary name in drill_rules_dict above. # # For each entry two pieces of information are given. # The first is the name of the drill file to be created. # The second is an optional name for a Mentor Layer to receive a circle at the corresponding drill location. # e.g. # drill_output_files_dict[ "Drill From Bot & Keep L3-L1" ] = ( "Drill_FromBot_Keep_L3toL1.drl" , "SHEET_DIELECTRIC_4" ) # # In addition, two more optional entries may be added in the dictionary using special keywords: # A dictionary entry for key_mentor_check provides the name of the file with circle commands for visual check in Mentor. # e.g. # drill_output_files_dict[ key_mentor_check ] = ( "mentor_check_backdrill.txt", "" ) # A dictionary entry for key_drill_any provides the name of a Mentor layer to receive a circle at ANY back drill location # e.g. # drill_output_files_dict[ key_drill_any ] = ( "", "SHEET_DIELECTRIC_12" ) # Note that for these two special entries, only one of the two fields contains relevant information, the other is unused. # # Note: Two elements must be given but a null string for a file name or a Mentor Layer name is accepted to skip that file or layer. # Summary of the Back-Drill Depths from the TOP: # cut down through L2 keep connection to L3 # cut down through L6 keep connection to L7 # cut down through L13 keep connection to L14 # cut down through L17 keep connection to L18 drill_output_files_dict [ "Drill From Top & Keep L3-L22" ] = ( "drill_from_top_keep_L3toL22.drl" , "SHEET_DIELECTRIC_4" ) drill_output_files_dict [ "Drill From Top & Keep L7-L22" ] = ( "drill_from_top_keep_L7toL22.drl" , "SHEET_DIELECTRIC_5" ) drill_output_files_dict [ "Drill From Top & Keep L14-L22" ] = ( "drill_from_top_keep_L14toL22.drl" , "SHEET_DIELECTRIC_6" ) drill_output_files_dict [ "Drill From Top & Keep L18-L22" ] = ( "drill_from_top_keep_L18toL22.drl" , "SHEET_DIELECTRIC_7" ) # Summary of the Back-Drill Depths from the Bottom # # cut up through L21 keep connection to L20 # cut up through L17 keep connection to L16 # cut up through L10 keep connection to L9 # cut up through L6 keep connection to L5 drill_output_files_dict [ "Drill From Bot & Keep L20-L1" ] = ( "drill_from_bot_keep_L20toL1.drl" , "SHEET_DIELECTRIC_8" ) drill_output_files_dict [ "Drill From Bot & Keep L16-L1" ] = ( "drill_from_bot_keep_L16toL1.drl" , "SHEET_DIELECTRIC_9" ) drill_output_files_dict [ "Drill From Bot & Keep L9-L1" ] = ( "drill_from_bot_keep_L9toL1.drl" , "SHEET_DIELECTRIC_10" ) drill_output_files_dict [ "Drill From Bot & Keep L5-L1" ] = ( "drill_from_bot_keep_L5toL1.drl" , "SHEET_DIELECTRIC_11" ) drill_output_files_dict [ key_mentor_check ] = ( "mentor_check_backdrill.txt" , "" ) drill_output_files_dict [ key_drill_any ] = ( "" , "SHEET_DIELECTRIC_12" ) # The default Drill File header and trailer may be overriden here # The defaults are: # drill_file_header = "G90\nM71\nT1\n" # this means Absolute Mode + Metric Code + use Tool #1 # drill_file_trailer = "M30\n" # this means End of program # The scaling ratio and line format for X and Y coordinates (from mm to the drill file units) may also be ovrerriden # The defaults are: # drill_mm_to_XYcoord_scale = 1000 # this goes from mm to micometers # drill_coord_line_format = "X%06dY%06d\n" # this forces 6 digits each, with leading zeroes.