This shows you the differences between two versions of the page.
apm:laboratoare:02:exercitii [2024/02/29 15:06] 127.0.0.1 external edit |
apm:laboratoare:02:exercitii [2025/10/21 20:23] (current) stefan.maruntis |
||
---|---|---|---|
Line 13: | Line 13: | ||
</note> | </note> | ||
- | <hidden> | + | **Task 00** Descărcați {{:apm:laboratoare:02:lab02.zip| scheletul de laborator}}. |
- | **Task 0** (1p) Inspectați scheletul laboratorului, identificați modulele din schema de mai sus și găsiți răspunsuri pentru următoarele întrebări: | + | |
- | - (0.2p) Cum se numește parametrul ce definește lățimea instrucțiunilor (Nr. biți) ? | + | Următoarele task-uri necesită modificări în mai multe fișiere din arhivă. Căutați TODO-urile din fișierele **decode_unit.v** (pentru etapa de ID), **alu.v** (pentru etapa de EXEC), **control_unit.v** (pentru etapa de WB). |
- | - (0.2p) Care e lățimea registrelor ? (Nr. bytes) | + | |
- | - (0.2p) Câți bytes poate stoca memoria rom folosită pentru instrucțiuni ? | + | |
- | - (0.2p) Cu se stagiu al pipeline-ului se ocupă ''alu.v'' ? | + | |
- | - (0.2p) Care este valoarea inițială a registrului r4 ? | + | |
- | </hidden> | + | |
- | + | ||
- | + | ||
- | **Task 00** Descărcați {{:apm:laboratoare:02:lab02_apm.zip| scheletul de laborator}}. | + | |
**Task 01** (1p) Implementați instrucțiunea NOP. | **Task 01** (1p) Implementați instrucțiunea NOP. | ||
**Task 02** (1p) Implementați instrucțiunea NEG. | **Task 02** (1p) Implementați instrucțiunea NEG. | ||
- | |||
- | <hidden> | ||
- | <note>Pentru instrucțiunea NEG, flag-ul H se calculează astfel: H = R3 + ~Rd3 (În [[http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf|AVR Instruction Set Manual]] e un typo.)</note> | ||
- | </hidden> | ||
**Task 03** (2p) Implementați instrucțiunea ADD. | **Task 03** (2p) Implementați instrucțiunea ADD. | ||
Line 41: | Line 28: | ||
**Task 06** (2p) Implementați instrucțiunea OR. | **Task 06** (2p) Implementați instrucțiunea OR. | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Pentru instrucțiunile care nu modifică în mod explicit valoarea unui bit din registrul SREG, acel bit trebuie setat pe 0! | ||
+ | |||
+ | Mai exact: | ||
+ | |||
+ | * Pentru NOP, **toți biții** registrului SREG trebuie setati pe 0 | ||
+ | * Pentru toate celelalte instructiuni, **biții I** (Interrupt) si **T** (Timer) trebuie setați pe 0 | ||
+ | |||
+ | </note> |