Universal Verification MethodologyLa 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).[1] HistòriaEl 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.[2] FàbricaUna 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.[3] 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.[4] SeqüenciadorEl seqüenciador és responsable de tres funcions principals:
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:
MarcadorDescripció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.[5] 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. ControladorDescripció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.[6] 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.
Referències
|