...
HTML |
---|
<form id = "design_form"> <input type="checkbox" name="sch_obs" value="1" checked="true">Obsolete Circuit Models (recommended replacement listed)<br> <input type="checkbox" name="sys_obs" value="1" checked="true">Obsolete System Models (recommended replacement listed)<br> <input type="checkbox" name="freq" value="1" checked="true">_FREQ in Output Equations (recommended equation solution listed)<br> <input type="checkbox" name="layout_opts" value="1" checked="true">Layout Options (list options needed for layout style found)<br> <input type="checkbox" name="layout_prec" value="1" checked="true">Model Layout Precision (list layout parameter with more precision that the DBU)<br> <input type="checkbox" name="width_mismatch" value="1" checked="true">Mismatched Widths (check for connected models with widths that are not matched)<br> <input type="checkbox" name="shorted" value="1" checked="true">Shorted Circuit Elements (list models with all nodes shorted)<br> <input type="checkbox" name="open" value="1" checked="true">Open Circuit Nodes (list models with nodes not connected)<br> <input type="checkbox" name="overlap" value="1" checked="true">Overlapping Circuit Elements (list models that are completely overlapping)<br> <input type="checkbox" name="gds_layers" value="1" checked="true">GDS Formatted Drawing Layers (Lists any GDSII formatted Drawing Layers)<br> <input type="checkbox" name="gds_layers" value="1" checked="true">PDK Version Check (Checks the existing PDKs and see if there is a newer version available)<br> How Much to Check <br> <input type="radio" name="check_type" value="entire" checked="true">Entire Design<br> <input type="radio" name="check_type" value="active">Active Schematic/System Diagram<br> </form> |
HTML |
---|
<input type="button" class="gh-button" value="Run Design Checker From Website" onclick="awrform_submit();"> <br> <!--<input type="button" class="gh-button" value="Run Design Checker with VB UI" onclick="run_check();">--> <script type="text/javascript"> function wait_check(Response) { runAwrScriptrunAwrGlobalScript('parse_checkghcommon','awrghDesignCheckerParseCheck', return_html); } function control_check(Response) { runAwrGlobalScript('Design_Checker','Design_Checker',wait_check); } function return_html(Response) { /* this gets called once runAwrScript is complete */ var fnCall = JSON.parse(Response); if (fnCall.errCode == 0) { obj = document.getElementById("results"); var myHtml = ""; for(var i = 0; i < fnCall.retValue.length; i += 1) { myHtml +="<h3>" + fnCall.retValue[i].Text + "</h3>"; if (i < fnCall.retValue.length-1 ) { var errs = fnCall.retValue[i].errors; for (var ind = 0; ind < errs.length; ind += 1) { if (typeof(errs[ind].doc) == "undefined") { myHtml += "<p>" + errs[ind].msg + "</p>"; } else { myHtml += "<p><a class=\"external-link\" rel=\"nofollow\" onclick = \"runAwrScriptrunAwrGlobalScript('highlight_schematic'ghcommon','awrghHighlightSchematic','" + errs[ind].doc + "','" + errs[ind].elem + "','" + errs[ind].type + "');\">" + errs[ind].msg + "</a></p>"; } } } } obj.innerHTML =myHtml } else alert(fnCall.errMsg); } function run_check() { /* javascript does not wait for function completion so we need a callback function if we want a return value */ document.getElementById("results").innerHTML = "Check Running, it might take a while, please be patient" runAwrGlobalScript('Design_Checker','Design_Checker',wait_check); } function awrform_submit() { var x = document.getElementById("design_form"); var text = ""; var i; for (i = 0; i < x.length ;i++) { if (x.elements[i].checked) { text = text + "1,"; } else { text = text + "0,"; } } <!--document.getElementById("results").innerHTML = text; used to display the control string--> document.getElementById("results").innerHTML = "Check Running, it might take a while, please be patient" runAwrScriptrunAwrGlobalScript('Design_Checker_Control_File'ghcommon','awrghDesignCheckerControlFile',text, control_check); } </script> |
...
HTML |
---|
<h2 id="results"><p></p></h2> |
HTML |
---|
<script id="awrscript" type="text/awrscript">
Function highlight_schematic(s As String, e As String, typ As Integer)
Dim sc As Schematic
Dim sy As SystemDiagram
Dim el As Element
Dim w As Window
Dim wds() As Window
'get array of windows
ReDim wds(0) '0 index will be blank
'get array of windows
For i = 1 To MWOffice.Windows.Count
ReDim Preserve wds(i)
Set wds(i) = MWOffice.Windows(i)
Next i
If typ = 1 Then'schematic
If Project.Schematics.Exists(s) Then
Set sc = Project.Schematics(s)
found = 0
For i = 1 To UBound(wds)
If window_doc(wds(i).Caption) = sc.Name Then
If wds(i).Type = 9 Then 'schematic
Set w = wds(i)
w.Activate
w.WindowState=mwWS_Maximized
found = 1
End If
End If
Next i
If found = 0 Then
Set w = sc.NewWindow
w.WindowState=mwWS_Maximized
End If
'get view number
tmp = w.Caption
tks = Split(tmp,":")
If UBound(tks) = 0 Then
vn = 1
Else
vn=CInt(tks(1))
End If
'remove any selected elements
sc.SelectedElements.RemoveAll
If sc.Elements.Exists(e) Then
Set el = sc.Elements(e)
el.Selected=True
sc.Views(vn).ZoomSelected
sc.Views(vn).ZoomOut
End If
End If
ElseIf typ = 2 Then 'system diagram
If Project.SystemDiagrams.Exists(s) Then
Set sy = Project.SystemDiagrams(s)
found = 0
For i = 1 To UBound(wds)
If window_doc(wds(i).Caption) = sy.Name Then
If wds(i).Type = 12 Then 'schematic
Set w = wds(i)
w.Activate
w.WindowState=mwWS_Maximized
found = 1
End If
End If
Next i
If found = 0 Then
Set w = sy.NewWindow
w.WindowState=mwWS_Maximized
End If
'get view number
tmp = w.Caption
tks = Split(tmp,":")
If UBound(tks) = 0 Then
vn = 1
Else
vn=CInt(tks(1))
End If
'remove any selected elements
sy.SelectedElements.RemoveAll
If sy.Elements.Exists(e) Then
Set el = sy.Elements(e)
el.Selected=True
sy.Views(vn).ZoomSelected
sy.Views(vn).ZoomOut
End If
End If
End If
Mwoffice.activate
End Function
Function window_doc(s As String) As String
tks = Split(s,":")
tks2 = Split(tks(0),"(")
window_doc = tks2(0)
End Function
Function parse_check() As String
dnt = Project.DataFiles("Project_Errors").DataAsText
tks = Split(dnt,vbLf)
'make hmtl
'If no tab, his h3
'If tab, use p but need To use the header To Get Type, 1=sch, 2=sys, 3 other For Now.
html = "["
start = True
For i = 1 To UBound (tks) 'skip first line
'Debug.Print tks(i)
'section titles, but skip
If Trim(tks(i)) = "" Then 'skip blanks
ElseIf Left(tks(i),1) <> vbTab Then'found header, start new top level object.
Select Case tks(i)
Case "Checking for Obsolete Circuit Models:"
typ = 1
Case "Checking for Obsolete System Models:"
typ=2
Case "Checking for _FREQ in Output Equations:"
typ=3 'could open up this window, not done yet.
Case "Checking Layout Settings:"
typ=3 'could get access to this dialog box, would be a new case.
Case "Checking Layout Parameters Precision:"
typ=1
Case "Checking for Models Connected with Mismatched Widths:"
typ=1
Case "Checking for Shorted Elements:"
typ=1
Case "Checking for Open Nodes:"
typ=1
Case "Checking for Overlapping Elements:"
typ=1
Case "Checking for GDSII Formatted Layers in Drawing Layer List:"
typ=3
Case "Checking if Project PDKs Need Updates:"
typ=3
Case Else
typ = 3
End Select
'html = html & "<h3>" & Replace(tks(i),":","") & "</h3>" & vbCrLf
If InStr(tks(i),"Check time") Then
'html = html & "{""Text"":""" & tks(i) & """}"
If start = True Then 'see if the first object, otherwise need to close it down
start=False
Else
html = html & "] },"
End If
html = html & "{""Text"":""" & tks(i) & """}"
Else
If start = True Then 'see if the first object, otherwise need to close it down
start=False
Else
html = html & "] },"
End If
html = html & "{""Text"":""" & tks(i) & """, ""errors"": ["
End If
'need to not have comma at the end.
Else 'means not header, use type to see if can find schematic/system diagram
If typ = 1 Or typ = 2 Then
If InStr(tks(i),"skipped since active window") Then
html = html & "{""type"":""" & typ & """,""msg"":""" & Replace(tks(i),vbTab,"")& """}"
If Left(tks(i+1),1) = vbTab Then
html = html & ","
End If
Else
tks2 = Split(tks(i),":")
s = Trim(Split(tks2(1),",")(0))
e = Trim(Split(tks2(2)," ")(1))
e = Replace(e,",","") 'one check has comma aftter element.
'html = html & "<p id=""mwo_highligt"" onclick=""runAwrScript('highlight_schematic','" & s & "','" & e & "','" & 1 & "')"">" & tks(i) & "</p>" & vbCrLf
html = html & "{""doc"":""" & s & """,""elem"":""" & e & """,""type"":""" & typ & """,""msg"":""" & Replace(tks(i),vbTab,"")& """}"
'determine next line if it is another error or new category to get array separator right
If Left(tks(i+1),1) = vbTab Then
html = html & ","
End If
End If
'needs a comma between items but not at the end
Else
'just print messages here and the type.
html = html & "{""type"":""" & typ & """,""msg"":""" & Replace(tks(i),vbTab,"")& """}"
If Left(tks(i+1),1) = vbTab Then
html = html & ","
End If
End If
End If
Next i
html = html & " ]" 'end of json object at top level.
parse_check= html
End Function
Sub Design_Checker_Control_File(s As String)
Dim dctrl As DataFile
fn = "Design_Checker_Control"
If Project.DataFiles.Exists(fn) Then
Project.DataFiles.Remove(fn)
End If
Set dctrl = Project.DataFiles.Add(fn,fn,True,mwDFT_TXT)
dctrl.DataAsText=s
End Sub
</script> |
Error Types Descriptions
Obsolete Circuit Models
...
Error Types Descriptions
Obsolete Circuit Models
This check will look for any circuit model that is now considered obsolete and recommend an different model to use. Typically these models issue a warning when simulated but the warning is easy to miss. As a designer you should decide if the obsolete model is okay to continue using in your design.
...
PDK Version Check
This checks for if there are any newer PDKs available for the existing PDK's in the project. The check goes through each existing PDKs one by one and then goes through the AWR PDK Availibility library in the vendor libraries and see if there is a newer version of the PDK available. Then it informs the user of the result. You need to have internet connection to run this check.
...