Opprette testtilfeller på IP-nivå som kan brukes på nytt på SoC-nivå

Kilde node: 817724

Det kan være flere grunner som kan blokkere testsakene som skal utføres, det kan skyldes at testmiljøet ikke er klart eller at det er en feil et annet sted som hindrer oss i å utføre testsaken. Det som er det blokkerende elementet her er C-basert flyt - For prosessor er hex-kode nødvendig, og vi genererer den ved hjelp av C-fil, mens verifisering av IP-nivå vanligvis er basert på SV-UVM. Men er det for enkelt å gjenbruke IP-nivå test tilfeller på SoC nivå design? Ja, det er det, og det er det vi skal diskutere.

Generelt legger vi mye arbeid i å lage begrensede tilfeldige testtilfeller ved verifisering av IP-nivå, men det blir ikke gjenbrukt på SoC-nivå. Hvordan kan vi bruke IP-nivå test tilfeller på SoC nivå med mindre ekstra innsats under test case opprettelse på IP nivå verifisering selv.

La oss først diskutere den generelle CPU-baserte SoC-nivået test case flow.

Du vil ha to filer i SoC-nivået ditt. dvs. C og System Verilog (.SV referert fremover i denne artikkelen). I C-filen skriver vi betinget / ubetinget registerskriv / les på hvilken som helst IP i SoC-utviklingen.

På SV-siden kan vi ha mye UVM-basert kode for å verifisere funksjonaliteten til IP-en, som å lage pakke fra / for VIP, startsekvenser osv. I IP-nivå-testtilfeller har vi vanligvis en fil.no “.SV”. I denne “.SV” -filen vil vi både registrere skrive / lese og UVM-basert kode som startsekvenser.

Tanken er å komme opp med en strømning der vi kan skille registrere skrive / lese og annen UVM-basert kode i to forskjellige “.SV” filer / klasser i IP-tilfelle test tilfeller. Det kan opprettes separate filer for Register skriv / les-kode (Samme som ".C" -kode i CPU-basert bekreftelse) og resten av UVM-koden (Samme som ".SV" -kode i CPU-basert bekreftelse).

Hvis vi allerede har disse to separate filene på selve IP-testtesten, kan vi konvertere filen som inneholder registerskrive / lese-kode til C-fil ved å bare bruke enkelt Perl-skript. Disse to “.SV” -klassifiserte kan kjøres som parallelle tråder under utførelse av testsaken.

La oss se på eksemplet nedenfor.

klasse i2c_mem_write_read_test utvider base_test;
oppgave kjørefase (uvm_fase fase);
i2c_vip_mem_write_seq vip_write_seq;
vip_write_seq = i2c_vip_mem_write_seq :: type_id :: create (“vip_write_seq”);

// Tilfeldig data for å konfigurere tilfeldig verdi av registeret
data = $ urandom_range (1,5);
// Konfigurer I2C slave controller register
skriveoppgave (addr, data);

// Startsekvens fra VIP for skriving
vip_write_seq.start (env.virtual_sequencer);

// Les I2C-kontrollerregister for statuskontroll
read_task (addr, read_data)
endtask
sluttklasse

Ovennevnte eksempler på testtilfelle er hva vi generelt gjør i IP-nivå-testtilfeller.

// Denne klassen inneholder VIP-sekvensrelatert kode som er den samme som “.SV” -testen i SoC

klasse i2c_mem_write_read_test utvider base_test;
oppgave kjørefase (uvm_fase fase);
i2c_vip_mem_write_seq vip_write_seq;
vip_write_seq = i2c_vip_mem_write_seq :: type_id :: create (“vip_write_seq”);

// Tilfeldig data og send den til C-siden ved hjelp av sync_method for
// konfigurere tilfeldig verdi av registeret
data = $ urandom_range (1,5);
sync_method (data);

// Vent til ferdigstillelse av konfigurasjon av kontrollerregisteret
synkroniseringsmetode ();

// Startsekvens fra VIP for skriving
vip_write_seq.start (env.virtual_sequencer);

// Vent på fullført statuskontroll av kontrollerregisteret
synkroniseringsmetode ();
endtask
sluttklasse

Nå vil vi omarkitektur denne IP-nivå test saken slik at den kan brukes i SoC nivå også uten noen vesentlige modifikasjoner / innsats. Vi vil oppnå dette ved å opprette to separate “.SV” -filer som diskutert innledningsvis med en fil inneholder register- / leseinformasjon og annet relatert til VIP-sekvens fra eksemplet ovenfor.

// Denne klassen inneholder registerskrive / lese-relatert kode som er den samme som C-testen i SoC

klasse i2c_mem_write_read_test_ctest utvider i2c_mem_write_read_test;
oppgave kjørefase (uvm_fase fase);

// sync_method for å få tilfeldig verdi fra SV-siden
data = synkroniseringsmetode (sys_addr + offset);

// Konfigurer I2C slave controller register
skriveoppgave (addr, data);

// Gi kontrollen til SV-siden for å starte VIP-sekvensen
synkroniseringsmetode ();

// Vent til sekvensen fra VIP er fullført
synkroniseringsmetode ();

// Les I2C-kontrollerregister for statuskontroll
read_task (addr, read_data)

endtask
sluttklasse

Nedenfor flytdiagram beskriver kommunikasjonen mellom c og “.sv” side ved hjelp av sync_method.

sync_method kreves kl SoC nivå design fordi du trenger å ha en mekanisme som gir runtime timing kontroll for å utføre bestemte registerskriving / lesing fra prosessoren (som er i C-fil) dvs.

I eksemplet ovenfor konfigurerer vi først I2C-kontrollerens IP-registre fra C-filen, og deretter overfører vi kontrollen til ".SV" -siden for å starte VIP-sekvensen (dvs. vi kan ikke starte VIP-sekvensen på 0 tid siden kontrollerkonfigurasjonen ennå ikke er ferdig) ved hjelp av sync_metode.

På samme måte overfører vi kontrollen fra “.SV” -siden til C-filen ved hjelp av sync_method når VIP-sekvensen er fullført. I C-filen kan vi sjekke statusregisterverdien til kontrollerens IP (Kontroll av status).

Logikken til sync_method () som brukes i eksemplet ovenfor, er utenfor omfanget av denne artikkelen.

Vi kan bruke denne testflyten i IP-nivå testtilfeller, og når vi migrerer den til SoC-nivåbekreftelse, og de samme testtilfellene kan gjenbrukes ved å bare konvertere SV-filen (som inneholder register-skriv / lesekode) til C-fil ved hjelp av enkel Perl manus.

konklusjonen

Slik kan vi lage IP-nivå-testtilfeller som kan gjenbrukes på SOC-nivådesign som effektivt kan spare omtrent 30% til 70% av tiden vi brukte på å lage SOC-testsaker basert på kompleksiteten i protokoll og testcase. Hos eInfochips tilbyr vi SoC-designtjenester fra hele til ende på tvers av hele tilkoblet produktdesignflyt, fra testkonsultering og implementering til teststøtte ved utgangen av livet, noe som sikrer høy produktkvalitet, operativ fortreffelighet og smidighet. Koble oss i dag for å vite mer om våre silisiumtekniske tjenester.

Kilde: https://www.einfochips.com/blog/creating-ip-level-test-cases-which-can-be-reused-at-soc-level/

Tidstempel:

Mer fra Einfo Chips