Observaţii
Interconectarea tuturor resurselor se realizează prin intermediul unei magistrale, MAG, care constituie suportul fizic de comunicație între aceste resurse. Dimensiunea magistralei este de 16 linii. Deoarece magistrala este în totalitate pasivă (este un set de conductori), un singur cuvânt de informație poate exista pe magistrală la un moment dat.
Deoarece timpul de acces la memoria M este relativ mare (de ordinul zecilor de nanosecunde) procesorul dispune de 8 registre generale de câte 16 biți, fiecare ce lucrează la frecvența de ceas a procesorului. În tabelul de mai jos sunt sumarizate funcțiile acestora:
Registrul | Funcția |
---|---|
RA, RB, RC | La dispoziția programatorului pentru stocarea operanzilor. RA este folosit în lucrul cu porturile. |
IS | Indicatorul de stivă. |
XA, XB | Se pot folosi pentru stocarea operanzilor. Sunt folosiți pentru adresarea memoriei ca și registre index. |
BA, BB | Se pot folosi pentru stocarea operanzilor. Sunt folosiți pentru adresarea memoriei ca și registre de bază. |
Unitatea aritmetică logică (UAL) realizează operațiile aritmetice și logice ale calculatorului didactic. Ea este utilizată pentru prelucrarea datelor și pentru calculul adresei efective. Unitatea aritmetică logică prelucrează operanzi pe 16 biți reprezentați în cod complementar. Caracteristicile rezultatului (zero, par, transport și depășire) sunt depuse într-un registru de indicatori IND, în urma execuției oricărei instrucțiuni aritmetice-logice.
Memoria este utilizată pentru a păstra informații reprezentând date sau instrucțiuni. Memoria M este o matrice de elemente de memorare organizată într-un spațiu de adresare unic de 65536 cuvinte a câte 16 biți fiecare. Astfel, capacitatea memoriei este de 64Kcuvinte x 2 octeti = 128 KB.
Registrul de adresare a memoriei, AM, păstrează adresa celulei de memorie la care se face acces la un moment dat. Când se dorește realizarea unei operații de citire din memorie, adresa solicitată va fi depusă în acest registru, iar unitatea de comandă va lansa comanda «Memory Read». După un anumit timp, memoria va furniza pe magistrală cuvantul de la adresa solicitată. Analog, când se dorește să se scrie la o anumită adresă din memorie un cuvant, aceasta este depusă în registrul AM, datele de scris sunt activate pe magistrală, iar unitatea de comandă va lansa comanda «Memory Write».
Registrul contor program CP este utilizat pentru păstrarea adresei instrucțiunii ce urmează să se execute după terminarea execuției instrucțiunii curente. Registrul CP va fi inițializat cu o valoare dată la pornirea sau resetarea sistemului. După încărcarea fiecarei instrucțiuni, el se va incrementa pentru a marca avansul la următoarea instrucțiune. În cazul în care instrucțiunea executată este una de salt, adresa de salt va fi încărcata în CP în urma execuției instrucțiunii.
Registrul de instrucțiuni RI păstrează instrucțiunea în curs de execuție. Conținutul său este folosit de unitatea de comandă în vederea generării semnalelor de comandă pentru toate resursele.
Registrul de indicatori constituie o grupare a unor flag-uri provenite din rezultatele instrucțiunilor de tip aritmetico-logic. Registrul IND permite unei instrucțiuni să folosească informații rezultate în urma execuției unei instrucțiuni anterioare.
Spre exemplu, dacă se dorește efectuarea unei sume cu operanzi pe 32 de biți, din moment ce dimensiunea procesorului este 16 biți, este nevoie să se prelucreze pe rând octeții inferiori, apoi octeții superiori. Cei doi operanzi vor ocupa două adrese consecutive de memorie, fie ele 0xA16, 0xA17 pentru primul, respectiv 0xA18, 0xA19 pentru cel de-al doilea. Suma va fi depusă la adresele 0xA20, 0xA21.
Registrele temporare T1 și T2 sunt utilizate pentru a păstra operanzii unei operații executate în unitatea aritmetică logică, precum și rezultate intermediare la calcularea adresei efective. Ele nu sunt accesibile în mod explicit programatorului.
UAL fără registre temporare
În acest caz, ambii operanzi precum și rezultatul operației ar trebui să se găsească simultan pe magistrală, ceea ce este imposibil.
Subsistemul de intrări și ieșiri permite procesorului comunicația cu mediul extern prin intermediul dispozitivelor periferice. Subsistemul este format din interfețe (spre exemplu interfațele serială, paralelă, IDE, USB, etc.) capabile să comunice cu dispozitivele periferice în conformitate cu un standard. Aceste interfețe includ un set de registre (de date/stări/comenzi) pentru comunicația cu procesorul. De exemplu, când procesorul dorește să transmită un cuvânt de date prin interfața USB, el va depune în registrul de date asociat interfeței USB cuvântul respectiv, apoi va scrie în registrul de comenzi comanda de transmisie. Fiecare astfel de registru este identificat printr-o adresă unică în sistem și poartă numele de port de intrare/ieșire. Așadar, totalitatea registrelor asociate interfețelor din sistem (porturilor) este echivalentă cu o memorie în care fiecare adresă este asociată unei interfețe.
Întrucât subsistemul de intrări/ieșiri apare procesorului ca o memorie în care fiecare locație reprezintă un port asociat unei interfețe, ca și în cazul memoriei este nevoie de un registru de adrese. Acesta va fi folosit pentru a stoca adresa portului cu care se dorește să se comunice. Spre exemplu, atunci când procesorul vrea să transmită ceva pe interfața paralelă, el va depune în registrul AIE valoarea 0x378 (ce identifică portul asociat interfeței paralele), va activa pe magistrală cuvantul de date ce se dorește a fi transmis, iar unitatea de comandă va lansa semnalul «I/O Write» ce va determina încărcarea cuvântului în registrul interfeței paralele.
Toate resursele prezentate până în acest punct formează unitatea de execuție. Unitatea de comandă dirijează aceste resurse pentru a executa o instrucțiune sau o alta. Spre exemplu, în cazul instrucțiunii ADD RA, RB unitatea de comandă va genera urmatoarea secvență de semnale:
Cu alte cuvinte, unitatea de comandă este cea care controlează funcționarea procesorului. Ea dirijează întreg procesul de citire-interpretare-execuție a instrucțiunilor.
Modurile de adresare reprezintă modalitatea prin care se poate specifica adresa efectivă a operanzilor. Instrucțiunile calculatorului didactic pot prelucra maxim doi operanzi ce se pot găsi:
Modurile de adresare permise de calculatorul didactic sunt tipice arhitecturilor CISC, fiind derivate din arhitectura standard x86. În total, procesorul permite 11 moduri de adresare, ceea ce îi conferă o foarte bună flexibilitate în programare. Pentru o mai ușoară înțelegere, le vom structura astfel:
Specificarea operandului | Moduri de adresare |
Operandul nu se găseşte în memorie | Adresare directă la registru Adresare imediată |
Operandul e specificat doar prin deplasament | Adresare directă Adresare indirectă |
Operandul e specificat doar prin registre | Adresare indirectă prin registru Adresare indirectă prin suma de registre Adresare indirectă prin suma de registre cu autoincrementare Adresare indirectă prin suma de registre cu autodecrementare |
Operandul e specificat prin registre și deplasament | Adresare Bazată Adresare Indexată Adresare Bazată Indexată |
În continuare vor fi prezentate și discutate aceste moduri de adresare.
Operandul se găseşte în RG.
Exemplu:
MOV RA, RB
Instrucțiunea are ca efect încărcarea în registrul RA a valorii din registrul RB.
Operandul este specificat în instrucțiune.
Exemplu:
MOV RA, 7
Instrucțiunea va avea ca efect încarcarea valorii “7” în registrul RA. “7” poartă numele de operand imediat.
Adresa efectivă este specificată în instrucțiune.
Exemplu:
MOV RA, [12]
Instrucțiunea va încărca valorea aflată în memorie la adresa “12” în registrul RA. “12” poarta numele de deplasament.
Adresa efectivă se citește din memorie, din locația a cărei adresă este specificată în instrucțiune.
Exemplu:
MOV RA, [[12]]
Instrucțiunea are ca efect încărcarea valorii aflată la adresa ce se găsește în memorie la adresa “12”. Acest mod de adresare seamană foarte bine cu pointerii din C. La adresa “12” se găsește pointer-ul către operand.
Partea practică a acestui laborator constă în realizarea unei implementări incipente a calculatorului didactic. Scheletul de laborator cuprinde structura generală a calculatorului împreună cu toate modulele folosite, oferite sub formă binară.
Interfață registru
addr
identifică registrul selectat (dintre cele 8) pentru citire/scriere. Corespondența dintre valoarea lui addr
și registrul selectat este dată de prima și, respectiv ultima coloană a celui de-al doilea tabel din cheat-sheet.disp_addr
și disp_out
sunt folosite pentru afișare/debugging. disp_out
va trebui să aibă valoarea memorată de registrul selectat de disp_addr
în momentul curent. În mod normal aceste semnale nu sunt prezente într-un calculator. oe
și trebuie să fie asincrone: valoarea disponibilă pe disp_out
va în orice moment egală cu valoarea memorată de registrul selectat cu disp_addr
. Efectul lui disp_addr
trebuie să fie imediat și nu se va aștepta tranziția semnalului de ceas. Testarea implementării se face pe placa de laborator, scheletul de cod conținând deja o variantă binară a tuturor modulelor necesare pentru functionare. Această variantă binară este înlocuită automat în momentul în care completați conținutul modulelor cerute cu implementarea voastră.
Memoria calculatorului didactic este creată cu ajutorul unui IP core pentru RAM oferit de Xilinx și este inițializată din conținutul fișierului calc_didactic/ram.coe, care codifică programul descris de fișierul calc_didactic/ram.asm. La prima compilare acest core pentru RAM trebuie generat, împreună cu un alt core folosit pentru afișarea VGA. Răspundeți cu Yes în momentul în care sunteți întrebați dacă doriți regenerarea core-ului. Veți fi întrebați de două ori, pentru cele două core-uri folosite.
Scheletul permite afișarea stării resurselor interne ale calculatorului didactic. În mod implicit această afișare este făcută pe portul VGA. Pentru a vedea aceste informații conectați un monitor la portul VGA al plăcii de laborator. O a doua modalitate de a vizualiza aceaste informații este prin intermediul ecranului LCD text prezent pe placă. În acest caz trebuie însă să modificați conținutul fișierului top_calc_didactic.v pentru a ruta afișarea către ecranul LCD. Pentru aceasta schimbați valoarea parametrului lcd_ui
, de la linia 47, în 1, apoi recompilați proiectul.
Scheletul permite următoarele modalități de interacțiunea cu calculatorul didactic:
Butoanele folosite pentru controlarea calculatorului didactic