O que é unidade de controle: componentes e seu design

Experimente Nosso Instrumento Para Eliminar Problemas





A unidade de controle é o principal componente de uma unidade central de processamento (CPU) em computadores que podem direcionar as operações durante a execução de um programa por o processador /computador. A principal função da unidade de controle é buscar e executar instruções da memória de um computador. Ele recebe as instruções / informações de entrada do usuário e as converte em sinais de controle , que são então fornecidos à CPU para execução posterior. Ele está incluído como parte da arquitetura Von Neumann desenvolvida por John Neumann. É responsável por fornecer os sinais de temporização, sinais de controle e direcionar a execução de um programa pela CPU. Ele é incluído como uma parte interna da CPU em computadores modernos. Este artigo descreve informações completas sobre a unidade de controle.

O que é a unidade de controle?

Componente que recebe o sinal / informação / instrução de entrada do usuário e se converte em sinais de controle para execução na CPU. Ele controla e dirige a memória principal, unidade aritmética e lógica (ALU), dispositivos de entrada e saída, e também responsável pelas instruções que são enviadas para a CPU de um computador. Ele busca as instruções do memória principal de um processador e enviado para o registro de instrução do processador, que contém o conteúdo do registro.




Diagrama de blocos da unidade de controle

Diagrama de blocos da unidade de controle

A unidade de controle converte a entrada em sinais de controle e, em seguida, envia ao processador e direciona a execução de um programa. As operações a realizar são dirigidas pelo processador no computador. Principalmente Unidade de Processamento Central (CPU) e Unidade de Processamento Gráfico (GPU) requerem uma unidade de controle como parte interna. O diagrama de blocos da unidade de controle é mostrado acima.



Componentes de uma unidade de controle

Os componentes desta unidade são instruções registra , sinais de controle dentro da CPU, sinais de controle de / para o barramento, barramento de controle, sinalizadores de entrada e sinais de relógio.

Os componentes da unidade de controle com fio são registro de instrução (contém opcode e campo de endereço), unidade de tempo, estado de controle gerador , matriz de geração de sinal de controle e decodificador de instrução.
Os componentes da unidade de controle micro programada são o próximo gerador de endereço, um registro de endereço de controle, memória de controle e registro de dados de controle.

Funções

O funções da unidade de controle inclui o seguinte.


  • Ele direciona o fluxo da sequência de dados entre o processador e outros dispositivos.
  • Ele pode interpretar as instruções e controlar o fluxo de dados no processador.
  • Ele gera a seqüência de sinais de controle das instruções recebidas ou comandos do registrador de instrução.
  • Ele tem a responsabilidade de controlar as unidades de execução, como ALU, buffers de dados e registros na CPU de um computador.
  • Ele tem a capacidade de buscar, decodificar, manipular a execução e armazenar resultados.
  • Não pode processar e armazenar os dados
  • Para transferir os dados, ele se comunica com os dispositivos de entrada e saída e controla todas as unidades do computador.

Projeto da Unidade de Controle

O design disso pode ser feito usando dois tipos de uma unidade de controle que incluem o seguinte.

  • Baseado em hardwire
  • Com base microprogramada (nível único e dois níveis)

Unidade de controle com fio

O projeto básico de uma unidade de controle com fio é mostrado acima. Neste tipo, os sinais de controle são gerados por um hardware especial circuito lógico sem qualquer mudança na estrutura do circuito. Nesse caso, o sinal gerado não pode ser modificado para execução no processador.

