SiPM Model
SiPM model
The model used is extracted from
S. Seifert et al, "Simulation of Silicon Photomultiplier Signals", IEEE trans. on nucl. science, vol. 56, no. 6, dec. 2009, p3726-3733.
The switch is closed by an incoming trigger and opened when the current flowing through it is bellow a given value Iq.
Model parameters
The parameters have been characterized at 20°C before irradiation for Hamamatsu :
For example, the bias voltage Vbias is 72.9 with a breakdown voltage Vbr 1.2 to 1.3V bellow (71.6V). The gain in these condition is 9*10^5 e/PE (with e = 1.602*10^-19 C, the charge per fired cell is then Qc = 1.44*10^-13 C).
Model comparison
The comparison have been done with Guido measurement on 50Ohms for Ketek (left) and Hamamatsu (right) :

:
Verilog-a model
`include "constants.vams"
`include "disciplines.vams"
module sipmmodel(p,n,csw);
inout p, n;
inout [0:87] csw;
electrical p,n, p2, n2;
electrical [0:87] csw;
electrical [0:95] inode;
electrical [0:87] inodebr;
electrical [0:87] inodesw;
parameter real Cg=58e-12 from [0:inf);
parameter real Cq=20e-15 from [0:inf);
parameter real Rq=633e3 from [0:inf);
parameter real Cd=250e-15 from [0:inf);
parameter real Rd=210 from [0:inf);
parameter real Vbr=-24;
parameter real Iq=4e-3 from [0:inf);
parameter real Vthre = 0.5 from [0:inf);
parameter integer N = 88 from [88:inf);
genvar i;
analog begin
// Capacite parasite
I(p,n) <+ ddt(Cg*V(p,n));
// Cellule SiPM
for(i=0;i<88;i=i+1)
begin
I(p,inode[i]) <+ ddt(Cq*V(p,inode[i]));
I(p,inode[i]) <+ V(p,inode[i])/Rq;
I(inode[i],n) <+ ddt(Cd*V(inode[i],n));
if (V(csw[i]) > Vthre)
begin
V(inode[i], inodesw[i]) <+ 0.0;
end
else
begin
if (abs(I(inode[i], inodesw[i])) > Iq)
begin
V(inode[i], inodesw[i]) <+ 0.0;
end
else
begin
I(inode[i], inodesw[i]) <+ 0;
end
end
V(inodesw[i],inodebr[i]) <+ Vbr;
I(inodebr[i],n) <+ V(inodebr[i],n)/Rd;
end
if (N==96)
begin
V(p,p2) <+ 0.0;
V(n2,n) <+ 0.0;
end
else
begin
I(p,p2) <+ 0;
I(n2,n) <+ 0;
end
for(i=88;i<96;i=i+1)
begin
I(p2,inode[i]) <+ ddt(Cq*V(p2,inode[i]));
I(p2,inode[i]) <+ V(p2,inode[i])/Rq;
I(inode[i],n2) <+ ddt(Cd*V(inode[i],n2));
end
end
endmodule
Note 1 : n has to be put at Vbias
Note 2 : p is the SiPM output
Note 3 : csw allow to choose which cell is fired (active when V(csw) > 0.5V)