Escrituras internas para construir un entorno de verificación (comenzar a construir un entorno desde 0)

1. Cuatro elementos de la construcción ambiental

Antes de enviar la secuencia de prueba, primero debe crear un entorno estructurado y desmontar los elementos centrales del establecimiento del entorno, que se puede dividir en cuatro partes:

  • Propiedades de cierre automático de los componentes de la unidad.
  • creación de regresión
  • Conexión del puerto de comunicación
  • configuración de nivel superior


2. Autocierre de los componentes de la unidad

El cierre automático significa que los componentes de la unidad (como uvm_agent o uvm_env) pueden convertirse en comportamientos independientes y no depender de otros componentes paralelos. Por ejemplo, entre el controlador y el secuenciador, aunque el controlador necesita obtener el elemento de transacción del secuenciador, puede crear una instancia de sí mismo de forma independiente y la comunicación entre ellos también se realiza en función de la conexión de extremo a extremo del TLM. La naturaleza de cierre automático de este componente de la unidad proporciona una buena base para la reutilización posterior de los componentes, y cada subambiente también se puede integrar de forma independiente en el entorno de nivel superior sin conexiones de comunicación adicionales.

3. Creación de regresión

En esta forma de creación de regresión, después de que el componente de nivel superior se crea una instancia (ejecuta la función new (), ejecutará cada etapa de fase. A través de build_phase, se pueden crear más subcomponentes, y estos subcomponentes también se crean a través del mismo proceso componentes del siguiente nivel.

La razón por la que se puede realizar la creación de regresión depende de la fase de construcción de la orden de ejecución de arriba hacia abajo. La secuencia de ejecución estructurada de build_phase puede garantizar que el componente principal deba crearse antes que el componente secundario, y el proceso de creación también incluye:

  • Asigne un valor predeterminado al definir una variable miembro o asigne un valor inicial en la función new().
  • Las variables de configuración estructural se utilizan para determinar la generación condicional de componentes. Por ejemplo, uvm_agent se basa en la variable is_active para determinar si es necesario crear instancias de uvm_sequencer y uvm_driver.
  • Las variables de configuración de modo se utilizan para determinar el modo de funcionamiento de cada subcomponente.
  • Los subcomponentes se generan secuencialmente de arriba a abajo y de adelante hacia atrás.


4. Conexión del puerto de comunicación

Una vez creado todo el entorno, cada componente realizará la comunicación de datos a través de la conexión del puerto de comunicación. Los usos comunes de comunicación del puerto incluyen:

  • El puerto del controlador está conectado al secuenciador y el elemento de la transacción se adquiere en forma de bloqueo para el secuenciador.
  • El puerto del monitor está conectado al quincena de análisis dentro del marcador y los datos monitoreados se escriben en él.

5. Configuración de nivel superior

Formalmente, debido a la naturaleza de cierre automático de los componentes de la unidad, la estructura UVM no recomienda hacer referencia a identificadores de subentorno y luego indexar variables más profundas para la configuración de nivel superior. Esto aumentará la rigidez del entorno de nivel superior y de los subentornos. , y no puede lograr una mejor separación.

Entonces, una mejor manera es pasar el objeto de configuración al subentorno como una parte vinculada al entorno de nivel superior, y cada componente del subentorno puede obtener sus propios parámetros de configuración del objeto de configuración estructurado, para construir_phase , connect_phase y run_phase para determinar su estructura y modo de operación.

El objeto de configuración de nivel superior se puede configurar en el subentorno que se creará en el futuro cuando no se cree una instancia del subentorno, sin considerar que el objeto de configuración de nivel superior se generará antes que el subentorno, que también proporciona un método de configuración seguro para la estructura de verificación UVM:

  • Independientemente de qué capa de configuración se utilice, debe intentar colocar todas las configuraciones antes de la creación de subcomponentes para asegurarse de que la configuración se haya completado.
  • El alcance de la configuración solo debe centrarse en el nivel actual e inferior, y no involucrar niveles superiores.
  • La estructura del objeto de configuración debe ser lo más independiente posible, preferiblemente formando una estructura de árbol como la estructura del entorno. Dichos objetos de configuración independientes corresponderán a subentornos independientes. Si las configuraciones independientes se fusionan en una estructura de configuración de nivel superior en forma de árbol, entonces los objetos de configuración de nivel superior serán más fáciles de usar y mantener.
  • Debido a las características de configuración de config_db, la configuración de alto nivel cubrirá la configuración subyacente, lo que también permite que la configuración realizada en el nivel uvm_test controle la estructura y el modo generales.

Diagrama de bloques de configuración de nivel superior


6. Clasificación de elementos ambientales.

 Dibuje la capa uvm_test como un nivel superior a uvm_env, porque a la capa uvm_test se le pasarán algunas partes de configuración al subentorno. Incluyendo el componente uvm_component que constituye el entorno, los elementos del entorno se pueden dividir en las siguientes partes:

  • Variables miembro: variables generales, variables de estructura, variables de patrón.
  • Subcomponentes: Componentes fijos, Componentes condicionales, Componentes de referencia.
  • Objetos secundarios: objetos autogenerados, objetos clonados y objetos referenciados.

Variables miembro

  • Las variables generales se utilizan para operaciones dentro de objetos o para proporcionar valores de estado para acceso externo.
  • Las variables estructurales se utilizan para determinar si es necesario crear y conectar subcomponentes internos; por ejemplo, la variable is_active de nivel superior se utiliza para este propósito.
  • Las variables de modo se utilizan para controlar el comportamiento de los componentes. Por ejemplo, las variables del controlador se pueden configurar en modo para generar diferentes comportamientos de incentivo en run_phase.
  • Para las variables de estructura y variables de modo, generalmente se definen mediante tipos int o enum, y se pueden configurar directamente en la capa uvm_test a través del método de configuración de uvm_config_db, o la configuración del sistema se puede realizar a través de objetos de configuración estructurados. Para entornos de autenticación complejos, el objeto de configuración será fácil de operar y mantener.

Subconjunto

  • Los componentes que deben crearse en el entorno se denominan componentes fijos. Por ejemplo, el monitor en el agente debe crearse independientemente del modo activo o pasivo, o también debe crearse el marcador en el entorno de nivel superior. para comparar datos.
  • El componente condicional está determinado por la configuración de la variable de estructura si es necesario crearlo. Por ejemplo, el secuenciador y el controlador solo pueden crearse en modo activo.
  • Un componente de referencia declara un identificador de tipo internamente y lo pasa a través de un identificador de arriba hacia abajo para que el identificador pueda apuntar a un objeto externo. Por ejemplo, en la capa uvm_test, primero se crea una instancia de un modelo de registro rgm (componente fijo) y luego el identificador del modelo se pasa al identificador rgm (componente de referencia) en la capa reg_env a través de la configuración. Al utilizar la forma de hacer referencia a componentes, todos los niveles del entorno pueden compartir un componente si es necesario.

objeto hijo

  • Primero se crea un objeto en una determinada capa, que puede denominarse objeto autogenerado.
  • Durante la transferencia de objetos, el objeto se clona para generar un objeto con los mismos valores de miembro, lo que se denomina objeto clonado.
  • Si el objeto pasa a través del puerto y llega a otro componente, y el componente opera directamente sobre él sin clonación, se denomina operación de referenciar el objeto. Por ejemplo, la secuencia virtual generará elementos de transacción enviados a reg_master_agent y reg_slave_agent, que son mst_t y slv_t respectivamente, estos mst_t y slv_t enviados continuamente pasarán por uvm_sequencer y finalmente llegarán a uvm_driver. Después de que uvm_driver obtenga estos objetos de transacción, es una forma de clonarlos primero y luego usar los objetos de datos clonados como incentivos; uvm_driver también puede operar directamente en estos objetos (objetos de referencia) sin clonar los objetos de datos.
     

Supongo que te gusta

Origin blog.csdn.net/Arvin_ing/article/details/127676326
Recomendado
Clasificación