Os dados básicos de um opcode (código de operação de uma instrução é enviado para o decodificador de instrução para decodificação. decodificador é o conjunto de decodificadores para decodificar diferentes tipos de dados no opcode. Isso resulta em sinais de saída que contêm valores de sinais ativos que são fornecidos como entrada para o gerador de matriz para gerar sinais de controle para a execução de um programa pelo processador do computador.

Unidade de controle baseada em hardwire

Unidade de controle baseada em hardwire

O gerador de matriz fornece estados da unidade de controle e os sinais de saída do processador (sinais de interrupção). Matrix é construída como o array lógico programável . Os sinais de controle gerados pelo gerador de matriz são fornecidos como entrada para a próxima matriz do gerador e combinados com os sinais de temporização da unidade de temporização que contém padrões retangulares.

Para a busca de uma nova instrução, a unidade de controle se transforma em um estágio inicial para a execução de uma nova instrução. A unidade de controle permanece no estágio inicial ou primeiro estágio enquanto os sinais de temporização, sinais de entrada e estados de instrução de um computador permanecerem inalterados. A mudança no estado da unidade de controle pode ser elevada se houver alguma mudança em qualquer um dos sinais gerados.

Quando ocorre um sinal externo ou interrupção, a unidade de controle passa para o próximo estado e realiza o processamento do sinal de interrupção. Os sinalizadores e estados são usados ​​para selecionar os estados desejados para realizar o ciclo de execução da instrução.

No último estado, a unidade de controle busca a próxima instrução e envia a saída para o contador do programa, então para o registrador de endereço de memória, para o registrador buffer e então para o registrador de instrução para ler a instrução. Finalmente, se a última instrução (que é buscada pela unidade de controle) é a instrução final, ela vai para o estado operacional do processador e espera até que o usuário direcione o próximo programa.

Unidade de controle microprogramada

Neste tipo, o armazenamento de controle é usado para armazenar os sinais de controle que são codificados durante a execução de um programa. O sinal de controle não é gerado imediatamente e decodificado porque o microprograma armazena o campo de endereço no armazenamento de controle. Todo o processo é um único nível.

As microoperações são feitas para a execução de microinstruções no programa. O diagrama de blocos da unidade de controle microprogramada é mostrado acima. A partir do diagrama, o endereço da microinstrução é obtido a partir do registro de endereço da memória de controle. Todas as informações da unidade de controle são armazenadas permanentemente na memória de controle chamada ROM.

Unidade de controle microprogramada

Unidade de controle microprogramada

A microinstrução da memória de controle é mantida pelo registrador de controle. Como a microinstrução está na forma de palavra de controle (contém valores de controle binários), é necessário que 1 ou mais microoperações sejam realizadas para o processamento de dados.

Durante a execução das microinstruções, o próximo gerador de endereço computou o próximo endereço da microinstrução e, em seguida, envia para o registrador de endereço de controle para ler a próxima microinstrução.
A sequência de microoperações de um micro-programa é realizada pelo próximo gerador de endereço e atua como sequenciador de microprograma para obter o endereço de sequência, ou seja, ler da memória de controle.

Código Verilog para a Unidade de Controle

O código Verilog para a unidade de controle é mostrado abaixo.

`inclui“ prj_definition.v ”

módulo 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_RES_R1, CLU_DATA, RF_WRITE, ALU_OP1, ALU_OP2, ALU_OPRN, MEM_ADDR, MEM_READ, MEM_WRITE, RF_DATA_RES_R1, CLARULT2_RETA_R1, RFDAST, ZERO_RES_R1)

// Sinais de saída
// Saídas para o arquivo de registro

saída [`DATA_INDEX_LIMIT: 0] RF_DATA_W
saída [`ADDRESS_INDEX_LIMIT: 0] RF_ADDR_W, RF_ADDR_R1, RF_ADDR_R2
saída RF_READ, RF_WRITE

// Saídas para ALU
saída [`DATA_INDEX_LIMIT: 0] ALU_OP1, ALU_OP2
saída [`ALU_OPRN_INDEX_LIMIT: 0] ALU_OPRN

// Saídas para a memória
saída [`ADDRESS_INDEX_LIMIT: 0] MEM_ADDR
saída MEM_READ, MEM_WRITE

// sinais de entrada
entrada [`DATA_INDEX_LIMIT: 0] RF_DATA_R1, RF_DATA_R2, ALU_RESULT
entrada ZERO, CLK, RST

// Sinal de entrada
inout [`DATA_INDEX_LIMIT: 0] MEM_DATA

// State nets
fio [2: 0] proc_state

// mantém o valor do contador do programa, armazena a instrução atual, registrador de ponteiro de pilha

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] estado, next_state

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

sempre @ (posedge CLK)
começar
if (RST)
Estado<= RST
outro
Estado<= next_state

fim

sempre @ (estado)
começar

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

caso (estado)

`PROC_FETCH: começar
next_state = `PROC_DECODE
MEM_READ = 1’b1
RF_ADDR_R1 = 1’b0 RF_ADDR_R2 = 1’b0
RF_ADDR_W = 1’b1
fim

