Sunteți pe pagina 1din 3

Test 2 Aplicații CID 2021

Timp total de lucru: 115 minute

Î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)

a) Implementarea INSTR_REG: acest modul are in componenta un registru pe 8 biți cu reset


sincron activ in 0 si write enable activ in 1, ce salvează valoarea semnalului de intrare
instruction atunci când we este 1. Ieșirile modulului sunt magistrale ce extrag grupuri de biți ai
acestui registru: opcode, addr1, addr2, dest si data conform informațiilor de mai sus.
b) Implementarea MUX: multiplexor cu doua intrări pe 4 biți si un bit de selecție ce va selecta
ieșirea data a INSTR_REG atunci cand selecția este 0 si ieșirea result a ALU, atunci când
selecția este 1.
c) Implementarea REGFILE: Memorie de tip RAM 4x4 (4 locații de 4 biți) fără reset cu doua
magistrale de adrese pentru citire (addr1 si addr2) si una pentru scriere (dest). Ieșirile op1 si
op2 vor fi datele citite asincron din aceasta memorie de la adresele addr1, respectiv addr2.
Operația de scriere este sincrona si va consta in scrierea datelor venite pe data_in la adresa
dest. De asemenea, scrierea este condiționată de semnalul we, activ in 1.
d) Implementarea ALU: unitate aritmetico-logică ce realizează operațiile ADD (op1 + op2) si
SUB (op1 – op2). Un eventual carry/borrow este ignorat.
e) Implementarea CONTROL: automat cu 3 stări ce controlează funcționarea circuitului prin
semnalele de write enable ale INSTR_REG si REGFILE si prin semnalul de selecție al MUX.
Cele 3 stări sunt:
• FETCH: stare de reset specifica tuturor instrucțiunilor, in care are loc încărcarea
instrucțiunii in INSTR_REG, timp in care scrierea in REGFILE este blocata). Stările
următoare pot fi LDC sau EXEC in funcție de intrarea instruction[7:6], care reprezintă
opcode-ul specific fiecărei instrucțiuni.
• LDC: in aceasta stare de ajunge din FETCH daca instruction[7:6] este egal cu opcode-ul
specific LOADC. Aceasta stare duce la încărcarea constantei data in REGFILE, in timp ce
încărcarea unei noi instrucțiuni este blocata. Starea următoare este obligatoriu FETCH.
• EXEC: in aceasta stare de ajunge din FETCH daca instruction[7:6] este egal cu opcode-ul
specific ADD si SUB. Aceasta stare duce la încărcarea rezultatului result in REGFILE, in
timp ce încărcarea unei noi instrucțiuni este blocata. Starea următoare este obligatoriu
FETCH.
f) Implementarea PROCESSOR: modul in care sunt instanțiate si conectate conform schemei
toate sub-modulele descrise anterior.
Încărcați toate descrierile hardware (fișierul sau fișierele în format Verilog) ale modulelor de mai sus,
în assignament-ul HDL, respectând indicațiile de nume de porturi și modul de mai jos (desenul nu
conține chiar toate denumirile porturilor și ale modulelor) :
module PROCESSOR(nreset, clock, instruction, result);
module INSTR_REG(nreset, clock, instruction, we, opcode, addr1, addr2, dest, data);
module MUX(in0, in1, sel, out);
module REGFILE(op1, op2, addr1, addr2, dest, data_in, we, clock);
module ALU(op1, op2, opcode, result);
module CONTROL(clock, nreset, op, we_instruction, seldata, we_regfile);
NB: Nu încărcați testbench-ul aici, în HDL, ci în SIM. Încărcarea lui in HDL poate produce erori la
evaluarea automata.

Punctajele pe respectivele module sunt impartitie: după cum urmează: PROCESSOR: 2p /


CONTROL: 6p / MUX: 1p / REGFILE: 2p / ALU:2p / INSTR_REG: 2p.

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.

Încărcați pe moodle PROCESSOR_TB.v si un printscreen cu forma de unda obținută, din care sa se


observe variația in timp a stării automatului si a registrelor, în assignament-ul SIM

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?

S-ar putea să vă placă și