În figura de mai jos este descris un mic procesor capabil sa execute 3 instrucțiuni: LOADC,
care încarcă o constanta intr-un registru, ADD, care aduna valorile stocate in doua registre si salvează
rezultatul într-un al treilea si SUB, care face diferența dintre doua registre si salvează rezultatul într-un
al treilea.
Pentru a știi ce trebuie sa facă, un procesor are nevoie de o instrucțiune, un sir de biți ce
codează informații despre:
• tipul instrucțiunii: câmpul opcode = instruction [7:6]. Acest câmp va fi 2’b00 pentru
LOADC, 2’b10 pentru ADD si 2’b11 pentru SUB, indiferent de operanzi.
• adresa registrului la care se va scrie rezultatul: câmpul dest = instruction[5:4].
• adresa registrului in care este stocat primul operand pentru instrucțiunile aritmetice:
câmpul addr1= instruction [3:2].
• adresa registrului in care este stocat cel de-al doilea operand pentru instrucțiunile
aritmetice: câmpul addr2= instruction [1:0].
• data ce va fi încărcată in registru in cazul LOADC: data = instruction[3:0]
Exemplu: instruction = 8’b10110001 => opcode = 2’b10 (ADD), dest = 2’b11, addr1 = 2’b00, addr2
= 2’b01 => Reg[3] = Reg[0] + Reg[1]
1
1) Implementarea circuitului (15p - HDL):
Obs: Folosiți pentru implementare template-urile listate cu VERDE de mai jos, astfel
încât s respectați întocmai denumirile semnalelor de pe interfețe si numele modulelor.
Toate semnalele cu funcția de reset sunt sincrone si active in 0 (de aceea sunt denumite nreset)
2
2) Modul de testare a circuitului PROCESOR (10p - SIM):
Implementați un modul de test PROCESSOR_TB prin care generați la intrarea modulului
testat o secvența de instrucțiuni astfel încât sa se realizeze următorul algoritm:
• Încarcă in REGFILE la adresa 0 o constanta.
• Încarcă in REGFILE la adresa 1 o constanta diferita de cea de la adresa 0.
• Calculează suma celor doua constante prin ADD (REGFILE[0] + REGFILE[1]) si pune
rezultatul in REGFILE la adresa 2.
• Calculează diferența celor doua constante prin SUB (REGFILE[0] - REGFILE[1]) si pune
rezultatul in REGFILE la adresa 3.
Obs: Instrucțiunile au nevoie de doi cicli de ceas pentru a fi complet executate, așadar acestea
trebuie sa se succeadă la fiecare doi cicli de ceas.
3) Răspundeți in scris pe o pagina A4 si încărcați o singura poza (eg, făcută cu telefonul mobil) cu
răspunsurile în assignament-ul ARG (5p - ARG):
a) Care este legătura dintre numărul de biți de selecție ai unui multiplexor si numărul de intrări?
b) Care sunt parametrii unei memorii ROM, ce înseamnă ei (eg. dacă vi se spune ca e o memorie de
ROM de MxN) si cum calculam capacitatea de stocare (in biți) in funcție de aceștia?
c) Desenați graful automatului CONTROL, evidențiind si valorile ieșirilor pentru fiecare stare.
d) Ce tip de automat este CONTROL? Mealy sau Moore? De ce?
e) Daca PROCESSOR-ul ar trebui sa recunoască in total 10 instrucțiuni diferite, care este numărul
minim de biți ai opcode pentru a putea coda toate aceste instrucțiuni?