Какво е контролен блок: компоненти и неговият дизайн

Какво е контролен блок: компоненти и неговият дизайн

Контролният блок е основният компонент на централен процесор (CPU) в компютри, който може да ръководи операциите по време на изпълнението на програма от процесора / компютър. Основната функция на контролния блок е да извлича и изпълнява инструкции от паметта на компютър. Той получава инструкцията / информацията за въвеждане от потребителя и я преобразува в контролни сигнали , които след това се дават на процесора за по-нататъшно изпълнение. Той е включен като част от архитектурата на Фон Нойман, разработена от Джон Нойман. Той е отговорен за предоставянето на синхронизиращи сигнали и управлява сигналите и ръководи изпълнението на програма от процесора. Той е включен като вътрешна част на процесора в съвременните компютри. Тази статия описва пълна информация за контролния блок.



Какво представлява контролното устройство?

Компонентът, който получава входния сигнал / информация / инструкция от потребителя и се преобразува в управляващи сигнали за изпълнение в процесора. Той контролира и насочва основната памет, аритметичната и логическата единица (ALU), входните и изходните устройства, а също така отговаря за инструкциите, които се изпращат към процесора на компютър. Той извлича инструкциите от Главна памет на процесор и се изпраща в регистъра с инструкции на процесора, който съдържа съдържанието на регистъра.


Блок-схема на контролния блок

Блок-схема на контролния блок





Контролният блок преобразува входа в управляващи сигнали и след това се изпраща към процесора и насочва изпълнението на програма. Операциите, които трябва да се извършат, се ръководят от процесора на компютъра. Главно централен процесор (CPU) и Графична обработваща единица (GPU) изискват контролен блок като вътрешна част. Схемата на блока за управление е показана по-горе.

Компоненти на контролен блок

Компонентите на това устройство са инструкции регистри , контролни сигнали в процесора, контролни сигнали към / от шината, контролна шина, входни флагове и тактови сигнали.



Компонентите на Hardwired контролния блок са регистър на инструкциите (съдържа код за работа и адрес), времеви блок, състояние на управление генератор , матрица за генериране на контролен сигнал и декодер на инструкции.
Компонентите на микропрограмирания блок за управление са следващият генератор на адреси, контролен регистър на адреси, контролна памет и регистър на контролните данни.

Функции

The функции на контролния блок включват следното.


  • Той насочва потока от последователност от данни между процесора и други устройства.
  • Той може да интерпретира инструкциите и контролира потока от данни в процесора.
  • Той генерира последователността от управляващи сигнали от получените инструкции или команди от регистъра с инструкции.
  • Той носи отговорността да контролира изпълнителните единици като ALU, буфери за данни и регистри в процесора на компютър.
  • Той има способността да извлича, декодира, обработва изпълнението и да съхранява резултатите.
  • Не може да обработва и съхранява данните
  • За да прехвърли данните, той комуникира с входните и изходните устройства и контролира всички модули на компютъра.

Проектиране на контролен блок

Дизайнът на това може да се направи с помощта на две видове контролен блок които включват следното.

  • Основана на хардуер
  • Базирана на микропрограми (едно ниво и на две нива)

Кабелен контролен блок

Основният дизайн на хардуерно управление е показан по-горе. При този тип управляващите сигнали се генерират от специален хардуер логическа схема без никаква промяна в структурата на веригата. При това генерираният сигнал не може да бъде модифициран за изпълнение в процесора.

Основните данни на операционния код (операционен код на инструкция се изпраща на декодера на инструкции за декодиране. Инструкцията декодер е наборът от декодери за декодиране на различни видове данни в кода за действие. Това води до изходни сигнали, които съдържат стойности на активни сигнали, които се дават като вход към генератора на матрицата, за да генерират управляващи сигнали за изпълнение на програма от процесора на компютъра.

Контролен блок, базиран на хардуер

Контролен блок, базиран на хардуер

Матричният генератор осигурява състояния на контролния блок и сигналите, излизащи от процесора (сигнали за прекъсване). Матрицата е изградена като програмируем логически масив . Контролните сигнали, генерирани от генератора на матрицата, се дават като вход към следващата матрица на генератора и се комбинират със синхронизиращите сигнали на синхронизиращия блок, който съдържа правоъгълни модели.

За извличане на нова инструкция, управляващият блок се превръща в начален етап за изпълнение на нова инструкция. Устройството за управление остава в началния етап или първия етап, докато синхронизиращите сигнали, входните сигнали и инструкциите на компютъра са непроменени. Промяната в състоянието на блока за управление може да се увеличи, ако има някаква промяна в някой от генерираните сигнали.

Когато възникне външен сигнал или прекъсване, управляващият блок преминава в следващото състояние и извършва обработката на сигнала за прекъсване. Флаговете и състоянията се използват за избор на желаните състояния за изпълнение на цикъла на изпълнение на инструкцията.

В последното състояние управляващият блок извлича следващата инструкция и изпраща изхода към програмния брояч, след това към регистъра на адресите на паметта, към буферния регистър и след това към регистъра с инструкции, за да прочете инструкцията. И накрая, ако последната инструкция (която се извлича от контролния блок) е крайна инструкция, тя преминава в работно състояние на процесора и изчаква, докато потребителят насочи следващата програма.

Микро програмиран контролен блок

При този тип контролното хранилище се използва за съхраняване на контролните сигнали, които са кодирани по време на изпълнението на програма. Контролният сигнал не се генерира веднага и се декодира, тъй като микропрограмата съхранява адресното поле в контролното хранилище. Целият процес е на едно ниво.

Микрооперациите се извършват за изпълнение на микроинструкции в програмата. Схемата на микропрограмирания блок за управление е показана по-горе. От схемата адресът на микроинструкцията се получава от регистъра на адресите на контролната памет. Цялата информация на контролния блок се съхранява постоянно в контролната памет, наречена ROM.

Микропрограмиран контролен блок

Микропрограмиран контролен блок

Микроинструкцията от контролната памет се държи от контролния регистър. Тъй като микроинструкцията е под формата на контролна дума (съдържа двоични контролни стойности), която се нуждае от 1 или повече микрооперации за обработка на данните.

По време на изпълнението на микроинструкциите, генераторът на следващ адрес изчислява следващия адрес на микроинструкцията и след това изпраща към регистъра на контролния адрес, за да прочете следващата микроинструкция.
Последователността на микрооперациите на микропрограма се извършва от следващия генератор на адреси и действа като микропрограмен секвенсор, за да получи адреса на последователността, т.е.прочетена от контролната памет.

Verilog код за контролния блок

Verilog кодът за контролния блок е показан по-долу.

`включва“ prj_definition.v ”

модул 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_DATADR_RET, CLR

// Изходни сигнали
// Изходи за регистрационен файл

изход [`DATA_INDEX_LIMIT: 0] RF_DATA_W
изход [`ADDRESS_INDEX_LIMIT: 0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
изход RF_READ, RF_WRITE

// Изходи за ALU
изход [`DATA_INDEX_LIMIT: 0] ALU_OP1, ALU_OP2
изход [`ALU_OPRN_INDEX_LIMIT: 0] ALU_OPRN

// Изходи за памет
изход [`ADDRESS_INDEX_LIMIT: 0] MEM_ADDR
изход MEM_READ, MEM_WRITE

// Входни сигнали
вход [`DATA_INDEX_LIMIT: 0] RF_DATA_R1, RF_DATA_R2, ALU_RESULT
вход ZERO, CLK, RST

// Входящ сигнал
inout [`DATA_INDEX_LIMIT: 0] MEM_DATA

// Държавни мрежи
тел [2: 0] proc_state

// задържа стойността на брояча на програмата, съхранява текущата инструкция, регистър на указателя на стека

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] състояние, next_state

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

винаги @ (posedge CLK)
започнете
ако (RST)
държава<= RST
друго
държава<= next_state

край

винаги @ (състояние)
започнете

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

дело (държава)

`PROC_FETCH: започнете
next_state = `PROC_DECODE
MEM_READ = 1’b1
RF_ADDR_R1 = 1’b0 RF_ADDR_R2 = 1’b0
RF_ADDR_W = 1’b1
край

`PROC_DECODE: започнете
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
край

`PROC_EXE: започнете
next_state = `PROC_MEM
ALU_OP1 = 1’b1 ALU_OP2 = 1’b1 ALU_OPRN = 1’b1
RF_ADDR_R1 = 1’b0
край

`PROC_MEM: започнете
next_state = `PROC_WB
MEM_READ = 1’b1 MEM_WRITE = 1’b0
край

`PROC_WB: започнете
next_state = `PROC_FETCH
MEM_READ = 1’b1 MEM_WRITE = 1’b0
край
крайния регистър

край
краен модул

модул PROC_SM (STATE, CLK, RST)
// списък на входовете
вход CLK, RST
// списък с изходи
изход [2: 0] СЪСТОЯНИЕ

// входен списък
вход CLK, RST
// изходен списък
изход STATE

рег. [2: 0] СЪСТОЯНИЕ
reg [1: 0] състояние
reg [1: 0] next_state

reg PC_REG, INST_REG, SP_REF

`дефинирайте PROC_FETCH 3’h0
`дефинирайте PROC_DECODE 3’h1
`дефинирайте PROC_EXE 3’h2
`дефинирайте PROC_MEM 3’h3
`дефинирайте PROC_WB 3’h4

