Assign-lauseita käytetään arvojen ohjaamiseen verkossa. Ja sitä käytetään myös mm Tietovirran mallinnus .
Johdin- tai tietotyyppiset signaalit vaativat jatkuvan arvon määrittämisen. Niin kauan kuin +5V akku on kytkettynä johdon toiseen päähän, johdon toiseen päähän kytketty komponentti saa tarvittavan jännitteen.
Tämä konsepti on toteutettu assign-lauseella, jossa mitä tahansa johtoa tai muuta vastaavaa johtoa (tietotyyppejä) voidaan ajaa jatkuvasti arvolla. Arvo voi olla joko vakio tai signaaliryhmästä koostuva lauseke.
Syntaksi
Osoitussyntaksi alkaa avainsanalla assign, jota seuraa signaalin nimi, joka voi olla joko signaali tai eri signaaliverkkojen yhdistelmä.
The ajovoimaa ja viive ovat valinnaisia ja niitä käytetään enimmäkseen tietovirran mallintamiseen kuin syntetisointiin todelliseksi laitteistoksi.
Oikean puolen signaali arvioidaan ja osoitetaan verkkoon tai verkkojen ilmaisuun vasemmalla puolella.
assign = [drive_strength] [delay]
Viivearvot ovat hyödyllisiä määritettäessä viiveitä porteille, ja niitä käytetään mallintamaan ajoituskäyttäytymistä todellisessa laitteistossa. Arvo sanelee, milloin netto tulee määrittää arvioidulla arvolla.
säännöt
Joitakin sääntöjä on noudatettava määrityslauseketta käytettäessä:
- LHS:n tulee aina olla skalaari, vektori tai skalaari- ja vektoriverkkojen yhdistelmä, mutta ei koskaan skalaari- tai vektorirekisteri.
- RHS voi sisältää skalaari- tai vektorirekistereitä ja funktiokutsuja.
- Aina kun jonkin RHS:n operandin arvo muuttuu, LHS päivitetään uudella arvolla.
- Assign-lauseita kutsutaan myös jatkuviksi osoitteiksi.
Määritä reg-muuttujat
Emme voi ajaa tai määrätä reg tyyppiset muuttujat assign-käskyllä, koska reg-muuttuja pystyy tallentamaan tietoja eikä sitä ajeta jatkuvasti.
Reg-signaaleja voidaan ohjata vain proseduurilohkoissa, kuten aina ja alku.
Implisiittinen jatkuva osoitus
Kun assign-käskyä käytetään antamaan annetulle verkolle jokin arvo, sitä kutsutaan an selkeää toimeksianto
Jos verkon aikana tehtävä tehtävä ilmoitetaan, sitä kutsutaan an implisiittinen toimeksianto.
wire [1:0] a; assign a = x & y; // Explicit assignment wire [1:0] a = x & y; // Implicit assignment
Yhdistelmälogiikkasuunnittelu
Tarkastellaan seuraavaa digitaalista piiriä, joka on tehty yhdistelmäporteista ja vastaavasta Verilog koodi.
Yhdistelmälogiikka edellyttää, että tuloja ohjataan jatkuvasti lähdön ylläpitämiseksi, toisin kuin peräkkäiset elementit, kuten varvastossut, joissa arvo kaapataan ja tallennetaan kellon reunaan.
Osoitettu lauseke täyttää tarkoituksen, koska lähtö o päivitetään aina, kun jokin oikeanpuoleisista tuloista muuttuu.
// 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
Laitteistokaavio
Suunnittelun ja synteesin jälkeen yhdistelmäpiiri käyttäytyy samalla tavalla kuin assign-käskyn mallintaa.
Signaalista o tulee 1 aina, kun RHS:n yhdistelmälauseke tulee todeksi.
Vastaavasti o:sta tulee 0, kun RHS on epätosi. Lähtö o on X välillä 0ns - 10ns, koska tulot ovat X samana aikana.