Verilog-A es un lenguaje de modelado estándar de la industria para circuitos analógicos. Es el subconjunto de tiempo continuo de Verilog-AMS .
Historia
Verilog-A se creó a partir de la necesidad de estandarizar el lenguaje de comportamiento de Spectre frente a la competencia de VHDL (un estándar IEEE), que estaba absorbiendo la capacidad analógica de otros lenguajes (por ejemplo, MAST). Open Verilog International (OVI, el organismo que originalmente estandarizó Verilog) acordó respaldar la estandarización, siempre que fuera parte de un plan para crear Verilog-AMS, un lenguaje único que cubra tanto el diseño analógico como el digital. Verilog-A era un subconjunto completamente analógico de Verilog-AMS que fue la primera fase del proyecto.
Hubo un retraso considerable (posiblemente procrastinación) entre el primer manual de referencia del lenguaje Verilog-A y el Verilog-AMS completo , y en ese momento Verilog se mudó al IEEE, dejando atrás Verilog-AMS en Accellera .
El registro de correo electrónico de 2000AD se puede encontrar aquí .
Disponibilidad estándar
El estándar Verilog-A no existe de forma independiente; es parte del estándar Verilog-AMS completo. Su LRM está disponible en el sitio web de Accellera . [1] Sin embargo, las versiones iniciales y posteriores se pueden encontrar aquí , con lo que probablemente será la versión final aquí, ya que el trabajo futuro aprovechará las nuevas capacidades de tipo de red en SystemVerilog . Los tipos integrados como "wreal" en Verilog-AMS se convertirán en tipos definidos por el usuario en SystemVerilog más en línea con la metodología VHDL .
Compatibilidad con el lenguaje de programación C
Un subconjunto de Verilog-A se puede traducir automáticamente al lenguaje de programación C utilizando el Sintetizador automático de modelos de dispositivos (ADMS) . Esta función se utiliza, por ejemplo, para traducir los modelos de transistor BSIM Verilog-A, que ya no se lanzan en C, para su uso en simuladores como ngspice . [2]
Ejemplo de código
Este primer ejemplo ofrece una primera demostración de modelado en Verilog-A:
`incluir " constants.vams " ` incluir "disciplines.vams" ejemplo de módulo ( a , b , c , d , e , f );parámetro real R = 1 m ; parámetro real C = 1 u ; parámetro real L = 1 u ; parámetro entero ganancia = 2 ;entrada a ; salida b ; inout c , d , e , f ;eléctrico a , b , c , d , e , f ; comienzo analógico// Modelado de elementos agrupados // Resistencia V ( c , d ) <+ R * I ( c , d );// Inductor // Se acumulan múltiples asignaciones de corriente o voltaje V ( c , d ) <+ L * ddt ( I ( c , d ));// Condensador I ( e , f ) <+ C * ddt ( V ( e , f ));// Amplificador simple // Los voltajes están referenciados a tierra si no se proporciona un segundo nodo V ( b ) <+ ganancia * V ( a ); final endmodule
Este ejemplo de Verilog-AMS implementa un diodo ideal, al definir la corriente a través de la rama (a, c) dependiendo del voltaje en los terminales de la rama (a), (c) y la temperatura ambiente del circuito simulado:
// Módulo de diodo ideal diodo ( a , c ); inout a , c ; eléctrico a , c ; parámetro real IS = 1.0e-14 ; // Idio real de corriente de saturación configurable por el usuario ; / * * Calcule la corriente no lineal a través del diodo dependiendo de * - voltaje térmico $ vt (a temperatura ambiente del circuito simulado) y * - voltaje entre terminales * / inicio analógico idio = IS * ( limexp ( V ( a , c ) / $ vt ) - 1 ); I ( a , c ) <+ idio ; final endmodule
Para una fuente de voltaje de CC simple, el voltaje de derivación se establece en el valor constante (CC):
// Módulo de fuente de CC vsrc ( p , n ); parámetro real dc = 1.0 ; inout p , n ; eléctrico p , n ; inicio analógico // Asignar voltaje de CC constante en cada paso de tiempo: V ( p , n ) <+ dc ; final endmodule
Un generador de voltaje sinusoidal puede usar la función incorporada sin () :
// Una fuente de voltaje sinusoidal `incluye " constants.vams " módulo vsin ( p , n ); amplitud real del parámetro = 1.0 ; parámetro frecuencia real = 50.0 ; parámetro fase real = 0.0 ; inout p , n ; eléctrico p , n ; inicio analógico V ( p , n ) <+ amplitud * sin ( `M_TWO_PI * freq * $ abstime + fase ); $ paso_delimitado ( 0,1 / frecuencia ); // exigir al menos 10 puntos por ciclo para evitar problemas de aliasing end endmodule
Ver también
Referencias
- ^ Estándar Verilog-AMS
- ^ "Pautas de conversión de Verilog-A a C" . ngspice . Consultado el 17 de julio de 2019 .
enlaces externos
- Objetivos del diseño del lenguaje (alrededor de 1994)
- Grupo de señal mixta analógica Accellera Verilog
- Manuales de referencias de idiomas
- La guía del diseñador para Verilog-AMS
- verilogams.com - Manual del usuario para Verilog-AMS y Verilog-A
- Comunidad de guías del diseñador : ejemplos de modelos escritos en Verilog-A