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.
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õistd_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
- 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.
- 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.
- 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.
- 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).