Co to jest jednostka sterująca: komponenty i jej konstrukcja

Wypróbuj Nasz Instrument Do Eliminowania Problemów





Jednostka sterująca jest głównym komponentem jednostki centralnej (CPU) w komputerach, która może kierować operacjami podczas wykonywania programu przez procesor /komputer. Główną funkcją jednostki sterującej jest pobieranie i wykonywanie instrukcji z pamięci komputera. Otrzymuje instrukcje / informacje wejściowe od użytkownika i konwertuje je na pliki sygnały sterujące , które są następnie przekazywane CPU do dalszego wykonania. Jest częścią architektury Von Neumanna opracowanej przez Johna Neumanna. Odpowiada za dostarczanie sygnałów czasowych i sterujących oraz kieruje wykonaniem programu przez CPU. Jest dołączany jako wewnętrzna część procesora w nowoczesnych komputerach. W tym artykule opisano pełne informacje o jednostce sterującej.

Co to jest jednostka sterująca?

Komponent, który odbiera sygnał wejściowy / informacje / instrukcję od użytkownika i przekształca w sygnały sterujące w celu wykonania w CPU. Kontroluje i kieruje pamięcią główną, jednostką arytmetyczną i logiczną (ALU), urządzeniami wejściowymi i wyjściowymi, a także odpowiada za instrukcje wysyłane do procesora komputera. Pobiera instrukcje z pamięć główna procesora i wysyłane do rejestru instrukcji procesora, który zawiera zawartość rejestru.




Schemat blokowy jednostki sterującej

Schemat blokowy jednostki sterującej

Jednostka sterująca przetwarza dane wejściowe na sygnały sterujące, a następnie wysyła do procesora i kieruje wykonaniem programu. Operacje, które należy wykonać, są kierowane przez procesor w komputerze. Głównie jednostka centralna (CPU) i Graficzna jednostka przetwarzania (GPU) wymagają jednostki sterującej jako części wewnętrznej. Schemat blokowy jednostki sterującej pokazano powyżej.



Komponenty jednostki sterującej

Elementy tego urządzenia stanowią instrukcję rejestry , sygnały sterujące w CPU, sygnały sterujące do / z magistrali, magistrala sterująca, flagi wejściowe i sygnały zegara.

Komponenty jednostki sterującej przewodowej to rejestr instrukcji (zawiera kod operacji i pole adresu), jednostka czasowa, stan sterowania generator , macierz generowania sygnałów sterujących i dekoder instrukcji.
Komponenty zaprogramowanej jednostki sterującej Micro to następny generator adresu, rejestr adresu sterującego, pamięć sterująca i rejestr danych sterujących.

Funkcje

Plik funkcje jednostki sterującej obejmują następujące elementy.


  • Kieruje przepływem sekwencji danych między procesorem a innymi urządzeniami.
  • Potrafi interpretować instrukcje i sterować przepływem danych w procesorze.
  • Generuje sekwencję sygnałów sterujących z odebranych instrukcji lub poleceń z rejestru instrukcji.
  • Odpowiada za sterowanie jednostkami wykonawczymi, takimi jak ALU, bufory danych i rejestry w CPU komputera.
  • Ma możliwość pobierania, dekodowania, obsługi wykonywania i przechowywania wyników.
  • Nie może przetwarzać i przechowywać danych
  • Aby przesłać dane, komunikuje się z urządzeniami wejściowymi i wyjściowymi oraz steruje wszystkimi jednostkami komputera.

Projekt jednostki sterującej

Projekt tego można wykonać za pomocą dwóch rodzaje jednostek sterujących które obejmują następujące.

  • Oparty na przewodach
  • W oparciu o mikroprogramowanie (jednopoziomowe i dwupoziomowe)

Przewodowa jednostka sterująca

Podstawową konstrukcję przewodowej jednostki sterującej pokazano powyżej. W tym typie sygnały sterujące są generowane przez specjalny sprzęt obwód logiczny bez zmian w strukturze obwodu. W tym przypadku wygenerowany sygnał nie może zostać zmodyfikowany do wykonania w procesorze.

