Lär dig Verilog: En kort Tutorial serie på Digital elektronik Design med FPGAs och Verilog HDL (18 / 21 steg)
Steg 18: VM 4.1: den alltid blockera
Om någon nämner orden "Verilog" och "Beteende" i samma mening, bör din hjärna förhoppningsvis tänker genast "alltid block". Det finns inte en sann översättning mellan en alltid block och något i ett språk som C/C++, men konceptet är inte svårt att förstå. Men om du måste ha en jämförelse med C/C++, ett block är alltid som ett tag loop som har tillstånd när man ska utvärdera är en röra av om uttalanden.I ett nötskal, ett block är alltid en del av Verilog kodat logik som beräknas varje gång en utlösaren villkoret ändras.
Vad betyder det? Låt oss titta på en grundläggande alltid blocket för en krets med två ingångar, sw0 och sw1.
alltid @ (sw0, sw1)
börja
slutet
Det finns ingen kropp kod till detta block, men låt oss bortse från det för nu. Märka den ' att intäkterna "alltid" ("alltid" är ett Verilog sökord). Lägg också märke till uttrycket inom parenteser: "sw0, sw1".
Med hjälp av en enkel tabell med sanningen, vi vet att för två ingångar finns det högst 4 unika stater insatsvaror kunde vara i: båda logic hög, både logik låg och en hög en låg för båda ingångarna.
Den "alltid @ (sw0, sw1)" i huvudsak säger "om när som helst någon ingång ändrar sitt tillstånd (dvs ändra raden på sanningen bordlägger) sedan omvärdera följande kod:".
Detta skulle inte vara alltför enkelt att skriva i C/C++, men i Verilog är det så enkelt. En alltid block kommer att omvärdera koden inom dess tillämpningsområde (mellan begin och end-satser efter "alltid") när en av de listade utlösare (listan kallas en känslighet lista) ändras antingen från en logik en en logik noll eller från en logik noll till en logik en. Kan du tänka på en gemensam logik krets komponent eller två (eller ett gäng!) som enkelt kan implementeras i en alltid blockera?
Det klassiska exemplet är multiplexor, eller, mux. När någon av de utvalda ingångarna ändrar, har mux åter besluta vad ingång för att passera till utgången. Nästa par handledning modulerna täcka vilken typ av kod kan vi skriva "insidan" en alltid blockera.
Pro tip: endast en alltid block per Verilog modul (Lasse fil). Justera känsligheten listan istället för att försöka göra ett annat block.
Tips (kopia): du kan bara ange värden för en reg i en alltid blockera, ingen tilldela värden för att ange tråd. Du kan, men senare tilldela kabeln för att motsvara den reg värde.