# Universal Verification Methodology

La Metodologia de verificació universal (UVM) és una metodologia estandarditzada per verificar dissenys de circuits integrats. UVM es deriva principalment de l'OVM (Open Verification Methodology) que es basava, en gran part, en l'eRM (e Reuse Methodology) per al llenguatge de verificació electrònic desenvolupat per Verisity Design l'any 2001. La biblioteca de classes UVM aporta molta automatització al llenguatge SystemVerilog, com ara seqüències i funcions d'automatització de dades (empaquetament, còpia, comparació), etc., i a diferència de les metodologies anteriors desenvolupades de manera independent pels venedors del simulador, és un estàndard d'Accellera amb suport de diversos proveïdors: Aldec, Cadence, Mentor Graphics, Synopsys, Xilinx Simulator (XSIM).

## Història

El desembre de 2009, un subcomitè tècnic d'Accellera — organització d'estàndards en la indústria de l'automatització del disseny electrònic (EDA) — va votar per establir l'UVM i va decidir basar aquest nou estàndard en la Metodologia de verificació oberta (OVM-2.1.1), una metodologia de verificació desenvolupada conjuntament el 2007 per Cadence Design Systems i Mentor Graphics.
El 21 de febrer de 2011, Accellera va aprovar la versió 1.0 d'UVM. UVM 1.0 inclou una guia de referència, una implementació de referència en forma de biblioteca de classes base SystemVerilog i una guia d'usuari.

## Fàbrica

Una fàbrica és un concepte d'ús comú en la programació orientada a objectes. És un objecte que s'utilitza per a la instanciació d'altres objectes. Hi ha dues maneres de registrar un objecte a la fàbrica UVM. A la declaració de classe A, es pot invocar les macros de registre `uvm_object_utils(A) o `uvm_component_utils(A). En cas contrari, les macros `uvm_object_registry(A,B) o `uvm_component_registry(A,B) es poden utilitzar per assignar una cadena B a una classe de tipus A. La fàbrica UVM proporciona una varietat de mètodes de creació que permeten a l'usuari instància d'un objecte amb un nom d'instància particular i d'un tipus registrat.

## Seqüenciador

El seqüenciador és responsable de tres funcions principals:
* Posa el DUV (Design Under Verification) i l'entorn de verificació en un estat d'inicialització
* Configuració de l'entorn de verificació i DUV
* Tota la generació d'escenaris DUV

### Inicialització

En aquesta etapa, el DUT (Device Under Test) i l'entorn en què es troba s'han d'establir en les condicions desitjades abans de la simulació. Probablement, això inclou:
* Càrrega de memòria, amb qualsevol tipus de condicions inicials necessàries
* Configuració de pins al DUT, com ara potència i alta impedància
* Registreu els paràmetres que no es poden alterar durant la simulació, com ara bits de mode o si part de l'entorn reg
* Configuració dels components de verificació que no es poden modificar durant la simulació

## Marcador
### Descripció

Un marcador es pot implementar de diverses maneres. En termes generals, un marcador pren les entrades i sortides del DUT, determina quina hauria de ser la relació entrada-sortida i jutja si el DUT s'adhereix a l'especificació. Aquesta relació entrada-sortida s'especifica sovint per un model, anomenat predictor. El predictor es pot implementar en un llenguatge de programació de nivell superior, com SystemC.

### Detalls d'implementació

En el VLSI modern, un DUT pot tenir múltiples interfícies. Cadascuna d'aquestes interfícies pot tenir diferents objectes UVM associats. Per exemple, si el DUT és el xip complet, pot haver-hi interfícies separades per a PCI, Ethernet i altres estàndards de comunicació. El marcador i el monitor d'una interfície PCI seran diferents dels de la interfície Ethernet. Els diferents objectes UVM es poden organitzar com a membres d'una classe d'embolcall coneguda com a agent. Els agents passius només analitzaran els valors de port de la interfície i haurien de contenir un membre del monitor. Els agents actius impulsaran els ports i haurien de contenir un membre del controlador, potser a més d'un membre del monitor.

### Detalls d'implementació

Les classes d'agent UVM s'implementen com a subclasses de la classe uvm_agent, que és una subclasse de uvm_component. Igual que uvm_scoreboard, uvm_agent és lleuger en termes de mètodes de classe. Els seus únics mètodes de classe són el constructor "new" i el mètode "get_is_active". Si l'agent s'utilitza per conduir ports, get_is_active retorna UVM_ACTIVE. En cas contrari, get_is_active retorna UVM_PASSIVE.

## Controlador
### Descripció

Els ítems de la seqüència d'una prova es descriuen de manera abstracta. Per exemple, si el DUT és un fitxer de registre, pot tenir ports per a una adreça de lectura i una adreça d'escriptura. L'objecte d'element de seqüència pot tenir variables de membre per a l'adreça de lectura i l'adreça d'escriptura. Tanmateix, aquests valors s'han de convertir eventualment en bits als pins d'entrada del DUT. Fins i tot pot haver-hi una codificació exòtica utilitzada en proporcionar l'estímul al DUT que s'hauria d'abstraure de la resta de l'agent. La responsabilitat del conductor és prendre aquests elements de seqüència i proporcionar l'estímul adequat als ports del DUT.

### Detalls d'implementació

Les classes de controladors UVM s'implementen com a subclasses de la classe uvm_driver, que és una subclasse de uvm_component.
* Agent: un contenidor que emula i verifica els dispositius DUT
* Bloqueig: una interfície que bloqueja les tasques d'altres interfícies fins que es completa
* DUT - Dispositiu en prova, què esteu provant realment
* DUV - Dispositiu en verificació
* Component: una part de la propietat intel·lectual de verificació que té interfícies i funcions.
* Transactor - vegeu el component
* Configuració de l'entorn de verificació: aquells paràmetres del DUT i de l'entorn que es poden alterar mentre s'executa la simulació
* VIP - verificació de propietat intel·lectual

## Referències

* ↑ Admin. «UVM Tutorial» (en anglès britànic). [Consulta: 6 abril 2024].
* ↑ «UVM - Universal Verification Methodology» (en anglès americà). [Consulta: 6 abril 2024].
* ↑ «Universal Verification Methodology (UVM) 1.2 User's Guide» (en anglès).
* ↑ «UVM Factory» (en anglès).
* ↑ «UVM Rapid Adoption: A Practical Subset of UVM» (en anglès).
* ↑ «UVM Sequence item» (en anglès).