2017-04-25 14:41:48 +02:00
|
|
|
;-------------------------------------------------------------------------
|
|
|
|
|
;
|
|
|
|
|
; (c) 1997 California Institute of Technology
|
|
|
|
|
; Department of Computer Science
|
|
|
|
|
; Pasadena, CA 91125.
|
|
|
|
|
; All Rights Reserved
|
|
|
|
|
;
|
|
|
|
|
; Permission to use, copy, modify, and distribute this software
|
|
|
|
|
; and its documentation for any purpose and without fee is hereby
|
|
|
|
|
; granted, provided that the above copyright notice appear in all
|
|
|
|
|
; copies. The California Institute of Technology makes no representations
|
|
|
|
|
; about the suitability of this software for any purpose. It is
|
|
|
|
|
; provided "as is" without express or implied warranty. Export of this
|
|
|
|
|
; software outside of the United States of America may require an
|
|
|
|
|
; export license.
|
|
|
|
|
;
|
2020-05-23 01:13:09 +02:00
|
|
|
; $Header$
|
2017-04-25 14:41:48 +02:00
|
|
|
;
|
|
|
|
|
;-------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------
|
|
|
|
|
;
|
|
|
|
|
; Help for scheme commands
|
|
|
|
|
;
|
|
|
|
|
;------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
(define scm-help ())
|
|
|
|
|
(define scm-add-help ())
|
|
|
|
|
|
|
|
|
|
(letrec (
|
|
|
|
|
(scm-help-list ())
|
|
|
|
|
(module-name (lambda (x) (car x)))
|
|
|
|
|
(module-long-form (lambda (x) (cadr x)))
|
|
|
|
|
(module-fns (lambda (x) (caddr x)))
|
|
|
|
|
(dump-module-list
|
|
|
|
|
(lambda (l)
|
|
|
|
|
(if (null? l) #t
|
|
|
|
|
(begin
|
|
|
|
|
(echo
|
|
|
|
|
(string-append
|
|
|
|
|
(string-append (module-name (car l)) " :: ")
|
|
|
|
|
(module-long-form (car l))
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
(dump-module-list (cdr l))
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
(dump-help
|
|
|
|
|
(lambda (l name)
|
|
|
|
|
(cond ((null? l) (echo "Module not found"))
|
|
|
|
|
((string=? (module-name (car l)) name)
|
|
|
|
|
(begin
|
|
|
|
|
(echo)
|
|
|
|
|
(echo (module-fns (car l))))
|
|
|
|
|
)
|
|
|
|
|
(#t (dump-help (cdr l) name))
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
(begin
|
|
|
|
|
(set! scm-help
|
|
|
|
|
(lambda (name)
|
|
|
|
|
(cond ((and (procedure? name)
|
|
|
|
|
(eqv? name ?))
|
|
|
|
|
(begin
|
|
|
|
|
(echo "Available help:")
|
|
|
|
|
(echo)
|
|
|
|
|
(dump-module-list scm-help-list)
|
|
|
|
|
(collect-garbage)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
((not (string? name))
|
|
|
|
|
(echo "Argument to scm-help must be a string"))
|
|
|
|
|
((string=? name "?")
|
|
|
|
|
(begin
|
|
|
|
|
(echo "Available modules:") (echo)
|
|
|
|
|
(dump-module-list scm-help-list)
|
|
|
|
|
(collect-garbage)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
(#t (dump-help scm-help-list name))
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
(set! scm-add-help
|
|
|
|
|
(lambda (name long-form fns)
|
|
|
|
|
(set! scm-help-list (cons (list name long-form fns) scm-help-list))
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
;
|
|
|
|
|
;
|
|
|
|
|
; Everyone should put their help file in their own particular
|
|
|
|
|
; implementation directory.
|
|
|
|
|
;
|
|
|
|
|
;
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
|
|
|
|
(scm-add-help
|
|
|
|
|
"sel" "Selection commands"
|
|
|
|
|
"Selection:
|
|
|
|
|
|
|
|
|
|
:sel.netlist \"nm\" Selects a netlist labelled nm restricted by the box.
|
|
|
|
|
All labels named nm under the box are selected along
|
|
|
|
|
with whatever is electrically connected to them.
|
|
|
|
|
|
|
|
|
|
:sel.push Pushes current selection onto selection stack
|
|
|
|
|
:sel.pop Pops top of selection stack
|
|
|
|
|
|
|
|
|
|
:sel.cmp Compares current selection with the top-of-stack. The
|
|
|
|
|
List of labels that are different are bound to the label
|
|
|
|
|
search list and can be browsed using label.find-next."
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(scm-add-help
|
|
|
|
|
"prs" "Production-rule drawing"
|
|
|
|
|
"Production rule drawing:
|
|
|
|
|
|
|
|
|
|
:prs.draw w \"rule\" Draws transistor stacks for production rule with
|
|
|
|
|
diffusion width w.
|
|
|
|
|
|
|
|
|
|
:prs.talldraw w \"rule\" Same as prs.draw, only doesn't squish out diffusion
|
|
|
|
|
between poly and contacts for intermediate nodes.
|
|
|
|
|
|
|
|
|
|
:prs.mgn pw nw \"r1\" ... Draws list of rules, sharing contacts if possible.
|
|
|
|
|
|
|
|
|
|
:prs.tallmgn pw nw \"r1\" Same as before, except unsquished diffusion."
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
(scm-add-help
|
|
|
|
|
"label" "Label manipulation"
|
|
|
|
|
"Label Manipulation
|
|
|
|
|
|
|
|
|
|
:label.rename \"n1\" \"n2\" renames all instances of n1 under the current
|
|
|
|
|
box with n2.
|
|
|
|
|
|
|
|
|
|
:label.swap \"n1\" \"n2\" renames all instances of n1 with n2 and n2 with
|
|
|
|
|
n1 under the current box.
|
|
|
|
|
|
|
|
|
|
:label.search \"n\" looks for all labels matching n under box.
|
|
|
|
|
:label.find-next moves box to the next label position."
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
(scm-add-help
|
|
|
|
|
"gate" "Standard gates"
|
|
|
|
|
"Standard gate generation
|
|
|
|
|
|
|
|
|
|
The gate generation commands are of the form
|
|
|
|
|
:command pw nw o i1 i2 ... iN
|
|
|
|
|
pw and nw specify the width of the p- and n-diffusion stacks. o is the output,
|
|
|
|
|
and i1 thru iN are the inputs.
|
|
|
|
|
|
|
|
|
|
:gate.c pw nw o i1 .. iN C-element
|
|
|
|
|
:gate.cf pw nw o i1 .. iN Folded C-element
|
|
|
|
|
:gate.inv pw nw o i Inverter
|
|
|
|
|
:gate.nor pw nw o i1 .. iN NOR gate
|
|
|
|
|
:gate.nand pw nw o i1 .. iN NAND gate"
|
|
|
|
|
)
|