-
Notifications
You must be signed in to change notification settings - Fork 0
/
xschemrc
509 lines (442 loc) · 20.9 KB
/
xschemrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
#### xschemrc system configuration file
#### values may be overridden by user's ~/.xschem/xschemrc configuration file
#### or by project-local ./xschemrc
###########################################################################
#### XSCHEM INSTALLATION DIRECTORY: XSCHEM_SHAREDIR
###########################################################################
#### Normally there is no reason to set this variable if using standard
#### installation. Location of files is set at compile time but may be overridden
#### with following line:
# set XSCHEM_SHAREDIR $env(HOME)/share/xschem
###########################################################################
#### XSCHEM SYSTEM-WIDE DESIGN LIBRARY PATHS: XSCHEM_LIBRARY_PATH
###########################################################################
#### If unset xschem starts with XSCHEM_LIBRARY_PATH set to the default, typically:
# ${HOME}/.xschem/xschem_library
# <install_root>/share/xschem/xschem_library/devices
# <install_root>/share/doc/xschem/examples
# <install_root>/share/doc/xschem/ngspice
# <install_root>/share/doc/xschem/logic
# <install_root>/share/doc/xschem/xschem_simulator
# <install_root>/share/doc/xschem/binto7seg
# <install_root>/share/doc/xschem/pcb
# <install_root>/share/doc/xschem/rom8k
#### Flush any previous definition
set XSCHEM_LIBRARY_PATH {}
#### include devices/*.sym
append XSCHEM_LIBRARY_PATH :${XSCHEM_SHAREDIR}/xschem_library/devices
append XSCHEM_LIBRARY_PATH :${XSCHEM_SHAREDIR}/xschem_library
#### include skywater libraries. Here i use [pwd]. This works if i start xschem from here.
append XSCHEM_LIBRARY_PATH :[file dirname [info script]]
#### add ~/.xschem/xschem_library (USER_CONF_DIR is normally ~/.xschem)
append XSCHEM_LIBRARY_PATH :$USER_CONF_DIR/xschem_library
###########################################################################
#### SET CUSTOM COLORS FOR XSCHEM LIBRARIES MATCHING CERTAIN PATTERNS
###########################################################################
#### each line contains a dircolor(pattern) followed by a color
#### color can be an ordinary name (grey, brown, blue) or a hex code {#77aaff}
#### hex code must be enclosed in braces
array unset dircolor
set dircolor(sky130_fd_pr$) blue
set dircolor(sky130_tests$) blue
set dircolor(xschem_sky130$) blue
set dircolor(xschem_library$) red
set dircolor(devices$) red
###########################################################################
#### WINDOW TO OPEN ON STARTUP: XSCHEM_START_WINDOW
###########################################################################
#### Start without a design if no filename given on command line:
#### To avoid absolute paths, use a path that is relative to one of the
#### XSCHEM_LIBRARY_PATH directories. Default: empty
set XSCHEM_START_WINDOW {sky130_tests/top.sch}
###########################################################################
#### DIRECTORY WHERE SIMULATIONS, NETLIST AND SIMULATOR OUTPUTS ARE PLACED
###########################################################################
#### If unset $USER_CONF_DIR/simulations is assumed (normally ~/.xschem/simulations)
# set netlist_dir $env(HOME)/.xschem/simulations
#### if this is set to '1' netlists and simulations will go into a simulation/ folder
#### inside the directory containing the top level schematic. Default: not set (0)
# set local_netlist_dir 1
###########################################################################
#### NETLIST AND HIERARCHICAL PRINT EXCLUDE PATTERNS
###########################################################################
#### xschem_libs is a list of patterns of cells to exclude from netlisting.
#### Matching is done as regular expression on full cell path
#### Example:
#### set xschem_libs { {/cmoslib/} {/analoglib/.*pass} buffer }
#### in this case all schematic cells of directory cmoslib and cells containing
#### /analoglib/...pass and buffer will be excluded from netlisting
#### default value: empty
# set xschem_libs {}
#### noprint_libs is a list with same rules as for xschem_libs. This
#### variable controls hierarchical print
#### default value: empty
# set noprint_libs {}
#### nolist_libs is a list with same rules as for xschem_libs. This
#### variable controls cell listing in procedure list_hierarchy.
#### default value: empty
# set nolist_libs {}
###########################################################################
#### CHANGE DEFAULT [] WITH SOME OTHER CHARACTERS FOR BUSSED SIGNALS
#### IN SPICE NETLISTS (EXAMPLE: DATA[7] --> DATA<7>)
###########################################################################
#### default: empty (use xschem default, [ ])
# set bus_replacement_char {<>}
#### for XSPICE: replace square brackets as the are used for XSPICE vector nodes.
# set bus_replacement_char {__}
###########################################################################
#### SOME DEFAULT BEHAVIOR
###########################################################################
#### Allowed values: spice, verilog, vhdl, tedax, default: spice
# set netlist_type spice
#### Some netlisting options (these are the defaults)
# set verilog_2001 1
#### to use a fixed line width set change_lw to 0 and set some value to line_width
#### these are the defaults
# set line_width 0
# set change_lw 1
#### allow color postscript and svg exports. Default: 1, enable color
# set color_ps 1
#### set paper size: name, height, width. Sizes in 1/72 of an inch (typographical points)
#### default: {a4 842 595}
# set ps_paper_size {a4 842 595}
# set ps_paper_size {letter 792 612}
#### initial size of xschem window you can specify also position with (wxh+x+y)
#### this is the default:
# set initial_geometry {900x600}
set initial_geometry {1280x695+0+0}
#### if set to 0, when zooming out allow the viewport do drift toward the mouse position,
#### allowing to move away by zooming / unzooming with mouse wheel
#### default setting: 0
# set unzoom_nodrift 0
#### if set to 1 full zoom will center the drawing instead of anhoring to lower
#### left corner. Default: 0
set zoom_full_center 1
#### if set to 1 allow to place multiple components with same name.
#### Warning: this is normally not allowed in any simulation netlist.
#### default: 0, do not allow place multiple elements with same name (refdes)
# set disable_unique_names 0
#### if set to 1 continue drawing lines / wires after click
#### default: 0
# set persistent_command 1
#### if set to 1 a wire is inserted when separating components that are
#### connected by pins. Default: not enabled (0)
# set connect_by_kissing 1
#### if set to 1 automatically join/trim wires while editing
#### this may slow down on rally big designs. Can be disabled via menu
#### default: 0
# set autotrim_wires 0
#### set widget scaling (mainly for font display), this is useful on 4K displays
#### default: unset (tk uses its default) > 1.0 ==> bigger
# set tk_scaling 1.7
#### use the tclreadline package if available , Default: 1 (enabled).
# set use_tclreadline 1
#### disable some symbol layers. Default: none, all layers are visible.
# set enable_layer(5) 0 ;# example to disable pin red boxes
#### enable to scale grid point size as done with lines at close zoom, default: 0
# set big_grid_points 0
#### enable grouping contiguous bits of bus slices in net->pin instance
#### assignments for verilog netlists. Default: disabled (0)
# set verilog_bitblast 0
#### allow searching the full search path for schematics associated to symbols
#### instead of looking only in symbol directory. Default: disabled (0).
# set search_schematic 0
#### focus the schematic window if mouse goes over it, even if a dialog box
#### is displayed, without needing to click.
#### This allows to move/zoom/pan the schematic while editing attributes.
#### Clicking in the schematic window usually closes the dialog box or starts
#### editing a new component if clicking on a new component.
#### default: enabled (1)
# set autofocus_mainwindow 1
#### replace selected text in text widgets when pasting from clipboard
#### default: enabled (1)
# set text_replace_selection 0
#### set component browser always above drawing canvas.
#### default: enabled (1)
# set component_browser_on_top 0
#### set graph line with multiplier with respect to xschem actual line width
#### default: 2.0
# set graph_linewidth_mult 2.0
###########################################################################
#### EXPORT FORMAT TRANSLATORS, PNG AND PDF
###########################################################################
#### command to translate xpm to png; (assumes command takes source
#### and dest file as arguments, example: gm convert plot.xpm plot.png)
#### default: {gm convert}
#### Windows ghostscript uses gswin64c
# set to_png {gswin64c -sDEVICE=png16m -o}
# set to_png {gm convert}
#### command to translate ps to pdf; (assumes command takes source
#### and dest file as arguments, example: ps2pdf plot.ps plot.pdf)
#### default: ps2pdf
#### Windows ghostscript uses gswin64c
# set to_pdf {gswin64c -sDEVICE=pdfwrite -o}
# set to_pdf ps2pdf
set to_pdf {ps2pdf -dAutoRotatePages=/None}
###########################################################################
#### UNDO: SAVE ON DISK OR KEEP IN MEMORY
###########################################################################
#### Alloved: 'disk'or 'memory'.
#### Saving undo on disk is safer but slower on extremely big schematics.
#### In most cases you won't notice any delay. Undo on disk allows previous
#### state recovery in case of crashes. In-memory undo is extremely fast
#### but should a crash occur everything is lost.
#### It is highly recommended to keep undo on disk.
#### Default: disk
# set undo_type disk
###########################################################################
#### CUSTOM GRID / SNAP VALUE SETTINGS
###########################################################################
#### Warning: changing these values will likely break compatibility
#### with existing symbol libraries. Defaults: grid 20, snap 10.
# set cadgrid 20
# set cadsnap 10
###########################################################################
#### CUSTOM COLORS MAY BE DEFINED HERE
###########################################################################
# set cadlayers 22
# set light_colors {
# "#ffffff" "#0044ee" "#aaaaaa" "#222222" "#229900"
# "#bb2200" "#00ccee" "#ff0000" "#888800" "#00aaaa"
# "#880088" "#00ff00" "#0000cc" "#666600" "#557755"
# "#aa2222" "#7ccc40" "#00ffcc" "#ce0097" "#d2d46b"
# "#ef6158" "#fdb200" }
# set dark_colors {
# "#000000" "#00ccee" "#3f3f3f" "#cccccc" "#88dd00"
# "#bb2200" "#00ccee" "#ff0000" "#ffff00" "#ffffff"
# "#ff00ff" "#00ff00" "#0000cc" "#aaaa00" "#aaccaa"
# "#ff7777" "#bfff81" "#00ffcc" "#ce0097" "#d2d46b"
# "#ef6158" "#fdb200" }
###########################################################################
#### CAIRO STUFF
###########################################################################
#### Scale all fonts by this number
# set cairo_font_scale 1.0
#### default for following two is 0.85 (xscale) and 0.88 (yscale) to
#### match cairo font spacing
# set nocairo_font_xscale 1.0
#### set nocairo_font_yscale 1.0
#### Scale line spacing by this number
# set cairo_font_line_spacing 1.0
#### Specify a font
# set cairo_font_name {Sans-Serif}
# set svg_font_name {Sans-Serif}
#### Lift up text by some zoom-corrected pixels for
#### better compatibility wrt no cairo version.
#### Useful values in the range [-1, 3]
# set cairo_vert_correct 0
# set nocairo_vert_correct 0
###########################################################################
#### KEYBINDINGS
###########################################################################
#### General format for specifying a replacement for a keybind
#### Replace Ctrl-q with Escape (so you wont kill the program)
# set replace_key(Control-q) Escape
#### swap w and W keybinds; Always specify Shift for capital letters
# set replace_key(Shift-W) Key-w
# set replace_key(Key-w) Shift-W
###########################################################################
#### TERMINAL
###########################################################################
#### default for linux: xterm
# set terminal {xterm -geometry 100x35 -fn 9x15 -bg black -fg white -cr white -ms white }
#### lxterminal is not OK since it will not inherit env vars:
#### In order to reduce memory usage and increase the performance, all instances
#### of the lxterminal are sharing a single process. LXTerminal is part of LXDE
###########################################################################
#### EDITOR
###########################################################################
#### editor must not detach from launching shell (-f mandatory for gvim)
#### default for linux: gvim -f
# set editor {gvim -f -geometry 90x28}
# set editor { xterm -geometry 100x40 -e nano }
# set editor { xterm -geometry 100x40 -e pico }
#### For Windows
# set editor {notepad.exe}
###########################################################################
#### SHOW ERC INFO WINDOW (erc errors, warnings etc)
###########################################################################
#### default: 0 (can be enabled by menu)
# set show_infowindow 0
###########################################################################
#### ALWAYS SHOW ERC INFO WINDOW AFTER NETLIST
###########################################################################
#### default: 0
# set show_infowindow_after_netlist 0
###########################################################################
#### TCP CONNECTION WITH GAW
###########################################################################
#### set gaw address for socket connection: {host port}
#### default: set to localhost, port 2020
# set gaw_tcp_address {localhost 2020}
###########################################################################
#### XSCHEM LISTEN TO TCP PORT
###########################################################################
#### set xschem listening port; default: not enabled
# set xschem_listen_port 2021
###########################################################################
#### BESPICE WAVE SOCKET CONNECTION
###########################################################################
#### set bespice wave listening port; default: not enabled
set bespice_listen_port 2022
###########################################################################
#### TCL FILES TO LOAD AT STARTUP
###########################################################################
#### list of tcl files to preload.
set tcl_files {}
# lappend tcl_files ${XSCHEM_SHAREDIR}/ngspice_backannotate.tcl
# lappend tcl_files ${XSCHEM_SHAREDIR}/change_index.tcl
# lappend tcl_files ....
###########################################################################
#### WEB URL DOWNLOAD HELPER APPLICATION
###########################################################################
#### used to download files from web: default: {curl -f -s -O -J}
# set download_url_helper {curl -f -s -O -J}
# set download_url_helper {wget -N --quiet --content-disposition}
###########################################################################
#### XSCHEM TOOLBAR
###########################################################################
#### default: not enabled.
set toolbar_visible 1
# set toolbar_horiz 1
###########################################################################
#### TABBED WINDOWS
###########################################################################
# default: not enabled. Interface can be changed runtime if only one window
# or tab is open.
set tabbed_interface 1
###########################################################################
#### CASE INSENSITIVE SYMBOL LOOKUP
###########################################################################
## this option might be useful on filesystems that are case insensitive and
## on designs ported from windows where case of file names does not matter.
## if this option is set symbol lookup will be case insensitive,
## so a symbol reference 'AMPLI.SYM' will match with 'ampli.sym' or
## Amply.sym on disk. File system must be case insensitive for this to work,
## like FAT32 or NTFS.
## Do not set this option if you don't know what you are doing.
## Default: not enabled (0)
# set case_insensitive 1
###########################################################################
#### HIDE GRAPHS IF NO SPICE DATA LOADED
###########################################################################
## if enabled graphs will be hidden if no data is loaded.
## default: not enabled (0)
# set hide_empty_graphs 0
###########################################################################
#### SHOW HIDDEN TEXTS
###########################################################################
## This option shows text objects even if they have attribute 'hide=true' set
## default: 0 (not set)
# set show_hidden_texts 1
###########################################################################
#### LIVE BACKANNOTATION OF DATA AT CURSOR 2 (B) POSITION
###########################################################################
## if enabled will backannotate values in schematic at cursor 'b' position
## in graph. Default: enabled (1)
set live_cursor2_backannotate 1
###########################################################################
#### SKYWATER PDK SPECIFIC VARIABLES
###########################################################################
## check if env var PDK_ROOT exists, and use it for building open_pdks paths
if { [info exists env(PDK_ROOT)] && $env(PDK_ROOT) ne {} } {
## found variable, set tcl PDK_ROOT var
if {![file isdir $env(PDK_ROOT)]} {
puts stderr "Warning: PDK_ROOT environment variable is set but path not found on the system."
}
set PDK_ROOT $env(PDK_ROOT)
} else {
## not existing or empty.
puts stderr "Warning: PDK_ROOT env. var. not found or empty, trying to find an open_pdks install"
if {[file isdir /usr/share/pdk]} {set PDK_ROOT /usr/share/pdk
} elseif {[file isdir /usr/local/share/pdk]} {set PDK_ROOT /usr/local/share/pdk
} elseif {[file isdir $env(HOME)/share/pdk]} {set PDK_ROOT $env(HOME)/share/pdk
} else {
puts stderr {No open_pdks installation found, set PDK_ROOT env. var. and restart xschem}
}
}
if {[info exists PDK_ROOT]} {
## get process variant
if {[info exists env(PDK)]} {
set PDK $env(PDK)
} else {
set PDK sky130A
}
# set SKYWATER_MODELS ${PDK_ROOT}/${PDK}/libs.tech/ngspice
set SKYWATER_MODELS ${PDK_ROOT}/${PDK}/libs.tech/combined
set SKYWATER_STDCELLS ${PDK_ROOT}/${PDK}/libs.ref/sky130_fd_sc_hd/spice
puts stderr "open_pdks installation: using $PDK_ROOT"
puts stderr "SKYWATER_MODELS: $SKYWATER_MODELS"
puts stderr "SKYWATER_STDCELLS: $SKYWATER_STDCELLS"
}
# sky130 mosfets dimension checks
proc fet_drc {instance symbol model w l {nf 1}} {
set res {}
# puts "$instance $model $symbol w=$w l=$l nf=$nf"
if { [string is double $w] && [string is double $l] && [string is integer $nf]} {
# not *_nf.sym devices: get single finger width
if {![regexp {fet.*_nf\.sym$} $symbol]} {
set w [expr { double($w) / double($nf)}]
}
switch -regexp $model {
{[np]fet_01v8$} {
if { $w < 0.42 } {
append res "${instance} ($model): finger width is too small, w / nf = $w" \n
}
if { $l < 0.15 } {
append res "${instance} ($model): length is too small, l = $l" \n
}
}
{pfet_01v8_lvt$} {
if { $w < 0.42 } {
append res "${instance} ($model): finger width is too small, w / nf = $w" \n
}
if { $l < 0.35 } {
append res "${instance} ($model): length is too small, l = $l" \n
}
}
{nfet_01v8_lvt$} {
if { $w < 0.42 } {
append res "${instance} ($model): finger width is too small, w / nf = $w" \n
}
if { $l < 0.15 } {
append res "${instance} ($model): length is too small, l = $l" \n
}
}
{[np]fet_g5v0d10v5$} {
if { $w < 0.42 } {
append res "${instance} ($model): finger width is too small, w / nf = $w" \n
}
if { $l < 0.5 } {
append res "${instance} ($model): length is too small, l = $l" \n
}
}
{pfet_g5v0d16v0$} {
if { $w < 5 } {
append res "${instance} ($model): finger width is too small, w / nf = $w" \n
}
if { $l < 0.66 } {
append res "${instance} ($model): length is too small, l = $l" \n
}
}
{nfet_g5v0d16v0$} {
if { $w < 5 } {
append res "${instance} ($model): finger width is too small, w / nf = $w" \n
}
if { $l < 0.7 } {
append res "${instance} ($model): length is too small, l = $l" \n
}
}
} ;# switch
}
return $res
}
# open_pdks specific:
# Set variables after ${PDK_ROOT} is known
# This overrides some of the variables set above.
set XSCHEM_START_WINDOW ${PDK_ROOT}/${PDK}/libs.tech/xschem/sky130_tests/top.sch
append XSCHEM_LIBRARY_PATH :${PDK_ROOT}/${PDK}/libs.tech/xschem
# allow a user-specific path add-on (https://github.com/iic-jku/iic-osic-tools/issues/7)
if { [info exists ::env(XSCHEM_USER_LIBRARY_PATH) ] } {
append XSCHEM_LIBRARY_PATH :$env(XSCHEM_USER_LIBRARY_PATH)
}