Articulo de referencia

SystemVerilog

SystemVerilog , estandarizado como IEEE 1800 por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE), es un lenguaje de descripción y verificación de hardware comúnmente...

SystemVerilog , estandarizado como IEEE 1800 por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE), es un lenguaje de descripción y verificación de hardware comúnmente utilizado para modelar, diseñar , simular , probar e implementar sistemas electrónicos en la industria de semiconductores y diseño electrónico . SystemVerilog es una extensión de Verilog .

Historia

SystemVerilog comenzó con la donación del lenguaje Superlog a Accellera en 2002 por parte de la empresa emergente Co-Design Automation. [ 1 ] La mayor parte de la funcionalidad de verificación se basa en el lenguaje OpenVera donado por Synopsys . En 2005, SystemVerilog fue adoptado como el estándar IEEE 1800-2005. [ 2 ] En 2009, el estándar se fusionó con el estándar base Verilog (IEEE 1364-2005), creando el estándar IEEE 1800-2009.

El estándar SystemVerilog se actualizó posteriormente en 2012, [ 3 ] 2017, [ 4 ] y más recientemente en diciembre de 2023. [ 5 ]

Características de diseño

El conjunto de características de SystemVerilog se puede dividir en dos roles distintos:

  1. SystemVerilog para el diseño a nivel de transferencia de registros (RTL) es una extensión de Verilog-2005 ; todas las características de ese lenguaje están disponibles en SystemVerilog. Por lo tanto, Verilog es un subconjunto de SystemVerilog.
  2. SystemVerilog para verificación utiliza técnicas de programación orientada a objetos muy avanzadas y está más relacionado con Java que con Verilog. Estas construcciones generalmente no son sintetizables.

El resto de este artículo analiza las características de SystemVerilog que no están presentes en Verilog-2005 .

Vida útil de los datos

En SystemVerilog se especifican dos tipos de ciclo de vida de los datos: estático y automático . Las variables automáticas se crean en el momento en que la ejecución del programa alcanza el ámbito de la variable. Las variables estáticas se crean al inicio de la ejecución del programa y conservan el mismo valor durante toda la vida útil del programa, a menos que se les asigne un nuevo valor durante la ejecución.

Cualquier variable que se declare dentro de una tarea o función sin especificar el tipo se considerará automática. Para especificar que una variable es estática, coloque la palabra clavestatic " " en la declaración antes del tipo, por ejemplo, " ". La palabra clave " " se usa de la misma manera. static int x;automatic

Nuevos tipos de datos

Los tipos de variables mejorados añaden una nueva capacidad al tipo "reg" de Verilog:

lógica [ 31 : 0 ] mi_variable ;

Verilog-1995 y -2001 limitan las variables reg a instrucciones de comportamiento como el código RTL . SystemVerilog extiende el tipo reg para que pueda ser controlado por un único controlador, como una puerta lógica o un módulo. SystemVerilog denomina a este tipo "logic" para recordar a los usuarios que posee esta capacidad adicional y que no se trata de un registro de hardware. Los nombres "logic" y "reg" son intercambiables. Una señal con más de un controlador (como un búfer triestado para entrada/salida de propósito general ) debe declararse como un tipo de red, como "wire", para que SystemVerilog pueda determinar el valor final.

Los arreglos empaquetados multidimensionales unifican y extienden la noción de "registros" y "memorias" de Verilog:

lógica [ 1 : 0 ][ 2 : 0 ] mi_paquete [ 32 ];

Verilog clásico solo permitía declarar una dimensión a la izquierda del nombre de la variable. SystemVerilog permite cualquier número de estas dimensiones "empaquetadas". Una variable de tipo matriz empaquetada se corresponde uno a uno con una cantidad aritmética entera. En el ejemplo anterior, cada elemento my_packpuede utilizarse en expresiones como un entero de seis bits. Las dimensiones a la derecha del nombre (32 en este caso) se denominan dimensiones "desempaquetadas". Al igual que en Verilog-2001 , se permite cualquier número de dimensiones desempaquetadas.

Los tipos de datos enumerados (enums) permiten asignar nombres significativos a cantidades numéricas. Las variables declaradas como de tipo enumerado no pueden asignarse a variables de un tipo enumerado diferente sin una conversión explícita . Esto no se aplica a los parámetros, que eran la técnica de implementación preferida para cantidades enumeradas en Verilog-2005:

