README and examples updated (trise, tfall, let, cdepth).
This commit is contained in:
parent
5c3ddfb8e4
commit
69cac5bcc6
|
|
@ -1,121 +1,174 @@
|
||||||
SEE (single event effects) generator
|
SEE (single event effects) generator
|
||||||
|
|
||||||
|
The SEE generator generates current pulses, which resemble the
|
||||||
|
charge generation and flow causes by a penetrating particle.
|
||||||
NAME_TABLE:
|
|
||||||
|
How to use it:
|
||||||
C_Function_Name: cm_seegen
|
Select LET and charge collection depth cdepth, define them as parameters.
|
||||||
Spice_Model_Name: seegen
|
Identify all nodes of a circuit netlist which are pn junctions,
|
||||||
Description: "single event effect generator"
|
and thus are sensitive to pulses.
|
||||||
|
|
||||||
|
Set up the SEEgenerator by adding for example
|
||||||
PORT_TABLE:
|
|
||||||
|
* charge collection depth (in µm)
|
||||||
Port_Name: ctrl out
|
.param d = 1
|
||||||
Description: "control input" "output"
|
* LET (linear energy transfer) in MeV*cm²/mg
|
||||||
Direction: in out
|
.param let = 12
|
||||||
Default_Type: v i
|
aseegen1 NULL [%id(xcell.n1 m1) %id(xcell.n2 m2) %id(xcell.n1 m1) %id(xcell.n2 m2)] seemod1
|
||||||
Allowed_Types: [v,vd,i,id] [i,id]
|
.model seemod1 seegen (tdelay = 11n tperiod=25n let='let' cdepth='d')
|
||||||
Vector: no yes
|
|
||||||
Vector_Bounds: - [1 -]
|
to the netlist.
|
||||||
Null_Allowed: yes no
|
|
||||||
|
Each sensitive node from the (flattend) netlist may be added to assegen1, together with its
|
||||||
|
reference node, for example GND for NMOS, nwell potential for PMOS. This procedure is
|
||||||
PARAMETER_TABLE:
|
currently to be done manually, an automated setup is in preparation.
|
||||||
|
|
||||||
Parameter_Name: talpha tbeta
|
After a transient simulation, plotting the data output versus a non-radiated device
|
||||||
Description: "alpha" "beta"
|
may reveal the SEE influence.
|
||||||
Data_Type: real real
|
|
||||||
Default_Value: 500e-12 20e-12
|
Several examples are gieven in ./src/axamples/xspice/see: inverters, SRAM cell, opamp,
|
||||||
Limits: - -
|
also as loop with varying LET to detect the threshold.
|
||||||
Vector: no no
|
|
||||||
Vector_Bounds: - -
|
As literature please see for example
|
||||||
Null_Allowed: yes yes
|
Ygor Quadros de Aguiar, Frédéric Wrobel. Jean-Luc Autran, Rubén García Alía
|
||||||
|
Single-Event Effects, from Space to Accelerator Environments
|
||||||
|
Springer 2025
|
||||||
PARAMETER_TABLE:
|
|
||||||
|
Detailed description (will be added to the manual):
|
||||||
Parameter_Name: tdelay inull
|
|
||||||
Description: "pulse delay" "max current"
|
NAME_TABLE:
|
||||||
Data_Type: real real
|
|
||||||
Default_Value: 0 200e-6
|
C_Function_Name: cm_seegen
|
||||||
Limits: - -
|
Spice_Model_Name: seegen
|
||||||
Vector: no no
|
Description: "single event effect generator"
|
||||||
Vector_Bounds: - -
|
|
||||||
Null_Allowed: yes yes
|
|
||||||
|
PORT_TABLE:
|
||||||
|
|
||||||
PARAMETER_TABLE:
|
Port_Name: ctrl out
|
||||||
|
Description: "control input" "output"
|
||||||
Parameter_Name: tperiod ctrlthres
|
Direction: in out
|
||||||
Description: "pulse repetition" "control voltage threshold"
|
Default_Type: v i
|
||||||
Data_Type: real real
|
Allowed_Types: [v,vd,i,id] [i,id]
|
||||||
Default_Value: 0 0.5
|
Vector: no yes
|
||||||
Limits: - -
|
Vector_Bounds: - [1 -]
|
||||||
Vector: no no
|
Null_Allowed: yes no
|
||||||
Vector_Bounds: - -
|
|
||||||
Null_Allowed: yes yes
|
|
||||||
|
PARAMETER_TABLE:
|
||||||
|
|
||||||
PARAMETER_TABLE:
|
Parameter_Name: tfall trise
|
||||||
|
Description: "pulse fall time" "pulse rise time"
|
||||||
Parameter_Name: perlim
|
Data_Type: real real
|
||||||
Description: "pulse repetition limited"
|
Default_Value: 500e-12 20e-12
|
||||||
Data_Type: boolean
|
Limits: - -
|
||||||
Default_Value: TRUE
|
Vector: no no
|
||||||
Limits: -
|
Vector_Bounds: - -
|
||||||
Vector: no
|
Null_Allowed: yes yes
|
||||||
Vector_Bounds: -
|
|
||||||
Null_Allowed: yes
|
|
||||||
|
PARAMETER_TABLE:
|
||||||
|
|
||||||
STATIC_VAR_TABLE:
|
Parameter_Name: tdelay inull
|
||||||
|
Description: "pulse delay" "max current"
|
||||||
Static_Var_Name: last_t_value
|
Data_Type: real real
|
||||||
Data_Type: pointer
|
Default_Value: 0 0
|
||||||
Vector: no
|
Limits: - -
|
||||||
Description: "next pulse start time"
|
Vector: no no
|
||||||
|
Vector_Bounds: - -
|
||||||
STATIC_VAR_TABLE:
|
Null_Allowed: yes yes
|
||||||
|
|
||||||
Static_Var_Name: pulse_number
|
|
||||||
Data_Type: pointer
|
PARAMETER_TABLE:
|
||||||
Vector: no
|
|
||||||
Description: "number of pulse"
|
Parameter_Name: tperiod ctrlthres
|
||||||
|
Description: "pulse repetition" "control voltage threshold"
|
||||||
STATIC_VAR_TABLE:
|
Data_Type: real real
|
||||||
|
Default_Value: 0 0.5
|
||||||
Static_Var_Name: last_ctrl
|
Limits: - -
|
||||||
Data_Type: pointer
|
Vector: no no
|
||||||
Vector: no
|
Vector_Bounds: - -
|
||||||
Description: "last control value"
|
Null_Allowed: yes yes
|
||||||
|
|
||||||
Description
|
|
||||||
This code model generates "double exponentially" formed current pulses according to
|
PARAMETER_TABLE:
|
||||||
i(t) = inull * (exp(-(t-tdelay)/talpha) - (exp(-(t-tdelay)/tbeta) for t > tdelay
|
|
||||||
i(t) = 0 for t < tdelay
|
Parameter_Name: let cdepth
|
||||||
Minimum is one pulse output (a node pair, or a single node with the other grounded).
|
Description: "lin energy transfer" "charge collection depth"
|
||||||
Several output node pairs may be defined per code model instance. Parameter tperiod
|
Data_Type: real real
|
||||||
may then be used to create pulses in sequence. Per default only one sequence is running.
|
Default_Value: 10 1
|
||||||
Parameter perlim, set to FALSE, allows running and repeating the sequence until
|
Limits: - -
|
||||||
the end of the simulation. The first pulse is issued in the first
|
Vector: no no
|
||||||
node pair of the node list in the vector [], the second (after time tperiod has elapsed),
|
Vector_Bounds: - -
|
||||||
is injected by the second node (pair) of the list and so on. When the sequence is repeated,
|
Null_Allowed: yes yes
|
||||||
again the output starts pulsing at port (node pair) number 1.
|
|
||||||
The control input ctrl (voltage or current) may be used
|
|
||||||
to start or repeat the whole sequence, depending on the circuit status. A rising voltage
|
PARAMETER_TABLE:
|
||||||
at ctrl, when crossing the threshold given by ctrlthres, will initiate the sequence (including
|
|
||||||
tdelay and tperiod).
|
Parameter_Name: angle perlim
|
||||||
|
Description: "particle angle" "pulse repetition"
|
||||||
This model will work in transient analysis. The time step TSEP should be chosen to be not
|
Data_Type: real boolean
|
||||||
larger than than tbeta.
|
Default_Value: 0 TRUE
|
||||||
|
Limits: [0 1.57079] -
|
||||||
Example ngspice usage (with control)
|
Vector: no no
|
||||||
|
Vector_Bounds: - -
|
||||||
aseegen1 ctrl [%id(n1 m1) %id(n2 m2) %id(n1 m1) %id(n2 m2)] seemod1
|
Null_Allowed: yes yes
|
||||||
.model seemod1 seegen (tdelay = 8n tperiod=25n)
|
|
||||||
|
STATIC_VAR_TABLE:
|
||||||
Example ngspice usage (without control, parameters as offered by default)
|
|
||||||
|
Static_Var_Name: last_t_value
|
||||||
aseegen2 NULL [%id(n1 m1) %id(n5 n6) %id(n6 n7) %i(isingle) ] seemod2
|
Data_Type: pointer
|
||||||
.model seemod2 seegen (tdelay = 0 tperiod=0 ctrlthres=0.5 inull=200u talpha=500p tbeta=20p perlim=FALSE)
|
Vector: no
|
||||||
|
Description: "next pulse start time"
|
||||||
|
|
||||||
|
STATIC_VAR_TABLE:
|
||||||
|
|
||||||
|
Static_Var_Name: pulse_number
|
||||||
|
Data_Type: pointer
|
||||||
|
Vector: no
|
||||||
|
Description: "number of pulse"
|
||||||
|
|
||||||
|
STATIC_VAR_TABLE:
|
||||||
|
|
||||||
|
Static_Var_Name: last_ctrl
|
||||||
|
Data_Type: pointer
|
||||||
|
Vector: no
|
||||||
|
Description: "last control value"
|
||||||
|
|
||||||
|
Description
|
||||||
|
This code model generates "double exponentially" formed current pulses according to
|
||||||
|
|
||||||
|
i(t) = inull * (exp(-(t-tdelay)/tfall) - (exp(-(t-tdelay)/trise) for t > tdelay
|
||||||
|
i(t) = 0 for t < tdelay
|
||||||
|
|
||||||
|
with inull given as parameter input or (if not given), calculated as
|
||||||
|
inull = 1.035e-14 * let/cos(angle) * cdepth / (tfall - trise)
|
||||||
|
with data for silicon, cdepth in µm, let in MeV*cm²/mg, angle in radians.
|
||||||
|
|
||||||
|
Minimum is one pulse output (a node pair, or a single node with the other grounded).
|
||||||
|
Several output node pairs may be defined per code model instance. Parameter tperiod
|
||||||
|
may then be used to create pulses in sequence. Per default only one sequence is running,
|
||||||
|
with one pulse for each node.
|
||||||
|
Parameter perlim, set to FALSE, allows running and repeating the sequence until
|
||||||
|
the end of the simulation. The first pulse is issued in the first
|
||||||
|
node pair of the node list in the vector [], the second (after time tperiod has elapsed),
|
||||||
|
is injected by the second node (pair) of the list and so on. When the sequence is repeated,
|
||||||
|
again the output starts pulsing at port (node pair) number 1.
|
||||||
|
|
||||||
|
The control input ctrl (voltage or current) may be used
|
||||||
|
to start or repeat the whole sequence, depending on the circuit status. A rising voltage
|
||||||
|
at ctrl, when crossing the threshold given by ctrlthres, will initiate the sequence (including
|
||||||
|
tdelay and tperiod).
|
||||||
|
|
||||||
|
This model will work in transient analysis. The time step TSTEP should be chosen to be not
|
||||||
|
larger than than trise.
|
||||||
|
|
||||||
|
Example ngspice usage (with control)
|
||||||
|
|
||||||
|
aseegen1 ctrl [%id(n1 m1) %id(n2 m2) %id(n1 m1) %id(n2 m2)] seemod1
|
||||||
|
.model seemod1 seegen (tdelay = 8n tperiod=25n)
|
||||||
|
|
||||||
|
Example ngspice usage (without control, ctrl replaced by NULL, parameters as offered by default)
|
||||||
|
|
||||||
|
aseegen2 NULL [%id(n1 m1) %id(n5 n6) %id(n6 n7) %i(isingle) ] seemod2
|
||||||
|
.model seemod2 seegen (tdelay = 0 tperiod=0 ctrlthres=0.5 inull=0 tfall=500p trise=20p perlim=FALSE)
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
* SEE generator model
|
* SEE generator model
|
||||||
.subckt seegen4 n1 n2 n3 n4
|
.subckt seegen4 n1 n2 n3 n4
|
||||||
.param tochar = 1e-13
|
.param tochar = 2e-13
|
||||||
.param talpha = 500p tbeta=20p
|
.param tfall = 500p trise=50p
|
||||||
.param Inull = 'tochar/(talpha-tbeta)'
|
.param Inull = 'tochar/(tfall-trise)'
|
||||||
* Eponential current source without control input
|
* Eponential current source without control input
|
||||||
|
* only NMOS nodes with reference GND (substrate).
|
||||||
aseegen1 NULL [%i(n1) %i(n2) %i(n3) %i(n4)] seemod1
|
aseegen1 NULL [%i(n1) %i(n2) %i(n3) %i(n4)] seemod1
|
||||||
.model seemod1 seegen (tdelay = 0.62m tperiod=0.1m inull='Inull' perlim=FALSE)
|
.model seemod1 seegen (tdelay = 0.62m tperiod=0.1m inull='Inull' perlim=FALSE)
|
||||||
.ends
|
.ends
|
||||||
|
|
@ -1,102 +0,0 @@
|
||||||
SEE (single event effects) generator
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NAME_TABLE:
|
|
||||||
|
|
||||||
C_Function_Name: cm_seegen
|
|
||||||
Spice_Model_Name: seegen
|
|
||||||
Description: "single event effect generator"
|
|
||||||
|
|
||||||
|
|
||||||
PORT_TABLE:
|
|
||||||
|
|
||||||
Port_Name: ctrl out
|
|
||||||
Description: "control input" "output"
|
|
||||||
Direction: in out
|
|
||||||
Default_Type: v i
|
|
||||||
Allowed_Types: [v,vd,i,id] [i,id]
|
|
||||||
Vector: no yes
|
|
||||||
Vector_Bounds: - [1 -]
|
|
||||||
Null_Allowed: yes no
|
|
||||||
|
|
||||||
|
|
||||||
PARAMETER_TABLE:
|
|
||||||
|
|
||||||
Parameter_Name: talpha tbeta
|
|
||||||
Description: "alpha" "beta"
|
|
||||||
Data_Type: real real
|
|
||||||
Default_Value: 500e-12 20e-12
|
|
||||||
Limits: - -
|
|
||||||
Vector: no no
|
|
||||||
Vector_Bounds: - -
|
|
||||||
Null_Allowed: yes yes
|
|
||||||
|
|
||||||
|
|
||||||
PARAMETER_TABLE:
|
|
||||||
|
|
||||||
Parameter_Name: tdelay inull
|
|
||||||
Description: "pulse delay" "max current"
|
|
||||||
Data_Type: real real
|
|
||||||
Default_Value: 0 200e-6
|
|
||||||
Limits: - -
|
|
||||||
Vector: no no
|
|
||||||
Vector_Bounds: - -
|
|
||||||
Null_Allowed: yes yes
|
|
||||||
|
|
||||||
PARAMETER_TABLE:
|
|
||||||
|
|
||||||
Parameter_Name: tperiod ctrlthres
|
|
||||||
Description: "pulse repetition" "control voltage threshold"
|
|
||||||
Data_Type: real real
|
|
||||||
Default_Value: 0 0.5
|
|
||||||
Limits: - -
|
|
||||||
Vector: no no
|
|
||||||
Vector_Bounds: - -
|
|
||||||
Null_Allowed: yes yes
|
|
||||||
|
|
||||||
STATIC_VAR_TABLE:
|
|
||||||
|
|
||||||
Static_Var_Name: last_t_value
|
|
||||||
Data_Type: pointer
|
|
||||||
Vector: no
|
|
||||||
Description: "next pulse start time"
|
|
||||||
|
|
||||||
STATIC_VAR_TABLE:
|
|
||||||
|
|
||||||
Static_Var_Name: pulse_number
|
|
||||||
Data_Type: pointer
|
|
||||||
Vector: no
|
|
||||||
Description: "number of pulse"
|
|
||||||
|
|
||||||
STATIC_VAR_TABLE:
|
|
||||||
|
|
||||||
Static_Var_Name: last_ctrl
|
|
||||||
Data_Type: pointer
|
|
||||||
Vector: no
|
|
||||||
Description: "last control value"
|
|
||||||
|
|
||||||
Description
|
|
||||||
This code model generates "double exponentially" formed current pulses according to
|
|
||||||
i(t) = inull * (exp(-(t-tdelay)/talpha) - (exp(-(t-tdelay)/tbeta) for t > tdelay
|
|
||||||
i(t) = 0 for t < tdelay
|
|
||||||
Minimum is one pulse output (a node pair, or a single node with the other grounded).
|
|
||||||
Several output node pairs may be defined per code model instance. Parameter tperiod
|
|
||||||
may then be used to create pulses in sequence. The first pulse is issued in the first
|
|
||||||
node pair of the node list in the vector [], the second (after time tperiod has elapsed), is injected by the
|
|
||||||
second node (pair) of the list and so on. The control input ctrl (voltage or current) may be used
|
|
||||||
to start or repeat the whole sequence, depending on the circuit status. A rising voltage
|
|
||||||
at ctrl, when crossing the threshold given by ctrlthres, will initiate the sequence (including
|
|
||||||
tdelay and tperiod).
|
|
||||||
|
|
||||||
This model will work in transient analysis.
|
|
||||||
|
|
||||||
Example ngspice usage (with control)
|
|
||||||
|
|
||||||
aseegen1 ctrl [%id(n1 m1) %id(n2 m2) %id(n1 m1) %id(n2 m2)] seemod1
|
|
||||||
.model seemod1 seegen (tdelay = 8n tperiod=25n)
|
|
||||||
|
|
||||||
Example ngspice usage (without control, parameters as offered by default)
|
|
||||||
|
|
||||||
aseegen2 NULL [%id(n1 m1) %id(n5 n6) %id(n6 n7) %i(isingle) ] seemod2
|
|
||||||
.model seemod2 seegen (tdelay = 0 tperiod=0 ctrlthres=0.5 inull=200u talpha=500p tbeta=20p)
|
|
||||||
|
|
@ -117,8 +117,8 @@ GLOBAL VARIABLES
|
||||||
NON-STANDARD FEATURES
|
NON-STANDARD FEATURES
|
||||||
|
|
||||||
model source:
|
model source:
|
||||||
Ygor Quadros de Aguiar, Frédéric Wrobel. Jean-Luc Autran, Rubén García Alía
|
Ygor Quadros de Aguiar, Frédéric Wrobel. Jean-Luc Autran, Rubén García Alía
|
||||||
Single-Event Effects, from Space to Accelerator Environments
|
Single-Event Effects, from Space to Accelerator Environments
|
||||||
Springer 2025
|
Springer 2025
|
||||||
|
|
||||||
==============================================================================*/
|
==============================================================================*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue