📄 dfa_assembly.il
字号:
/*
################################################################################
# #
# Command: dfac #
# Skill File: dfa_assembly.il #
# How To Load: Command> (load("dfa_assembly.il")) #
# How To Execute: Command> dfac #
# Sourcelink Solution Reference : 11297768 #
# #
# Author: Jatin Sasan , Cadence Design Systems #
# Email: jsasan@cadence.com #
# Telephone: 512-342-5107 #
# Creation Date: 08/14/2006 #
# #
################################################################################
################################################################################
# #
# DISCLAIMER: #
# THIS CODE IS UNSUPPORTED AND HAS HAD MINIMAL TESTING. #
# The following code is provided for Cadence customers #
# to use at their own risk. The code may require modification to #
# satisfy the requirements of any user. The code and any #
# modifications to the code may not be compatible with current or #
# future versions of Cadence products. #
# THE CODE IS PROVIDED "AS IS" AND WITH NO WARRANTIES, INCLUDING #
# WITHOUT LIMITATION ANY EXPRESS WARRANTIES OR IMPLIED WARRANTIES #
# OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. #
# #
################################################################################
################################################################################
# #
# 08/16/2006: Reports DFA violations w.r.t Assembly subclass #
# Revision history: #
# 1.0 Original file Aug 14,2006 #
# 1.1 Declared clearance as real field Aug 16,2006 #
# 1.2 Took Assembly outline line_width into account Aug 17,2006 #
# 2.0 a) Restores original Visibility of design after dfa run
# b) Fixed Viewlog problem. Clicking on Viewlog will always
# display logfile now.
# c) Set the form defaults to * and * Dec 09,2007 #
# #
# Advantages: #
# a) Support Regular expression character * #
# b) Calculates the clearance by creating a best fit bounding box on the #
# Assembly outline.No need for Assembly outline to be a perfect rectangle #
# or shape. #
# #
# Limitations: #
# a) Doesnt Support Circular boundaries. #
# b) Computational intensive for big Boards with large number of components #
# c) Clearance for rotated components would be incorrect. #
################################################################################
*/
axlCmdRegister("dfac" 'dfac)
procedure(dfac()
_makeForm_dfa_assembly()
axlFormDisplay(_DFA_Form)
); end procedure
;###########################################################
;# #
;# FORM CREATION #
;# #
;###########################################################
(defun _makeForm_dfa_assembly ()
_DFA_Form=outfile("./DFA_Form.form" "w")
fprintf(_DFA_Form "FILE_TYPE=FORM_DEFN VERSION=2\n")
fprintf(_DFA_Form "FORM\n")
fprintf(_DFA_Form "FIXED\n")
fprintf(_DFA_Form "PORT 65 15\n")
fprintf(_DFA_Form "HEADER \"DFA Assembly Checks\" \n")
fprintf(_DFA_Form "POPUP <PROPS_VALUE> \"ASSEMBLY_TOP\" \"ASSEMBLY_TOP\",\"ASSEMBLY_BOTTOM\" \"ASSEMBLY_BOTTOM\". \n")
fprintf(_DFA_Form "TILE\n")
fprintf(_DFA_Form "TEXT \"Select the Assembly Subclass:\"\n")
fprintf(_DFA_Form "TLOC 8 2\n")
fprintf(_DFA_Form "ENDTEXT\n")
fprintf(_DFA_Form "FIELD PROPS_VALUE\n")
fprintf(_DFA_Form "FLOC 32 2\n")
fprintf(_DFA_Form "ENUMSET 16 \n")
fprintf(_DFA_Form "POP PROPS_VALUE\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "TEXT \"Minimum clearance value:\"\n")
fprintf(_DFA_Form "TLOC 8 5\n")
fprintf(_DFA_Form "ENDTEXT\n")
fprintf(_DFA_Form "FIELD CLEARANCE\n")
fprintf(_DFA_Form "FLOC 32 5\n")
fprintf(_DFA_Form "REALFILLIN 5 5\n")
fprintf(_DFA_Form "DECIMAL 3 \n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "TEXT \"Design Units:\"\n")
fprintf(_DFA_Form "TLOC 40 5\n")
fprintf(_DFA_Form "ENDTEXT\n")
fprintf(_DFA_Form "FIELD DESIGN_UNITS \n")
fprintf(_DFA_Form "FLOC 52 5\n")
fprintf(_DFA_Form "STRFILLIN 10 10\n")
fprintf(_DFA_Form "INFO_ONLY \n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "TEXT \"Component1 Selection:\"\n")
fprintf(_DFA_Form "TLOC 8 8\n")
fprintf(_DFA_Form "ENDTEXT\n")
fprintf(_DFA_Form "FIELD COMP1\n")
fprintf(_DFA_Form "FLOC 32 8\n")
fprintf(_DFA_Form "STRFILLIN 20 20\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "FIELD COMP1_BR\n")
fprintf(_DFA_Form "FLOC 55 8 \n")
fprintf(_DFA_Form "MENUBUTTON \"Browse\" 10 3\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "TEXT \"Component2 Selection:\"\n")
fprintf(_DFA_Form "TLOC 8 11\n")
fprintf(_DFA_Form "ENDTEXT\n")
fprintf(_DFA_Form "FIELD COMP2\n")
fprintf(_DFA_Form "FLOC 32 11\n")
fprintf(_DFA_Form "STRFILLIN 20 20\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "FIELD COMP2_BR\n")
fprintf(_DFA_Form "FLOC 55 11 \n")
fprintf(_DFA_Form "MENUBUTTON \"Browse\" 10 3\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "FIELD RUN\n")
fprintf(_DFA_Form "FLOC 8 15 \n")
fprintf(_DFA_Form "MENUBUTTON \"Run\" 10 3\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "FIELD CLOSE\n")
fprintf(_DFA_Form "FLOC 30 15\n")
fprintf(_DFA_Form "MENUBUTTON \"Close\" 10 3\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "FIELD LOG\n")
fprintf(_DFA_Form "FLOC 50 15\n")
fprintf(_DFA_Form "MENUBUTTON \"ViewLog\" 10 3\n")
fprintf(_DFA_Form "ENDFIELD\n")
fprintf(_DFA_Form "ENDTILE\n")
fprintf(_DFA_Form "ENDFORM\n")
close(_DFA_Form)
_DFA_Form = axlFormCreate( (gensym) "DFA_Form.form" '(e inner) 'DFA_clearance_Form_Action t)
); end defun _makeForm_dfa_assembly
(defun DFA_clearance_Form_Action (myform)
case( myform->curField
("PROPS_VALUE"
prop_value = myform->curValue
)
("CLEARANCE"
grid_inc = myform->curValue
design_value = car(axlDBGetDesignUnits())
axlFormSetField(myform "DESIGN_UNITS" design_value)
axlFormSetField(myform "COMP1" "*")
axlFormSetField(myform "COMP2" "*")
(setq comp1 "*") (setq comp2 "*")
)
("COMP1"
comp1 = myform->curValue
)
("COMP2"
comp2 = myform->curValue
)
("DESIGN_UNITS"
/* NOTHING TO DO */
)
("COMP1_BR"
comp1 = car(axlUIDataBrowse('REFDES '(EXAMINE_DATABASE RETRIEVE_NAME) "Select Refdes" t))
axlFormSetField(myform "COMP1" comp1)
)
("COMP2_BR"
comp2 = car(axlUIDataBrowse('REFDES '(EXAMINE_DATABASE RETRIEVE_NAME) "Select Refdes" t))
axlFormSetField(myform "COMP2" comp2)
)
("RUN"
dfa_check_log=axlDMOpenLog("dfa_assembly_check")
fprintf(dfa_check_log "\t DFA ASSEMBLY VIOLATIONS log.\n\n")
v_layer_index = store_layer_index() ; To preserve which layers are currently visible.
status = clrn(comp1 comp2 grid_inc prop_value dfa_check_log)
if(status !=0 then
sprintf(msg_test,"%L violations reported. Click Viewlog for Details\n", status)
axlUIConfirm(msg_test)
else
axlUIConfirm("No DFA Violations reported")
) ; end if
(setq windowcount 0)
foreach(layer_v v_layer_index
axlVisibleLayer(layer_v t)
)
axlUIWUpdate(nil)
)
("CLOSE"
axlFormClose(myform)
axlCancelEnterFun()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -