System Verilog

System Verilog
Sprog klasse strukturelle (design); objektorienteret (verifikation)
Dukkede op i 2002
Forfatter Institut for Elektro- og Elektronikingeniører
Filtypenavn _ .sv
Frigøre IEEE 1800-2009 (2009-12-18)
Type system statisk, svag
Blev påvirket Verilog , Vera

SystemVerilog  er et hardwarebeskrivelses- og verifikationssprog , der er en udvidelse af Verilog-sproget .

SystemVerilog blev bygget oven på Superlog-sprogene (Accellera, 2002). Meget af funktionaliteten relateret til verifikation er taget fra OpenVera- sproget ( Synopsys ). [1] I 2005 blev SystemVerilog vedtaget som en IEEE 1800-2005 standard. [2]

I 2009 blev 1800-2005-standarden slået sammen med Verilog-sprogstandarden (IEEE 1364-2005), og den nuværende version af SystemVerilog, IEEE 1800-2009-standarden, blev vedtaget.

SystemVerilog kan bruges til at beskrive RTL som en udvidelse af sproget Verilog-2005 . Til verifikation anvendes en objektorienteret programmeringsmodel .

Konstruktioner til at beskrive hardware

Nye datatyper

SystemVerilog understøtter alle tilgængelige datatyper i Verilog og tilføjer mange nye datatyper.

Heltalsdatatyper . SystemVerilog giver nye datatyper:

Disse datatyper har to tilstande: 0 og 1. I modsætning til de tilsvarende Verilog-typer (f.eks. reg eller heltal ) kan de ikke tage værdierne 'X' og 'Z', hvilket giver mulighed for hurtigere simulering.

En multidimensional pakket array er en udvidelse og generalisering af hukommelse i Verilog:

logik [ 1 : 0 ][ 2 : 0 ] my_pack [ 32 ];

En optalt type giver dig mulighed for at give navne til numeriske konstanter, for eksempel:

typedef enum logic [ 2 : 0 ] { RØD , GRØN , BLÅ , CYAN , MAGENTA , GUL } color_t ; farve_t min_farve = GRØN ; initial $display ( "Farven er %s" , min_farve . navn ());

Dette eksempel bruger logik[2:0] som basistypen.

Strukturer og fagforeninger bruges på samme måde som i C. Ud over Verilog tilføjer SystemVerilog to nye attributter: pakket og tagget . Den pakkede attributbetyder, at alle medlemmer af strukturen er lagret kompakt i hukommelsen uden huller (det vil sige, at compileren ikke kan udføre deres justering ):

typedef struct pakket { bit [ 10 : 0 ] expo ; bittegn ; _ bit [ 51 : 0 ] mant ; } FP ; FP nul = 64 'b0 ;

Den taggede attribut giver mulighed for kontrol over, hvilket fagforeningsmedlem der bruges på et givet tidspunkt under programmets udførelse.

Procesblokke

Verilog giver en altid blokeringsproces, der afhængigt af konteksten kan beskrive forskellige typer hardware. For eksplicit at beskrive hardwaretypen tilføjer SystemVerilog 3 nye procesblokke: always_comb , always_ff , og always_latch .

Always_comb - blokken giver dig mulighed for at modellere kombinationslogik . Blokfølsomhedslisten indeholder alle de variabler, der bruges i blokken.

always_comb start tmp = b * b - 4 * a * c ; no_root = ( tmp < 0 ); ende

Altid_ff -blokken giver dig mulighed for at beskrive synkron sekventiel logik , såsom triggere :

always_ff @( posedge clk ) q <= nulstillet ? 0 : d ;

Statisk kontrollerede et-trins flip-flops (låse) er beskrevet ved hjælp af always_latch blokke:

always_latch if ( aktiver ) q <= d ;

Grænseflader

For små systemer er modulets eksterne forbindelser kompakt beskrevet ved hjælp af Verilog-porte. Store blokke i et stort system indeholder dog typisk flere tusinde porte. SystemVerilog giver en grænseflademekanisme til at gruppere porte og undgå duplikering, når porte defineres. Derudover kan grænseflader indeholde en modport- konstruktion , der specificerer retningen af ​​forbindelser. For eksempel:

interface intf ; logik a ; logik b ; modport i ( input a , input b ); modport ud ( output a , output b ); slutgrænseflade modul top ; intfi ( ); u_a m1 ( .i1 ( i )); u_b m2 ( .i2 ( i )); slutmodul modul u_a ( intf . i i1 ); tildel x = i1 . a ; tildel y = i1 . b ; slutmodul modul u_b ( intf . ud i2 ); tildele i2 . a = 1 _ tildele i2 . b = 0 _ slutmodul

Verifikationskonstruktioner

Følgende konstruktioner kan ikke syntetiseres . De bruges til at implementere testmiljøer, påstande i kode under test og til at kontrollere kodedækning .

Verifikationsdatatyper

Strengetypen kan bruges til at håndtere strenge med variabel længde, for eksempel :

string s1 = "Hej" ; string s2 = "verden" ; streng p = ".?!" ; streng s3 = { s1 , "," , s2 , p [ 2 ]}; // string concatenation $display ( "[%d] %s" , s3 . len (), s3 ); // Vil udskrive: "[13] Hej, verden!"

Noter

  1. Rich, D. "The evolution of SystemVerilog" IEEE design og test af computere, juli/august 2003
  2. IEEE godkender SystemVerilog, revision af Verilog (downlink) . Dato for adgang: 26. januar 2013. Arkiveret fra originalen 29. september 2007. 

Litteratur

Links