Izjave dodjele koriste se za pokretanje vrijednosti na mreži. A koristi se i u Modeliranje protoka podataka .
Signali tipa žice ili tipa podataka zahtijevaju kontinuirano dodjeljivanje vrijednosti. Sve dok je +5V baterija priključena na jedan kraj žice, komponenta spojena na drugi kraj žice dobit će potreban napon.
Ovaj koncept je realiziran naredbom dodjele gdje se bilo koja žica ili druga slična žica (tipovi podataka) mogu kontinuirano pokretati s vrijednošću. Vrijednost može biti konstanta ili izraz koji se sastoji od grupe signala.
Sintaksa
Sintaksa dodjele počinje ključnom riječi assign, nakon koje slijedi naziv signala, koji može biti ili signal ili kombinacija različitih signalnih mreža.
The snaga pogona i odgoditi nisu obvezni i uglavnom se koriste za modeliranje protoka podataka nego za sintetiziranje u pravi hardver.
Signal na desnoj strani se procjenjuje i dodjeljuje mreži ili izrazu mreža na lijevoj strani.
assign = [drive_strength] [delay]
Vrijednosti kašnjenja korisne su za određivanje kašnjenja za vrata i koriste se za modeliranje vremenskog ponašanja u stvarnom hardveru. Vrijednost diktira kada se mreži treba dodijeliti procijenjena vrijednost.
Pravila
Tijekom korištenja naredbe dodjele potrebno je pridržavati se nekih pravila:
- LHS bi uvijek trebao biti skalarni, vektorski ili kombinacija skalarnih i vektorskih mreža, ali nikada skalarni ili vektorski registar.
- RHS može sadržavati skalarne ili vektorske registre i pozive funkcija.
- Kad god bilo koji operand na RHS-u promijeni vrijednost, LHS će se ažurirati novom vrijednošću.
- Naredbe dodjele nazivaju se i kontinuirane dodjele.
Dodijelite reg varijable
Ne možemo voziti niti dodjeljivati reg upišite varijable s naredbom assign jer reg varijabla može pohranjivati podatke i ne pokreće se kontinuirano.
Reg signali mogu se pokretati samo u proceduralnim blokovima kao što su uvijek i početni.
Implicitno kontinuirano dodjeljivanje
Kada se naredba assign koristi za dodjeljivanje date mreže s nekom vrijednošću, ona se naziva an eksplicitan zadatak
Ako je dodjela koju treba izvršiti tijekom mreže deklarirana, naziva se an implicitno zadatak.
wire [1:0] a; assign a = x & y; // Explicit assignment wire [1:0] a = x & y; // Implicit assignment
Kombinacijski logički dizajn
Razmotrite sljedeći digitalni sklop napravljen od kombinacijskih vrata i odgovarajućih Verilog kodirati.
Kombinacijska logika zahtijeva da se ulazi kontinuirano pokreću kako bi se održao izlaz, za razliku od sekvencijalnih elemenata poput japanki gdje se vrijednost hvata i pohranjuje na rubu takta.
Dodijeljena izjava zadovoljava svrhu jer se izlaz o ažurira kad god se bilo koji od ulaza na desnoj strani promijeni.
// This module takes four inputs and performs a Boolean // operation and assigns output to o. // logic is realized using assign statement. module combo (input a, b, c, d, output o); assign o = ~((a & b) | c ^ d); endmodule
Shema hardvera
Nakon razrade dizajna i sinteze, kombinacijski sklop se ponaša na isti način kao što je modeliran naredbom assign.
Signal o postaje 1 kad god kombinacijski izraz na RHS-u postane istinit.
Slično, o postaje 0 kada je RHS lažan. Izlaz o je X od 0ns do 10ns jer su ulazi X tijekom istog vremena.