This is an old revision of the document!


Folosiți semnale cât mai generice. _ex. Verificați semnalele grupurilor de instrucțiuni in detrimentul tipurilor de instrucțiuni.
Checkerul este hard-codat în aceasta fază. Pentru punctajul bonus, pe lângă implementarea exercițiilor 6 & 7, trebuie explicat fluxul de execuție al instrucțiunilor LD_Y și STS.

Task 1 (0.5p). Modificați rom.v

Generați codul mașină corespunzător acestor instrucțiuni folosind tool-ul AVR.

  • Comandă rulare: java -jar avrasm.jar input.txt output.txt
  • avrasm.jar îl găsiți în secțiunea de Resurse

input.txt:

ldi 	r29, 10
sts 	10, r29
ldi 	r29, 0
ldi 	r28, 138
ld  	r27, y
lds 	r28, 10
mov 	r27, r28

Task 2 (0.5p). Simulați checker_view.v

Unele zone sunt roșii, pentru a investiga ce mai trebuie implementat:

  • Din fereastra Scope, expandați până ajungeți la instanța _cpu;
  • Adaugați semnalele din fereastra Objects în fereastra cu semnale (rclick → Add to wave window);
  • Re-lansați simularea pentru a popula semnalele adăugate (Relaunch Simulation).

Task 3 (2p). Pentru LDI. Modificati decode_unit.v

  • Pentru a scrie în registrul Rd, trebuie să controlam 2 semnale:
    • writeback_value (control_unit.v) - valoarea constantei K din corpul instrucțiunii;
    • signals[CONTROL_REG_RD_WRITE] (signal_generation_unit.v) - activat pentru a permite scrierea în registrul destinație, în stagiul WB.

Task 4 (3p). Pentru STS pe 16 biți. Modificați decode_unit.v

  • Atenție la calcularea adresei - adică ce valoare atribuim în opcode_imd. Memoria de date e mapată între 0x0040 și 0x00BF.
  • Pentru a scrie pe bus, trebuie să controlăm 2 semnale: signals[`CONTROL_REG_RR_READ] și signals[`CONTROL_MEM_WRITE] (signal_generation_unit.v).
  • Inspectați bus_interface_unit.v
  • Valoarea scrisă pe bus, este transmisă prin data_to_store din control_unit.v. În acest laborator va fi preluată din variabila de buffer pipeline alu_rr.

Task 5 (4p). Pentru LD_Y (i). Modificati decode_unit.v

  • Trebuie generate mai multe semnale pentru o adresare indirectă:
    • CONTROL_REG_RR_READ și CONTROL_REG_RD_READ în etapa de decode (ID)
    • CONTROL_MEM_READ în etapa memory access (MEM)
    • CONTROL_REG_RD_WRITE în etapa register write back (WB)
  • Ultimele două semnale sunt active și pentru o adresare directă a memoriei? Modificați semnalele corespunzatoare în signal_generation_unit.v
  • Adresa indirectă este transmisă la bus_interface_unit prin indirect_address (o cuplare a alu_rr și alu_rd), inspectați control_unit.v
  • Valoarea citită din memorie (scrisă de memorie pe magistrală) este transmisă prin writeback_value din control_unit.v.

Task 6 (0.5p BONUS). Pentru LDS pe 16 biți. Modificati decode_unit.v (Atenție la calcularea adresei)

  • Pentru a citi de pe bus, trebuie să controlam 2 semnale: signals[`CONTROL_REG_RD_WRITE] și signals[`CONTROL_MEM_READ]
  • Inspectați bus_interface_unit.v.
  • Valoarea citită din memorie (scrisă de memorie pe magistrală) este transmisă prin writeback_value din control_unit.v.

Task 7 (0.5p BONUS). Pentru MOV. Modificati decode_unit.v

  • Modificați scheletul astfel încât MOV să fie executată corect.
Greseli comune intalnite in laborator:
  • Ati setat opcode_rr in loc de opcode_rd.
  • Ati setat opcode_rd in loc de opcode_rr.
  • Ati calculat adresa directa considerand 7 biti, in loc de adresa specificata in datasheet. La LDS si STS cautati forma {~8, 8, 10, 9, 3, 2, 1, 0}.
  • Ati uitat sa setati grupurile in decode_unit.v.
  • Nu ati setat CONTROL_REG_RR_READ si CONTROL_REG_RD_READ pentru toate instructiunile care au nevoie de ele (de ce are nevoie LD Y sa citeasca 2 registre?).
  • LDI, STS(16-bit) și LDS(16-bit) folosesc doar 4 biti in loc de 5 biti pentru codificarea opcode_rr/opcode_rd. Totusi, aceste instructiuni pot opera doar pe registri R16-R31, asadar o decodificare corectă seteaza bitul cel mai semnificativ al lui opcode_rr/opcode_rd la valoarea 1.
  • Ati setat o valoare gresita in decode_unit.v
  • Nu ati adaugat toate semnalele la wave window. Nu ati inspectat unit testele sa vedeti exact care pas returneaza 1'bx, si ce semnale nu sunt pe valorile asteptate.
cn2/laboratoare/03/exercitii.1698175503.txt.gz · Last modified: 2023/10/24 22:25 by laura_elena.nicoara
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0