Podstawowe dane opkodu (kod operacji instrukcji jest przesyłany do dekodera instrukcji w celu zdekodowania. Instrukcja dekoder to zestaw dekoderów do dekodowania różnych typów danych w opkodzie. Skutkuje to sygnałami wyjściowymi, które zawierają wartości sygnałów aktywnych, które są podawane jako dane wejściowe do generatora macierzy w celu generowania sygnałów sterujących w celu wykonania programu przez procesor komputera.

Jednostka sterująca oparta na przewodach

Jednostka sterująca oparta na przewodach

Generator macierzowy podaje stany jednostki sterującej i sygnały wychodzące z procesora (sygnały przerwań). Matrix jest zbudowany jako programowalna tablica logiczna . Sygnały sterujące generowane przez generator macierzy są podawane jako dane wejściowe do następnej macierzy generatora i łączą się z sygnałami taktowania jednostki taktowania, która zawiera wzory prostokątne.

W celu pobrania nowej instrukcji jednostka sterująca przechodzi w początkowy etap wykonania nowej instrukcji. Jednostka sterująca pozostaje na etapie początkowym lub pierwszym, dopóki sygnały taktowania, sygnały wejściowe i stany instrukcji komputera pozostają niezmienione. Zmiana stanu centrali może być zwiększona w przypadku zmiany któregokolwiek z generowanych sygnałów.

Gdy wystąpi sygnał zewnętrzny lub przerwanie, jednostka sterująca przechodzi do następnego stanu i wykonuje przetwarzanie sygnału przerwania. Flagi i stany służą do wybierania żądanych stanów do wykonania cyklu wykonania instrukcji.

W ostatnim stanie jednostka sterująca pobiera następną instrukcję i wysyła wyjście do licznika programu, następnie do rejestru adresowego pamięci, do rejestru bufora, a następnie do rejestru instrukcji w celu odczytania instrukcji. Wreszcie, jeśli ostatnia instrukcja (pobierana przez jednostkę sterującą) jest instrukcją końcową, to przechodzi do stanu roboczego procesora i czeka, aż użytkownik pokieruje następnym programem.

Jednostka sterująca programowana mikro

W tym typie pamięć sterująca służy do przechowywania sygnałów sterujących, które są kodowane podczas wykonywania programu. Sygnał sterujący nie jest generowany natychmiast i dekodowany, ponieważ mikroprogram przechowuje pole adresu w pamięci kontrolnej. Cały proces odbywa się na jednym poziomie.

Mikrooperacje są wykonywane w celu wykonania mikroinstrukcji w programie. Schemat blokowy zaprogramowanej jednostki sterującej Micro pokazano powyżej. Z diagramu adres mikroinstrukcji jest uzyskiwany z rejestru adresu pamięci sterującej. Wszystkie informacje jednostki sterującej są trwale przechowywane w pamięci kontrolnej zwanej ROM.

Jednostka sterująca oparta na mikroprogramowaniu

Jednostka sterująca oparta na mikroprogramowaniu

Mikrozkaz z pamięci sterującej jest przechowywany w rejestrze sterującym. Ponieważ mikro rozkaz ma postać słowa kontrolnego (zawiera binarne wartości kontrolne), które wymaga 1 lub więcej mikrooperacji do wykonania w celu przetwarzania danych.

Podczas wykonywania mikro rozkazów, następny generator adresu obliczył następny adres mikro rozkazu, a następnie wysłał do kontrolnego rejestru adresu w celu odczytania następnej mikroinstrukcji.
Sekwencja mikrooperacji mikroprogramu jest wykonywana przez następny generator adresu i działa jako sekwenser mikroprogramów w celu uzyskania adresu sekwencji, tj. Odczytu z pamięci sterowania.

Kod Verilog dla jednostki sterującej

Kod Verilog dla jednostki sterującej pokazano poniżej.

`include„ prj_definition.v ”

moduł CONTROL_UNIT (MEM_DATA, RF_DATA_W, RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2, RF_READ, RF_WRITE, ALU_OP1, ALU_OP2, ALU_OPRN, MEM_ADDR, MEM_READ, MEM_WRITE, RF_DATA_WRITE, ALU_OP1, ALU_OP2, ALU_OPRN, MEM_ADDR, MEM_READ, MEM_WRITE, RF_DATA_WRITE,

// Sygnały wyjściowe
// Dane wyjściowe dla pliku rejestru

wyjście [`` DATA_INDEX_LIMIT: 0] RF_DATA_W
wyjście [`` ADDRESS_INDEX_LIMIT: 0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
wyjście RF_READ, RF_WRITE

// Wyniki dla ALU
wyjście [`DATA_INDEX_LIMIT: 0] ALU_OP1, ALU_OP2
wyjście [`ALU_OPRN_INDEX_LIMIT: 0] ALU_OPRN

// Dane wyjściowe dla pamięci
wyjście [`ADDRESS_INDEX_LIMIT: 0] MEM_ADDR
wyjście MEM_READ, MEM_WRITE

// Sygnały wejściowe
wejście [`` DATA_INDEX_LIMIT: 0] RF_DATA_R1, RF_DATA_R2, ALU_RESULT
wejście ZERO, CLK, RST

// Sygnał Inout
inout [`` DATA_INDEX_LIMIT: 0] MEM_DATA

// Sieci stanowe
wire [2: 0] proc_state

// przechowuje wartość licznika programu, przechowuje bieżącą instrukcję, rejestr wskaźnika stosu

reg MEM_READ, MEM_WRITE
reg MEM_ADDR
reg ALU_OP1, ALU_OP2
reg ALU_OPRN
reg RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
reg RF_DATA_W
reg [1: 0] stan, następny stan

PROC_SM state_machine (.STATE (proc_state) ,. CLK (CLK) ,. RST (RST))

zawsze @ (posedge CLK)
zaczynać
jeśli (RST)
stan<= RST
jeszcze
stan<= next_state

koniec

zawsze @ (stan)
zaczynać

MEM_READ = 1’b0 MEM_WRITE = 1’b0 MEM_ADDR = 1’b0
ALU_OP1 = 1’b0 ALU_OP2 = 1’b0 ALU_OPRN = 1’b0
RF_ADDR_R1 = 1’b0 RF_ADDR_R2 = 1’b0 RF_ADDR_W = 1’b0 RF_DATA_W = 1’b0

sprawa (stan)

`PROC_FETCH: początek
next_state = `PROC_DECODE
MEM_READ = 1’b1
RF_ADDR_R1 = 1’b0 RF_ADDR_R2 = 1’b0
RF_ADDR_W = 1’b1
koniec

`PROC_DECODE: początek
next_state = `PROC_EXE
MEM_ADDR = 1’b1
ALU_OP1 = 1’b1 ALU_OP2 = 1’b1 ALU_OPRN = 1’b1
MEM_WRITE = 1’b1
RF_ADDR_R1 = 1’b1 RF_ADDR_R2 = 1’b1
koniec

`PROC_EXE: początek
next_state = `PROC_MEM
ALU_OP1 = 1’b1 ALU_OP2 = 1’b1 ALU_OPRN = 1’b1
RF_ADDR_R1 = 1’b0
koniec

`PROC_MEM: początek
next_state = `PROC_WB
MEM_READ = 1’b1 MEM_WRITE = 1’b0
koniec

`PROC_WB: początek
next_state = `PROC_FETCH
MEM_READ = 1’b1 MEM_WRITE = 1’b0
koniec
koniec

koniec
endmodule

moduł PROC_SM (STATE, CLK, RST)
// lista wejść
wejście CLK, RST
// lista wyników
wyjście [2: 0] STAN

// lista wejściowa
wejście CLK, RST
// lista wyjściowa
stan wyjściowy

reg [2: 0] STAN
stan reg [1: 0]
reg [1: 0] next_state

reg PC_REG, INST_REG, SP_REF

`zdefiniuj PROC_FETCH 3'h0
`zdefiniuj PROC_DECODE 3'h1
`zdefiniuj PROC_EXE 3'h2
`zdefiniuj PROC_MEM 3'h3
`zdefiniuj PROC_WB 3’h4

// inicjacja stanu
Inicjał
zaczynać
state = 2’bxx
next_state = `PROC_FETCH
koniec

