Differences

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

Link to this comparison view

soc:laboratoare:09 [2025/05/15 11:26]
mihai_catalin.stan [Exercitii laborator]
soc:laboratoare:09 [2025/05/27 17:37] (current)
stefan.maruntis [Semnale de control]
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 63: Line 63:
 | HLT | Incheie executia programului | | HLT | Incheie executia programului |
 | END | Incheie executia instructiunii curente | | END | Incheie executia instructiunii curente |
 +
 +Toate aceste semnale sunt scrise in ctrl_rom_io.bin. Ne amintim din laboratorul 8 ca acesta contine cuvinte de control, in care fiecare valoarea reprezinta un semnal, spre exemplul cuvantul 100000000000000000000000000000000000000 indica faptul ca doar semnalul de END este activ. ​
 +
 +Adresa din ROM este formata prin concatenarea opcode-ului (8 biti) cu stage-ului (4 biti). Spre exemplu, cuvantul de la adresa 000000010010 (al 18-lea cuvant de control) este format prin concatenarea opcode-ului 00000001 cu stage-ul 0010. Deci acest cuvant de control contine semnalele ce trebuiesc executate de instructiunea codificata cu 8'h01, in stage-ul 2 al executiei. ​
  
 ==== Instrucțiuni ==== ==== Instrucțiuni ====
Line 114: 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)
  
 Instrucțiunile de jump durează 4 sau 8 ciclii de ceas în funcție de rezultatul comparației din controller. Dacă în controller condiția eșuează și jump-ul nu este executat, acesta durează 4 ciclii de ceas. În schimb, dacă acesta este executat, instrucțiunea de jump durează 8 ciclii. Instrucțiunile de jump durează 4 sau 8 ciclii de ceas în funcție de rezultatul comparației din controller. Dacă în controller condiția eșuează și jump-ul nu este executat, acesta durează 4 ciclii de ceas. În schimb, dacă acesta este executat, instrucțiunea de jump durează 8 ciclii.
 +
 +==== Implementarea unei instructiuni ====
 +
 +Pentru implementarea unei instructiuni sunt necesari pasii urmatori:
 +  - Intelegerea semnalelor de control
 +  - Determinarea modulelor implicare in executia unei instructiuni si a flow-ului datelor prin acestea
 +  - Prelucrarea datelor in modulele corespunzatoarea (spre exemplu, prelucrarea datelor in UAL in timpul instructiunii de ADD)
 +  - Scrierea semnalelor pentru fiecare stage si modificarea ROM-ului controller-ului cu semnalele corespunzatoare
  
 ==== Scrierea și execuția de cod pe SOC-1 ==== ==== Scrierea și execuția de cod pe SOC-1 ====
soc/laboratoare/09.1747297597.txt.gz · Last modified: 2025/05/15 11:26 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