`PROC_DECODE: começar
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
fim

`PROC_EXE: começar
next_state = `PROC_MEM
ALU_OP1 = 1’b1 ALU_OP2 = 1’b1 ALU_OPRN = 1’b1
RF_ADDR_R1 = 1’b0
fim

`PROC_MEM: começar
next_state = `PROC_WB
MEM_READ = 1’b1 MEM_WRITE = 1’b0
fim

`PROC_WB: começar
next_state = `PROC_FETCH
MEM_READ = 1’b1 MEM_WRITE = 1’b0
fim
endcase

fim
módulo final

módulo PROC_SM (STATE, CLK, RST)
// lista de entradas
entrada CLK, RST
// lista de saídas
saída [2: 0] ESTADO

// lista de entrada
entrada CLK, RST
// lista de saída
saída ESTADO

reg [2: 0] ESTADO
estado reg [1: 0]
reg [1: 0] next_state

reg PC_REG, INST_REG, SP_REF

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

// iniciação do estado
inicial
começar
estado = 2’bxx
next_state = `PROC_FETCH
fim

// redefine o tratamento do sinal
sempre @ (posedge RST)
começar
estado = `PROC_FETCH
next_state = `PROC_FETCH
fim
sempre @ (posedge CLK)
começar
state = next_state
fim
sempre @ (estado)
começar
if (estado === `PROC_FETCH)
começar
next_state = `PROC_DECODE

print_instruction (INST_REG)
fim

if (estado === `PROC_DECODE)
começar
next_state = `PROC_EXE

fim

if (estado === `PROC_EXE)
começar
next_state = `PROC_MEM

print_instruction (SP_REF)
fim

if (estado === `PROC_MEM)
começar
next_state = `PROC_WB

fim

if (estado === `PROC_WB)
começar
next_state = `PROC_FETCH

print_instruction (PC_REG)
fim
fim

tarefa print_instruction

entrada [`DATA_INDEX_LIMIT: 0] inst

código de operação reg [5: 0]
reg [4: 0] rs
reg [4: 0] rt
reg [4: 0] rd
reg [4: 0] shamt reg [5: 0] funct reg [15: 0] endereço reg imediato [25: 0]

começar

// analisa a instrução
// tipo R

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

// Eu digito
{opcode, rs, rt, imediato} = inst
// tipo J
{opcode, endereço} = inst
$ write (“@% 6dns -> [0X% 08h]“, $ time, inst)
case (opcode) // R-Type
6h00: início
case (função)

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 (“e r [% 02d], r [% 02d], r [% 02d]”, rs, rt, rd)
6’h25: $ write (“ou 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)
padrão: $ write (“”)
endcase
fim

// Eu digito

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

// J-Type

6’h02: $ write (“jmp 0X% 07h”, endereço)
6’h03: $ write (“jal 0X% 07h”, endereço)
6’h1b: $ write (“push”)
6’h1c: $ write (“pop”)
padrão: $ write (“”)
endcase
$ write (“ n”)
fim
finalizar tarefa
módulo final

FAQs

1). Qual é o trabalho de uma unidade de controle?

O trabalho da unidade de controle é direcionar o fluxo de dados ou instruções para a execução pelo processador de um computador. Ele controla, gerencia e coordena a memória principal, ALU, registros, unidades de entrada e saída. Ele busca as instruções e gera sinais de controle para a execução.

2). Qual é a memória de controle?

A memória de controle geralmente é RAM ou ROM para armazenar o endereço e os dados do registro de controle.

3). O que é a unidade de controle Wilkes?

O sequencial e circuitos combinacionais da unidade de controle com fio são substituídos pela unidade de controle Wilkes. Ele usa uma unidade de armazenamento para armazenar as sequências de instruções de um micro-programa.

4). O que é uma unidade de controle com fio?

A unidade de controle com fio gera os sinais de controle mudando de um estado para outro em cada pulso de clock, sem qualquer mudança física no circuito. A geração de sinais de controle depende dos sinais de registro, decodificador e interrupção de instruções.

5). Qual é a memória de controle?

As informações da unidade de controle ou dados são temporariamente ou permanentemente armazenados na memória de controle.
A memória de controle é de dois tipos. Eles são memória de acesso aleatório (RAM) e memória somente leitura (ROM).

Portanto, trata-se de definição, componentes, design, diagrama, funções e tipos de unidade de controle . Aqui está uma pergunta para você, “Qual é a finalidade do registro de endereço de controle?”