Sistema Verilog

Sistema Verilog
clase de idioma diseño estructural); orientado a objetos (verificación)
Apareció en 2002
Autor Instituto de Ingenieros Eléctricos y Electrónicos
extensión de archivo .sv
Liberar IEEE 1800-2009 (2009-12-18)
sistema de tipos estático, débil
sido influenciado Verilog , Vera

SystemVerilog  es un lenguaje de descripción y verificación de hardware que es una extensión del lenguaje Verilog .

SystemVerilog se construyó sobre los lenguajes Superlog (Accellera, 2002). Gran parte de la funcionalidad relacionada con la verificación se ha tomado del lenguaje OpenVera ( Synopsys ). [1] En 2005, se adoptó SystemVerilog como estándar IEEE 1800-2005. [2]

En 2009, el estándar 1800-2005 se fusionó con el estándar de lenguaje Verilog (IEEE 1364-2005) y se adoptó la versión actual de SystemVerilog, el estándar IEEE 1800-2009.

SystemVerilog se puede utilizar para describir RTL como una extensión del lenguaje Verilog-2005 . Para la verificación, se utiliza un modelo de programación orientado a objetos .

Construcciones para describir hardware

Nuevos tipos de datos

SystemVerilog admite todos los tipos de datos disponibles en Verilog y agrega muchos tipos de datos nuevos.

Tipos de datos enteros . SystemVerilog proporciona nuevos tipos de datos:

Estos tipos de datos toman dos estados: 0 y 1. A diferencia de los tipos de Verilog correspondientes (por ejemplo, reg o entero ), no pueden tomar los valores 'X' y 'Z', lo que permite una simulación más rápida.

Una matriz empaquetada multidimensional es una extensión y generalización de la memoria en Verilog:

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

Un tipo enumerado le permite dar nombres a constantes numéricas, por ejemplo:

typedef enum logic [ 2 : 0 ] { ROJO , VERDE , AZUL , CYAN , MAGENTA , AMARILLO } color_t ; color_t mi_color = VERDE ; $pantalla inicial ( "El color es %s" , mi_color . nombre ());

Este ejemplo usa logic[2:0] como tipo base.

Las estructuras y uniones se usan de la misma manera que en C. Además de Verilog, SystemVerilog agrega dos nuevos atributos: empaquetado y etiquetado . El atributo empaquetado significa que todos los miembros de la estructura se almacenan de forma compacta en la memoria, sin espacios (es decir, el compilador no puede hacer su alineación ):

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

El atributo etiquetado permite controlar qué miembro de la unión se usa en un momento dado durante la ejecución del programa.

Bloques de proceso

Verilog proporciona un proceso siempre en bloque que, según el contexto, puede describir diferentes tipos de hardware. Para describir explícitamente el tipo de hardware, SystemVerilog agrega 3 nuevos bloques de proceso: always_comb , always_ff y always_latch .

El bloque always_comb le permite modelar la lógica combinacional . La lista de sensibilidad de bloque contiene todas las variables utilizadas dentro del bloque.

always_comb comenzar tmp = b * b - 4 * a * c ; sin_raíz = ( tmp < 0 ); final

El bloque always_ff le permite describir la lógica secuencial síncrona , como los disparadores :

always_ff @( posedge clk ) q <= restablecer ? 0 : re ;

Los flip-flops de una sola etapa controlados por estática (latches) se describen usando bloques always_latch :

always_latch si ( activar ) q <= d ;

Interfaces

Para sistemas pequeños, las conexiones externas del módulo se describen de forma compacta utilizando puertos Verilog. Sin embargo, los bloques grandes dentro de un sistema grande suelen contener varios miles de puertos. SystemVerilog proporciona un mecanismo de interfaz para agrupar puertos y evitar la duplicación al definir puertos. Además, las interfaces pueden contener una construcción modport que especifica la dirección de las conexiones. Por ejemplo:

interfaz intf ; lógica a ; lógica b ; modport en ( entrada a , entrada b ); modport out ( salida a , salida b ); interfaz final parte superior del módulo ; intfi ( ); u_a m1 ( .i1 ( i )); u_b m2 ( .i2 ( i )); módulo final módulo u_a ( intf . en i1 ); asignar x = i1 . un ; asigne y = i1 . segundo ; módulo final módulo u_b ( intf . out i2 ); asignar i2 . un = 1 _ asignar i2 . b = 0 _ módulo final

Construcciones de verificación

Las siguientes construcciones no son sintetizables . Se utilizan para implementar entornos de prueba, aserciones en el código bajo prueba y para verificar la cobertura del código .

Tipos de datos de verificación

El tipo de cadena se puede usar para manejar cadenas 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 ); // Imprimirá: "[13] ¡Hola, mundo!"

Notas

  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 (enlace descendente) . Fecha de acceso: 26 de enero de 2013. Archivado desde el original el 29 de septiembre de 2007. 

Literatura

Enlaces