Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Встроенный

Блок управления (Control Unit) в CPU: компоненты и проектирование

Блок управления — главный компонент центрального процессора (CPU) в компьютерах, направляющий операции во время выполнения программы процессором/компьютером. Основная функция — выборка и исполнение инструкций из памяти компьютера. Он принимает входную инструкцию/информацию от пользователя и преобразует её в управляющие сигналы, которые затем передаются CPU для дальнейшего исполнения. Входит в архитектуру фон Неймана, разработанную Джоном фон Нейманом. Отвечает за синхронизационные сигналы, управляющие сигналы и направляет выполнение программы CPU. В современных компьютерах включён как внутренняя часть CPU. Статья даёт полную информацию о блоке управления.

Что такое блок управления?

Компонент, принимающий входной сигнал/информацию/инструкцию от пользователя и преобразующий в управляющие сигналы для исполнения в CPU. Он контролирует и направляет основную память, арифметико-логическое устройство (АЛУ), устройства ввода-вывода, а также отвечает за инструкции, посылаемые в CPU. Извлекает инструкции из основной памяти процессора и отправляет в регистр инструкций процессора, содержащий содержимое регистров.

Блок управления (Control Unit) в CPU: компоненты и проектирование
Блок-схема блока управления

Блок управления конвертирует вход в управляющие сигналы и отправляет процессору, направляя выполнение программы. Операции, которые должны выполняться, направляются процессором на компьютере. Главным образом Центральный процессор (CPU) и Графический процессор (GPU) требуют блок управления как внутреннюю часть. Блок-схема показана выше.

Компоненты блока управления

Компоненты: регистры инструкций, управляющие сигналы внутри CPU, управляющие сигналы к/от шины, шина управления, входные флаги, тактовые сигналы.

Компоненты жёстко-проводного (hardwired) блока управления: регистр инструкций (содержит опкод и адресное поле), временной блок, генератор состояний управления, матрица генерации управляющих сигналов, декодер инструкций.
Компоненты микропрограммированного блока управления: генератор следующего адреса, регистр адреса управления, память управления, регистр данных управления.

Функции

Функции блока управления включают:

Проектирование блока управления

Проектирование выполняется двумя типами блока управления:

Жёстко-проводной блок управления

Базовый дизайн показан выше. В этом типе управляющие сигналы генерируются специальной аппаратной логической схемой без изменения структуры схемы. Сгенерированный сигнал не может быть модифицирован для исполнения в процессоре.

Базовые данные опкода (код операции инструкции) посылаются в декодер инструкций для декодирования. Декодер инструкций — набор декодеров для декодирования разных типов данных в опкоде. Результат — выходные сигналы со значениями активных сигналов, подаваемые на вход матричного генератора для генерации управляющих сигналов исполнения программы процессором компьютера.

Блок управления (Control Unit) в CPU: компоненты и проектирование
Жёстко-проводной блок управления

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

Для выборки новой инструкции блок управления переходит в начальное состояние для исполнения новой инструкции. Блок управления остаётся в начальном состоянии, пока тактовые сигналы, входные сигналы и состояния инструкций компьютера не меняются. Смена состояния блока управления может быть вызвана изменением любого из генерируемых сигналов.

При внешнем сигнале или прерывании блок управления переходит в следующее состояние и обрабатывает сигнал прерывания. Флаги и состояния используются для выбора желаемых состояний для исполнения цикла инструкции.

В последнем состоянии блок управления выбирает следующую инструкцию и отправляет выход в счётчик команд, затем в регистр адреса памяти, в буферный регистр, и затем в регистр инструкций для чтения инструкции. Наконец, если последняя инструкция (выбранная блоком управления) — конечная инструкция, то переходит в операционное состояние процессора и ждёт, пока пользователь направит следующую программу.

Микропрограммированный блок управления

В этом типе память управления используется для хранения управляющих сигналов, кодируемых во время исполнения программы. Управляющий сигнал не генерируется немедленно и не декодируется, потому что микропрограмма хранит адресное поле в памяти управления. Весь процесс — однопотоковый.

Микрооперации выполняются для исполнения микroинструкций в программе. Блок-схема микропрограммированного блока управления показана выше. Из диаграммы адрес микroинструкции получается из регистра адреса памяти управления. Вся информация блока управления постоянно хранится в памяти управления, называемой ROM.

Блок управления (Control Unit) в CPU: компоненты и проектирование
Микропрограммированный блок управления

Микroинструкция из памяти управления удерживается регистром управления. Поскольку микroинструкция в форме управляющего слова (содержит бинарные управляющие значения), требующем 1 или более микроопераций для обработки данных.

Во время исполнения микroинструкций генератор следующего адреса вычисляет следующий адрес микroинструкции и отправляет в регистр адреса управления для чтения следующей микroинструкции.
Последовательность микроопераций микропрограммы выполняется генератором следующего адреса и действует как секвенсор микропрограммы для получения адреса последовательности, то есть чтения из памяти управления.

Verilog-код для блока управления

Verilog-код блока управления приведён ниже.

`include “prj_definition.v”

module 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_R1, RF_DATA_R2, ALU_RESULT, ZERO, CLK, RST)

// Выходные сигналы
// Выходы для регистрового файла

output [`DATA_INDEX_LIMIT:0] RF_DATA_W;
output [`ADDRESS_INDEX_LIMIT:0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2;
output RF_READ, RF_WRITE;

// Выходы для АЛУ
output [`DATA_INDEX_LIMIT:0] ALU_OP1, ALU_OP2;
output [`ALU_OPRN_INDEX_LIMIT:0] ALU_OPRN;

// Выходы для памяти
output [`ADDRESS_INDEX_LIMIT:0] MEM_ADDR;
output MEM_READ, MEM_WRITE;

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

