Verilog-A es un lenguaje de modelamiento estándar en la industria para circuitos analógicos. Es un 'subset' de Verilog-AMS con la característica de ser continuo a través del tiempo.
Historia
Verilog-A fue creado a partir de la necesidad de estandarizar el lenguaje comportamental Spectre para competir con el lenguaje VHDL (un estándar de IEEE), el cual absorbía capacidad analógica de otras lenguas (p. ej. MAST). Open Verilog International (OVI, es el originalmente estandarizado Verilog) ayudó a la estandarización, proporcionó lo que fue parte del plan de crear Verilog-AMS — un lenguaje único que cubre ambos diseños (analógico y digital). Verilog-A era un subconjunto analógico-total de Verilog-AMS. Eso fue la primera fase del proyecto.
Hubo un retraso considerable (posiblemente procrastinación) entre el primer Verilog-A manual de referencia de lenguaje y Verilog-AMS full, y en aquel tiempo Verilog se pasa a la IEEE, dejando Verilog-AMS bajo Accellera.
Disponibilidad estándar
El estándar Verilog-A no existe por sí solo, es parte del estándar Verilog-AMS. Su LRM está disponible en la web site Accellera.[1] Construido como tipología "wreal" , Verilog-AMS se convierte en códigos definidos por el usuario en SystemVerilog más en línea con metodología VHDL.
Código ejemplo
Este primer ejemplo da una primera demostración de modelamiento en Verilog-A:
`include "constants.vams"
`include "disciplines.vams"
module example(a,b,c,d,e,f);
parameter real R = 1m;
parameter real C = 1u;
parameter real L = 1u;
parameter integer gain = 2;
input a;
output b;
inout c,d,e,f;
electrical a,b,c,d,e,f;
analog begin
// Modelling lumped elements
//Resistor
V(c,d) <+ R*I(c,d);
//Inductor
// Multiple current or voltage assignments are accumulated
V(c,d) <+ L * ddt(I(c,d));
//Capacitor
I(e,f) <+ C * ddt(V(e,f));
// Simple amplifier
// Voltages are referenced to ground if no second node is given
V(b) <+ gain * V(a);
end
endmodule
Este ejemplo en Verilog-AMS implementa un diodo ideal, definiendo la corriente a través de la rama (a,c) dependiendo de voltaje en terminales de rama (a), (c), y la temperatura ambiental del circuito simulado:
// Ideal Diode
module diode (a, c);
inout a, c;
electrical a, c;
parameter real IS = 1.0e-14; // User-configurable saturation current
real idio;
/*
* Calculate nonlinear current through diode depending on
* - thermal voltage $vt (at ambient temperature of simulated circuit) and
* - voltage between terminals
*/
analog begin
idio = IS * (limexp(V(a,c)/$vt) - 1);
I(a,c) <+ idio;
end
endmodule
Para una fuente de voltaje DC simple, el voltaje de rama (en DC) está puesto al valor:
// DC Source
module vsrc (p,n);
parameter real dc = 1.0;
inout p, n;
electrical p, n;
analog begin
// Assign constant DC voltage at each time step:
V(p,n) <+ dc;
end
endmodule
Un generador de voltaje senoidal puede ser hecho con la función: sin()
// A Sinusoidal Voltage Source
`include "constants.vams"
module vsin (p,n);
parameter real amplitude = 1.0;
parameter real freq = 50.0;
parameter real phase = 0.0;
inout p, n;
electrical p, n;
analog begin
V(p,n) <+ amplitude * sin(`M_TWO_PI * freq * $abstime + phase);
$bound_step(0.1/freq); // demand at least 10 points per cycle to avoid aliasing issues
end
endmodule
Véase también
- Verilog-AMS
- Verilog
Referencias
Enlaces externos
- Objetivos de diseño del lenguaje (circa 1994)
- Accellera Verilog Grupo de Señal Mixta analógico
- Manuales de Referencias de la lengua
- La guía del Diseñador a Verilog-AMS
- verilogams.com — El manual del usuario para Verilog-AMS y Verilog-Un
- La guía del diseñador Ejemplos — Comunitarios de los modelos escritos en Verilog-Un