FPGA-verifikasjon:

De nye UVVM-mekanismene gir bedre kontroll og innsikt i FPGA-verifikasjon – med integrerte assertions, deteksjon av uventet aktivitet, sikker avslutningsdeteksjon og enklere testbenk‑oppsett.

Nytt i UVVM for FPGA verifikasjon

UVVM (Universal VHDL Verification Methodology) har gjennom årene etablert seg som en praktisk og skalerbar verifikasjonsmetodikk for VHDL-baserte FPGA-design. Her skal vi se på noe av det som er nytt i UVVM.

Publisert Sist oppdatert
Marius Elvegård, Inventas.

Metodikken kombinerer velkjente verifikasjonskonsepter med en oversiktlig struktur som passer naturlig inn i typiske FPGA-utviklingsløp. I senere år har økende designkompleksitet og strengere krav til verifikasjonskvalitet avdekket flere tilbakevendende utfordringer i tradisjonelle testbenker. Disse inkluderer inkonsekvent bruk av assertions, begrenset synlighet av utilsiktet aktivitet og usikkerhet rundt når verifikasjonen faktisk er avsluttet. Å løse disse utfordringene har vært viktig i den siste videreutviklingen av UVVM. Som en del av et ESA-støttet utviklingsløp har vi derfor innført flere nye mekanismer som skal øke robusthet, forutsigbarhet og metodisk struktur i større verifikasjonsmiljøer. Disse tilleggene omfatter UVVM-integrerte assertions, deteksjon av uventet aktivitet, testbenk-fullføringsdeteksjon og forenklet testbenk-oppsett gjennom nye context-filer. Denne artikkelen presenterer de siste UVVM-utvidelsene og forklarer hvordan de kan benyttes for å forbedre verifikasjonskvaliteten i FPGA-prosjekter.

UVVM Assertions

Assertions er en veletablert verifikasjonsmekanisme i FPGA-utvikling og brukes vanligvis til å uttrykke antakelser, begrensninger og forventet adferd direkte i koden. En tradisjonell assertion verifiserer at en gitt tilstand holder på et bestemt tidspunkt, og rapporterer en melding dersom dette ikke er tilfelle. Tradisjonelle assertions er kraftfulle, men opptrer normalt ganske isolerte: de rapporterer direkte til simulatoren og er ikke naturlig integrert i resten av verifikasjonsmiljøet. Dette kan ofte føre til en inkonsekvent oppførsel, hvor noen kontroller stopper simuleringen, andre gjør det ikke, og enkelte kan produsere store mengder logg-data, mens andre er lette å overse. Å håndtere assertion-resultater konsistent på tvers av simuleringer og regresjonskjøringer kan derfor være utfordrende.

UVVM Assertions løser dette ved å integrere assertions i UVVMs logging- og alarminfrastruktur. I stedet for å produsere egne simulatormeldinger rapporterer UVVM Assertions gjennom det samme logg- og alert-systemet som resten av UVVM. Avvik behandles som enhver annen verifikasjonsalert og inngår i de samme tellerne og rapportene som de andre UVVM mekanismene. Dette gir testbenken full kontroll over håndteringen av assertion-avvik, inkludert om simuleringen skal stoppes og hvilket alvorlighetsnivå som skal brukes. Logging kan konfigureres slik at hver sjekk rapporteres, eller kun den første, noe som gjør det mulig å verifisere at en assertion er aktiv uten å overfylle simulerings-loggene.

UVVM Assertions dekker de mest vanlige bruksområdene i praktiske FPGA-design. Dette omfatter verdibaserte kontroller som område- og kodingstester, sekvens- og mønsterkontroller for signalrelasjoner over tid, samt vindu-baserte assertions som verifiserer oppførsel innenfor definerte tidsgrenser. Vindubaserte assertions gjør det mulig å uttrykke krav som responstider, stabilitet under transaksjoner og timeouts på en klar og lesbar måte.

Assertions kan brukes både i testbenk og syntetiserbar RTL. Når de brukes i designkode, kan de omsluttes av translateoff / translateon-pragmaer slik at de er aktive i simulering, men ekskluderes fra syntese.

Hovedfordelen med UVVM Assertions er ikke at de erstatter tradisjonelle assertions, men at de gjør assertions til en naturlig og integrert del av verifikasjonsmiljøet. Resultatet er bedre logger, tydeligere oppsummeringer og verifikasjonsresultater som er enklere å tolke og stole på

UVVM tilbyr et sett av assertion-typer som dekker verdibaserte kontroller, signalrelasjoner over tid og tidsvindu-basert timingadferd.

Deteksjon av uventet aktivitet

De fleste testbenker fokuserer på å verifisere hva som skjer når stimulus aktivt påtrykkes DUT (Device Under Test), men det som ofte ikke kontrolleres, er hva som skjer når ingen stimulus sendes. I mange FPGA-design forventes enkelte grensesnitt å forbli inaktive over lengre perioder, og uventet aktivitet i slike perioder kan indikere designfeil.

