Haciendo UVM más rápido a través de un nuevo sistema de configuración - Semiwiki

Haciendo UVM más rápido a través de un nuevo sistema de configuración – Semiwiki

Nodo de origen: 3036575

La Metodología de Verificación Universal (UVM) es una forma popular de ayudar a verificar los diseños de SystemVerilog e incluye una sistema de configuración que desafortunadamente tiene algunos problemas de velocidad y uso. Rich Edelman de Siemens EDA escribió un artículo detallado de 20 páginas sobre el tema de cómo evitar estos problemas, y lo he revisado para resumir los aspectos más destacados. Los ingenieros de verificación utilizan una base de datos de configuración de UVM para establecer valores y luego obtenerlos más adelante en su prueba de UVM. Un ejemplo de configuración y obtención de un valor 'T' es:

uvm_config#(T)::set(alcance, nombre_ruta_instancia, nombre_campo, valor); uvm_config#(T)::get(alcance, nombre_ruta_instancia, nombre_campo, valor);

La conexión del banco de pruebas UVM al dispositivo bajo prueba utiliza la base de datos de configuración para pasar las interfaces virtuales. Hay tres problemas con el uso de la configuración UVM:

  • Código grande, unas 2,600 líneas de código
  • Requiere una coincidencia exacta de tipos, por lo que 'int' y 'bit' no son lo mismo
  • código lento

Considere el caso del código lento, porque con miles de llamadas a set() el uso de nombres con comodines puede tardar hasta 30 minutos en completar las fases de 'establecer' y 'obtener'.

Tiempo transcurrido min

Rich propone una nueva solución para las configuraciones UVM que tiene velocidades mucho más rápidas y, en comparación, solo toma unos segundos.

nueva solución min

Si su código UVM evita el uso de comodines y tiene pocos comandos "establecidos", entonces su código se ejecutará más rápido.

Las posibles soluciones a los problemas de configuración de UVM son:

  • Utilice una variable global en su lugar
  • Utilice la configuración UVM con un conjunto()
  • Utilice la configuración UVM con algunos set()
  • Utilice un árbol de configuración
  • Intentar algo diferente

Ese último enfoque de probar algo diferente es la nueva solución, y continúa usando las API set() y get(), luego simplifica eliminando la parametrización de las configuraciones, elimina la precedencia y elimina el cambio del algoritmo de búsqueda. Los resultados de este nuevo enfoque son velocidades rápidas.

Su nuevo elemento de configuración se define en la clase derivada de 'config_item' y el siguiente ejemplo muestra 'int value' como la propiedad que se está configurando. Para fines de depuración, agrega la función de impresión bonita.

clase my_special_config_item extiende config_item; función nueva (nombre de cadena = "my_special_config_item"); super.nuevo(nombre); valor int de función final; cadena de función virtual convert2string(); return $sformatf("%s - valor=%0d <%s>", get_name(), valor, super.convert2string()); clase final de función final

El 'config_item' tiene un atributo de nombre y se busca este nombre, además del nombre de la instancia. El objeto de configuración también tiene una función get_name() para devolver el nombre. Para encontrar cualquier “nombre_instancia.nombre_campo”, la base de datos de configuración utiliza una matriz asociativa para velocidades de búsqueda y creación rápidas.
Para la trazabilidad, puede averiguar quién configuró o quién llamó a get, porque el nombre de archivo y el número de línea son campos en las llamadas a las funciones set() y get().

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

La cola de acceso se puede imprimir durante la depuración para ver quién llamó a set() y get().

Para admitir comodines es necesario agregar un mecanismo de búsqueda mediante contenedores. Considere el nombre de instancia 'top.abcd*_0'.

árbol contenedor min
Árbol contenedor

La parte comodín del nombre de la instancia se maneja utilizando el árbol contenedor, en lugar de la matriz asociativa.

Resumen

Se pueden compartir datos entre el módulo/instancia y el mundo basado en clases en un banco de pruebas de UVM utilizando la base de datos de configuración de UVM, solo tenga en cuenta las desaceleraciones de velocidad. Si su metodología utiliza muchas configuraciones, considere utilizar el nuevo enfoque introducido que tiene un paquete que utiliza aproximadamente 300 líneas de código en lugar de las 2,600 líneas de código en el archivo de base de datos de configuración de UVM.

Lea el artículo completo de 20 páginas, Evitar la locura de la configuración de forma sencilla en Siemens EDA.

Blogs relacionados

Comparte esta publicación a través de:

Sello de tiempo:

Mas de Semiwiki