// Inout сигнал
inout [`DATA_INDEX_LIMIT:0] MEM_DATA;

// Сетевые состояния
wire [2:0] proc_state;

// хранит значение счётчика команд, текущую инструкцию, регистр указателя стека

reg MEM_READ, MEM_WRITE;
reg MEM_ADDR;
reg ALU_OP1, ALU_OP2;
reg ALU_OPRN;
reg RF_ADDR_R1, RF_ADDR_R2, RF_ADDR_W;
reg RF_DATA_W;
reg [1:0] state, next_state;

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

always @ (posedge CLK)
begin
if (RST)
state <= RST;
else
state <= next_state;

end

always @ (state)
begin

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;

case( state )

`PROC_FETCH : begin
next_state = `PROC_DECODE;
MEM_READ = 1’b1;
RF_ADDR_R1 = 1’b0; RF_ADDR_R2 = 1’b0;
RF_ADDR_W = 1’b1;
end

`PROC_DECODE : begin
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;
end

`PROC_EXE : begin
next_state = `PROC_MEM;
ALU_OP1 = 1’b1; ALU_OP2 = 1’b1; ALU_OPRN = 1’b1;
RF_ADDR_R1 = 1’b0;
end

`PROC_MEM: begin
next_state = `PROC_WB;
MEM_READ = 1’b1; MEM_WRITE = 1’b0;
end

`PROC_WB: begin
next_state = `PROC_FETCH;
MEM_READ = 1’b1; MEM_WRITE = 1’b0;
end
endcase

end
endmodule;

module PROC_SM(STATE,CLK,RST);
// список входов
input CLK, RST;
// список выходов
output [2:0] STATE;

// input list
input CLK, RST;
// output list
output STATE;

reg [2:0] STATE;
reg [1:0] state;
reg [1:0] next_state;

reg PC_REG, INST_REG, SP_REF;

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

// инициализация состояния
initial
begin
state = 2’bxx;
next_state = `PROC_FETCH;
end

// обработка сигнала сброса
always @ (posedge RST)
begin
state = `PROC_FETCH;
next_state = `PROC_FETCH;
end
always @ (posedge CLK)
begin
state = next_state;
end
always @(state)
begin
if (state === `PROC_FETCH)
begin
next_state = `PROC_DECODE;

print_instruction(INST_REG);
end

if (state === `PROC_DECODE)
begin
next_state = `PROC_EXE;

end

if (state === `PROC_EXE)
begin
next_state = `PROC_MEM;

end

if (state === `PROC_MEM)
begin
next_state = `PROC_WB;

end

if (state === `PROC_WB)
begin
next_state = `PROC_FETCH;

print_instruction(PC_REG);
end
end

task print_instruction;

input [`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] immediate; reg [25:0] address;

begin

// разбор инструкции
// R-type

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

// I-type
{opcode, rs, rt, immediate } = inst;
// J-type
{opcode, address} = inst;
$write(“@ %6dns -> [0X%08h] “, $time, inst);
case(opcode) // R-Type
6’h00 : begin
case(funct)

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(“or 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);
default: $write(“”);
endcase
end

// I-type

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

// J-Type

6’h02 : $write(“jmp 0X%07h;”, address);
6’h03 : $write(“jal 0X%07h;”, address);
6’h1b : $write(“push;”);
6’h1c : $write(“pop;”);
default: $write(“”);
endcase
$write (“\n”);
end
endtask
end module;

FAQ

1). Какая работа блока управления?

Работа блока управления — направлять поток данных или инструкций для исполнения процессором компьютера. Он контролирует, управляет и координирует основную память, АЛУ, регистры, ввод и вывод. Извлекает инструкции и генерирует управляющие сигналы для исполнения.

2). Что такое память управления?

Память управления — обычно ОЗУ или ПЗУ для хранения адреса и данных регистра управления.

3). Что такое блок управления Уилкса?

Последовательные и комбинационные схемы жёстко-проводного блока управления заменяются блоком управления Уилкса. Он использует запоминающее устройство для хранения последовательностей инструкций микропрограммы.

4). Что такое жёстко-проводной блок управления?

Жёстко-проводной блок управления генерирует управляющие сигналы, переходя из одного состояния в другое на каждом такте без физического изменения схемы. Генерация управляющих сигналов зависит от регистра инструкций, декодера и сигналов прерываний.

5). Что такое память управления?

Информация блока управления или данные временно или постоянно хранятся в памяти управления.
Память управления двух типов: ОЗУ (RAM) и ПЗУ (ROM).

Таким образом, это всё о определении, компонентах, проектировании, диаграмме, функциях и типах блока управления. Вопрос к вам: «Какова цель регистра адреса управления?»

Встроенный

  1. Блок управления (Control Unit) в CPU: компоненты и проектирование
  2. Программирование встраиваемых систем: языки, архитектура и применения
  3. Числовое программное управление (ЧПУ): комплексный обзор автоматизированных операций
  4. Освоение проектирования электрощитов: ключевые принципы и лучшие практики
  5. Кевлар: полный обзор прочности и применений
  6. Архитектурное проектирование: принципы, практика и влияние на среду
  7. Микроэлектроника: наука о сверхмалых электронных компонентах
  8. Понимание контроля качества: обеспечение стабильного совершенства
  9. Как 3D-печать меняет механическую обработку и промышленный дизайн
  10. Ключевая роль промышленного прототипирования в разработке продуктов