This is an old revision of the document!
Hinturi generice: Incercati sa folositi semnale cat mai generice. Preferati sa folositi grupuri in loc de tipuri de instructiuni. Checkerul este destul de hard-codat in aceasta faza. Cuvantul asistentului ramane final la corectare.
Task 1 (1p). rom.v Generati codul acesta folosind toolul avr
ldi r29, 10 sts 10, r29 ldi r29, 0 ldi r28, 138 ld r27, y lds r28, 10 mov r27, r28
Task 2 (1p). simulati unitTestCpu.v
Unele zone sunt rosii, pentru a investiga ce mai trebuie implementat: De la instante si procese, expandati pana ajungeti la cpu.v. Adaugati semnalele la fereastra (rclick → add to wave window). Re-lansati (Re-launch).
Task 3 (2p). Pentru LDI. Modificati decode_unit.v
Pentru a scrie in registrul Rd, trebuie sa controlam 2 semnale: writeback_value (control_unit.v) si signals[CONTROL_REG_RD_WRITE] (signal_generation_unit.v)
Task 4 (2p). Pentru STS. Modificati 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 sa controlam 2 semnale: signals[`CONTROL_REG_RR_READ] si signals[`CONTROL_MEM_WRITE] (signal_generation_unit.v).
Inspectati bus_interface_unit.v.
Valoarea scrisa pe bus, este transmisa prin data_to_store din control_unit.v. La acest laborator va fi preluata din variabila de buffer pipeline alu_rr .
Task 5 (2p). Pentru LD. Modificati decode_unit.v
Trebuie generate mai multe semnale pentru o adresare indirectă:
Ultimele două semnale sunt active și pentru o adresare directă a memoriei? Modificati semnalele corespunzatoare în signal_generation_unit.v .
Adresa indirecta este transmisa la bus_interface_unit prin indirect_address (o cuplare de alu_rr si alu_rd), inspectați control_unit.v.
Valoarea scrisa pe bus este transmisa prin writeback_value din control_unit.v.
Task 6 (2p). Pentru LDS. Modificati decode_unit.v (Atenție la calcularea adresei)
Pentru a citi de pe bus, trebuie sa controlam 2 semnale: signals[`CONTROL_REG_RD_WRITE] si signals[`CONTROL_MEM_READ]
Inspectati bus_interface_unit.v.
Valoarea scrisa pe bus este transmisa prin writeback_value din control_unit.v.
Task 7 (Bonus - 1p). Pentru MOV. Modificati decode_unit.v
Modificati scheletul astfel incat mov sa fie executata corect.
Greseli comune intalnite in laborator: