Kurssi: Digitaalitekniikka, pidettiin torstaisin ajalla 2.3.2017–24.5.2018

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 suoraan IOBUF-primitiivillä
  • katso tarkkaan taulukko 1.2
  • kurssilla voidaan käyttää sääntöä: signaali on tyyppiä reg jos sen arvo asetetaan initial tai always-lohkon sisältä, muuten wire
  • 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 tai case -rakenteita, kannattaa se muuttaa wire ja assign -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ä: