Paso 5: ordenandolo todo un poco

Siguiendo los pasos de la creación de un banco de pruebas para el radicador que responda a una estructura más actual y basada en systemVerilog, hemos visto conveniente hacer unas últimas incorporaciones que os puedan ayudar a mejorar el estilo de vuestros bancos de pruebas.

Empecemos recordando la estructura que deseamos

Estructura del banco de pruebas SystemVerilog

This image has an empty alt attribute; its file name is sv_simple_tb_with_scb.png

En esta estructura las grandes construcciones que forman parte del banco de pruebas (module sin puertos del top) son:

  • DUT o DUV : diseño bajo verificación que será un “module” instanciado
  • test: Elementos constituyentes del sistema de verificación que será un “program” instanciado
  • Elemento de comunicación entre ambas construcciones que permita hacer llegar los estímulos generados por el test al DUV y permita observar tanto dichos estímulos como los resultados obtenidos por el DUV para hacérselos llegar los elementos constitutivos del test. Esta construcción que permite esa comunicación será un “interface” instanciado.
  • Y deberíamos completar con un generador de reloj y un generador de reset, si bien este último podría generarse en el test como un estímulo más.

Vamos a incluir dichos elementos empezando con el elemento de intercomunicación, que desarrollaremos a través de un “interface”

INTERFAZ

Este ejemplo de interfaz utiliza tres “mod ports” : dos de ellos para proporcionar dos puntos de vista que debe usar el test: control (color violeta) y observabilidad (color granate); y un tercer punto de vista que utilizará el DUT (color azul en la figura)

This image has an empty alt attribute; its file name is image.png

.

Los dos modos que usará el test tienen asociados sus correspondientes “clocking blocks” para sincronizar esas comunicaciones

DUT

Como hemos basado la interconexión en el banco de pruebas mediante “interface” el top del diseño suele ser un fichero de adaptación de interfaz a puertos y viceversa.

TEST

Este elemento es el que más hemos cambiado.

Destacan en dicho código lo siguiente:

  • Realización con la construcción “program”. Como ya he dicho reiterada veces muchos ingenieros de verificación prefieren seguir utilizando un “module”
  • Dicho “program” consiste de
    • un “initial” principal donde se suceden los diferentes casos contemplados en la verificación y
    • de un objeto de la clase “enviroment” donde se encuentran los siguientes elementos:
      • Los covergroups
      • La clase de RCSG
      • La clase del Scoreboard
  • Para poder declarar e instanciar un objeto de la clase enviroment hemos utilizado un “package” denominado utilizades_verificacion que es importado utilizando el operador ::. Esto es una alternativa más elegante que nos permite que la compilación no tenga problemas aunque estos elementos sean guardados en ficheros diferentes, en cuyo caso la visibilidad de las clases solo es conseguida si son incluidos los ficheros (solución poco elegante) o si son importados los objetos.
  • La inclusión de los covergroups en una clase (enviroment) en lugar de en el interior directamente del program nos sirve de ejemplo para observar los “embedded covergroups” en los cuales
    • Definir : con la construción covergroup
    • Declaración es implícita
    • Instanciación: con el constructor new

Veamos esa declaración de package con esas clases, objetos y covergroups

Vamos a ver todo el proyecto en el siguiente laboratorio virtual. Esta solución de banco de pruebas funciona perfectamente en questasim aun cuando el “testbench” sea distribuido en cuatro ficheros:

  • interfaz.sv
  • test.sv
  • enviroment.sv
  • banco_pruebas.sv

Laboratorio virtual

https://www.edaplayground.com/x/78af