Huomenna vielä kertaamme kurssilla käytettävän Verilog syntaksin yksinkertaisten kombinaatio- ja sekvenssilogiikoiden toteuttamiseksi.
Vastaavat asiat löytyvät ‘kurssikirjasta’ josta löytyy selailukappale labilta: FPGA Prototyping by Verilog Examples:Xilinx Spartan-3 Version (2008), joka on ehdottamasti paras kirja Verilogin opiskeluun. Labilta saa myös lainaksi kirjassa käytetyn Spartan-3 kehityslaudan, jos kirjan esimerkkejä haluaa kokeilla (vaatii tosin vanhemman ISE-kehitysympäristön asentamisen Vivadon rinnalle).
Eli jos itsenäinen opiskelu tuntuu sujuvan tai kaipaa kurssin lisäksi kertausta, kirjasta kannattaa käydä huolellisesti seuraavat kohdat:
- 1.3 Basic Lexical Elements and Data Types
- sallitut merkit tunnisteissa
- 1.4 Data Types
- kurssilla ei käytetä signaaleille
z
-arvoja vaan ohjataan tri-state puskureita suoraanIOBUF
-primitiivillä - katso tarkkaan taulukko 1.2
- kurssilla voidaan käyttää sääntöä: signaali on tyyppiä
reg
jos sen arvo asetetaaninitial
taialways
-lohkon sisältä, muutenwire
- 1.5 Program Skeleton
- käytämme vain eksplisiittisesti esiteltyjä signaaleja ja tämä pakotetaan laittamalla tiedostojen alkuun
default_nettype none
- 1.6 Structural Description
- käytämme aina porttien kytkemisessä nimiä (connection-by-name)
- 3.2 Operators
- opettele operaattorien symbolit, huomaa erot C-kieleen
- katso tarkkaan taulukosta 3.2 operaattorien suoritusjärjestys, lisää aina sulkuja jos olet vähänkään epävarma
- 3.3 Always Block for a Combinatorial Circuit
- käytämme kurssilla vain
always @*
-notaatiota - vältämme väärät latch-rakenteet, kun sijoitamme lohkon alussa oletusarvot kaikille siinä muutettaville signaaleille
- jos signaalin arvon laskenta ei tarvitse
if
taicase
-rakenteita, kannattaa se muuttaawire
jaassign
-rakenteeksi - kombinaatiolohkoissa käytetään sijoituksiin aina
=
(blocking assignment) - 3.7.2 Guidelines
- tärkeä lista, lue huolellisesti läpi
- 3.9.1 kohdasta listaus 3.14
- tyypillinen esimerkki puhtaasta kombinaatiologiikasta
- koska toteutus on vain yksi case rakenne, sen default haara riittää estämään latchien muodostumisen
- 4.1.1 D FF and Register
- yhden bitin muisti, kaiken sekvenssilogiikan perusta: Data Flip Flop, DFF, FF, FD, flipari, kiikku, jne.
- monen fliparin ‘väylää’ kutsutaan rekisteriksi
- rekisterin muodostuu, kun käytämme sekvenssilohkossa
always @(posedge clk)
ja<=
sijoitusta (non-blocking assignment) - huomaa että varattu sana
reg
voi määritellä sekä kombinatoorisen tai sekventiaalisen signaalin, käyttötapa ratkaisee ja siksi näiden rakenteiden noidattaminen on ehdottoman tärkeää - 7.1 Blocking Versus Nonblocking Assignment
- tarkempi selitys
=
ja<=
sijoitusten eroista - 7.2 Alternative Coding Style for Sequential Circuit
- tämä on se tyyli jota kurssilla käytetään
Jos mainitut asiat ovat jo sujuvasti hallinnassa ja kaipaa lisähaastetta, sitä löytyy kirjasta Verilog And SystemVerilog Gotchas:101 Common Coding Errors And How To Avoid Them (2007) Kirjaa ei labilla vielä ole, mutta alkuun pääsee näillä tekijän esityksillä: