# Unidade de controle

A unidade de controle ou controlo (UC), do inglês control unit (CU), é um componente da CPU que direciona a operação do processador. Uma UC tipicamente usa um decodificador binário para converter instruções codificadas para sinais de controle temporizados que orquestram a operação de outras unidades (memória, unidade lógico-aritmética, periféricos, etc). Sem a UC, o computador seria uma máquina de função única, não sendo possível o processador funcionar com propósito geral.
A maior parte dos recursos de um computador são administrados pela UC. Ela direciona o fluxo de dados entre a CPU e os outros componentes do computador. John von Neumann incluiu a UC como parte da arquitetura de von Neumann. Em designs modernos de computador, a unidade de controle é tipicamente uma parte interna da CPU, com a sua função e operações intocadas desde a sua introdução.

## Organização
### Unidade de controle hardwired

Unidades de controle hardwired (em português: diretamente conectadas) são implementadas através do uso de unidades de lógica sequencial, com um número finito de portas lógicas que podem gerar resultados específicos baseado nas instruções que foram usadas para invocar essas respostas. Unidades de controle hardwired normalmente são mais rápidas que designs microprogramados.
Essa organização usa uma arquitetura fixa — é preciso alterar diretamente a fiação se a arquitetura do computador for modificada ou alterada. Pode ser conveniente para computadores simples e rápidos.
Uma UC que usa essa organização pode operar em alta velocidade, mas com baixa flexibilidade. Um conjunto de instruções complexo pode assustar um arquiteto de computadores que usa redes ad hoc.
Essa organização ficou menos popular conforme computadores evoluíram. Previamente, UCs para CPUs usavam lógica ad hoc, e eram difíceis de serem projetadas.

### Unidades de controle de microprograma

A ideia de microprogramação foi introduzida por Maurice Vincent Wilkes em 1951 como uma representação intermediária para executar instruções de programas de computador. Microprogramas são organizados como uma sequência de microinstruções e armazenados em uma memória especial de controle. O algoritmo para a UC de microprograma, ao contrário de uma UC hardwired, normalmente é especificado por uma descrição de fluxograma. A principal vantagem para uma UC de microprograma é a simplicidade de sua estrutura. Saídas do controlador são por microinstruções. O microprograma pode ser depurado e substituído, assim como um software.

### Métodos de design de combinação

Uma variação popular de microcódigo é depurar o microcódigo usando um simulador de software. Lá, o microcódigo é uma tabela de bits. Essa é uma tabela-verdade, que traduz um endereço de microcódigo em saídas da unidade de controle. Essa tabela-verdade pode ser alimentada a um programa de computador que produz lógica eletrônica otimizada. A UC resultante é quase tão fácil de projetar quanto microprogramação, mas tem a velocidade rápida e o baixo número de elementos de lógica de uma UC hardwired. O resultado prático se assemelha a uma máquina de Mealy ou a um controlador de Richards.

## Funcionamento

A unidade de controle executa três ações básicas intrínsecas e pré-programadas pelo próprio fabricante do processador, são elas: busca (fetch), decodificação e execução.
Assim sendo, todo processador, ao iniciar sua operação, realiza uma operação cíclica, tendo como base essas três ações. Dependendo do tipo de microprocessador, a unidade de controle pode se ser fixa ou programável. A unidade fixa é aquela unidade que já vem com todo o conjunto de instrução programado em uma ULA que é construída pelo fabricante dentro da UC.
Por exemplo: os microprocessadores 8080/8085/Z80/6800/6502 possuem unidade de controle fixa. Um exemplo de unidade de controle programável pode ser visto nos processadores conhecidos como bit slicing, essa arquitetura, além de permitir a construção das partes do computador usando módulos básicos bit slices, permite ao projetista de hardware programar seu próprio conjunto de instruções.
Inicialmente, a UC fornece o endereço de memória de onde deve retirar um octeto (byte) ou mais, conhecido como chunk. Esse chunk pode conter um código de operação, ou um operando também conhecido como dado. Lembre-se, na primeira posição de memória deve sempre ser gravado um código de operação, pois só o código de operação pode informar para a UC qual ação deve ser tomada depois. Além de controlar a posição de memória que contém a instrução corrente que o computador está executando a UC, ao decodificar o código de operação, informa à ULA qual operação a executar: soma ou subtração nos processadores de 8 bits. Nos processadores de 16 bits podem ser efectuadas as instruções de soma, subtração, divisão e multiplicação.
Em adição a essas operações que chamamos de aritméticas, a partir da decodificação do código de operação, a UC tem a capacidade de realizar operações que denominamos operações lógicas, onde se incluem: E, OU, XOR, comparação, deslocamento de bits para a direita e para a esquerda. Essas operações são basicamente as mesmas para grande maioria de microprocessadores que existem no mercado. Contudo, cada fabricante atribui a cada uma delas um mnemônico diferente, registra-os em um manual de instruções específico daquele processador, e o denomina conjunto de instruções.
Uma característica muito importante de nota é que a arquitetura de um processador pode ser orientada de dois tipos: por registrador ou para a memória.
Se for orientada para registradores como no caso da arquitetura Intel, a ULA, após executar qualquer operação lógica ou aritmética, sempre vai armazenar o resultado no registrador acumulador. No caso de ser orientado para memória, como é o caso dos microprocessadores da Motorola, nem sempre o resultado é armazenado no acumulador, podendo esse ser armazenado em qualquer posição de memória. Terminada a primeira instrução, a unidade de controle auto incrementa um contador, chamado de contador de programa e vai para a próxima instrução (tipicamente localizada na próxima posição da memória (endereço de memória), a menos que a instrução seja uma instrução de desvio informando o computador que a próxima instrução está em outra posição).