// иницииране на държава
първоначална
започнете
състояние = 2’bxx
next_state = `PROC_FETCH
край

// нулиране на обработката на сигнала
винаги @ (posedge RST)
започнете
състояние = `PROC_FETCH
next_state = `PROC_FETCH
край
винаги @ (posedge CLK)
започнете
състояние = следващо_ състояние
край
винаги @ (състояние)
започнете
ако (състояние === `PROC_FETCH)
започнете
next_state = `PROC_DECODE

инструкция за печат (INST_REG)
край

ако (състояние === `PROC_DECODE)
започнете
next_state = `PROC_EXE

край

ако (състояние === `PROC_EXE)
започнете
next_state = `PROC_MEM

инструкция за печат (SP_REF)
край

ако (състояние === `PROC_MEM)
започнете
next_state = `PROC_WB

край

ако (състояние === `PROC_WB)
започнете
next_state = `PROC_FETCH

инструкция за печат (PC_REG)
край
край

задача print_instruction

вход [`DATA_INDEX_LIMIT: 0] inst

reg [5: 0] opcode
рег. [4: 0] rs
reg [4: 0] rt
reg [4: 0] rd
reg [4: 0] shamt reg [5: 0] funct reg [15: 0] незабавна reg [25: 0] адрес

започнете

// анализираме инструкцията
// R-тип

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

// I-тип
{opcode, rs, rt, непосредствено} = inst
// J-тип
{opcode, адрес} = inst
$ write (“@% 6dns -> [0X% 08h]“, $ time, inst)
дело (opcode) // R-Type
6'h00: старт
калъф (функция)

6’h20: $ write („добавяне на 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 („и r [% 02d], r [% 02d], r [% 02d]“, rs, rt, rd)
6’h25: $ write („или r [% 02d], r [% 02d], r [% 02d]“, rs, rt, rd)
6’h27: $ write („нито 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)
по подразбиране: $ write (“”)
крайния регистър
край

// I-тип

6’h08: $ write (“addi r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h1d: $ write („muli r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h0c: $ write („andi r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h0d: $ write („ori r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h0f: $ write („lui r [% 02d], 0X% 04h“, rt, незабавно)
6’h0a: $ write („slti r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h04: $ write (“beq r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h05: $ write („bne r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h23: $ write („lw r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)
6’h2b: $ write („sw r [% 02d], r [% 02d], 0X% 04h“, rs, rt, незабавно)

// J-тип

6’h02: $ write (“jmp 0X% 07h”, адрес)
6’h03: $ write (“jal 0X% 07h”, адрес)
6’h1b: $ write (“push”)
6’h1c: $ write (“pop”)
по подразбиране: $ write (“”)
крайния регистър
$ write (“ n”)
край
последна задача
краен модул

Често задавани въпроси

1). Каква е работата на контролен блок?

Работата на контролния блок е да насочва потока от данни или инструкции за изпълнение от процесора на компютър. Той контролира, управлява и координира основната памет, ALU, регистрите, входните и изходните единици. Той извлича инструкциите и генерира контролни сигнали за изпълнение.

2). Каква е контролната памет?

Контролната памет обикновено е RAM или ROM за съхраняване на адреса и данните от контролния регистър.

3). Какво представлява контролното устройство на Wilkes?

Последователните и комбинационни вериги на хардуерния блок за управление се заменят с контролния блок на Wilkes. Той използва устройство за съхранение, за да съхранява последователностите от инструкции на микропрограма.

4). Какво е хардуерно управление?

Хардуерното управляващо устройство генерира управляващи сигнали чрез преминаване от едно състояние в друго състояние във всеки тактов импулс, без никаква физическа промяна във веригата. Генерирането на контролни сигнали зависи от регистъра с инструкции, декодера и сигналите за прекъсване.

5). Каква е контролната памет?

Информацията на контролния блок или данните се съхраняват временно или постоянно в контролната памет.
Контролната памет е два вида. Те са памет с произволен достъп (RAM) и памет само за четене (ROM).

По този начин всичко е свързано с дефиницията, компонентите, дизайна, диаграмата, функциите и видове контролно устройство . Ето въпрос към вас: „Каква е целта на контролния регистър на адресите?“