Verilog-A

De Wikipedia, la enciclopedia libre

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[editar]

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[editar]

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[editar]

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[editar]

Referencias[editar]

Enlaces externos[editar]