Last modified: 2017-10-25 13:25:45

ALU disain ja süntees

ALU ehk aritmeetika-loogika seade on tuttav juba Arvutite ainest.

Antud praktikumi eesmärgiks on iseseisvalt koostada VHDL keeles nelja operatsiooni teostav ning neljabitiseid arve töötlev ALU. Joonisel 1 on ALU struktuurskeem. ALU operatsioonid on igale tudengile ettemääratud ning leiab lehekülje lõpust.

Joonis 1. ALU struktuurskeem.

Joonis 1. ALU struktuurskeem.

Töö käik

  • Mõista operatsioone, mida sinu ALU peab teostama. Iga operatsioon ei pruugi teostamiseks kasutada mõlemat sisendit (A ja B).
  • Töö paremaks alustamiseks on eelnevalt juba valmis tehtud testpingi, topleveli ja funktsiooni 1 struktuur.
    • OLEM – ehk TOPLEVEL peaks sisaldama endas alamkomponente Funktsioon 1-4 ja multipleksor,;
    • TESTPINK – lisada teste, et kõik funktsioonid saaks testitud vähemalt 4 erineva andmekomplektiga;
    • FUNKTSIOON 1 – näidis funktsioon, väljund o’le omistatakse sisendi a väärtus.
  • Programmeeri ALU teostama vastavaid operatsioone.
    • ALU peab olema programmeeritud struktuurselt (5 komponenti) nagu näidatud Joonisel 1.
    • Funktsiooni 1 programmeerimisel võib kasutada teeki std_logic_unsigned või std_logic_arith.
  • Programmeeri testpink nii, et iga operatsioon saaks testitud. Ühtlasi võiks igal operatsioonil olla vähemalt 4 testi. Soovituslik on testida üks eriolukord (summeerides nulle) ja üks tavaline (2+2=4).
  • Koostada nõutud vormis aruanne, mis peab sisaldama sisulist selgitust ALU tööpõhimõttest ning teostatavatest operatsioonidest. ALU koodi copy-paste ilma põhjaliku selgitusega = 0 punkti. Aruandes peaks olema eelkõige olulisemad tudengi programmeeritud lõigud koodist ning nende selgitused lisaks üldisele ülesande-ALU tööpõhimõtte/kasutuse selgitusele. Funktsiooni 4 selgituseks lisada enda väljaarvutatud funktsiooni tõeväärtustabel.

Ülesannete kirjeldused

  1. Funktsioon 1
    • A cmp B (võrdlustehe) – Sisendite võrdlemine. Kui A > B väljund 0010, kui A = B väljund 0000, kui A < B väljund 0001.
    • A + B (aritmeetiline liitmine) – Sisendite A ja B summeerimine, ülekannet madalamast järgust ei ole ning lippu ületäitumise kohta ei ole vaja.
    • A – B (aritmeetiline lahutamine) – Sisendi B lahutamine sisendist A. Lihtsuse huvides olgu A alati suurem kui B, mis tähendab, et laenulippu kasutada vaja ei ole.
    • A, B cnt 1 – Sisenditest A ja B ühtede loendamine. Näiteks A = 1100 ja B = 0111, siis väljund = 5.
    • A, B cnt 0 – Sisenditest A ja B nullide loendamine. Näiteks A = 1100 ja B = 0111, siis väljund = 3.
  2. Funktsioon 2
    • shr A (nihe paremale) – Sisendi A nihutamine ühevõrra paremale ning vasakult tuleb sisse väärtus 0. Näiteks A = 0110 -> shr (A) = 0011.
    • shl A (nihe vasakule) – Sisendi A nihutamine ühevõrra vasakule ning paremalt tuleb sisse väärtus 0. Näiteks A = 0110 -> shl (A) = 1100.
    • rol A (ringnihe vasakule) – Sisendi A nihutamine ühevõrra vasakule ning paremalt tuleb sisse sisendi A kõige kõrgem bitt. Näiteks A = 1001 -> rol (A) = 0011.
    • ror A (ringnihe paremale) – Sisendi A nihutamine ühevõrra paremale ning vasakult tuleb sisse sisendi A kõige madalam bit. Näiteks A = 1001 -> ror (A) = 1100.
  3. Funktsioon 3 – NB! B sisendi ülemisi bitte peab eirama!
    • clr A, B (seada sõna A B-nda biti väärtuseks ‘0’) – Sisend B saab omada väärtusi (xx tähistab, et vastavate bittide väärtus meid ei huvita) xx00, xx01, xx10, xx11, mis määravad ära, mitmes bitt A-st keeratakse nulliks. Näiteks A = 1111, B = xx10 (kümnendkoodis 2, ehk siis kolmas bitt), clr A, B = 1011.
    • set A, B (seada sõna A B-nda biti väärtuseks ‘1’) – Sisend B saab omada väärtusi (xx tähistab, et vastavate bittide väärtus meid ei huvita) xx00, xx01, xx10, xx11, mis määravad ära, mitmes bitt A-st keeratakse üheks. Näiteks A = 0000, B = xx11 (kümnendkoodis 3, ehk siis neljas bitt), set A, B = 1000.
    • xor A, B (inverteerida sõna A B-nda biti väärtus) – Sisend B saab omada väärtusi (xx tähistab, et vastavate bittide väärtus meid ei huvita) xx00, xx01, xx10, xx11, mis määravad ära, mitmes bitt A-st keeratakse ümber. Näiteks A = 0110, B = xx01 (kümnendkoodis 1, ehk siis teine bitt inverteeritakse), xor A, B = 0100.
  4. Funktsioon 4
    • Programmeerida väljund O vastavalt tudengi harjutustunni kodutöö ülesande funktsiooniga. Sisendina kasutada sisendit A, sisend B jääb kasutamata. Väljund võib olla nii tõeväärtustabeli põhine kui ka loogika funktsioon (minimeeritud lahendus ei ole nõutud).

Ülesannete tabel