typedef enum logic [ 2 : 0 ] { ROJO , VERDE , AZUL , CIAN , MAGENTA , AMARILLO } color_t ;color_t my_color = GREEN ; initial $ display ( "El color es %s" , my_color . name ());

Como se muestra arriba, el diseñador puede especificar un tipo aritmético subyacente ( logic [2:0]en este caso) que se utiliza para representar el valor de la enumeración. Los metavalores X y Z se pueden usar aquí, posiblemente para representar estados no válidos. La función integrada name()devuelve una cadena ASCII para el valor enumerado actual, lo cual es útil para la validación y las pruebas.

Nuevos tipos enteros : SystemVerilog define byte, shortint, inty longintcomo tipos enteros con signo de dos estados que tienen 8, 16, 32 y 64 bits respectivamente. Un bittipo es un tipo de dos estados de ancho variable que funciona de forma muy similar a logic. Los tipos de dos estados carecen de los metavalores X y Z del Verilog clásico; trabajar con estos tipos puede resultar en una simulación más rápida.

Las estructuras y uniones funcionan de forma muy similar a como lo hacen en el lenguaje C. Las mejoras de SystemVerilog incluyen elatributo `packed` y el atributo `tagged` . Eltaggedatributo `tagged` permite realizar un seguimiento en tiempo de ejecución de qué miembro(s) de una unión se están utilizando. Elpackedatributo `tagged` hace que la estructura o unión se asigne uno a uno a una matriz compacta de bits. El contenido de losstructtipos de datos ocupa un bloque continuo de memoria sin espacios, similar a los campos de bits en C y C++.

typedef struct packed { bit [ 10 : 0 ] expo ; bit sign ; bit [ 51 : 0 ] mant ; } FP ;FP cero = 64'b0 ;

Como se muestra en este ejemplo, SystemVerilog también admite typedefs , al igual que C y C++.

Bloques de procedimiento

SystemVerilog introduce tres nuevos bloques procedimentales destinados a modelar hardware : always_comb(para modelar lógica combinacional ), always_ff(para biestables ) y always_latch(para pestillos ). Mientras que Verilog utilizaba un único bloque de propósito general alwayspara modelar diferentes tipos de estructuras de hardware, cada uno de los nuevos bloques de SystemVerilog está diseñado para modelar un tipo específico de hardware, imponiendo restricciones semánticas para garantizar que el hardware descrito por los bloques coincida con el uso previsto del modelo. Un compilador HDL o un programa de verificación puede tomar medidas adicionales para asegurar que solo se produzca el tipo de comportamiento previsto.

Un always_combbloque modela la lógica combinacional . El simulador infiere que la lista de sensibilidad son todas las variables de las instrucciones contenidas:

always_comb begin tmp = b * b - 5'h4 * a * c ; no_root = ( tmp < 0 ); end

Un always_latchbloque modela pestillos sensibles al nivel . Nuevamente, la lista de sensibilidad se infiere del código:

always_latch si ( en ) q <= d ;

Un always_ffbloque modela la lógica síncrona (especialmente la lógica secuencial sensible a los flancos ):

always_ff @( posedge clk ) count <= count + 4'd1 ;

Las herramientas de automatización del diseño electrónico (EDA) pueden verificar la intención del diseño comprobando que el modelo de hardware no infrinja la semántica de uso de los bloques. Por ejemplo, los nuevos bloques restringen la asignación a una variable al permitir solo una fuente, mientras que alwaysel bloque de Verilog permitía la asignación desde múltiples fuentes procedimentales.

Al realizar operaciones aritméticas con literales numéricos estáticos en código RTL, es importante especificar explícitamente el ancho de bits de las constantes para evitar truncamientos no deseados, errores de análisis estático de código o problemas de síntesis. Esto es especialmente crítico en bloques lógicos combinacionales y secuenciales. Cuando los operandos carecen de especificaciones de bits explícitas, los simuladores y las herramientas de síntesis pueden inferir anchos de bits según el contexto o utilizar tamaños predeterminados específicos de la implementación, lo que podría provocar pérdida de datos o un comportamiento inesperado durante la simulación o la implementación en hardware.

Interfaces

Para diseños pequeños, el puerto Verilog describe de forma compacta la conectividad de un módulo con el entorno circundante. Sin embargo, los bloques principales dentro de una jerarquía de diseño extensa suelen tener miles de puertos. SystemVerilog introduce el concepto de interfaces para reducir la redundancia de las declaraciones de nombres de puerto entre módulos conectados, así como para agrupar y abstraer señales relacionadas en un paquete definido por el usuario. Otro concepto es el puerto de modificación (modport ), que indica la dirección de las conexiones lógicas.

Ejemplo:

interfaz intf ; lógica a ; lógica b ; modport in ( entrada a , salida b ); modport out ( entrada b , salida a ); fin de la interfazmódulo superior ; intf i (); u_a m1 ( .i1 ( i.in ) ); u_b m2 ( .i2 ( i.out ) ); fin del módulomódulo u_a ( intf . en i1 ); fin del módulomódulo u_b ( intf . out i2 ); fin del módulo

Características de verificación

Las siguientes características de verificación normalmente no son sintetizables, lo que significa que no se pueden implementar en hardware basado en código HDL. En cambio, ayudan a crear bancos de prueba extensibles y flexibles .

Nuevos tipos de datos

El tipo de datos representa una cadenastring de texto de longitud variable . Por ejemplo:

cadena s1 = "Hola" ; cadena s2 = "mundo" ; cadena p = ".?!" ; cadena s3 = { s1 , ", " , s2 , p [ 2 ]}; // concatenación de cadenas $ display ( "[%d] %s" , s3 . len (), s3 ); // la simulación imprimirá: "[13] Hola, mundo!"

Además del arreglo estático utilizado en el diseño, SystemVerilog ofrece arreglos dinámicos , arreglos asociativos y colas :

int cmdline_elements ; // # elementos para el array dinámico int da []; // array dinámico int ai [ int ]; // array asociativo, indexado por int int as [ string ]; // array asociativo, indexado por string int qa [$]; // cola, indexada como un array o mediante métodos integradosinitial begin cmdline_elements = 16 ; da = new [ cmdline_elements ]; // Asignar un array con 16 elementos end

Un array dinámico funciona de forma muy similar a un array desempaquetado, pero ofrece la ventaja de asignarse dinámicamente en tiempo de ejecución (como se muestra arriba). Mientras que el tamaño de un array empaquetado debe conocerse en tiempo de compilación (a partir de una constante o una expresión de constantes), el tamaño del array dinámico puede inicializarse a partir de otra variable de tiempo de ejecución, lo que permite dimensionar y redimensionar el array arbitrariamente según sea necesario.

Un array asociativo puede considerarse como un árbol de búsqueda binaria con un tipo de clave y un tipo de dato especificados por el usuario . La clave implica un orden ; los elementos de un array asociativo se pueden leer en orden lexicográfico. Por último, una cola proporciona gran parte de la funcionalidad del tipo deque de la STL de C++ : se pueden añadir y eliminar elementos de forma eficiente desde ambos extremos. Estas primitivas permiten crear estructuras de datos complejas necesarias para gestionar un diseño de gran tamaño.

Clases

SystemVerilog proporciona un modelo de programación orientado a objetos .

En SystemVerilog, las clases admiten un modelo de herencia simple , pero pueden implementar funcionalidades similares a la herencia múltiple mediante el uso de las llamadas "clases de interfaz" (idénticas en concepto a la interfacecaracterística de Java). Las clases pueden parametrizarse por tipo , proporcionando la funcionalidad básica de las plantillas de C++ . Sin embargo, no se admite la especialización de plantillas ni las plantillas de funciones .

Las características de polimorfismo de SystemVerilog son similares a las de C++: el programador puede escribir una virtualfunción específica para que una clase derivada tome el control de la misma. Consulte la sección sobre funciones virtuales para obtener más información.

La encapsulación y ocultación de datos se logra mediante las palabras clave localy protected, que deben aplicarse a cualquier elemento que se desee ocultar. Por defecto, todas las propiedades de clase son públicas .

