Differences

This shows you the differences between two versions of the page.

Link to this comparison view

soc:laboratoare:09 [2025/05/15 11:45]
mihai_catalin.stan [Implementarea unei instructiuni]
soc:laboratoare:09 [2026/05/15 13:22] (current)
mihnea.popescu1811 [Unitatea de control]
Line 17: Line 17:
 ==== Unitatea de control ==== ==== Unitatea de control ====
  
-La fiecare front negativ de ceas, deci la finalul fiecărui ciclu, controller-ul ​vaverifica ​semnalul de reset, care va reseta orice instrucțiune se execută și va trece înapoi în stage 0 (IF).+La fiecare front negativ de ceas, deci la finalul fiecărui ciclu, controller-ul ​va verifica ​semnalul de reset, care va reseta orice instrucțiune se execută și va trece înapoi în stage 0 (IF).
  
 În orice alt caz el va trece circular (deci de la WB vom trece înapoi în IF) la următorul stagiu de execuție a instrucțiunii curente: ​ În orice alt caz el va trece circular (deci de la WB vom trece înapoi în IF) la următorul stagiu de execuție a instrucțiunii curente: ​
Line 44: Line 44:
 | MDR_EN | Incarca output-ul memoriei pe magistrala sistemului | | MDR_EN | Incarca output-ul memoriei pe magistrala sistemului |
 | MDR_LD | Incarca octetul inferior de pe magistrala in octetul inferior al MDR | | MDR_LD | Incarca octetul inferior de pe magistrala in octetul inferior al MDR |
-MAR_LD_L ​| Incarca octetul superior al unei adrese aflate pe magistrala in octetul superior al MAR | +MAR_LD_H ​| Incarca octetul superior al unei adrese aflate pe magistrala in octetul superior al MAR | 
-MAR_LD_H ​| Incarca octetul inferior al unei adrese aflate pe magistrala in octetul inferior al MAR |+MAR_LD_L ​| Incarca octetul inferior al unei adrese aflate pe magistrala in octetul inferior al MAR |
 | PC_EN | Pune pe magistrala valoarea program counter-ului | | PC_EN | Pune pe magistrala valoarea program counter-ului |
 | PC_LD | Incarca in modulul de program counter valoare de pe magistrala (folosit in instructiunile de jump, care trebuie sa sara la o anumita instructiune) | | PC_LD | Incarca in modulul de program counter valoare de pe magistrala (folosit in instructiunile de jump, care trebuie sa sara la o anumita instructiune) |
Line 107: Line 107:
 | ORI byte       | F6     | 7              | S,Z   | Immediate ​          | 2     | A = A OR byte                       | | ORI byte       | F6     | 7              | S,Z   | Immediate ​          | 2     | A = A OR byte                       |
 | RAL            | 17     | 4              | -     | Implied ​            | 1     | A « 1, LSB becomes zero            | | RAL            | 17     | 4              | -     | Implied ​            | 1     | A « 1, LSB becomes zero            |
-| RAR            | 1F     | 4              | -     | Implied ​            | 1     | A » 1, MSB goes to LSB             |+| RAR            | 1F     | 4              | -     | Implied ​            | 1     | A » 1, LSB goes to MSB             |
 | RET            | C9     | 5              | -     | Implied ​            | 1     | Return from function ​             | | RET            | C9     | 5              | -     | Implied ​            | 1     | Return from function ​             |
 | STA addr       | 32     | 9              | -     | Direct ​             | 3     | Store value in A at addr          | | STA addr       | 32     | 9              | -     | Direct ​             | 3     | Store value in A at addr          |
Line 118: Line 118:
  
 Instrucțiunile pot fi împărțite în 4 categorii în funcție de modul în care adresează memoria în opcode: Instrucțiunile pot fi împărțite în 4 categorii în funcție de modul în care adresează memoria în opcode:
