SystemC AMS es una extensión de SystemC para funcionalidad analógica, de señal mixta y de RF. [ 1 ] El estándar SystemC AMS 2.0 se publicó el 6 de abril de 2016 como IEEE Std 1666.1-2016.
Especificación del lenguaje
Características del idioma
MoC - Modelo de Computación
Un modelo de computación (MoC) es un conjunto de reglas que definen el comportamiento y la interacción entre los módulos primitivos de SystemC AMS. SystemC AMS define los siguientes modelos de computación: flujo de datos temporizado (TDF), flujo de señales lineal (LSF) y redes eléctricas lineales (ELN).
TDF - Flujo de datos temporizado
En el modelo de flujo de datos temporizado (TDF), los componentes intercambian valores analógicos periódicamente a una frecuencia de muestreo determinada , como cada 10 microsegundos. Según el teorema de muestreo, esto sería suficiente para transmitir señales con un ancho de banda de hasta 50 MHz sin artefactos de aliasing. Un modelo TDF define un método que se invoca a la frecuencia adecuada a medida que avanza el tiempo de simulación. Un grupo de modelos comparte una programación estática que determina cuándo deben comunicarse. Esto establece el orden relativo de las llamadas a los métodos `processing()` de cada instancia TDF en el grupo. El comportamiento periódico de TDF le permite operar independientemente del núcleo principal de SystemC, basado en eventos, utilizado para la lógica digital. processing()
ELN - Redes Eléctricas Lineales
La biblioteca de redes eléctricas lineales (ELN) de SystemC proporciona un conjunto de componentes eléctricos estándar que permiten ejecutar simulaciones tipo SPICE. Los tres componentes básicos (resistencias, condensadores e inductores) están disponibles. Además, existen variantes controladas por voltaje, como un amplificador de transconductancia (generador de corriente controlado por voltaje), que facilitan la creación de la mayoría de los modelos de FET y otros semiconductores.
La corriente que fluye en redes ELN de resistencias se puede resolver con un solucionador de ecuaciones simultáneas adecuado. Estas se denominan ecuaciones nodales. Cuando se incluyen componentes variables en el tiempo, como condensadores e inductores, se suele implementar el método de Euler para modelarlos. El método de Euler es un enfoque sencillo para resolver problemas de diferencias finitas en el dominio del tiempo (FDTD). Por ejemplo, para simular el problema de carga del condensador que se muestra a la izquierda, se selecciona un paso de tiempo delta_t que suele ser aproximadamente el uno por ciento de la constante de tiempo y se ejecuta la iteración que se muestra a la derecha.
El error en el método de Euler disminuye cuadráticamente con pasos de tiempo más pequeños, pero un paso de tiempo demasiado pequeño resulta en una simulación lenta para una simulación compleja de elementos finitos. Sin embargo, esto no representa un problema en muchas situaciones donde parte de un controlador de sistema en chip (SoC) o de planta complejo se ejecuta junto con un modelo de planta que tiene solo unas pocas variables de estado, como el sistema de transmisión de un automóvil, debido a que existen diferencias de órdenes de magnitud en las constantes de tiempo (por ejemplo, un reloj de 100 MHz frente a la constante de tiempo inercial más corta de 1 ms). Por lo tanto, simular el subsistema analógico dentro del simulador RTL tiene sentido. Además, la mayoría de las situaciones de control de plantas utilizan retroalimentación negativa de lazo cerrado, donde el controlador es igual de eficaz para gestionar un modelo de planta con errores leves que el modelo real.
Bajo el formalismo ELN, los ciclos de inicialización y simulación de SystemC se extienden para admitir la resolución de ecuaciones de flujo nodal. La resolución de ecuaciones nodales generalmente se realiza de forma iterativa en lugar de utilizar métodos directos como la eliminación gaussiana o basados en inversas de matrices. Los métodos iterativos tienden a tener mayor estabilidad y son rápidos cuando el estado solo ha avanzado ligeramente desde el paso de tiempo anterior. Cuando el kernel extrae un evento de avance de tiempo de la cola de eventos, el tiempo de simulación avanza. La parte analógica del simulador mantiene un cuanto de tiempo más allá del cual las ecuaciones nodales deben recalcularse. Este cuanto se ajusta dinámicamente según el comportamiento de las ecuaciones. Si las ecuaciones son "curvas", lo que significa que la extrapolación lineal utilizando el método de Euler sobre el cuanto conducirá a demasiado error, el paso de tiempo se reduce; de lo contrario, se puede ampliar gradualmente en cada paso. En general, se necesitan dos formas de iteración: la primera es la iteración en un paso de tiempo para resolver las ecuaciones nodales con una precisión suficiente. La segunda es entre pasos de tiempo. En una implementación sencilla, una vez que el tiempo de simulación ha superado el cuanto de Euler, se vuelve a resolver el subsistema analógico. Si los errores de extrapolación son demasiado grandes, el simulador debe regresar al último paso de tiempo y simular nuevamente hacia adelante utilizando un cuanto analógico más pequeño. Este mecanismo también es la base de las simulaciones SPICE. Cada variable analógica que actúa como argumento de una "cruz" u otra sensibilidad analógica se examina para determinar si se ha activado algún trabajo nuevo en el dominio digital. De ser así, se inyectan nuevos eventos en la cola de eventos discretos para el tiempo de simulación actual.
LSF - Flujo de señal lineal
La biblioteca de flujo de señal lineal (LSF) de SystemC proporciona un conjunto de operadores analógicos primitivos, como sumadores y diferenciadores, que permiten construir todas las estructuras básicas presentes en las ecuaciones diferenciales de forma autodocumentada y ejecutable. La ventaja de construir el sistema a partir de una biblioteca de operadores estándar es que permite la reflexión: otro código puede analizar la estructura y realizar diferenciación analítica, suma, integración y otros tipos de análisis, como análisis de sensibilidad para determinar un paso de tiempo adecuado. Esto no sería posible con una implementación que utilizara código ad hoc. En programación general, la reflexión se refiere a la capacidad de un programa para leer su propio código fuente .
Puertos
Definición de puerto de entrada/salida de TDF:
sca_tdf:: sca_in <PortType> sca_tdf:: sca_out <Tipo de puerto>
Definición de los puertos de entrada/salida del convertidor TDF:
sca_tdf:: sc_in <TipoDePuerto> // DE → Entrada TDF sca_tdf:: sc_out <PortType> // Puerto de salida TDF → DE
Definición del terminal ELN:
sca_eln:: sca_terminal
Nodos
sca_eln:: sca_node // nodo ELN sca_eln:: sca_node_ref // Nodo de referencia ELN
Grupo
Tareas pendientes: descripción
Rastreo
sca_trace_file * tf = sca_create_tabular_trace_file ( "trace_file_name.dat" ); sca_trace ( tf , < PORT | SIGNAL | NODE > , "name" );Código de ejemplo
TDF
Modelo de paso bajo de primer orden con flujo de datos temporizado:
#include <systemc-ams>using namespace sca_util ; // introducido para mayor comodidad: sca_util::sca_vector<TYPE> → sca_vector<TYPE> using namespace sca_core ; // introducido para mayor comodidad: sca_core::sca_time() → sca_time() using namespace sca_ac_analysis ; // introducido para mayor comodidad: sca_ac_analysis::sca_ac() → sca_ac()SCA_TDF_MODULE ( tdf_low_pass ) { // Puertos TDF sca_tdf :: sca_in < double > inp ; sca_tdf :: sca_out < double > outp ;// parámetros double fcut ; // frecuencia de corte// métodos void initialize (); // función de devolución de llamada del simulador para fines de inicialización void ac_processing (); // función de devolución de llamada del simulador para la implementación del comportamiento de AC void processing (); // función de devolución de llamada del simulador para la implementación del tiempo// constructor SCA_CTOR ( tdf_low_pass ) { fcut = 1.0e3 ; // frecuencia de corte 1kHz }privado : sca_vector <double> num ; // coeficientes del numerador sca_vector <double> den ; // coeficientes del denumerador sca_vector <double> state ; // vector de estado sca_tdf :: sca_ltf_nd ltf_nd ; // función de transferencia lineal (tipo numerador/denumerador) } ;función de transferencia lineal:
// Inicializar los coeficientes de la función de transferencia lineal void tdf_low_pass::initialize (){ num ( 0 ) = 1.0 ; den ( 0 ) = 1.0 ; den ( 1 ) = 1.0 / ( 2.0 * M_PI * fcut ); }Tareas pendientes: descripción
// Implementación de AC void tdf_low_pass::ac_processing (){ sca_ac ( outp ) = sca_ac_ltf_nd ( num , den , sca_ac ( inp )); }Tareas pendientes: descripción
// Implementación en el dominio del tiempo void tdf_low_pass::processing (){ outp = ltf_nd ( num , den , state , inp ); }ELN
Lista de conexiones de paso bajo de primer orden para redes eléctricas lineales:
SC_MODULE ( eln_low_pass_netlist ) { // terminales sca eln sca_eln :: sca_terminal n1 ; sca_eln :: sca_terminal n2 ;// nodos internos sca_eln :: sca_node_ref gnd ;// módulos eln sca_eln :: sca_r i_r ; sca_eln :: sca_c i_c ;SC_CTOR ( eln_low_pass_netlist ) : i_r ( "i_r" ), i_c ( "i_c" ) { i_r . value = 1.0 ; i_r . p . bind ( n1 ); i_r . n . bind ( n2 );i_c . valor = 1.0 / ( 2.0 * M_PI * 1.0e3 ); i_c . p . enlazar ( n2 ); i_c . n . enlazar ( gnd ); } };LSF
Lista de conexiones de flujo de señal lineal:
Historia
El grupo de estudio SystemC AMS se fundó en 2002 para desarrollar y mantener extensiones analógicas y de señal mixta para SystemC, e iniciar un grupo de trabajo SystemC-AMS de OSCI (Open SystemC Initiative). El grupo de estudio realizó investigaciones iniciales y especificó e implementó una extensión de SystemC para demostrar la viabilidad del enfoque. En 2006, se financió un grupo de trabajo SystemC AMS que continuó el trabajo del grupo de estudio dentro de OSCI y ahora trabaja en SystemC AMS dentro de la Accellera Systems Initiative, lo que dio como resultado el estándar AMS 1.0 en 2010. Tras la publicación del estándar Accellera SystemC AMS 2.0 en 2013, el estándar se transfirió a la IEEE Standards Association en 2014 para su posterior adopción y mantenimiento por parte de la industria. El estándar SystemC AMS se publicó el 6 de abril de 2016 como IEEE Std 1666.1-2016. [ 2 ] [ 3 ] COSEDA Technologies proporciona con COSIDE el primer entorno de diseño disponible comercialmente basado en el estándar SystemC AMS.
- Sistema C AMS-Standard IEEE 1666.1-2016
- Descarga de la prueba de concepto de SystemC AMS
Referencias
Enlaces externos
- Simulador de bucle de enganche de fase en SystemC AMS - Américo Dias - Palabras clave: Bucle de enganche de fase, PLL, SystemC-AMS
- Ejemplos de SystemC AMS - Wolfgang Scherr - Palabras clave: Filtro, ADC, SystemC-AMS
- lenguajes de descripción de hardware
- Lenguajes de verificación de hardware
- lenguajes de descripción de sistemas