Las instancias de clase se crean dinámicamente con la palabra clave. Se puede definir newun constructor denotado por . SystemVerilog tiene recolección de basura automática , por lo que no hay ninguna facilidad de lenguaje para destruir explícitamente las instancias creadas por el operador new . function new

Ejemplo:

clase virtual Memoria ; función virtual bit [ 31 : 0 ] leer ( bit [ 31 : 0 ] dirección ); fin de función función virtual void escribir ( bit [ 31 : 0 ] dirección , bit [ 31 : 0 ] datos ); fin de función fin de claseclase SRAM #( parámetro AWIDTH = 10 ) extiende Memoria ; bit [ 31 : 0 ] mem [ 1 << AWIDTH ];función virtual bit [ 31 : 0 ] leer ( bit [ 31 : 0 ] addr ); devolver mem [ addr ]; fin de la funciónfunción virtual void write ( bit [ 31 : 0 ] addr , bit [ 31 : 0 ] data ); mem [ addr ] = data ; fin de la función fin de la clase

Generación aleatoria restringida

Las cantidades enteras, definidas ya sea en la definición de una clase o como variables independientes en algún ámbito léxico, pueden recibir valores aleatorios en función de un conjunto de restricciones. Esta característica resulta útil para crear escenarios aleatorios para la verificación .

Dentro de las definiciones de clase, los modificadores randy randcseñalan las variables que se someterán a aleatorización. randcespecifica la aleatorización basada en permutaciones , donde una variable tomará todos los valores posibles una vez antes de que se repita cualquier valor. Las variables sin modificadores no se aleatorizan.

clase eth_frame ; rand bit [ 47 : 0 ] dest ; rand bit [ 47 : 0 ] src ; rand bit [ 15 : 0 ] f_type ; rand byte payload []; bit [ 31 : 0 ] fcs ; rand bit [ 31 : 0 ] fcs_corrupt ;restricción básica { tamaño de carga útil dentro de {[ 46 : 1500 ]}; }restricción good_fr { fcs_corrupt == 0 ; } fin de clase

En este ejemplo, el fcscampo no se genera aleatoriamente; en la práctica, se calculará con un generador CRC y fcs_corruptse utilizará para corromperlo e inyectar errores FCS. Las dos restricciones mostradas son aplicables a tramas Ethernet conformes . Las restricciones pueden habilitarse selectivamente; esta característica sería necesaria en el ejemplo anterior para generar tramas corruptas. Las restricciones pueden ser arbitrariamente complejas, involucrando interrelaciones entre variables, implicaciones e iteración. El solucionador de restricciones de SystemVerilog debe encontrar una solución si existe, pero no garantiza el tiempo que tardará en hacerlo, ya que en general se trata de un problema NP-difícil ( satisfacibilidad booleana ).

Métodos de aleatorización

Cada clase de SystemVerilog incluye tres métodos predefinidos para la aleatorización: pre_randomize, randomize y post_randomize. El usuario llama al método randomize para aleatorizar las variables de la clase. El método pre_randomize es llamado por randomize antes de la aleatorización, y el método post_randomize es llamado por randomize después de la aleatorización.

clase eth_frame ; rand bit [ 47 : 0 ] dest ; rand bit [ 47 : 0 ] src ; rand bit [ 15 : 0 ] f_type ; rand byte payload []; bit [ 31 : 0 ] fcs ; rand bit corrupted_frame ;restricción básica { payload . tamaño dentro {[ 46 : 1500 ]}; } función void post_randomize () this . calcular_fcs (); // actualiza el campo fcs de acuerdo con el marco aleatorio if ( corrupted_frame ) // si este marco debe estar corrupto this . corrupt_fcs (); // corrompe el fcs endfunction endclass

Controlar las restricciones

Los métodos constraint_mode() y random_mode() se utilizan para controlar la aleatorización. constraint_mode() se utiliza para activar o desactivar una restricción específica, y random_mode se utiliza para activar o desactivar la aleatorización de una variable específica. El siguiente código describe y prueba de forma procedimental una trama Ethernet :