-* Direct - Primește adresa de memorie pe care se operează în instrucțiune - ex. STA addr (Store la o anumită adresa) +  ​* Direct - Primește adresa de memorie pe care se operează în instrucțiune - ex. STA addr (Store la o anumită adresa) 
-* Immediate - Primește o valoare constantă direct folosită în instrucțiune - ex. ORI byte (Aplica operatia de OR logic între registrul A și o valoare primită) +  * Immediate - Primește o valoare constantă direct folosită în instrucțiune - ex. ORI byte (Aplica operatia de OR logic între registrul A și o valoare primită) 
-* Register - Funcționează pe datele dintr-un registru - ex. DCR A - Decrementează valoare registrului A +  * Register - Funcționează pe datele dintr-un registru - ex. DCR A - Decrementează valoare registrului A 
-* Implied - Adresa/​Registrul pe care se efectuează instrucțiunea este implicită și nu se modifică - ex. RAL (Shiftează la stânga valoarea din registrul A și o salvează înapoi tot în acesta)+  * Implied - Adresa/​Registrul pe care se efectuează instrucțiunea este implicită și nu se modifică - ex. RAL (Shiftează la stânga valoarea din registrul A și o salvează înapoi tot în acesta)
  
 Sistemul nostru - SOC-1 - ia 3 ciclii de ceas pentru aducerea instrucțiunii de executat din memorie, deci cea mai scurtă instrucțiune va dura 3 ciclii (NOP). Cele mai lungi instrucțiuni sunt cele care lucrează cu adrese din memoria ROM și ajung până la 9-10 ciclii de ceas (STA - 9 ciclii, CALL - 9 ciclii, LDA - 10 ciclii) Sistemul nostru - SOC-1 - ia 3 ciclii de ceas pentru aducerea instrucțiunii de executat din memorie, deci cea mai scurtă instrucțiune va dura 3 ciclii (NOP). Cele mai lungi instrucțiuni sunt cele care lucrează cu adrese din memoria ROM și ajung până la 9-10 ciclii de ceas (STA - 9 ciclii, CALL - 9 ciclii, LDA - 10 ciclii)
Line 171: Line 171:
   - (5p) (Branch Group Instructions):​ Observati cum este implementata instructiunea de JM (Jump Minus) si implementati similar si operatia de JP (Jump Positive) in modulul controller.v. Vom defini opcode-ul instructiunii JP ca fiind 8'hFB. Ulterior, modificati in sap2_ctrl_rom.xlsx semnalele de control necesare fiecarei etape de executie a instructiunii. Dupa ce le-ati modificat, copiati coloana cu semnalele concatenate si puneti-le in ctrl_rom_io.bin.   - (5p) (Branch Group Instructions):​ Observati cum este implementata instructiunea de JM (Jump Minus) si implementati similar si operatia de JP (Jump Positive) in modulul controller.v. Vom defini opcode-ul instructiunii JP ca fiind 8'hFB. Ulterior, modificati in sap2_ctrl_rom.xlsx semnalele de control necesare fiecarei etape de executie a instructiunii. Dupa ce le-ati modificat, copiati coloana cu semnalele concatenate si puneti-le in ctrl_rom_io.bin.
   - (5p) (Arithmetic Group Instructions):​ Implementati in modulul UAL instrucțiunile CMP B si CMP C, care compara prin scadere valoarea lui A cu a lui B, respectiv C si modifica flag-urile pe baza acestor operatii. Opcode-urile pentru CMP B si CMP C in ALU sunt 8 si 9, iar in ROM si excel sunt 8'h92 si 8'h93. Modificati semnalele si adaugati-le in ctrl_rom_io.bin ca la task-ul de mai sus.   - (5p) (Arithmetic Group Instructions):​ Implementati in modulul UAL instrucțiunile CMP B si CMP C, care compara prin scadere valoarea lui A cu a lui B, respectiv C si modifica flag-urile pe baza acestor operatii. Opcode-urile pentru CMP B si CMP C in ALU sunt 8 si 9, iar in ROM si excel sunt 8'h92 si 8'h93. Modificati semnalele si adaugati-le in ctrl_rom_io.bin ca la task-ul de mai sus.
-  - (0p): Cum va usureaza munca instrucțiunile implementate la task fata de utilizarea unor operatii normale de SUB+  - (0p): Cum va usureaza munca instrucțiunile implementate la task fata de utilizarea unor operatii normale de SUB?
   - (Bonus) (I/O Group Instructions):​ Implementati instructiunea de I/O IN data, care se va primi prin intermediul switch-urilor o valoare pe 4 biti pe care o veti stoca in sectiunea LOW a registrului A. Instructiunea de IN poate fi gasita ca 0'hDB. Pentru ajutor puteti vedea si instructiunea de OUT ca 0'hD3. Modificati semnalele si ctrl_rom_io ca la primele 2 task-uri.   - (Bonus) (I/O Group Instructions):​ Implementati instructiunea de I/O IN data, care se va primi prin intermediul switch-urilor o valoare pe 4 biti pe care o veti stoca in sectiunea LOW a registrului A. Instructiunea de IN poate fi gasita ca 0'hDB. Pentru ajutor puteti vedea si instructiunea de OUT ca 0'hD3. Modificati semnalele si ctrl_rom_io ca la primele 2 task-uri.
  
soc/laboratoare/09.1747298722.txt.gz · Last modified: 2025/05/15 11:45 by mihai_catalin.stan
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