¿Por qué necesitamos un secuenciador virtual en la arquitectura UVM?

Secuenciador virtual : contiene identificadores del secuenciador que se encuentran en diferentes agentes

P. La pregunta es ¿cuándo la usamos?

¿Por qué usarlo?

Si algo tiene que estar sincronizado, en general la generación de estímulos a través de diferentes interfaces tiene que estar sincronizada, lo que se hace mediante secuenciador virtual, secuencias virtuales

en la práctica si tienes dos ip en soc y quieres tener control de estímulo, secuenciador virtual, las secuencias virtuales te ayudan a lograrlo

Cómo lo usamos

considere seqr1, seqr2 son manejadores de secuenciadores, también pertenecen a dos agentes seq1_agent, seq2_agent, y tienen env como entorno

Vamos a ver cómo usarlo?

Definir secuenciador virtual

///// Clase de secuenciador virtual
clase virtual_seqr extender uvm_sequencer;
`uvm_component_utils (virtual_seqr)

/// Manijas de diferentes secuenciadores
type1_seqr seqr1;
type2_seqr seqr2;

/// Constructor
función new (string name = “virtual_seqr”, uvm_component parent);
super.new (nombre, padre);
función final: nuevo

clase final: virtual_seqr

Ahora si vamos más allá

cómo se instancia la secuencia virtual en secuencia virtual

para eso permite definir la clase de secuencia base

///// Clase de secuencia virtual
clase virtual_base_seq extend uvm_sequence # (uvm_sequence_item);
`uvm_component_utils (virtual_base_seq)

type1_seqr seqr_b1;
type2_seqr seqr_b2;
// Manejador de secuenciador virtual
virtual_seqr v_seqr;

/// Constructor
función new (string name = “virtual_base_seq”);
super.nuevo (nombre);
función final: nuevo
cuerpo de tarea ();
if (! $ cast (v_seqr, m_sequencer)) comienza
`uvm_error (get_full_name (),” Falló la conversión del puntero Seqr virtual “)
final
seqr_b1 = v_seqr.seqr1;
seqr_b2 = v_seqr.seqr2;

endtask: cuerpo

clase final: virtual_base_seq

Ahora vamos a definir secuencia virtual

clase virtual_seq extend virtual_base_seq;
`uvm_component_utils (virtual_seq)

type1_seqr seqr_b1;
type2_seqr seqr_b2;
// Manejador de secuenciador virtual
virtual_seqr v_seqr;

/// Constructor
función new (string name = “virtual_seq”);
super.new (nombre, padre);
función final: nuevo

cuerpo de tarea ();
// llama al archivo padre para asignar identificadores de subsecuencia
super.body ();
type1_seq seq1;
type2_seq seq2;
// crear seq
seq1 = type1_seq :: type_id :: create (“type1_seq”);
seq2 = type1_seq :: type_id :: create (“type1_seq”);
repetir (10) comenzar
seq1.start ();
seq2.start ();
final
endtask: cuerpo

clase final: virtual_base_seq

El entorno creará instancias de secuenciador virtual, agente y se conectará a secuenciador virtual a secuenciador de agente

no entrar en detalles es la fase de conexión será como

función void connect_phase (fase uvm_phase);
v_seqr.seqr1 = seg1_agent.m_sequencer;
v_seqr.seqr2 = seq2_agent.m_sequencer;
función final: connect_phase

También prueba instanciará secuencia virtual, entorno

y su fase de ejecución será como

tarea run_phase (fase uvm_phase);
/// Crear la secuencia virtual
v_seq_test = virtual_seq :: type_id :: create (“v_seq_test”);
phase.raise_objection (esto);
/// Inicia la secuencia virtual
v_seq_test.start (env.v_seqr_env);
phase.drop_objection (esto);
endtask: run_phase

Un secuenciador virtual es un componente en la arquitectura UVM TB que controla el flujo de estímulo o elementos de secuencia de más de un secuenciador.

La situación típica de tener un secuenciador virtual en un entorno cuando tiene múltiples agentes.

Un secuenciador virtual puede a su vez estar conectado o controlado por una secuencia virtual. Una secuencia virtual no es como una secuencia convencional que se usa para generar elementos de secuencia, sino que contiene los identificadores de los secuenciadores en los que se ejecutan las secuencias subdivididas.

Básicamente, hay varias formas de hacer un seguimiento de eso, m_sequencer puede ser útil para lo que es como un puntero.

Básicamente, en el tipo de verificación subsistema / soc, puede enfrentar la necesidad de un secuenciador virtual en el entorno

Una secuencia virtual es una secuencia que controla la generación de estímulos usando varios secuenciadores. En la arquitectura UVM, las secuencias, los secuenciadores y los controladores se centran en las interfaces de puntos y, por lo tanto, debe existir una secuencia de capa superior para coordinar la generación de estímulos a través de diferentes interfaces y las interacciones entre ellas, que es lo que es una secuencia virtual.

Un secuenciador virtual es un secuenciador uvm que contiene los identificadores de todos los secuenciadores de destino centrados en cada interfaz de punto. Se puede iniciar una secuencia virtual en un secuenciador virtual y la secuencia virtual puede generar y ejecutar subsecuencias en secuenciadores objetivo de manera coordinada.

El uso del secuenciador virtual es una forma conveniente de manejar todos los secuenciadores de destino en un solo componente y esto es útil al crear entornos de verificación integrados (entornos de subsistema y nivel de sistema). También puede encadenar más de un secuenciador virtual a un secuenciador virtual de capa superior en la construcción de bancos de pruebas de mayor integración.

Alternativamente, también puede obtener identificadores para todos los subsecuenciadores de destino dentro de la secuencia virtual en sí (y no utilizar un secuenciador virtual), pero siempre he encontrado que usar secuenciador virtual es una forma conveniente de tener identificadores para todos los secuenciadores de destino

Espero que esto ayude !

Estrictamente hablando, no necesitas tener uno. Las secuencias virtuales se pueden ejecutar sin un secuenciador. En lugar de pasar el identificador del secuenciador a la función start (), puede usar nulo.

Para pasar identificadores de secuenciador a las subsecuencias de una secuencia virtual, generalmente uso un objeto de configuración que contiene identificadores para todos los secuenciadores.

Como puede superponer cualquier cantidad de secuencias virtuales, también puede coordinar secuencias virtuales de nivel inferior desde una secuencia virtual de nivel superior.

tiene agentes UVM, cada uno de los cuales se ocupará de pocas interfaces DUT. Cualquier secuencia que escriba para ese agente solo moverá esas pocas interfaces respectivas.

Si supone, por ejemplo, que desea escribir secuencias de tal manera que desee controlar las interfaces DUT de diferentes agentes UVM, entonces elija las secuencias v.

Una analogía simple es: los agentes UVM son como estados en India y los secuenciadores son como CM de los estados respectivos. VSequencer es como el primer ministro del país que no tiene control total sobre los estados, pero puede coordinar entre los estados sin tener que preocuparse por saber cómo controlar esos estados. El primer ministro lo hará a través de los CM. usando UVM_DO_WITH y UVM_DO_ON_WITH, etc.