clase eth_frame ; rand bit [ 47 : 0 ] dest ; rand bit [ 47 : 0 ] src ; rand bit [ 15 : 0 ] f_type ; rand byte payload []; bit [ 31 : 0 ] fcs ; rand bit corrupted_frame ;restricción básica { payload . tamaño dentro de {[ 46 : 1500 ]}; } restricción one_src_cst { src == 48'h1f00 }restricción dist_to_fcs { fcs dist { 0 :/ 30 ,[ 1 : 2500 ] :/ 50 }; // 30 y 50 son los pesos (30/80 o 50/80, en este ejemplo) }fin de clase . . . eth_frame mi_frame ;my_frame.one_src_cst.constraint_mode ( 0 ); // la restricción one_src_cst no se tendrá en cuenta. my_frame.f_type.random_mode ( 0 ) ; // la variable f_type no se aleatorizará para esta instancia de fotograma . my_frame.randomize ( ) ;

Afirmaciones

Las aserciones son útiles para verificar propiedades de un diseño que se manifiestan después de que se alcanza una condición o estado específico. SystemVerilog tiene su propio lenguaje de especificación de aserciones, similar al lenguaje de especificación de propiedades . El subconjunto de construcciones del lenguaje SystemVerilog que sirve para las aserciones se denomina comúnmente SystemVerilog Assertion o SVA. [ 6 ]

Las aserciones de SystemVerilog se construyen a partir de secuencias y propiedades . Las propiedades son un superconjunto de las secuencias; cualquier secuencia puede usarse como si fuera una propiedad, aunque esto no suele ser útil.

Las secuencias consisten en expresiones booleanas aumentadas con operadores temporales . El operador temporal más simple es el ##que realiza una concatenación:

secuencia S1 ; @( posedge clk ) req ## 1 gnt ; fin de secuencia

Esta secuencia coincide si la gntseñal pasa a nivel alto un ciclo de reloj después de reqque la señal pase a nivel alto. Tenga en cuenta que todas las operaciones de la secuencia son síncronas con un reloj.

Otros operadores secuenciales incluyen operadores de repetición, así como diversas conjunciones. Estos operadores permiten al diseñador expresar relaciones complejas entre los componentes del diseño.

Una aserción funciona intentando evaluar continuamente una secuencia o propiedad. Una aserción falla si la propiedad falla. La secuencia anterior fallará siempre que reqsea baja. Para expresar con precisión el requisito de que gntse reqrequiere una propiedad:

propiedad req_gnt ; @( posedge clk ) req |=> gnt ; fin de la propiedadassert_req_gnt: afirmar propiedad ( req_gnt ) de lo contrario $ error ( "req no va seguido de gnt." );

Este ejemplo muestra un operador de implicación|=> . La cláusula a la izquierda de la implicación se llama antecedente y la cláusula a la derecha se llama consecuente . La evaluación de una implicación comienza con intentos repetidos de evaluar el antecedente. Cuando el antecedente tiene éxito , se intenta evaluar el consecuente, y el éxito de la aserción depende del éxito del consecuente. En este ejemplo, el consecuente no se intentará hasta que reqalcance un valor alto, después de lo cual la propiedad fallará si gntno alcanza un valor alto en el siguiente reloj.

Además de las aserciones, SystemVerilog admite supuestos y cobertura de propiedades. Un supuesto establece una condición que una herramienta de prueba de lógica formal debe considerar verdadera . Una aserción especifica una propiedad que debe demostrarse verdadera. En la simulación , tanto las aserciones como los supuestos se verifican con estímulos de prueba. La cobertura de propiedades permite al ingeniero de verificación comprobar que las aserciones monitorizan con precisión el diseño.

Cobertura

La cobertura , aplicada a los lenguajes de verificación de hardware, se refiere a la recopilación de estadísticas basadas en el muestreo de eventos dentro de la simulación. Se utiliza para determinar cuándo el dispositivo bajo prueba (DUT) ha sido expuesto a una variedad suficiente de estímulos como para tener una alta confianza en su correcto funcionamiento. Cabe destacar que esto difiere de la cobertura de código , que instrumenta el código de diseño para asegurar que se hayan ejecutado todas las líneas de código. La cobertura funcional garantiza que se hayan explorado todos los casos límite y extremos deseadosen el espacio de diseño .

Un grupo de cobertura de SystemVerilog crea una base de datos de "intervalos" que almacenan un histograma de los valores de una variable asociada. También se puede definir la cobertura cruzada, que crea un histograma que representa el producto cartesiano de múltiples variables.

Un evento de muestreo controla cuándo se toma una muestra. Este evento puede ser un evento Verilog, la entrada o salida de un bloque de código o una llamada al método del grupo de cobertura. Es necesario asegurarse de que los datos se muestreen solo cuando sea pertinente. sample

Por ejemplo:

clase eth_frame ; // Definiciones como arriba covergroup cov ; coverpoint dest { bins bcast [ 1 ] = { 48'hFFFFFFFFFFFF }; bins ucast [ 1 ] = default ; } coverpoint f_type { bins length [ 16 ] = { [ 0 : 1535 ] }; bins typed [ 16 ] = { [ 1536 : 32767 ] }; bins other [ 1 ] = default ; } psize : coverpoint payload.size { bins size [] = { 46 , [ 47:63 ] , 64 , [ 65 : 511 ], [ 512 : 1023 ], [ 1024 : 1499 ] , 1500 } ; }sz_x_t: cruce f_type , psize ; fin de grupo fin de clase

En este ejemplo, el ingeniero de verificación está interesado en la distribución de tramas de difusión y unidifusión, el campo size/f_type y el tamaño de la carga útil. Los rangos en el punto de cobertura del tamaño de la carga útil reflejan los casos límite de interés, incluyendo las tramas de tamaño mínimo y máximo.

Sincronización

Un entorno de prueba complejo consta de componentes de verificación reutilizables que deben comunicarse entre sí. La primitiva ' evento ' de Verilog permitía que diferentes bloques de instrucciones procedimentales se activaran entre sí, pero la imposición de la sincronización de hilos dependía del uso (ingenioso) del programador. SystemVerilog ofrece dos primitivas específicas para la sincronización entre hilos: buzón y semáforo . El buzón se modela como una cola de mensajes FIFO . Opcionalmente, el FIFO puede ser parametrizado por tipo para que solo los objetos del tipo especificado puedan pasar a través de él. Normalmente, los objetos son instancias de clase que representan transacciones : operaciones elementales (por ejemplo, enviar un marco) que son ejecutadas por los componentes de verificación. El semáforo se modela como un semáforo de conteo .

Mejoras generales al Verilog clásico

Además de las nuevas características mencionadas anteriormente, SystemVerilog mejora la usabilidad de las características existentes del lenguaje Verilog. A continuación, se detallan algunas de estas mejoras:

Además, SystemVerilog permite una interfaz conveniente con otros lenguajes (como C/C++), mediante SystemVerilog DPI (Interfaz de Programación Directa).

Software de verificación y síntesis

En la verificación de diseño, SystemVerilog se utiliza ampliamente en la industria del diseño de chips. Los tres principales proveedores de EDA ( Cadence Design Systems , Mentor Graphics y Synopsys ) han incorporado SystemVerilog en sus simuladores HDL de lenguaje mixto . Si bien ningún simulador puede afirmar aún ser compatible con todo el Manual de Referencia del Lenguaje SystemVerilog, lo que dificulta la interoperabilidad de los bancos de pruebas , se están realizando esfuerzos para promover la compatibilidad entre proveedores. En 2008, Cadence y Mentor publicaron la Metodología de Verificación Abierta, una biblioteca de clases y un marco de uso de código abierto para facilitar el desarrollo de bancos de pruebas reutilizables y propiedad intelectual de verificación preconfigurada. Synopsys, que había sido el primero en publicar una biblioteca de clases de SystemVerilog (VMM), respondió posteriormente abriendo su VMM propietaria al público en general. Muchos proveedores externos han anunciado o ya han publicado propiedad intelectual de verificación de SystemVerilog.

En la síntesis de diseño (transformación de la descripción de un diseño de hardware en una lista de conexiones de compuertas ), la adopción de SystemVerilog ha sido lenta. Muchos equipos de diseño utilizan flujos de trabajo que involucran múltiples herramientas de diferentes proveedores. La mayoría de los equipos de diseño no pueden migrar al diseño RTL de SystemVerilog hasta que todo su conjunto de herramientas de interfaz ( analizadores de código , verificación formal y generadores de estructuras de prueba automatizadas ) admita un subconjunto común del lenguaje.

Véase también

Referencias

  1. ^ Rich, D. “La evolución de SystemVerilog” IEEE Design and Test of Computers, julio/agosto de 2003
  2. ^ IEEE aprueba SystemVerilog, revisión de Verilog
  3. ^ IEEE 1800-2012 , IEEE , 2012
  4. ^ IEEE 1800-2017 , IEEE , 2017
  5. ^ IEEE 1800-2023, Norma IEEE para SystemVerilog: lenguaje unificado para el diseño, especificación y verificación de hardware , IEEE , 2023
  6. ^ Aserción de SystemVerilog: Introducción
  • Estándar IEEE para SystemVerilog: Lenguaje unificado para el diseño, especificación y verificación de hardware . 2005. doi : 10.1109/IEEESTD.2005.97972 . ISBN 978-0-7381-4810-6.
  • Estándar IEEE para SystemVerilog: lenguaje unificado para el diseño, especificación y verificación de hardware . 2009. doi : 10.1109/IEEESTD.2009.5354441 . ISBN 978-0-7381-6130-3.
  • Estándar IEEE para SystemVerilog: lenguaje unificado para el diseño, especificación y verificación de hardware . 2013. doi : 10.1109/IEEESTD.2013.6469140 . ISBN 978-0-7381-8110-3.
  • Estándar IEEE para SystemVerilog: lenguaje unificado para el diseño, especificación y verificación de hardware . 2017. doi : 10.1109/IEEESTD.2018.8299595 . ISBN 978-1-5044-4509-2.
  • McGrath, Dylan (09/11/2005). "IEEE aprueba SystemVerilog, revisión de Verilog" . EE Times . Consultado el 31/01/2007 .
  • Puneet Kumar (09-11-2005). "Tutorial de System Verilog" .
  • Gopi Krishna (9 de noviembre de 2005). "Tutoriales de SystemVerilog, SVA, SV DPI" .
  • HDVL. "Más enlaces web de SystemVerilog" .
  • Spear, Chris, "SystemVerilog for Verification" Springer, Nueva York, NY. ISBN 0-387-76529-8
  • Stuart Sutherland, Simon Davidmann, Peter Flake, «SystemVerilog for Design, Segunda edición: Guía para el uso de SystemVerilog en el diseño y modelado de hardware» , Springer, Nueva York, NY. ISBN 0-387-33399-1
  • Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari y Lisa Piper [1] Manual de aserciones de SystemVerilog, 4.ª edición, 2016 - http://SystemVerilog.us
  • Ben Cohen, Srinivasan Venkataramanan y Ajeetha Kumari [2] Un enfoque pragmático para la adopción de VMM, - http://SystemVerilog.us
  • Erik Seligman y Tom Schubert [3] Verificación formal: un conjunto de herramientas esenciales para el diseño VLSI moderno, 24 de julio de 2015,
Referencia estándar IEEE
  • 1800-2017 - Estándar IEEE para SystemVerilog: lenguaje unificado para el diseño, especificación y verificación de hardware . La versión 2017 está disponible sin costo a través del programa IEEE GET. [ 1 ]
Tutoriales
  • Tutorial de SystemVerilog
  • Tutorial de SystemVerilog para principiantes
Desarrollo de estándares
  • IEEE P1800 – Grupo de trabajo para SystemVerilog
  • Sitios utilizados antes de IEEE 1800-2005
    • Sitio web oficial de SystemVerilog
    • Comités técnicos de SystemVerilog
Extensiones de lenguaje
  • Verilog AUTOs : un sistema de metacomentarios de código abierto para simplificar el mantenimiento del código Verilog.
Herramientas en línea
  • EDA Playground : ejecuta SystemVerilog desde un navegador web (IDE online gratuito).
  • sverule – Un navegador BNF de SystemVerilog (actualizado a IEEE 1800-2012)
Otras herramientas
  • SVUnit : marco de pruebas unitarias para desarrolladores que escriben código en SystemVerilog. Verifique módulos, clases e interfaces de SystemVerilog de forma aislada.
  • sv2v : convertidor de código abierto de SystemVerilog a Verilog
  1. ^ Programa IEEE GET , IEEE
Obtenido de " https://en.wikipedia.org/w/index.php?title=SystemVerilog&oldid=1328134643 "