#--------------------------------------------------------------------------- # ERF File - Signal Layer Optimisation # (For more information see help file and on-line manual 0602 (chapter 6)) # This version written by Ian Ticehurst (Autom8 Ltd.) - 01/08/00 # Version 1A # # This function is designed to work on specified signal layers. It will modify # the layer, according to parameters, and will work to achieve annular ring and # spacing requirements wherever possible. The system also performs a check on # the modifications to ensure that no violations have been created. This function # is also called by the flash edit function where the same modifications can be # performed in a local mode. #--------------------------------------------------------------------------- # Internal program calls and menu placement definitions (Do not modify these). .name NLSE("Signal Layer Opt") .uid valor_dfm_sigopt .modify .menu 1 NLSE("DFM") 6 NLSE("Optimization") 5 # Action screen definition. .param layer,pp_layer,1, NLSE("Signal Layer :") .param p_mil,pp_min_pth_ar,2, NLSE("PTH AR Min:"),0, 20 .param p_mil,pp_opt_pth_ar,2,NLSE("Opt :"),0, 20 .param p_mil,pp_min_via_ar,3, NLSE("VIA AR Min:"),0, 20 .param p_mil,pp_opt_via_ar,3,NLSE("Opt :"),0, 20 .param p_mil,pp_min_spacing,4, NLSE("Spacing Min:"),0, 20 .param p_mil,pp_opt_spacing,4,NLSE("Opt :"),0, 20 .param label,dummy1, 5, NLSE("Pad to Pad Spacing. "),0 .param p_mil,pp_min_p2p_spacing,6,NLSE(" Min:"),0, 20 .param p_mil,pp_opt_p2p_spacing,6,NLSE("Opt :"),0, 20 .param p_mil,pp_min_line,7, NLSE("LRE Range Fr:"),0, 30 .param p_mil,pp_opt_line,7,NLSE("To :"),0, 30 .param int,pp_nd_percent,8, NLSE("% reduction :"),0, 30 .param p_mil,pp_abs_min_line,8,NLSE("Abs.Min :"),0, 30 .param p_mil,pp_min_pth2c,9,NLSE("Drill to Cu:"),0,20 .param radio,pp_selected,10,NLSE("Apply to:"),NLSE("All");NLSE("Selected") .param set ,pp_work_on,11, NLSE("Work on :"),NLSE("Pads");NLSE("SMDs"); NLSE("Drills") .param set ,pp_modification,12,NLSE("Modification"),NLSE("PadUp");NLSE("Shave");NLSE("PadDn");NLSE("LineDn");NLSE("ReRout");NLSE("ReShape") # Individual model information follows. ################### Start of model Inner padup (Mils) ###################################### # Initialise model with model name, units, and color definitions. .model Inner padup (Mils) .units inch .colors 991010 999910 109010 # Colors set to red yellow green. # Define ranges (how results should be captured / presented). .ranges arg_repaired = 0,0.1,1000 # Range - reports places where the annular ring has been fixed. arg_violation_min = 1000,1001,1002 # Range - reports places where the annular ring cannot be increased to the minimum required value. arg_violation_opt = 0,1000,1001 # Range - reports places where the annular ring is better than the minimum value, but cannot be increased to the optimum value. enlarge_limit = 0,1000,1001 # Range - reports places where the annular ring could not be fixed as the pad enlargement needed to fix it was larger than the variable max_pad_enlarge (see below). annular_ring = 10000,10001,10001 # Range - used only as part of flash edit. Do not modify. Used to display annular ring measurements. spacing = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display spacing measurements. pth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display pth to copper spacing measurements. npth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display non-pth to copper spacing measurements. spacing_repaired = 0,0.1,1000 # Range - reports places where spacing violations have been fixed. h2cu_repaired = 0,0.1,1000 # Range - reports places where hole to copper spacing violations have been fixed. spacing_violation_min = 1000,1001,1002 # Range - reports places where the spacing cannot be increased to the minimum required value. spacing_violation_opt = 0,1000,1001 # Range - reports places where the spacing is better than the minimum value, but cannot be increased to the optimum value. h2cu_violation = 1000,1001,1002 # Range - reports places where hole to copper spacing violations cannot be fixed. same_space = 0,1000,1001 # Range - if same_net_space variable (see below) is set to yes, this will report places where the pad cannot be increased as it will create a spacing problem with features of the same net. same_spacing = 0,1000,1001 # Range - if v_handle_same_net_spacing (see below) is set to "1" or "2", same net spacing problems will be report in this category. same_net_s_repaired = 0,1000,1001 # Range - if v_handle_same_net_spacing (see below) is set to "2", same net spacing that were solved will be report in this category. polygon_shave = 0,0.1,1000 # Range - reports places that have been fixed using a polygon shave. Active only if the variable do_poly_shave is set to yes. filled_surface = 0,1000,1001 # Range - reports places that were fixed using a filled polygon shave. Active only if the variables do_poly_shave and fill_poly are both set to yes. un_filled_surface = 0,1000,1001 # Range - reports places that have to be fixed using a filled polygon shave, but where the polygon could not be filled. Active only if the variables do_poly_shave and fill_poly are both set to yes. # Define parameters to be used in action window on screen. .pdef pp_layer = .type=signal&side=inner pp_min_pth_ar = 7.874 pp_opt_pth_ar = 7.874 pp_min_via_ar = 5.9055 pp_opt_via_ar = 5.9055 pp_min_spacing = 1 pp_opt_spacing =1 pp_min_p2p_spacing = 0.3937 pp_opt_p2p_spacing = 0.3937 pp_min_line = 3.937 pp_opt_line = 10 pp_nd_percent = 10 pp_abs_min_line = 5 pp_min_pth2c = 7.874 pp_selected = All pp_work_on = .all pp_modification = padup # Set variable values (used to fine-tune the way the function works). .vars PRD = 7 # Variable - modification priority for shrinking pads without violating optimum annular ring (highest number of these variables is highest priority modification). PRS = 1 # Variable - modification priority for slight rounding of smd pad corners (highest number of these variables is highest priority modification). LRR = 6 # Variable - modification priority for re-routing lines (highest number of these variables is highest priority modification). PSH = 3 # Variable - modification priority for shaving pads without violating optimum annular ring or spacing (highest number of these variables is highest priority modification). PSHC = 2 # Variable - modification priority for shaving pads without violating minimum annular ring or spacing (highest number of these variables is highest priority modification). LRE = 4 # Variable - modification priority for line neckdown to achieve minimum spacing (highest number of these variables is highest priority modification). PRDC = 5 # Variable - modification priority for shrinking pads without violating minimum spacing or annular ring (highest number of these variables is highest priority modification). resize_smd = no # Variable - if set to yes, allow smd pads to be resized. If set to no do not resize smd pads. shave_smd = no # Variable - if set to yes, shaving of smd pads is allowed. If set to no smd pads will never have shaves applied. smd_resize_ratio = 0.9 # Variable - if smd pad resize if allowed (see resize_smd variable above) the smallest dimension of the smd pad is never allowed to be reduced to more than this ratio of its original size. v_keep_smd_form = no # Variable - if set to yes, if the smd pad is drilled by a via hole no pad will be added to the via hole to improve annular ring as it will affect the shape of the smd. If set to no via annular ring will be modified. max_pad_shaves = 5 # Variable - the maximum number of shaves that can be applied to any one pad. do_poly_shave = yes # Variable - if set to yes, polygons can be used to create shaves where required. If set to no polyon shaves will not be used. fill_poly = yes # Variable - if set to yes, any polygon shaves will be track filled. If set to no any polygon shaves will remain as polygons. min_brush = 0.78 # Variable - this value is the minimum track width that can be used when filling polygon shaves. exact_min_on_compromise = yes # Variable - if the system finds a place where there is a compromise between annular ring and spacing, if this is set to yes any shave added will achieve only minimum spacing. If set to no optimum spacing will be achieved if possible. shave_only_vias = no # Variable - if set to yes then only pads drilled by via holes will be shaved. If set to no all pads can be shaved. allow_both = yes # Variable - if set to yes, in situations where there is a spacing problem between two pads, a small shave will be added to both pads. If set to no a larger shave will be added to one of the pads. max_pad_shrink = 0 # Variable - this is the maximum value that a pad can be shrunk in order to fix spacing problems. If set to 0 then there is no limit. v_shave_pad_below_min = no # Variable - Enable the user to define if to shave Pad for minimal spacing, # even below min_ar. If set to "no" then the action will not use shave that will violate # the Pap min_ar, if set to "yes", the action will try to solve spacing even if it violate # Pad min_ar. max_pad_enlarge = 0 # Variable - this is the maximum value that a pad can be increased in order to fix annular ring problems. If set to 0 then there is no limit. keep_pad_shape = yes # Variable - if set to yes then square pads will remain as square pads after enlargement. If set to no then enlarged pads may become round in order to help with spacing. v_handle_non_standard_pads = 1 # Variable - if to handle non standard Pads (Standard Pads are only round or square Pads) in rereoute line or enlarge Pad. If set to "0" non standard Pad will not be optimized, if set to "1" non standard Pad will be optimized (in Pad enlargment and LRR, LRE). v_optimized_embedded_pad = 0 # Varaible - Defines how to optimized embedded drilled Pad - # "0" - Do not optimized. # "1" - Optimized to maximum AR. # "2" - Optimized to maximum AR and if there is no Pad, add an optimized one. min_neck_len = 10 # Variable - any line neckdown created will be longer in lenth than this value. min_reroute_side = 5 # Variable - if a line is re-routed, there must be a segment of the original line either side of the re-route, and these segments must be a minimum of this value in length. LRR_max_shift = 0 # Variable - this value specifies the maximum amount of shift allowed when a line re-route is used. If set to 0 then there is no limit. v_rerout_mode = 0 # Variable - Enable the user to control line rerout operation as follows: # 0 - rerout the line locally # 1 - move the whole line as triplet # 2 - move the whole line if possible, otherwise do local rerout v_rerout_bus = no # Variable - Enable the user to define if to do "bus" rerout, if needed. max_pad_misregistration = 1 # Variable - Maximal allowed distance between Pad center and hole center to consider the hole as assigned to the Pad. same_net_space = no # Variable - if set to yes this will prevent a pad from being increased and causing same net spacing problems. If set to no same net spacing checks are ignored. v_handle_same_net_spacing = 1 # Variable - State if to handle same net spacing. If set to "0" - same net spacing will not be handle. If set to "1" - Report same net spacing problems. If set to "2" - Try to solve same net spacing problems. (For more details see doc 602). v_ignore_attrs = # Variable - Enable the user to define attributes that the action will ignore. v_use_mask_layer = no # Variable - Enable the user to define mask layer using the relevant layer's attributes. ################### End of model Inner padup (Mils) ###################################### ################### Start of model Inner shave (Mils) ###################################### # Initialise model with model name, units, and color definitions. .model Inner shave (Mils) .units inch .colors 991010 999910 109010 # Colors set to red yellow green. # Define ranges (how results should be captured / presented). .ranges arg_repaired = 0,0.1,1000 # Range - reports places where the annular ring has been fixed. arg_violation_min = 1000,1001,1002 # Range - reports places where the annular ring cannot be increased to the minimum required value. arg_violation_opt = 0,1000,1001 # Range - reports places where the annular ring is better than the minimum value, but cannot be increased to the optimum value. enlarge_limit = 0,1000,1001 # Range - reports places where the annular ring could not be fixed as the pad enlargement needed to fix it was larger than the variable max_pad_enlarge (see below). annular_ring = 10000,10001,10001 # Range - used only as part of flash edit. Do not modify. Used to display annular ring measurements. spacing = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display spacing measurements. pth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display pth to copper spacing measurements. npth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display non-pth to copper spacing measurements. spacing_repaired = 0,0.1,1000 # Range - reports places where spacing violations have been fixed. h2cu_repaired = 0,0.1,1000 # Range - reports places where hole to copper spacing violations have been fixed. spacing_violation_min = 1000,1001,1002 # Range - reports places where the spacing cannot be increased to the minimum required value. spacing_violation_opt = 0,1000,1001 # Range - reports places where the spacing is better than the minimum value, but cannot be increased to the optimum value. h2cu_violation = 1000,1001,1002 # Range - reports places where hole to copper spacing violations cannot be fixed. same_space = 0,1000,1001 # Range - if same_net_space variable (see below) is set to yes, this will report places where the pad cannot be increased as it will create a spacing problem with features of the same net. same_spacing = 0,1000,1001 # Range - if v_handle_same_net_spacing (see below) is set to "1" or "2", same net spacing problems will be report in this category. same_net_s_repaired = 0,1000,1001 # Range - if v_handle_same_net_spacing (see below) is set to "2", same net spacing that were solved will be report in this category. polygon_shave = 0,0.1,1000 # Range - reports places that have been fixed using a polygon shave. Active only if the variable do_poly_shave is set to yes. filled_surface = 0,1000,1001 # Range - reports places that were fixed using a filled polygon shave. Active only if the variables do_poly_shave and fill_poly are both set to yes. un_filled_surface = 0,1000,1001 # Range - reports places that have to be fixed using a filled polygon shave, but where the polygon could not be filled. Active only if the variables do_poly_shave and fill_poly are both set to yes. # Define parameters to be used in action window on screen. .pdef pp_layer = .type=signal&side=inner pp_min_pth_ar = 1 pp_opt_pth_ar = 1 pp_min_via_ar = 1 pp_opt_via_ar = 1 pp_min_spacing = 5.9055 pp_opt_spacing = 5.9055 pp_min_p2p_spacing = 5.9055 pp_opt_p2p_spacing = 5.9055 pp_min_line = 4 pp_opt_line = 10 pp_nd_percent = 10 pp_abs_min_line = 5 pp_min_pth2c = 7.874 pp_selected = All pp_work_on = .all pp_modification = shave # Set variable values (used to fine-tune the way the function works). .vars PRD = 7 # Variable - modification priority for shrinking pads without violating optimum annular ring (highest number of these variables is highest priority modification). PRS = 1 # Variable - modification priority for slight rounding of smd pad corners (highest number of these variables is highest priority modification). LRR = 6 # Variable - modification priority for re-routing lines (highest number of these variables is highest priority modification). PSH = 3 # Variable - modification priority for shaving pads without violating optimum annular ring or spacing (highest number of these variables is highest priority modification). PSHC = 2 # Variable - modification priority for shaving pads without violating minimum annular ring or spacing (highest number of these variables is highest priority modification). LRE = 4 # Variable - modification priority for line neckdown to achieve minimum spacing (highest number of these variables is highest priority modification). PRDC = 5 # Variable - modification priority for shrinking pads without violating minimum spacing or annular ring (highest number of these variables is highest priority modification). resize_smd = no # Variable - if set to yes, allow smd pads to be resized. If set to no do not resize smd pads. shave_smd = no # Variable - if set to yes, shaving of smd pads is allowed. If set to no smd pads will never have shaves applied. smd_resize_ratio = 0.9 # Variable - if smd pad resize if allowed (see resize_smd variable above) the smallest dimension of the smd pad is never allowed to be reduced to more than this ratio of its original size. v_keep_smd_form = no # Variable - if set to yes, if the smd pad is drilled by a via hole no pad will be added to the via hole to improve annular ring as it will affect the shape of the smd. If set to no via annular ring will be modified. max_pad_shaves = 5 # Variable - the maximum number of shaves that can be applied to any one pad. do_poly_shave = yes # Variable - if set to yes, polygons can be used to create shaves where required. If set to no polyon shaves will not be used. fill_poly = yes # Variable - if set to yes, any polygon shaves will be track filled. If set to no any polygon shaves will remain as polygons. min_brush = 0.78 # Variable - this value is the minimum track width that can be used when filling polygon shaves. exact_min_on_compromise = yes # Variable - if the system finds a place where there is a compromise between annular ring and spacing, if this is set to yes any shave added will achieve only minimum spacing. If set to no optimum spacing will be achieved if possible. shave_only_vias = no # Variable - if set to yes then only pads drilled by via holes will be shaved. If set to no all pads can be shaved. allow_both = yes # Variable - if set to yes, in situations where there is a spacing problem between two pads, a small shave will be added to both pads. If set to no a larger shave will be added to one of the pads. max_pad_shrink = 0 # Variable - this is the maximum value that a pad can be shrunk in order to fix spacing problems. If set to 0 then there is no limit. v_shave_pad_below_min = no # Variable - Enable the user to define if to shave Pad for minimal spacing, # even below min_ar. If set to "no" then the action will not use shave that will violate # the Pap min_ar, if set to "yes", the action will try to solve spacing even if it violate # Pad min_ar. max_pad_enlarge = 0 # Variable - this is the maximum value that a pad can be increased in order to fix annular ring problems. If set to 0 then there is no limit. keep_pad_shape = yes # Variable - if set to yes then square pads will remain as square pads after enlargement. If set to no then enlarged pads may become round in order to help with spacing. v_handle_non_standard_pads = 1 # Variable - if to handle non standard Pads (Standard Pads are only round or square Pads) in rereoute line or enlarge Pad. If set to "0" non standard Pad will not be optimized, if set to "1" non standard Pad will be optimized (in Pad enlargment and LRR, LRE). v_optimized_embedded_pad = 0 # Varaible - Defines how to optimized embedded drilled Pad - # "0" - Do not optimized. # "1" - Optimized to maximum AR. # "2" - Optimized to maximum AR and if there is no Pad, add an optimized one. min_neck_len = 10 # Variable - any line neckdown created will be longer in lenth than this value. min_reroute_side = 5 # Variable - if a line is re-routed, there must be a segment of the original line either side of the re-route, and these segments must be a minimum of this value in length. LRR_max_shift = 0 # Variable - this value specifies the maximum amount of shift allowed when a line re-route is used. If set to 0 then there is no limit. v_rerout_mode = 0 # Variable - Enable the user to control line rerout operation as follows: # 0 - rerout the line locally # 1 - move the whole line as triplet # 2 - move the whole line if possible, otherwise do local rerout v_rerout_bus = no # Variable - Enable the user to define if to do "bus" rerout, if needed. max_pad_misregistration = 1 # Variable - Maximal allowed distance between Pad center and hole center to consider the hole as assigned to the Pad. same_net_space = no # Variable - if set to yes this will prevent a pad from being increased and causing same net spacing problems. If set to no same net spacing checks are ignored. v_handle_same_net_spacing = 2 # Variable - State if to handle same net spacing. If set to "0" - same net spacing will not be handle. If set to "1" - Report same net spacing problems. If set to "2" - Try to solve same net spacing problems. (For more details see doc 602). v_ignore_attrs = # Variable - Enable the user to define attributes that the action will ignore. v_use_mask_layer = no # Variable - Enable the user to define mask layer using the relevant layer's attributes. ################### End of model Inner shave (Mils) ###################################### ################### Start of model Outer padup (Microns) ###################################### # Initialise model with model name, units, and color definitions. .model Outer padup (Microns) .units metric .colors 991010 999910 109010 # Colors set to red yellow green. # Define ranges (how results should be captured / presented). .ranges arg_repaired = 0,0.1,10000 # Range - reports places where the annular ring has been fixed. spacing_repaired = 0,0.1,10000 # Range - reports places where spacing violations have been fixed. h2cu_repaired = 0,0.1,10000 # Range - reports places where hole to copper spacing violations have been fixed. arg_violation_min = 10000,10001,10002 # Range - reports places where the annular ring cannot be increased to the minimum required value. arg_violation_opt = 0,10000,10001 # Range - reports places where the annular ring is better than the minimum value, but cannot be increased to the optimum value. spacing = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display spacing measurements. pth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display pth to copper spacing measurements. npth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display non-pth to copper spacing measurements. annular_ring = 10000,10001,10001 # Range - used only as part of flash edit. Do not modify. Used to display annular ring measurements. spacing_violation_min = 10000,10001,10002 # Range - reports places where the spacing cannot be increased to the minimum required value. spacing_violation_opt = 0,10000,10001 # Range - reports places where the spacing is better than the minimum value, but cannot be increased to the optimum value. h2cu_violation = 10000,10001,10002 # Range - reports places where hole to copper spacing violations cannot be fixed. filled_surface = 0,10000,10001 # Range - reports places that were fixed using a filled polygon shave. Active only if the variables do_poly_shave and fill_poly are both set to yes. un_filled_surface = 0,10000,10001 # Range - reports places that have to be fixed using a filled polygon shave, but where the polygon could not be filled. Active only if the variables do_poly_shave and fill_poly are both set to yes. polygon_shave = 0,0.1,10000 # Range - reports places that have been fixed using a polygon shave. Active only if the variable do_poly_shave is set to yes. enlarge_limit = 0,10000,10001 # Range - reports places where the annular ring could not be fixed as the pad enlargement needed to fix it was larger than the variable max_pad_enlarge (see below). same_space = 0,10000,10001 # Range - if same_net_space variable (see below) is set to yes, this will report places where the pad cannot be increased as it will create a spacing problem with features of the same net. same_spacing = 0,10000,10001 # Range - if v_handle_same_net_spacing (see below) is set to "1" or "2", same net spacing problems will be report in this category. same_net_s_repaired = 0,10000,10001 # Range - if v_handle_same_net_spacing (see below) is set to "2", same net spacing that were solved will be report in this category. # Define parameters to be used in action window on screen. .pdef pp_layer = .type=signal&side=top|bottom pp_min_pth_ar = 200 pp_opt_pth_ar = 200 pp_min_via_ar = 150 pp_opt_via_ar = 150 pp_min_spacing = 25.4 pp_opt_spacing = 25.4 pp_min_p2p_spacing = 25.4 pp_opt_p2p_spacing = 25.4 pp_min_line = 102 pp_opt_line = 254 pp_nd_percent = 10 pp_abs_min_line = 127 pp_min_pth2c = 200 pp_selected = All pp_work_on = .all pp_modification = padup # Set variable values (used to fine-tune the way the function works). .vars PRD = 7 # Variable - modification priority for shrinking pads without violating optimum annular ring (highest number of these variables is highest priority modification). PRS = 1 # Variable - modification priority for slight rounding of smd pad corners (highest number of these variables is highest priority modification). LRR = 3 # Variable - modification priority for re-routing lines (highest number of these variables is highest priority modification). PSH = 4 # Variable - modification priority for shaving pads without violating optimum annular ring or spacing (highest number of these variables is highest priority modification). PSHC = 2 # Variable - modification priority for shaving pads without violating minimum annular ring or spacing (highest number of these variables is highest priority modification). LRE = 5 # Variable - modification priority for line neckdown to achieve minimum spacing (highest number of these variables is highest priority modification). PRDC = 6 # Variable - modification priority for shrinking pads without violating minimum spacing or annular ring (highest number of these variables is highest priority modification). resize_smd = no # Variable - if set to yes, allow smd pads to be resized. If set to no do not resize smd pads. shave_smd = no # Variable - if set to yes, shaving of smd pads is allowed. If set to no smd pads will never have shaves applied. smd_resize_ratio = 0.9 # Variable - if smd pad resize if allowed (see resize_smd variable above) the smallest dimension of the smd pad is never allowed to be reduced to more than this ratio of its original size. min_neck_len = 254 # Variable - any line neckdown created will be longer in lenth than this value. min_reroute_side = 254 # Variable - if a line is re-routed, there must be a segment of the original line either side of the re-route, and these segments must be a minimum of this value in length. max_pad_misregistration = 25 # Variable - Maximal allowed distance between Pad center and hole center to consider the hole as assigned to the Pad. max_pad_shaves = 5 # Variable - the maximum number of shaves that can be applied to any one pad. do_poly_shave = yes # Variable - if set to yes, polygons can be used to create shaves where required. If set to no polyon shaves will not be used. fill_poly = yes # Variable - if set to yes, any polygon shaves will be track filled. If set to no any polygon shaves will remain as polygons. min_brush = 20 # Variable - this value is the minimum track width that can be used when filling polygon shaves. exact_min_on_compromise = yes # Variable - if the system finds a place where there is a compromise between annular ring and spacing, if this is set to yes any shave added will achieve only minimum spacing. If set to no optimum spacing will be achieved if possible. v_keep_smd_form = no # Variable - if set to yes, if the smd pad is drilled by a via hole no pad will be added to the via hole to improve annular ring as it will affect the shape of the smd. If set to no via annular ring will be modified. allow_both = yes # Variable - if set to yes, in situations where there is a spacing problem between two pads, a small shave will be added to both pads. If set to no a larger shave will be added to one of the pads. LRR_max_shift = 0 # Variable - this value specifies the maximum amount of shift allowed when a line re-route is used. If set to 0 then there is no limit. max_pad_enlarge = 0 # Variable - this is the maximum value that a pad can be increased in order to fix annular ring problems. If set to 0 then there is no limit. max_pad_shrink = 0 # Variable - this is the maximum value that a pad can be shrunk in order to fix spacing problems. If set to 0 then there is no limit. same_net_space = no # Variable - if set to yes this will prevent a pad from being increased and causing same net spacing problems. If set to no same net spacing checks are ignored. keep_pad_shape = yes # Variable - if set to yes then square pads will remain as square pads after enlargement. If set to no then enlarged pads may become round in order to help with spacing. shave_only_vias = no # Variable - if set to yes then only pads drilled by via holes will be shaved. If set to no all pads can be shaved. v_handle_non_standard_pads = 1 # Variable - if to handle non standard Pads (Standard Pads are only round or square Pads) in rereoute line or enlarge Pad. If set to "0" non standard Pad will not be optimized, if set to "1" non standard Pad will be optimized (in Pad enlargment and LRR, LRE). v_handle_same_net_spacing = 1 # Variable - State if to handle same net spacing. If set to "0" - same net spacing will not be handle. If set to "1" - Report same net spacing problems. If set to "2" - Try to solve same net spacing problems.(For more details see doc 602). v_ignore_attrs = # Variable - Enable the user to define attributes that the action will ignore. v_use_mask_layer = no # Variable - Enable the user to define mask layer using the relevant layer's attributes. v_rerout_mode = 0 # Variable - Enable the user to control line rerout operation as follows: # 0 - rerout the line locally # 1 - move the whole line as triplet # 2 - move the whole line if possible, otherwise do local rerout v_shave_pad_below_min = no # Variable - Enable the user to define if to shave Pad for minimal spacing, # even below min_ar. If set to "no" then the action will not use shave that will violate # the Pap min_ar, if set to "yes", the action will try to solve spacing even if it violate # Pad min_ar. v_rerout_bus = no # Variable - Enable the user to define if to do "bus" rerout, if needed. v_optimized_embedded_pad = 0 # Varaible - Defines how to optimized embedded drilled Pad - # "0" - Do not optimized. # "1" - Optimized to maximum AR. # "2" - Optimized to maximum AR and if there is no Pad, add an optimized one. ################### End of model Outer padup (Microns) ###################################### ################### Start of model Outer shave (Microns) ###################################### # Initialise model with model name, units, and color definitions. .model Outer shave (Microns) .units metric .colors 991010 999910 109010 # Colors set to red yellow green. # Define ranges (how results should be captured / presented). .ranges arg_repaired = 0,0.1,10000 # Range - reports places where the annular ring has been fixed. spacing_repaired = 0,0.1,10000 # Range - reports places where spacing violations have been fixed. h2cu_repaired = 0,0.1,10000 # Range - reports places where hole to copper spacing violations have been fixed. arg_violation_min = 10000,10001,10002 # Range - reports places where the annular ring cannot be increased to the minimum required value. arg_violation_opt = 0,10000,10001 # Range - reports places where the annular ring is better than the minimum value, but cannot be increased to the optimum value. spacing = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display spacing measurements. pth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display pth to copper spacing measurements. npth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display non-pth to copper spacing measurements. annular_ring = 10000,10001,10001 # Range - used only as part of flash edit. Do not modify. Used to display annular ring measurements. spacing_violation_min = 10000,10001,10002 # Range - reports places where the spacing cannot be increased to the minimum required value. spacing_violation_opt = 0,10000,10001 # Range - reports places where the spacing is better than the minimum value, but cannot be increased to the optimum value. h2cu_violation = 10000,10001,10002 # Range - reports places where hole to copper spacing violations cannot be fixed. filled_surface = 0,10000,10001 # Range - reports places that were fixed using a filled polygon shave. Active only if the variables do_poly_shave and fill_poly are both set to yes. un_filled_surface = 0,10000,10001 # Range - reports places that have to be fixed using a filled polygon shave, but where the polygon could not be filled. Active only if the variables do_poly_shave and fill_poly are both set to yes. polygon_shave = 0,0.1,10000 # Range - reports places that have been fixed using a polygon shave. Active only if the variable do_poly_shave is set to yes. enlarge_limit = 0,10000,10001 # Range - reports places where the annular ring could not be fixed as the pad enlargement needed to fix it was larger than the variable max_pad_enlarge (see below). same_space = 0,10000,10001 # Range - if same_net_space variable (see below) is set to yes, this will report places where the pad cannot be increased as it will create a spacing problem with features of the same net. same_spacing = 0,10000,10001 # Range - if v_handle_same_net_spacing (see below) is set to "1" or "2", same net spacing problems will be report in this category. same_net_s_repaired = 0,10000,10001 # Range - if v_handle_same_net_spacing (see below) is set to "2", same net spacing that were solved will be report in this category. # Define parameters to be used in action window on screen. .pdef pp_layer = .type=signal&side=top|bottom pp_min_pth_ar = 25.4 pp_opt_pth_ar = 25.4 pp_min_via_ar = 25.4 pp_opt_via_ar = 25.4 pp_min_spacing = 130 pp_opt_spacing = 130 pp_min_p2p_spacing = 130 pp_opt_p2p_spacing = 130 pp_min_line = 102 pp_opt_line = 254 pp_nd_percent = 10 pp_abs_min_line = 127 pp_min_pth2c = 200 pp_selected = All pp_work_on = .all pp_modification = shave # Set variable values (used to fine-tune the way the function works). .vars PRD = 7 # Variable - modification priority for shrinking pads without violating optimum annular ring (highest number of these variables is highest priority modification). PRS = 1 # Variable - modification priority for slight rounding of smd pad corners (highest number of these variables is highest priority modification). LRR = 3 # Variable - modification priority for re-routing lines (highest number of these variables is highest priority modification). PSH = 4 # Variable - modification priority for shaving pads without violating optimum annular ring or spacing (highest number of these variables is highest priority modification). PSHC = 2 # Variable - modification priority for shaving pads without violating minimum annular ring or spacing (highest number of these variables is highest priority modification). LRE = 5 # Variable - modification priority for line neckdown to achieve minimum spacing (highest number of these variables is highest priority modification). PRDC = 6 # Variable - modification priority for shrinking pads without violating minimum spacing or annular ring (highest number of these variables is highest priority modification). resize_smd = no # Variable - if set to yes, allow smd pads to be resized. If set to no do not resize smd pads. shave_smd = no # Variable - if set to yes, shaving of smd pads is allowed. If set to no smd pads will never have shaves applied. smd_resize_ratio = 0.9 # Variable - if smd pad resize if allowed (see resize_smd variable above) the smallest dimension of the smd pad is never allowed to be reduced to more than this ratio of its original size. min_neck_len = 254 # Variable - any line neckdown created will be longer in lenth than this value. min_reroute_side = 254 # Variable - if a line is re-routed, there must be a segment of the original line either side of the re-route, and these segments must be a minimum of this value in length. max_pad_misregistration = 25 # Variable - Maximal allowed distance between Pad center and hole center to consider the hole as assigned to the Pad. max_pad_shaves = 9 # Variable - the maximum number of shaves that can be applied to any one pad. do_poly_shave = yes # Variable - if set to yes, polygons can be used to create shaves where required. If set to no polyon shaves will not be used. fill_poly = yes # Variable - if set to yes, any polygon shaves will be track filled. If set to no any polygon shaves will remain as polygons. min_brush = 15 # Variable - this value is the minimum track width that can be used when filling polygon shaves. exact_min_on_compromise = yes # Variable - if the system finds a place where there is a compromise between annular ring and spacing, if this is set to yes any shave added will achieve only minimum spacing. If set to no optimum spacing will be achieved if possible. v_keep_smd_form = no # Variable - if set to yes, if the smd pad is drilled by a via hole no pad will be added to the via hole to improve annular ring as it will affect the shape of the smd. If set to no via annular ring will be modified. allow_both = yes # Variable - if set to yes, in situations where there is a spacing problem between two pads, a small shave will be added to both pads. If set to no a larger shave will be added to one of the pads. LRR_max_shift = 0 # Variable - this value specifies the maximum amount of shift allowed when a line re-route is used. If set to 0 then there is no limit. max_pad_enlarge = 0 # Variable - this is the maximum value that a pad can be increased in order to fix annular ring problems. If set to 0 then there is no limit. max_pad_shrink = 0 # Variable - this is the maximum value that a pad can be shrunk in order to fix spacing problems. If set to 0 then there is no limit. same_net_space = no # Variable - if set to yes this will prevent a pad from being increased and causing same net spacing problems. If set to no same net spacing checks are ignored. keep_pad_shape = yes # Variable - if set to yes then square pads will remain as square pads after enlargement. If set to no then enlarged pads may become round in order to help with spacing. shave_only_vias = no # Variable - if set to yes then only pads drilled by via holes will be shaved. If set to no all pads can be shaved. v_handle_non_standard_pads = 1 # Variable - if to handle non standard Pads (Standard Pads are only round or square Pads) in rereoute line or enlarge Pad. If set to "0" non standard Pad will not be optimized, if set to "1" non standard Pad will be optimized (in Pad enlargment and LRR, LRE). v_handle_same_net_spacing = 2 # Variable - State if to handle same net spacing. If set to "0" - same net spacing will not be handle. If set to "1" - Report same net spacing problems. If set to "2" - Try to solve same net spacing problems.(For more details see doc 602). v_ignore_attrs = # Variable - Enable the user to define attributes that the action will ignore. v_use_mask_layer = no # Variable - Enable the user to define mask layer using the relevant layer's attributes. v_rerout_mode = 0 # Variable - Enable the user to control line rerout operation as follows: # 0 - rerout the line locally # 1 - move the whole line as triplet # 2 - move the whole line if possible, otherwise do local rerout v_shave_pad_below_min = no # Variable - Enable the user to define if to shave Pad for minimal spacing, # even below min_ar. If set to "no" then the action will not use shave that will violate # the Pap min_ar, if set to "yes", the action will try to solve spacing even if it violate # Pad min_ar. v_rerout_bus = no # Variable - Enable the user to define if to do "bus" rerout, if needed. v_optimized_embedded_pad = 0 # Varaible - Defines how to optimized embedded drilled Pad - # "0" - Do not optimized. # "1" - Optimized to maximum AR. # "2" - Optimized to maximum AR and if there is no Pad, add an optimized one. ################### End of model Outer shave (Microns) ###################################### ################### Start of model viapad shave (Microns) ###################################### # Initialise model with model name, units, and color definitions. .model viapad shave (Microns) .units metric .colors 991010 999910 109010 # Colors set to red yellow green. # Define ranges (how results should be captured / presented). .ranges arg_repaired = 0,0.1,10000 # Range - reports places where the annular ring has been fixed. spacing_repaired = 0,0.1,10000 # Range - reports places where spacing violations have been fixed. h2cu_repaired = 0,0.1,10000 # Range - reports places where hole to copper spacing violations have been fixed. arg_violation_min = 10000,10001,10002 # Range - reports places where the annular ring cannot be increased to the minimum required value. arg_violation_opt = 0,10000,10001 # Range - reports places where the annular ring is better than the minimum value, but cannot be increased to the optimum value. spacing = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display spacing measurements. pth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display pth to copper spacing measurements. npth2c = 10000,10001,10002 # Range - used only as part of flash edit. Do not modify. Used to display non-pth to copper spacing measurements. annular_ring = 10000,10001,10001 # Range - used only as part of flash edit. Do not modify. Used to display annular ring measurements. spacing_violation_min = 10000,10001,10002 # Range - reports places where the spacing cannot be increased to the minimum required value. spacing_violation_opt = 0,10000,10001 # Range - reports places where the spacing is better than the minimum value, but cannot be increased to the optimum value. h2cu_violation = 10000,10001,10002 # Range - reports places where hole to copper spacing violations cannot be fixed. filled_surface = 0,10000,10001 # Range - reports places that were fixed using a filled polygon shave. Active only if the variables do_poly_shave and fill_poly are both set to yes. un_filled_surface = 0,10000,10001 # Range - reports places that have to be fixed using a filled polygon shave, but where the polygon could not be filled. Active only if the variables do_poly_shave and fill_poly are both set to yes. polygon_shave = 0,0.1,10000 # Range - reports places that have been fixed using a polygon shave. Active only if the variable do_poly_shave is set to yes. enlarge_limit = 0,10000,10001 # Range - reports places where the annular ring could not be fixed as the pad enlargement needed to fix it was larger than the variable max_pad_enlarge (see below). same_space = 0,10000,10001 # Range - if same_net_space variable (see below) is set to yes, this will report places where the pad cannot be increased as it will create a spacing problem with features of the same net. same_spacing = 0,10000,10001 # Range - if v_handle_same_net_spacing (see below) is set to "1" or "2", same net spacing problems will be report in this category. same_net_s_repaired = 0,10000,10001 # Range - if v_handle_same_net_spacing (see below) is set to "2", same net spacing that were solved will be report in this category. # Define parameters to be used in action window on screen. .pdef pp_layer = .type=signal&side=top|bottom pp_min_pth_ar = 25.4 pp_opt_pth_ar = 25.4 pp_min_via_ar = 25.4 pp_opt_via_ar = 25.4 pp_min_spacing = 130 pp_opt_spacing = 150 pp_min_p2p_spacing = 130 pp_opt_p2p_spacing = 150 pp_min_line = 102 pp_opt_line = 254 pp_nd_percent = 10 pp_abs_min_line = 127 pp_min_pth2c = 200 pp_selected = All pp_work_on = .all pp_modification = shave # Set variable values (used to fine-tune the way the function works). .vars PRD = 7 # Variable - modification priority for shrinking pads without violating optimum annular ring (highest number of these variables is highest priority modification). PRS = 1 # Variable - modification priority for slight rounding of smd pad corners (highest number of these variables is highest priority modification). LRR = 3 # Variable - modification priority for re-routing lines (highest number of these variables is highest priority modification). PSH = 4 # Variable - modification priority for shaving pads without violating optimum annular ring or spacing (highest number of these variables is highest priority modification). PSHC = 2 # Variable - modification priority for shaving pads without violating minimum annular ring or spacing (highest number of these variables is highest priority modification). LRE = 5 # Variable - modification priority for line neckdown to achieve minimum spacing (highest number of these variables is highest priority modification). PRDC = 6 # Variable - modification priority for shrinking pads without violating minimum spacing or annular ring (highest number of these variables is highest priority modification). resize_smd = no # Variable - if set to yes, allow smd pads to be resized. If set to no do not resize smd pads. shave_smd = no # Variable - if set to yes, shaving of smd pads is allowed. If set to no smd pads will never have shaves applied. smd_resize_ratio = 0.9 # Variable - if smd pad resize if allowed (see resize_smd variable above) the smallest dimension of the smd pad is never allowed to be reduced to more than this ratio of its original size. min_neck_len = 254 # Variable - any line neckdown created will be longer in lenth than this value. min_reroute_side = 254 # Variable - if a line is re-routed, there must be a segment of the original line either side of the re-route, and these segments must be a minimum of this value in length. max_pad_misregistration = 25 # Variable - Maximal allowed distance between Pad center and hole center to consider the hole as assigned to the Pad. max_pad_shaves = 9 # Variable - the maximum number of shaves that can be applied to any one pad. do_poly_shave = yes # Variable - if set to yes, polygons can be used to create shaves where required. If set to no polyon shaves will not be used. fill_poly = yes # Variable - if set to yes, any polygon shaves will be track filled. If set to no any polygon shaves will remain as polygons. min_brush = 20 # Variable - this value is the minimum track width that can be used when filling polygon shaves. exact_min_on_compromise = yes # Variable - if the system finds a place where there is a compromise between annular ring and spacing, if this is set to yes any shave added will achieve only minimum spacing. If set to no optimum spacing will be achieved if possible. v_keep_smd_form = no # Variable - if set to yes, if the smd pad is drilled by a via hole no pad will be added to the via hole to improve annular ring as it will affect the shape of the smd. If set to no via annular ring will be modified. allow_both = yes # Variable - if set to yes, in situations where there is a spacing problem between two pads, a small shave will be added to both pads. If set to no a larger shave will be added to one of the pads. LRR_max_shift = 0 # Variable - this value specifies the maximum amount of shift allowed when a line re-route is used. If set to 0 then there is no limit. max_pad_enlarge = 0 # Variable - this is the maximum value that a pad can be increased in order to fix annular ring problems. If set to 0 then there is no limit. max_pad_shrink = 0 # Variable - this is the maximum value that a pad can be shrunk in order to fix spacing problems. If set to 0 then there is no limit. same_net_space = no # Variable - if set to yes this will prevent a pad from being increased and causing same net spacing problems. If set to no same net spacing checks are ignored. keep_pad_shape = yes # Variable - if set to yes then square pads will remain as square pads after enlargement. If set to no then enlarged pads may become round in order to help with spacing. shave_only_vias = yes # Variable - if set to yes then only pads drilled by via holes will be shaved. If set to no all pads can be shaved. v_handle_non_standard_pads = 1 # Variable - if to handle non standard Pads (Standard Pads are only round or square Pads) in rereoute line or enlarge Pad. If set to "0" non standard Pad will not be optimized, if set to "1" non standard Pad will be optimized (in Pad enlargment and LRR, LRE). v_handle_same_net_spacing = 2 # Variable - State if to handle same net spacing. If set to "0" - same net spacing will not be handle. If set to "1" - Report same net spacing problems. If set to "2" - Try to solve same net spacing problems.(For more details see doc 602). v_ignore_attrs = # Variable - Enable the user to define attributes that the action will ignore. v_use_mask_layer = no # Variable - Enable the user to define mask layer using the relevant layer's attributes. v_rerout_mode = 0 # Variable - Enable the user to control line rerout operation as follows: # 0 - rerout the line locally # 1 - move the whole line as triplet # 2 - move the whole line if possible, otherwise do local rerout v_shave_pad_below_min = no # Variable - Enable the user to define if to shave Pad for minimal spacing, # even below min_ar. If set to "no" then the action will not use shave that will violate # the Pap min_ar, if set to "yes", the action will try to solve spacing even if it violate # Pad min_ar. v_rerout_bus = no # Variable - Enable the user to define if to do "bus" rerout, if needed. v_optimized_embedded_pad = 0 # Varaible - Defines how to optimized embedded drilled Pad - # "0" - Do not optimized. # "1" - Optimized to maximum AR. # "2" - Optimized to maximum AR and if there is no Pad, add an optimized one. ################### End of model viapad shave (Microns) ###################################### # This section is for the ERF Manager optional program # It is needed only in the built-in version supplied by Valor # #BeginCategoryTable #Category arg_repaired N 0 "ARG repaired" #Category spacing_repaired N 0 "Spacing repaired" #Category h2cu_repaired N 0 "H2Cu repaired" #Category arg_violation_min N 0 "ARG violation(min)" #Category arg_violation_opt N 0 "ARG violation(opt)" #Category spacing N 0 "Spacing" #Category pth2c N 0 "Pth2c" #Category npth2c N 0 "NPth2c" #Category annular_ring N 0 "Annular ring" #Category spacing_violation_min N 0 "Spacing violation(min)" #Category spacing_violation_opt N 0 "Spacing violation(opt)" #Category h2cu_violation N 0 "H2Cu violation" #Category filled_surface N 0 "Filled polygon shave" #Category un_filled_surface N 0 "Unfillable polygon shave" #Category polygon_shave N 0 "Polygon shave" #Category enlarge_limit N 0 "Pad enlarge > limit" #Category same_space N 0 "Same net space" #Category same_spacing N 0 "Same Net Spacing Violation" #Category same_net_s_repaired N 0 "Same Net Spacing Violation Repaired" #EndCategoryTable ######### Variable definitions ############ #!vtype int,PRD,0,NLSE("") #!vtype int,PRS,0,NLSE("") #!vtype int,LRR,0,NLSE("") #!vtype int,PSH,0,NLSE("") #!vtype int,PSHC,0,NLSE("") #!vtype int,LRE,0,NLSE("") #!vtype int,PRDC,0,NLSE("") #!vtype radio,resize_smd,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,shave_smd,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype double,smd_resize_ratio,0,NLSE("") #!vtype p_mil,min_neck_len,0,NLSE("") #!vtype p_mil,min_reroute_side,0,NLSE("") #!vtype p_mil,max_pad_misregistration,0,NLSE("") #!vtype int,max_pad_shaves,0,NLSE("") #!vtype radio,do_poly_shave,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,fill_poly,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype p_mil,min_brush,0,NLSE("") #!vtype radio,exact_min_on_compromise,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,v_keep_smd_form,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,allow_both,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype p_mil,LRR_max_shift,0,NLSE("") #!vtype p_mil,max_pad_enlarge,0,NLSE("") #!vtype p_mil,max_pad_shrink,0,NLSE("") #!vtype radio,same_net_space,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,keep_pad_shape,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,shave_only_vias,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,v_handle_non_standard_pads,0,NLSE(""),NLSE("0");NLSE("1") #!vtype radio,v_handle_same_net_spacing,0,NLSE(""),NLSE("0");NLSE("1") #!vtype string,v_ignore_attrs,0,NLSE("") #!vtype radio,v_use_mask_layer,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,v_rerout_mode,0,NLSE(""),NLSE("0");NLSE("1");NLSE("2") #!vtype radio,v_shave_pad_below_min,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,v_rerout_bus,0,NLSE(""),NLSE("no");NLSE("yes") #!vtype radio,v_optimized_embedded_pad,0,NLSE(""),NLSE("0");NLSE("1");NLSE("2")