summaryrefslogtreecommitdiff
path: root/readme.org
blob: d43c310c13e061e17344bcaa9b2429c9525541a6 (plain)
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
#+TITLE: Readme
* Overview

Extends org-babel capabilities to support spice simulations using
ngspice. Simulations are executed using an interactive ngspice process
running in emacs. The running ngspice process can be used to
manipulate the simulation results directly or spread a simulation into
multiple src blocks.

Spice source blocks are interpreted as circuit descriptions until an
'.end' line is encountered. After that a control part may follow
(surrounded by '.control' and '.endc' lines). *If there is no '.end'*
*line all of the src block is interpreted as a control block!*

* Use cases
** Just load some circuit for later simulation:
#+BEGIN_SRC spice :results output
,* RC
r1 1 0 10k
c1 1 0 1p
.IC V(1)=1
.tran 1n 0.1u
.end
#+END_SRC
#+RESULTS:
: Circuit: * rc

** Execute some stuff
#+BEGIN_SRC spice
echo "Hello world"
#+END_SRC
#+RESULTS:
: Hello world

#+BEGIN_SRC spice
echo "0,1,2,3"
#+END_SRC
#+RESULTS:
| 0 | 1 | 2 | 3 |

** Plot some voltages and return png
#+BEGIN_SRC spice :var file="/tmp/xzy" :results file
,*RC circuit
r1 1 0 10k
c1 1 0 1p

.IC V(1)=1
.tran 1n 0.1u
.end

.control
run
set gnuplot_terminal=png
gnuplot $file v(1)
.endc
#+END_SRC

#+RESULTS:
[[file:/tmp/xzy.png]]

** Do measurements and return results
#+BEGIN_SRC spice :session spicetest :results value
,*Time Constant Measurement
r1 1 0 10k
c1 1 0 1p

.IC V(1)=1
.tran 1n 0.1u
.print tran v(1)
.end

.control
run
meas tran value_at_tau find V(1) at=1e-8
meas tran value_at_five_tau find V(1) at=5e-8
echo $&value_at_tau ,$&value_at_five_tau
.endc
#+END_SRC

#+RESULTS:
| 0.36798 | 0.00671732 |

** Write simulation data to file and return file name
#+BEGIN_SRC spice :var file="/tmp/xyz" :post plot_stuff(data=*this*) :results file
,*RC circuit
r1 1 0 10k
c1 1 0 1p
.IC V(1)=1
.tran 1n 0.1u
.end
.control
run
wrdata $file v(1)
.endc
#+END_SRC

#+RESULTS:
[[file:/tmp/xyz_plot.png]]

#+NAME: plot_stuff
#+BEGIN_SRC gnuplot :var data="x" :file "/tmp/xyz_plot.png" :results silent
plot data u 1:2 w l ls 1
#+END_SRC
** Use calculation results of other src blocks as parameters
#+NAME: dim1_params
#+BEGIN_SRC ruby :exports none
[7.3260073260073255e-06,1.3215597400496679e-05,5.411787135503391e-06,2.344322344322345e-05,2.4e-06, 100.0]
#+END_SRC
#+RESULTS: dim1_params
| 7.3260073260073255e-06 | 1.3215597400496679e-05 | 5.411787135503391e-06 | 2.344322344322345e-05 | 2.4e-06 | 100.0 |

#+NAME: dim1_plot
#+BEGIN_SRC gnuplot :var data="x" :file /tmp/ignored.png :results silent :exports none
 set terminal pngcairo size 640,300 enhanced
 set format y "%.0s%cV"
 set format x "%.0s%cs"
 set xrange [190e-9:260e-9]
 set ytics 5e-3
 set xlabel "t"
 plot data using 1:2 w l ls 2 t "V_{out}"
#+END_SRC

#+BEGIN_SRC spice :session test :var dim=dim1_params :results output
,* DAC.asc
.model NMOS NMOS
.model PMOS PMOS
.lib /home/fred/spice/library/ngspice/CM5/CM5-N.phy CM5
M1 0 VDD N005 N005 MP7 l=$dim[5] w=$dim[4]
M2 VOUT VCTRL N005 N005 MP7 l=$dim[5] w=$dim[4]
M4 N003 N002 VDD VDD MP7 l=$dim[3] w=$dim[2]
M3 N002 N002 VDD VDD MP7 l=$dim[3] w=$dim[2]
M5 N005 N004 N003 N003 MP7 l=$dim[3] w=$dim[2]
M6 N004 N004 N002 N002 MP7 l=$dim[3] w=$dim[2]
RL VOUT 0 $dim[6]
CL VOUT 0 10p
VDD VDD 0 5
IREF N004 0 7.3u
V1 VBIAS 0 2.5
V2 VCTRL 0 PULSE(0 5 0 1n 1n 200n 420n)
VM VDD N001 0
.tran 1n 300n 190n
.end
#+END_SRC

#+RESULTS:
: Circuit: * dac.asc

#+NAME: dim1
#+BEGIN_SRC spice :session test :var file="/tmp/dim1" dim=dim1_params :post dim1_plot[:file /tmp/dim1.png](data=*this*) :results file
save all
run
wrdata $file v(vout)
#+END_SRC

#+RESULTS: dim1
[[file:/tmp/dim1.png]]
* Current supported Flags
** :dir
Working directory to run the src block in. Default is the value of `default-directory'.