README and examples updated (trise, tfall, let, cdepth).

This commit is contained in:
Holger Vogt 2025-06-03 10:51:51 +02:00
parent 5c3ddfb8e4
commit 69cac5bcc6
4 changed files with 180 additions and 228 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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
==============================================================================*/ ==============================================================================*/