// resetowanie obsługi sygnału
zawsze @ (posedge RST)
zaczynać
state = `PROC_FETCH
next_state = `PROC_FETCH
koniec
zawsze @ (posedge CLK)
zaczynać
stan = następny stan
koniec
zawsze @ (stan)
zaczynać
if (stan === `PROC_FETCH)
zaczynać
next_state = `PROC_DECODE

print_instruction (INST_REG)
koniec

if (stan === `PROC_DECODE)
zaczynać
next_state = `PROC_EXE

koniec

if (state === `PROC_EXE)
zaczynać
next_state = `PROC_MEM

print_instruction (SP_REF)
koniec

if (stan === `PROC_MEM)
zaczynać
next_state = `PROC_WB

koniec

if (stan === `PROC_WB)
zaczynać
next_state = `PROC_FETCH

print_instruction (PC_REG)
koniec
koniec

zadanie print_instruction

wejście [`DATA_INDEX_LIMIT: 0] inst

reg [5: 0] opcode
reg [4: 0] rs
reg [4: 0] rt
reg [4: 0] rd
reg [4: 0] shamt reg [5: 0] funct reg [15: 0] natychmiastowy reg [25: 0] adres

zaczynać

// analizuje instrukcję
// R-type

{opcode, rs, rt, rd, shamt, funct} = inst

// Piszę
{opcode, rs, rt, direct} = inst
// J-type
{kod operacji, adres} = inst
$ write („@% 6dns -> [0X% 08h]”, $ time, inst)
case (opcode) // R-Type
6'h00: start
case (funkcja)

6’h20: $ write ('add r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6’h22: $ write („sub r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h2c: $ write („mul r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h24: $ write („and r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h25: $ write ('lub r [% 02d], r [% 02d], r [% 02d]', rs, rt, rd)
6’h27: $ write („nor r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h2a: $ write („slt r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6'h00: $ write ('sll r [% 02d],% 2d, r [% 02d]', rs, shamt, rd)
6’h02: $ write („srl r [% 02d], 0X% 02h, r [% 02d]”, rs, shamt, rd)
6’h08: $ write („jr r [% 02d]”, rs)
domyślnie: $ write („”)
koniec
koniec

// Piszę

6’h08: $ write ('addi r [% 02d], r [% 02d], 0X% 04h', rs, rt, natychmiast)
6’h1d: $ write ('muli r [% 02d], r [% 02d], 0X% 04h', rs, rt, natychmiast)
6’h0c: $ write („andi r [% 02d], r [% 02d], 0X% 04h”, rs, rt, natychmiast)
6’h0d: $ write ('ori r [% 02d], r [% 02d], 0X% 04h', rs, rt, natychmiast)
6’h0f: $ write („lui r [% 02d], 0X% 04h”, rt, natychmiast)
6’h0a: $ write („slti r [% 02d], r [% 02d], 0X% 04h”, rs, rt, natychmiast)
6’h04: $ write ('beq r [% 02d], r [% 02d], 0X% 04h', rs, rt, natychmiast)
6’h05: $ write ('bne r [% 02d], r [% 02d], 0X% 04h', rs, rt, natychmiast)
6’h23: $ write („lw r [% 02d], r [% 02d], 0X% 04h”, rs, rt, natychmiast)
6’h2b: $ write („sw r [% 02d], r [% 02d], 0X% 04h”, rs, rt, natychmiast)

// J-Type

6’h02: $ write („jmp 0X% 07h”, adres)
6’h03: $ write („jal 0X% 07h”, adres)
6’h1b: $ write („push”)
6’h1c: $ write („pop”)
domyślnie: $ write („”)
koniec
$ write („ n”)
koniec
endtask
moduł końcowy

FAQs

1). Jaka jest praca jednostki sterującej?

Zadaniem jednostki sterującej jest kierowanie przepływem danych lub instrukcji do wykonania przez procesor komputera. Kontroluje, zarządza i koordynuje pamięć główną, ALU, rejestry, jednostki wejściowe i wyjściowe. Pobiera instrukcje i generuje sygnały sterujące do wykonania.

2). Co to jest pamięć kontrolna?

Pamięć kontrolna to zwykle RAM lub ROM do przechowywania adresu i danych rejestru sterującego.

3). Co to jest jednostka sterująca Wilkes?

Sekwencyjne i obwody kombinacyjne jednostki sterującej przewodowej zostały zastąpione przez jednostkę sterującą Wilkes. Wykorzystuje jednostkę pamięci do przechowywania sekwencji instrukcji mikroprogramu.

4). Co to jest przewodowa jednostka sterująca?

Sterowana na stałe jednostka sterująca generuje sygnały sterujące, przechodząc z jednego stanu do innego stanu w każdym impulsie zegara bez fizycznej zmiany w obwodzie. Generowanie sygnałów sterujących zależy od rejestru instrukcji, dekodera i sygnałów przerwań.

5). Co to jest pamięć kontrolna?

Informacje z jednostki sterującej lub dane są tymczasowo lub na stałe przechowywane w pamięci sterowania.
Pamięć kontrolna jest dwojakiego rodzaju. Są to pamięć o dostępie swobodnym (RAM) i pamięć tylko do odczytu (ROM).

Tak więc chodzi o definicję, komponenty, projekt, diagram, funkcje i rodzaje jednostek sterujących . Oto pytanie do Ciebie: „Do czego służy rejestr adresów kontrolnych?”