Tradisjonelle BFMs (Bus Functional Models) og VVCs (VHDL Verification Components) er svært effektive til å verifisere transaksjoner initiert av testbenken, men de oppdager normalt ikke aktivitet som DUT genererer på egen hånd. Dermed kan utilsiktede lesinger, skrivinger eller signaloverganger forbli uoppdaget.

Funksjonen for deteksjon av uventet aktivitet (Unwanted Activity Detection) håndterer dette ved at en VVC automatisk begynner å overvåke det tilhørende DUT-grensesnittet når den går i en inaktiv tilstand. Dersom DUT genererer aktivitet mens VVC-en er inaktiv, utløses en alert gjennom UVVMs alert-system. Uønsket aktivitet håndteres dermed på samme måte som andre verifikasjonsfeil.

Denne mekanismen er spesielt nyttig for å avdekke sporadiske transaksjoner eller annen uventet aktivitet som aktiverer grensesnittet på feil tidspunkt, forhold som er svært vanskelige å avdekke gjennom stimulus-basert verifikasjon alene. Alvorlighetsnivået for uønsket aktivitet kan konfigureres per VVC og styres direkte fra testbenken. Dette muliggjør tilpasning til ulike faser av verifikasjonen. For eksempel som advarsel under bring-up og som feil under regresjonstesting. Funksjonen kan også deaktiveres dersom ønskelig. Dette er spesielt nyttig i delte bussmiljøer der kun én instans forventes å være aktiv av gangen.

I perioder uten stimulus kan uventet aktivitet på grensesnittet oppstå uten å bli detektert av tradisjonelle stimulus-drevne verifikasjonsmekanismer.
Når en VVC er inaktiv, overvåker den DUT-grensesnittet og genererer en UVVM-alert dersom uventet aktivitet blir detektert.

Completion detection

Å stoppe stimulus i en strukturert verifikasjonsprosess er normalt enkelt, men for en testbenk å vite når verifikasjonen faktisk er fullført kan være vanskeligere. I testbenker med flere VVC-er og scoreboards kan en simulering fremstå som avsluttet, selv om det fortsatt finnes kommandoer som VVC-ene skal behandle, eller det er scoreboards som inneholder uverifiserte verdier.

UVVMs Completion Detection-mekanisme gir en tryggere og enklere måte å avgjøre når en UVVM-basert testbenk er ferdig. Denne mekanismen bygger på to sentrale funksjoner som er integrert i UVVM. Alle VVC-er er koblet til et sentralt VVC-aktivitetsregister og rapporterer til dette registeret både om de er aktive og om de har ventende kommandoer. Scoreboardene har et tilsvarende statusregister, der hver scoreboard rapporterer om den fortsatt inneholder forventede eller faktiske verdier som ennå ikke er blitt verifisert.

Den nye metoden awaituvvmcompletion() bruker informasjon fra registrene til å vente til alle VVC-er er inaktive og uten ventende kommandoer, og til alle scoreboards er tomme. Dersom dette oppnås før den spesifiserte timeouten går ut, regnes testen som avsluttet. Hvis ikke vil det utløses en alert og det rapporteres at testen ikke er blitt avsluttet som ventet.

Completion Detection tar bort behovet for spesiallaget sluttlogikk, faste testbenk-pauser og manuell kontroll av scoreboard-status. Mekanismen gjør det mulig for testbenken selv å avgjøre når testen er ferdig, og å rapportere når den ikke er det. På denne måten får vi en enklere testbenk-kode og enda mer pålitelige verifikasjonsresultater.

En test kan se ut til å være ferdig selv om VVC-er fortsatt har utestående kommandoer, eller scoreboards fortsatt inneholder forventede verdier som ikke er verifisert.

 

Alle VVC-er og scoreboards rapporterer status til sentrale registre. Prosedyren awaituvvmcompletion() benytter denne informasjonen til å avgjøre når testen er fullført.

Forenklet testbenk-oppsett med context-filer

På samme måte som UVVM har vokst, har også antallet biblioteker og pakker som brukes hyppig, økt. For å forenkle oppsettet i testbenkene har vi derfor lagt til et nytt sett med UVVM-context-filer. Disse filene samler ofte brukte importeringer i et mindre antall context-deklarasjoner, noe som reduserer antallet kodelinjer som kreves for å inkludere nødvendige biblioteker. Dette forbedrer ikke bare lesbarheten, men forenkler også vedlikeholdet og senker terskelen for nye UVVM-brukere.

Ofte brukte biblioteker, pakker og context-definisjoner samles i context-filer, noe som reduserer kode og forbedrer lesbarheten i testbenker.

Oppsummering

De siste utvidelsene i UVVM bygger på erfaringer fra en rekke FPGA-prosjekter. Målet har vært å tydeliggjøre hva som verifiseres, gi tryggere og mer korrekte testresultater og gjøre testbenker enklere å forstå og vedlikeholde. Med disse nye funksjonene og mekanismene får verifikasjonsingeniører et enda sterkere rammeverk å bygge testmiljøene sine på.

Powered by Labrador CMS