# Registrador de deslocamento

Em eletrônica digital um registrador de deslocamento é um conjunto de registradores configurados em um arranjo linear de tal forma que a informação é deslocada pelo circuito conforme ele é ativado.

## Tipos de Registradores de deslocamento

Os registradores de deslocamento podem possuir uma combinação de entradas e saídas seriais e paralelas, incluindo as configurações entrada serial, saída paralela (SIPO) e entrada paralela, saída serial (PISO). Existem outra configurações possuindo ambas as entradas serial e paralela e outra com saídas serial paralela. Existem também registradores de deslocamento bi-direcionais, os quais permitem que se varie a direção do deslocamento da informação. As entradas e saídas seriais de um registrador podem ser conectadas juntas, de modo a formar um registrador de deslocamento circular. Poderiam também ser desenvolvidos registradores de deslocamento multi-dimensionais, os quais podem realizar processamentos mais complexos.

### Entrada serial, saída serial
#### Leitura destrutiva

Este é o tipo mais simples de registrador de deslocamento. O conjunto de dados é inserido em 'Data In', e é deslocado para a direita em um estágio cada vez que o 'Data Advance' é colocado em nível alto. A cada avanço, o bit da extrema esquerda, o 'Data In', é deslocado para a saída do primeiro flip-flop. O bit na extrema direita, o 'Data Out', é deslocado e então perdido.
| 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 |
| 0 | 0 | 0 | 0 |
Os dados são armazenados em cada flip-flop, na saída 'Q', de modo que, assim, existam quatro "espaços" para armazenamento disponíveis nestas configuração, sendo desta forma um registrador de deslocamento de 4 bits. Para exemplificar o padrão do deslocamento, consideremos que o registrador possua o dado 0000, de modo que todos os espaços para deslocamento estejam vazios. Conforme o 'Data In' insere os dados 1,1,0,1,0,0,0,0 (nesta ordem, fornecendo um pulso ao 'Data Advance' a cada dado, sendo isto chamado de cloking ou strobing) no registrador, obtemos o resultado mostrado na tabela ao lado. A coluna da esquerda corresponde ao pino de saída localizado na extrema esquerda da figura, e assim por diante.
Deste modo a saída completa do registrador é 00001101 (desconsiderando o passo final). Conforme pode-se observar, se continuassemos a inserir dados, obteríamos exatamente o mesmo dado da entrada, porém atrasado em quatro ciclos do 'Data Advance'. Este arranjo é o equivalente em hardware de uma fila. Além disso, todo o registrador poderia ser zerado a qualquer momento colocando-se todos os pinos de reset (R) em nível alto.
Esta configuração realiza uma leitura destrutiva, visto que os dados são perdidos ao serem deslocados do bit à exterma direita.

#### Leitura não-destrutiva

A leitura não-destrutiva pode ser obtida utilizando-se a configuração mostrada abaixo. Outro pino de entrada é adicionado, o controle de Leitura/Escrita. Quando este está em nível alto (write) então o registrador de deslocamento se comporta normalmente, avançando a entrada de dados em uma posição para cada ciclo de clock, e os dados podem ser perdidos no fim do resgistrador. Entretanto, quando o controle R/W é colocado em nível baixo (read), qualquer dado deslocado na extrema direita se torna a próxima entrada na esquerda, sendo assim mantido no sistema. Deste modo, enquanto o controle R/W estiver em nível baixo, nenhum dado pode ser perdido do sistema.
Nesta animação, os quatro últimos bits de saída são mostrados na extrema direita. Quando o controle R/W é colocado em nível baixo, os dados ao mesmo tempo em que saem são colocados de volta na entrada do registrador, porém quando a entrada R/W está em nível alto, os dados são deslocados para fora e então perdidos.

### Entrada serial, Saída paralela

Esta configuração permite a conversão do formato serial para o paralelo. Os dados entram de forma serial, conforme descrito na sessão acima. Uma vez que os dados entraram, eles podem ser lidos todos simultaneamente, ou deslocados para fora e substituídos.

### Entrada paralela, Saída serial

Esta configuração recebe os dados através das entradas D1 a D4 no formato paralelo. Para escrever os dados no registrador, o controle de Escrita/Deslocamento deve estar em nível baixo. Para deslocar os dados, o controle deve ser colocado em nível alto e os registradores devem receber um pulso de clock, desta forma o circuito atua como um registrador de deslocamento SISO, com o terminal D1 atuando como entrada de dados. Entretanto, caso uma palavra de dados tenham sido escritos de forma paralela e em seguida deslocados, a saída de dados, Q, conterá os bits desta palavra, lidos em ordem.

### Entrada paralela, Saída paralela

Este tipo de registrador de deslocamento recebe os dados das entradas paralelas (D0-D3) e o desloca para as saídas correspondentes (Q0-Q3) quando os registradores recebem um pulso de clock. Ele pode ser utilizado como uma espécie de "histórico", retendo as informações antigas como entrada em outra parte do sistema, até estar pronto para receber novas informações, quando então os registradores recebem um pulso de clock, e os novos dados são inseridos.

## Usos

Um dos usos mais comuns dos registradores de deslocamento é a conversão entre interfaces seriais e paralelas. Isto é considerado de grande utilidade, pois muitos circuitos trabalham com grupos de bits em paralelo, mas as interfaces seriais possuem uma construção mais simples. Os registradores de deslocamento também podem ser utilizados como circuitos de atraso simples. Um conjunto de registradores de deslocamento pode ser conectado em paralelo para uma implementação em hardware de uma pilha.
Os registradores de deslocamento também podem ser utilizados com extensores de pulso. Ao contrário dos multivibradores monoestáveis, a temporização não depende dos valores dos componentes. Eles requerem um clock externo e a precisão da oscilação é limitada pela granularidade deste clock. Como exemplo temos o Ronja Twister, uma interface na qual cinco registradores de deslocamento 74164 formam a parte central do circuito.

## História

Um dos primeiros registradores de deslocamento conhecidos foi o Colossus, uma máquina para quebra de códigos desenvolvida nos anos 40. Ele era um dispositivo de cinco estágios construído a partir de válvulas.