Hspice .MEASURE Resultados continuos
Esto es de la referencia del comando Hspice 2014.09:
.MEASURE (Continuous Results)
Measures continuous results for TRIG-TARG, FIND-WHEN, Equation, and PARAM Evaluation functions.
Syntax
...
Ejemplos de la documentación:
Example 2 The .measure statement continuously reports the time when the voltage value of node a1 reaches 2.5V, starting from the second falling edge.
.measure tran_cont cont_vout1 when v(a1)=2.5 fall=2
Example 3 The following example shows a correct .measure statement.
.measure tran_cont PERIOD
+ TRIG v(out) VAL =VDD/2 RISE=1
+ TARG v(out) VAL =VDD/2 RISE=2
.measure tran_cont FREQUENCY PARAM=1/PERIOD
La salida estará en un archivo de medidas continuas separado
Hspice .MEASURE generation
Haga un script perl / python / any que genere una medida para cada borde. Incluye las declaraciones de .measure en tu mazo de hspice. La ventaja aparente de esto es que los resultados residirán en el resto de las mediciones.
Bloque VerilogA
Uno puede escribir un fragmento de código VerilogA que puede ser activado por bordes para generar el tiempo en un archivo. En Cadence debería haber una biblioteca de muestra con algunos widgets de VerilogA de muestra. El código VerilogA se debe incluir en la plataforma hspice con un comando .hdl y se debe instanciar como cualquier otro subcircuito. Posible código VerilogA (en este caso, conecte la señal de interés al 'en' de esta muestra:
'include "disciplines.vams"
module sampler(in);
input in; electrical in;
parameter real thres=0.5;
integer fh;
analog begin
@(initial_step) begin
fh = $fopen("times.txt","w");
end
@(final_step) begin
$fclose(fh);
end
@(cross(V(in)-thres, +1, 10p)) begin
// +1 means rising edge only
$fstrobe(fh,"%g",$abstime);
end
end
endmodule
post-procesamiento PyOPUS
Si está buscando un entorno Python posterior al proceso más general, utilice PyOPUS . PyOPUS abrirá Hspice POST_VERSION = 9601 datos binarios en numerosas estructuras de datos. Una secuencia de comandos de procesamiento posterior podría tener el siguiente aspecto:
import pyopus.simulator.hspicefile as hspf
import pyopus.evaluator.measure as meas
hspfObj = hspf.hspice_read( 'netlist.tr0' )
if hspfObj is None:
raise Exception("Error opening hspice file")
results = hspfObj[0][0][2][0] # dictionary of waveforms, keyed by name
time = results[hspfObj[0][1]] # list of scale point (in this case time)
i_rises = meas.IatXval(results['out'], 0.5, slope='rising')
t_rises = meas.XatI(time, i_rises)