07
Elementos funcionais
Helder Daniel
hdaniel@ualg.pt
Biblio principal:
DIGITAL SYSTEMS, Hans du Buf e Paulo Oliveira
BUT HOW DO IT KNOW? The Basic Principles of Computers For Everyone, J. Clark Scott
http://www.buthowdoitknow.com
v2021/22 1.2
Conteúdo
• Comparadores
• Codificadores
• Descodificadores
• Multiplexers
• DeMultiplexers
• Contadores
• Registos
• Barramentos
11 March 2022 2
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Compara 2 números binários X e Y
• A entrada E permite habilitar o comparador
• Para muitas aplicações apenas é necessária
uma saída:
– Z = 1 se X = Y
– Z = 0 se X ≠ Y
• Se for necessária informação adicional como por exemplo X < Y ou Y > X
pode-se subtrair os números e observar o bit de sinal (MSb):
negativo se Y maior que X (bit sinal = 1)
X – Y números sem sinal
positivo se X maior que Y (bit sinal = 0)
Comparador (1)
11 March 2022 3
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Comparador (2)
11 March 2022 4
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Se um bit de X é diferente do
mesmo bit de Y, xor retorna 1
• Se são iguais retorna 0
• Injetando no NOR só se todos forem iguais (isto é zero) então Z = 1
• Se for necessária informação adicional como por exemplo
X < Y, e daí a negação dá: Y >= X
• pode-se desenvolver um circuito comparador
– que retorna se um número é maior que outro
ou …
negativo se Y > X (bit sinal = 1)
X – Y
positivo se X >= Y (bit sinal = 0)
Comparador (3)
11 March 2022 5
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Para determinar se X < Y e também a negação: Y >= X
números sem sinal: subtrair e observar o bit de carry
X < Y se bit carry = 0 (overflow na subtração)
X – Y
X >= Y se bit carry = 1
.
Comparador (3)
11 March 2022 6
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
adição: overflow se carry=1
subtração: overflow se carry=0
• Para determinar se X < Y e também a negação: Y >= X
números com sinal: subtrair e observar os bits de sinal
.
Comparador (3)
11 March 2022 7
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
signal X Signal Y Signal Result X < Y
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
subtrair
• qd os sinais de X e Y são diferentes
• o negativo é menor
• logo X < Y se:
• Para determinar se X < Y e também a negação: Y >= X
números com sinal: subtrair e observar os bits de sinal
.
Comparador (3)
11 March 2022 8
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
signal X Signal Y Signal Result X < Y
0 0 0 0
0 0 1 1
1 1 0 0
1 1 1 1
• qd os sinais de X e Y são iguais
• se o sinal do resultado é negativo:
X < Y
• Para determinar se X < Y e também a negação: Y >= X
números com sinal: subtrair e observar os bits de sinal
.
Comparador (3)
11 March 2022 9
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
signal X Signal Y Signal Result X < Y
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1
• Para determinar se X < Y e também a negação: Y >= X
números com sinal: subtrair e observar os bits de sinal
.
Comparador (3)
11 March 2022 10
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Descodificadores podem ter muitos propósitos como
por exemplo descodificar BCD para 7 segmentos
• Isto é fazem uma conversão
• Um descodificador binário: (1 de 2n ) converte um
código binário entre 0 e 2n-1 para uma de n linhas
• Um descodificador 1 de 4 tem 4 saídas, uma para cada
valor binário de 0 a 3 presente nas duas entradas
Descodificador (1)
11 March 2022 11
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• A entrada E permite habilitar o
descodificador quando for desejado
• Quando desabilitado coloca 0 nas saídas
Descodificador (2)
11 March 2022 12
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Cada porta AND tem uma combinação
de x0 e x1
• igual ao valor binário que queremos
descodificar e assinalar na saída
Descodificador (3)
11 March 2022 13
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Descodificador (3)
11 March 2022 14
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Cada porta AND tem uma combinação
de x0 e x1
• igual ao valor binário que queremos
descodificar e assinalar na saída
Descodificador (3)
11 March 2022 15
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Cada porta AND tem uma combinação
de x0 e x1
• igual ao valor binário que queremos
descodificar e assinalar na saída
Descodificador (3)
11 March 2022 16
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Cada porta AND tem uma combinação
de x0 e x1
• igual ao valor binário que queremos
descodificar e assinalar na saída
• Para converter código binário em informação para
um display de 7 segmentos
• usa-se também um tipo especial de descodificador
Descodificador (4)
11 March 2022 17
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
SN744 LS49
BCD to 7 SEGMENT
DECODER
Descodificador (5)
11 March 2022 18
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Datasheet:
http://www.ti.com/lit/ds/symlink/sn7447a.pdf
Já vimos no capítulo 4
como projetar este
descodificador
• Um descodificador de 7 segmentos pode ser programado também com
memória
• Implementa-se como uma Look up table
• Uma lookup table é uma tabela de verdade onde as entradas (o binário,
com 4 bits neste caso)
• endereça um valor na memória de n bits, neste caso 7 bits
Descodificador (6)
11 March 2022 19
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Um descodificador de 7 segmentos pode ser programado também com
memória, ex. ROM
• Implementa-se uma Look up table
• Uma lookup table é uma tabela de verdade onde as entradas (o binário,
com 4 bits neste caso)
• endereça um valor na memória de n bits, neste caso 7 bits
Descodificador (6)
11 March 2022 20
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Um codificador faz o inverso:
• Gera o código (ex. binário)
correspondente ao índice de uma
de n linhas de entrada
• Para n=2k entradas apresenta k saídas
• Um codificador de 8 bits tem 8
entradas e 3 saídas
Codificador (1)
11 March 2022 21
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Pode ter uma saída extra para indicar
se nenhuma das entradas está ativa
(nenhuma tem valor 1)
• Nesse caso o valor na saída input active é 0
• Se uma qualquer das entradas tiver 1, input active será 1
Codificador (2)
11 March 2022 22
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• A tabela de verdade não incluindo a
saída
input active
• Coloca na saída o número do índice da
entrada, de 0 a 7
• .
Codificador (3)
11 March 2022 23
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
saída binária
• O circuito para a saída input active
• Basta ligar todas as entradas a um OR
• Se alguma delas for 1
input active é também 1
• .
Codificador (4)
11 March 2022 24
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Para a saída Z0:
• nos casos em que a
entrada é 1, liga-se à
saída através de um
OR
• .
Codificador (5)
11 March 2022 25
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O mesmo para as outras
saídas
• nos casos em que a
entrada é 1, liga-se à
saída através de um OR
• .
Codificador (5)
11 March 2022 26
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O circuito para Enable
• A entrada E quando ALTA permite habilitar o
codificador
• Se BAIXA o codificador apresenta 0 em todas as
saídas, incluindo input active
.
Codificador (6)
11 March 2022 27
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Pode existir o caso em que mais que
uma entrada está ativa
• Neste caso é indicado na saída a
entrada ativa com o índice (código)
mais elevado
• Neste caso temos um codificador
prioritário
Codificador (7)
11 March 2022 28
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Codificador (7)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Pode existir o caso em que mais que
uma entrada está ativa
• Neste caso é indicado na saída a
entrada ativa com o índice (código)
mais elevado
• Neste caso temos um codificador
prioritário
Minimizando
Q0 = D6'D4'D2'D1 + D6'D4'D3 + D6’D5 + D7
Q1 = D5'D4'D2 + D5'D4'D3 + D6 + D7
Q2 = D4 + D5 + D6 + D7
29
Codificador (8)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O circuito do
codificador
prioritário
• retirado das
expressões:
• Adicionando
a saída:
Active Input
30
Codificador (9)
11 March 2022 31
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Um codificador pode servir para codificar em binário o índice
de um botão pressionado
• O circuito abaixo mostra como guardar na memória o código
do botão pressionado, de 4 possíveis botões
D0 D1
0 0
0 1
1 0
1 1
• Dois FFs tipo D guardam o valor das duas saídas do codificador
botões
Multiplexer (1)
• O seu objetivo é selecionar uma entrada, de várias possíveis, e colocar na única saída
• Pode também implementar qualquer função combinatória
• As entradas de dados são as linhas D0 a Dk-1
• A saída é única Y
• O índice da entrada a colocar na saída é selecionada pela entrada de Select (o valor
binário do índice), A0 a Ak-1
• Uma entrada pode ter mais de um bit (m bits).
• Neste caso a saída também terá m bits
• Na figura temos um Mux 4:1
11 March 2022 32
• O multiplexer mais simples tem duas entradas
e um seletor
• A tabela de verdade é:
Multiplexer (2)
11 March 2022 33
A0 D1 D0 Y
0 X 0 0
0 X 1 1
1 0 X 0
1 1 X 1
A0 D1 D0 Y
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1
ou
Multiplexer (3)
11 March 2022 34
• Pode ser implementado diretamente da
expressão:
• Mas também pode ser implementado com bus
drivers
• Pode ser implementado diretamente da
expressão:
• Mas também pode ser implementado com bus
drivers
Multiplexer (3)
11 March 2022 35
Multiplexer (4)
11 March 2022 36
• Mux 4:1
com portas apenas: ou com bus drivers:
• Podemos colocar multiplexers em cascata, que respondem ao
mesmo seletor para ter mais entradas
• No entanto em cascata vai ter mais atraso
Multiplexer (5)
11 March 2022 37
=
• Se quisermos mais bits
• coloca-se um Mux por cada bit
• Também podemos desenhar Mux multibit
Multiplexer (6)
11 March 2022 38
bit0
(…) Mux 2:1 n bits
bitn
bit0
(…) Mux 2:1 n bits
bitn
• O seu objetivo é encaminhar dados de uma entrada
única para uma de várias possíveis saídas
• A função inversa do Multiplexer
• Cada entrada pode ter m bits
• Neste caso as saídas também terão m bits
• A saída a usar é selecionada pela entrada de Select (o
valor binário do índice: Ak)
Demultiplexer (1)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
39
Demultiplexer (1)
• Pode ser implementado da tabela de verdade
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
40
Registos e barramentos (1)
• O FF tipo D (de Data ou Delay) é usado para guardar dados
• O valor recebido na entrada D é armazenado e colocado na saída Q em cada pulso de
relógio ck, independentemente do valor anterior:
• Como só tem uma entrada, basta uma linha para transportar o valor de um bit
• Um FF SR ou JK necessitaria de duas linhas para transportar e armazenar o valor de
um bit
.
11 March 2022 41
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
ck D Qn+1 Operation
0 X Qn stable (read)
1 0 0 reset (write)
1 1 1 set (read)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Podemos com alguns FFs D ligados em paralelo armazenar um conjunto de
bits num registo
• Na imagem temos um registo de 4 bits com 4 FFs mas podíamos ter 8, 16,
32, 64, …
Registos e barramentos (2)
42
4 bit register
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O conjunto de todas as linhas de entrada é o barramento de entrada ou input
bus ou inbus
• À entrada D de cada FF temos ligada uma linha do inbus
Registos e barramentos (2)
43
• A entrada de relógio C de cada FF está ligado a um AND à lógica de controlo
• Para armazenar no registo o valor dos bits que estão no inbus
• A lógica de controlo tem de colocar um pulso ALTO no AND, chamado de input
strobe
• Para que o clock passe o AND e chegue à entrada C de cada FF
• E o valor na linha de input seja armazenada no FF
Registos e barramentos (3)
44
input strobe
• A cada saída Q temos ligada uma linha (podíamos ter tb a Q’)
• O conjunto de todas as linhas de saída é o barramento de saída ou output bus ou
outbus
• A saídas de cada FF do registo é ligada a um AND
• Este AND é ligado também à lógica de controlo
Registos e barramentos (4)
11 March 2022 45
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• A cada saída Q temos ligada uma linha (podíamos ter tb a Q’)
• O conjunto de todas as linhas de saída é o barramento de saída ou output bus ou
outbus
• A saída de cada FF do registo é ligada a um BUS driver (basta um Tri-state buffer)
• Este também é ligado à lógica de controlo
Registos e barramentos (5)
11 March 2022 46
11 March 2022
• Assim para colocar no outbus os valores que se encontram nos FFs do registo
• Temos de ter um pulso ALTO no Enable do bus driver, vindo da lógica de
controlo
• Este pulso é chamado de output strobe
Registos e barramentos (6)
47
output
strobe
11 March 2022
• Podemos implementar os registos também com FFs
D com entrada de preset (ou set) e reset (ou clear)
• É também costume representar todas as linhas do
barramento por apenas uma para simplificar o
circuito
• Assim um registo, com os bus drivers de saída, seria:
Registos e barramentos (7)
48
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
inbus
input strobe
clock
Output strobe
clock
input strobe
Output strobe
11 March 2022
• A um barramento podemos ter vários registos ligados, para que
comuniquem com o barramento
• e assim também entre si
Registos e barramentos (7)
49
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
11 March 2022
• Para que os dados de um registo sejam colocados no barramento, RE=1, para
que o bus driver o ligue ao barramento
• Para um registo ler os dados do barramento tem de ter WE = 1
• Não se deve ter dois registos com RE=1, pois misturaria os dados de ambos no
barramento
Registos e barramentos (7)
50
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
11 March 2022
• Para copiar os dados de um registo para outro coloca-se RE = 1 no
registo fonte e WE = 1 no registo destino
• No próximo pulso de relógio é feita a transferência pelo barramento
Registos e barramentos (7)
51
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
1 -----
1 -----
X X
Registos e barramentos (8)
11 March 2022 52
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Podemos ter também bus drivers bidirecionais
• Usam tri-state buffers em oposição
• habilitados pela lógica combinatória
• G’ habilita a comunicação quando for 0
• Se G’ = 0 e DIR = 0 habilita a comunicação no sentido A -> B
• Se G’ = 0 e DIR = 1 habilita a comunicação no sentido B -> A
• Podem ser usados nos portos digitais dos Microcontroladores,
como o Arduíno, para selecionar input de dados ou output, no
mesmo porto.
Ficheiro de registos (1)
• Podemos selecionar o acesso a um conjunto de registo com
multiplexers e demultiplexers
• Podemos ligar dois registos a uma ALU, para que sejam lidos 2
operandos e um terceiro para guardar o resultado de uma operação
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
53
Register
file
ALU
mux
mux
demx
8 registos de n bits
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
54
Ficheiro de registos (2)
reset assíncrono
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
55
Ficheiro de registos (2)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
56
Ficheiro de registos (2)
• we habilita a escrita
• Ligado à entrada do DEMUX
• sin seleciona qual a saída
onde é colocado we
• e assim qual o registo que
está habilitado a receber
dados de in
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
57
Ficheiro de registos (2)
• sout0 e sout1 habilitam a leitura de registos
• Ligados à entrada de seleção dos MUXs
• selecionam qual o registo que é colocado na
saída out0 e out1
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
58
Ficheiro de registos (2)
• Podemos também colocar um bus driver
em cada saída out0 e out1
• ligando a uma entrada re que controla
quando as saídas são ligadas ao
barramento
Ficheiro de registos (3)
• De uma forma simplificada o que temos é uma forma de
– selecionar dois registos para serem lidos (operandos)
– um para ser escrito (resultado)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
59
Register
file
ALU
mux
mux
demx
Registos de deslocamento (shift) (1)
11 March 2022 60
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Ligando os FFs como visto, isto é em paralelo, podemos
transferir informação entre registos em paralelo, isto é
todos os bits de uma só vez, num ciclo de relógio
• Mas por vezes é necessário transferir bits em série
• Por exemplo se for necessário transmitir dados por um
porto série, por exemplo USB
• Para isso temos de aceder a cada bit no registo e enviá-lo
em série
• Podemos fazer isso com registos de deslocamento (shift
registers)
Registos de deslocamento (shift) (2)
11 March 2022 61
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Os registos de deslocamento permitem “rodar” os bits num registo para
a esquerda ou para a direita
• Exemplo de rotação para a direita:
10101001
11010100
11101010
• O bit à direita é perdido a não ser que seja guardado noutro lugar (para
ser enviado por um porto série por exemplo)
• O bit à esquerda pode ser preenchido com um valor por defeito: 1 ou 0
ou com o valor do bit mais à direita
(neste caso a operação por vezes é chamada rotação ou rotate)
Registos de deslocamento (shift) (3)
11 March 2022 62
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Os registos de deslocamento permitem também “deslocar” os bits num
registo para a esquerda ou para a direita
• Exemplo de deslocamento para a direita:
10101001
X1010100 -> 1
XX101010 -> 0
…
• O bit à direita é perdido a não ser que seja guardado noutro lugar (para
ser enviado por um porto série por exemplo)
• O bit à esquerda pode ser preenchido com um valor por defeito: 1 ou 0
ou com o valor do bit mais à direita
(neste caso a operação por vezes é chamada rotação ou rotate)
Registos de deslocamento (shift) (3)
11 March 2022 63
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Os registos de deslocamento permitem também “deslocar” os bits num
registo para a esquerda ou para a direita
• Exemplo de deslocamento para a direita:
10101001
X1010100 -> 1
XX101010 -> 0
…
• O bit à direita é perdido a não ser que seja guardado noutro lugar (para
ser enviado por um porto série USB por exemplo)
• O bit à esquerda pode ser preenchido com um valor por defeito: 1 ou 0
ou com o valor do bit mais à direita como já vimos (rotação)
Registos de deslocamento (shift) (4)
11 March 2022 64
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O deslocamento à esquerda e à direita pode servir também para efetuar
operações de multiplicação e divisão na base 2
• Cada deslocamento à esquerda é uma multiplicação por 2
• Para multiplicar um valor por quatro desloca-se 2 vezes à esquerda (22):
00000100 (410)
00001000 (810)
00010000 (1610)
00100000 (3210)
• Nestes casos o bit mais à direita é preenchido com o valor 0
Registos de deslocamento (shift) (4)
11 March 2022 65
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O deslocamento à esquerda e à direita pode servir também para efetuar
operações de multiplicação e divisão na base 2
• Cada deslocamento à direita é uma divisão inteira por 2
(a parte fracionária é perdida)
• Para dividir um valor por oito desloca-se 3 vezes à direita (23):
00001001 (910)
00000100 (410)
00000010 (210)
00000001 (110)
• Nestes casos o bit mais à esquerda é preenchido com o valor 0
Registos de deslocamento (shift) (5)
11 March 2022 66
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O deslocamento à esquerda e à direita pode servir também para
efetuar operações de multiplicação e divisão com sinal (C/2)
• Números com sinal:
 10001000 (-12010) -128 + 8 = -120
 11000100 (-6010) -128 + 64 + 4 = -60
 11100010 (-3010) -128 + 64 + 32 + 2 = -30
 11000100 (-6010)
 10001000 (-12010)
• Nestes casos o bit mais à esquerda fica com o mesmo valor: o sinal
• o bit mais à direita é preenchido com o valor 0
Registos de deslocamento (shift) (6)
11 March 2022 67
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• O deslocamento à esquerda e à direita pode servir também para efetuar
operações de multiplicação e divisão de números reais
• Números reais, parte do registo tem a parte inteira, o outro a fraccional
(fixed point). Exemplo: 16 bits, 8 inteiros e 8 fracionais:
 00000010 (210) (,) 01000000 (0.2510)
 00000100 (410) (,) 10000000 (0.510)
 00001001 (910) (,) 00000000 (010)
 00000100 (410) (,) 10000000 (0.510)
 00000010 (210) (,) 01000000 (0.2510)
• Nestes casos o bit mais à direita e mais à esquerda são preenchidos com
o valor 0
• Um registo de deslocamento contém FFs montados de forma a passar a sua
informação para a direita ou para a esquerda
• Para um registo com deslocamento apenas para a direita, temos os FFs ligados
em série, como na figura.
• Em cada ciclo de relógio é efetuado um deslocamento de todos os bits para a
direita (A saída de cada FF é inserida na entrada do FF à direita)
Registos de deslocamento (shift) (7)
11 March 2022 68
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Os registos de deslocamento podem ser implementados com
diversos tipos de FFs
Registos de deslocamento (shift) (8)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
69
• Podemos também fazer rotação de bits no registo manipulando
apenas as linhas de saída
• Em cada ciclo de relógio é
efetuado um deslocamento
de todos os bits para a
esquerda.
carry 10100001
1  01000010
0  10000100
• Na direita é introduzido um zero
• o bit que saí fica na carry (uma flag de estado do CPU como veremos)
Registos de deslocamento (shift) (9)
11 March 2022 70
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Podemos também fazer rotação de bits no registo manipulando
apenas as linhas de saída
• Em cada ciclo de relógio é
efetuado um deslocamento
de todos os bits para a
esquerda.
carry 10100001
1  01000010
0  10000100
• Na direita é introduzido um zero
• o bit que saí fica na carry (uma flag de estado do CPU como veremos)
Registos de deslocamento (shift) (9)
11 March 2022 71
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
No Digital podemos manipular n bits de uma só vez
Num registo indica-se nas propriedades que manipula 8 bits
se quisermos fazer manipulação de cada bit individual:
usamos um spliter ( distribuidor)
• Podemos também fazer rotação de bits no registo manipulando
apenas as linhas de saída
• Em cada ciclo de relógio é
efetuado um deslocamento
de todos os bits para a
esquerda.
carry 10100001
1  01000011
0  10000110
• Na direita é introduzido o bit mais à esquerda
• o bit que vai da esquerda para a direita pode ser colocado no carry
Registos de deslocamento (shift) (9)
72
Registos de deslocamento (shift) (10)
11 March 2022 73
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Um registo de deslocamento contém FFs montados de forma a passar a
sua informação para a direita ou para a esquerda
• Passar significa deslocar (shift)
• Estes registos agrupam-se em 4 tipos:
– Entrada paralela, saída série: Os bits são escritos em paralelo mas são lidos
em série deslocando à esquerda ou à direita
– Entrada série, saída paralela: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em paralelo
– Entrada série, saída série: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em série pelo outro extremo
• Nestes casos o bit mais à esquerda é preenchido com o valor 1
• Para multiplicar por 2 desloca-se à esquerda
• Um registo de deslocamento contém FFs montados de forma a passar a
sua informação para a direita ou para a esquerda
• Passar significa deslocar (shift)
• Estes registos agrupam-se em 4 tipos:
– Entrada série, saída paralela: Os bits são escritos em série entrando e
deslocando pela esquerda ou direita e lidos em paralelo
– Entrada série, saída série: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em série pelo outro extremo
• NesEntrada paralela, saída série: Os bits são escritos em paralelo mas são lidos
em série deslocando à esquerda ou à direita
• tes casos o bit mais à esquerda é preenchido com o valor 1
• Para multiplicar por 2 desloca-se à esquerda
Registos de deslocamento (shift) (10)
11 March 2022 74
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Um registo de deslocamento contém FFs montados de forma a passar a
sua informação para a direita ou para a esquerda
• Passar significa deslocar (shift)
• Estes registos agrupam-se em 4 tipos:
– Entrada série, saída série: Os bits são escritos em série entrando e
deslocando pela esquerda ou direita e lidos em série
– Entrada série, saída paralela: Os bits são escritos em série entrando e
deslocando pela esquerda ou direita e lidos em paralelo
– outro extremo
• NesEntrada paralela, saída série: Os bits são escritos em paralelo mas são lidos
em série deslocando à esquerda ou à direita
• tes casos o bit mais à esquerda é preenchido com o valor 1
• Para multiplicar por 2 desloca-se à esquerda
Registos de deslocamento (shift) (10)
11 March 2022 75
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Registos de deslocamento (shift) (10)
11 March 2022 76
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
• Um registo de deslocamento contém FFs montados de forma a passar a
sua informação para a direita ou para a esquerda
• Passar significa deslocar (shift)
• Estes registos agrupam-se em 4 tipos:
– Entrada paralela, saída paralela: Os bits são escritos em paralelo e lidos
também em paralelo. Este tipo permite fazer rotação de bits.
– Entrada série, saída paralela: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em paralelo
– Entrada série, saída série: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em série pelo outro extremo
• Nestes casos o bit mais à esquerda é preenchido com o valor 1
• Para multiplicar por 2 desloca-se à esquerda
• Um registo de deslocamento contém FFs montados de forma a passar a
sua informação para a direita ou para a esquerda
• Passar significa deslocar (shift)
• Um registo de deslocamento universal incluí os 4 tipos
– Entrada série, saída série
– Entrada paralela, saída paralela
– Entrada série, saída paralela: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em paralelo
– Entrada série, saída série: Os bits são armazenados em série entrando e
deslocando pela esquerda ou direita e lidos em série pelo outro extremo
• Nestes casos o bit mais à esquerda é preenchido com o valor 1
• Para multiplicar por 2 desloca-se à esquerda
Registos de deslocamento (shift) (10)
11 March 2022 77
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Barrel shifter (1)
• O registo de deslocamento apresentado pode apenas deslocar um bit em
cada ciclo
• Se for pretendido deslocar mais que um bit são necessários caminhos de
dados alternativos:
– Do bit de ordem n para o bit n+1 LEFT Shifter
– Do bit n para o bit n+2, …
• Uma solução é utilizar multiplexers que encaminham cada bit do registo
para as possíveis saídas
• Numa montagem em árvore, para minimizar o número de muxs
Há outras implementações possíveis com transístores (sem multiplexers)
11 March 2022 78
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Barrel shifter (1)
• O registo de deslocamento apresentado pode apenas deslocar um bit em
cada ciclo
• Se for pretendido deslocar mais que um bit são necessários caminhos de
dados alternativos:
– Do bit de ordem n para o bit n+1 LEFT Shifter
– Do bit n para o bit n+2, …
• Uma solução é utilizar multiplexers que encaminham cada bit do registo
para as possíveis saídas
• Numa montagem em árvore, para minimizar o número de muxs
• exemplo: um mux 4:1 são 3 mux 2:1 em árvore
11 March 2022 79
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Barrel shifter (1)
• O registo de deslocamento apresentado pode apenas deslocar um bit em
cada ciclo
• Se for pretendido deslocar mais que um bit são necessários caminhos de
dados alternativos:
– Do bit de ordem n para o bit n+1 LEFT Shifter
– Do bit n para o bit n+2, …
• Uma solução é utilizar multiplexers que encaminham cada bit do registo
para as possíveis saídas
• Numa montagem em árvore, para minimizar o número de muxs
Há outras implementações possíveis com transístores (sem multiplexers)
11 March 2022 80
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Barrel shifter (2)
• Vamos ver um Left barrel shifter para registo de 4 bits no Digital
81
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
11 March 2022
Barrel shifter (3)
• Left barrel shifter para registo de 4 bits no Digital.
• N indica quantos bits deslocar num só ciclo
• Se o registo R0 = 0010
• N=0 R0 = 0010
• N=1 R0 = 0100
• N=2 R0 = 1000
• N=3 R0 = 0001
Em LEFT shift o bit 0 poderá ir
para 0, 1, 2, 3, dependendo de N
Se fosse RIGHT iria para:
0, 3, 2, 1
As ligações nos MUXs determinam a direção de rotação 82
Barrel shifter (3)
• Left barrel shifter para registo de 4 bits no Digital.
• N indica quantos bits deslocar num só ciclo
• Se o registo R0 = 0010
• N=0 R0 = 0010
• N=1 R0 = 0100
• N=2 R0 = 1000
• N=3 R0 = 0001
Em LEFT shift o bit 1 poderá ir
para 3, 0, 1, 2, dependendo de N
Se fosse RIGHT iria para:
1, 0, 3, 2
11 March 2022 83
Barrel shifter (3)
• Left barrel shifter para registo de 4 bits no Digital.
• N indica quantos bits deslocar num só ciclo
• Se o registo R0 = 0010
• N=0 R0 = 0010
• N=1 R0 = 0100
• N=2 R0 = 1000
• N=3 R0 = 0001
Em LEFT shift o bit 2 poderá ir
para 2, 3, 0, 1, dependendo de N
Se fosse RIGHT iria para:
2, 1, 0, 3
11 March 2022 84
Barrel shifter (3)
• Left barrel shifter para registo de 4 bits no Digital.
• N indica quantos bits deslocar num só ciclo
• Se o registo R0 = 0010
• N=0 R0 = 0010
• N=1 R0 = 0100
• N=2 R0 = 1000
• N=3 R0 = 0001
Em LEFT shift o bit 3 poderá ir
para 1, 2, 3, 0, dependendo de N
Se fosse RIGHT iria para:
3, 2, 1, 0
11 March 2022 85
Barrel shifter (3)
• Left barrel shifter para registo de 4 bits no Digital.
• N indica quantos bits deslocar num só ciclo
• Se o registo R0 = 0010
• N=0 R0 = 0010
• N=1 R0 = 0100
• N=2 R0 = 1000
• N=3 R0 = 0001
11 March 2022 86
Temos aqui um exemplo de uma
operação que pode ser implementada
na ALU
outras operações: AND, or, +, -, ….
No próximo capítulo veremos a ALU
Left and right barrel shifter
• Podemos usar o mesmo hardware para:
– deslocar para a direita
– deslocar para a esquerda
• por exemplo, tendo um left shifter, para deslocar para a
direita:
1) inverter a ordem dos bits
2) deslocar para a esquerda
3) inverter a ordem dos bits
11 March 2022 87
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Left and right barrel shifter
• Podemos usar o mesmo hardware para:
– deslocar para a direita
– deslocar para a esquerda
• por exemplo, tendo um left shifter, para deslocar para a
direita:
10110000 >> 2 = 00101100
1) inverter a ordem dos bits: 00001101
2) deslocar para a esquerda 2 bits: 00110100
3) inverter a ordem dos bits: 00101100
11 March 2022 88
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
Logarithmic shifters
• Reduzem o hardware, mas …
• … têm um maior datapath
• Efetuam o deslocamento por estágios:
– deslocamento de 0 a 7 lugares log2(8) = 3 estágios
– deslocamento de 0 a 31 lugares log2(32) = 5 estágios
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
89
Logarithmic shifters
• baseados em Muxs
• Este exemplo permite deslocamento [0, 7], entradas: S0, S1 e S2
• 3 estágios
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
90
S2
S1
S0
D7 D6 D5 D4 D3 D2 D1 D0
Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
(7,1) (6,1) (5,1) (4,1) (3,1) (2,1) (1,1) (0,1)
(7,2) (6,2) (5,2) (4,2) (3,2) (2,2) (1,2) (0,2)
(7,3) (6,3) (5,3) (4,3) (3,3) (2,3) (1,3) (0,3)
(7,0) (6,0) (5,0) (4,0) (3,0) (2,0) (1,0) (0,0)
Logarithmic shifters
• baseados em DeMux
• Este exemplo permite deslocamento [0, 7], entradas: S0, S1 e S2
• 3 estágios
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
91
Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0
D7 D6 D5 D4 D3 D2 D1 D0
S2
S1
S0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
(7,1) (6,1) (5,1) (4,1) (3,1) (2,1) (1,1) (0,1)
(7,2) (6,2) (5,2) (4,2) (3,2) (2,2) (1,2) (0,2)
(7,3) (6,3) (5,3) (4,3) (3,3) (2,3) (1,3) (0,3)
(7,0) (6,0) (5,0) (4,0) (3,0) (2,0) (1,0) (0,0)
Barrel wire shifters
• Executam o deslocamento de n bits em um ciclo de relógio
• Array ou crossbar shifters
• Apenas alinham caminhos para os bits, com transístores ou Drivers
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
92
Barrel wire shifters
• Abaixo temos um exemplo para 4 bits
• Para N bits necessitam de N2 transístores.
• Podem ter problemas elétricos para palavras muito grandes
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
93
Barrel wire shifters
• Abaixo temos um exemplo para 4 bits
• Para N bits necessitam de N2 transístores.
• Podem ter problemas elétricos para palavras muito grandes
• Pode-se usar uma montagem por estágios, como nos shifters logarítmicos
• Reduz o nº de transístores para:N*log2(N) mas o nº de estágios é log2(N)
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
94
bits crossbar
(transístores/estágios)
logarítmico
(transístores/estágios)
8 8 * 8 = 64 / 1 8 * 3 = 24 / 3
32 32*32 = 1024 / 1 32 * 5 = 160 / 5
64 64*64 = 4096 / 1 64 * 6 = 384 / 6
Barrel wire shifters
• Abaixo temos um exemplo para 4 bits
• Para N bits necessitam de N2 transístores.
• Podem ter problemas elétricos para palavras muito grandes
• Pode-se usar uma montagem por estágios, como nos shifters logarítmicos
• Reduz o nº de transístores para:N*log2(N) mas o nº de estágios é log2(N)
.
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
95
bits crossbar
(transístores/estágios)
logarítmico
(transístores/estágios)
8 8 * 8 = 64 / 1 8 * 3 = 24 / 3
32 32*32 = 1024 / 1 32 * 5 = 160 / 5
64 64*64 = 4096 / 1 64 * 6 = 384 / 6
• Numa ALU dependendo da forma como é implementado
o somador e o carry look-ahead
• É possível que os estágios do shifter tenham um
datapath com um comprimento semelhante ao somador
Counters (1)
• Contadores podem
contar em:
– Binary
– Gray
(…)
• Ascendente/descendente
• Podem ser inicializados com zero, ou com outro valor, tal como um registo
• Por exemplo o MC1451B - binary up/down counter
Pode receber um valor de inicialização nas linhas: P0 a P3, qd PE=1
datasheet:
http://www.onsemi.com/pub_link/Collateral/MC14516B-D.PDF
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
96
Counters (2)
• Contadores podem
contar em:
– Binary
– Gray
(…)
• Ascendente/descendente
• Também pode dar uma indicação de carry:
quando passa de 15 -> 0
ou de 0 -> 15
na linha "CARRY OUT"
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
97
Counters (3)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
98
• Podemos projetar contadores que apenas contem parte dos estados
possíveis
• Por exemplo, com 4 FFs temos um contador mod 16:
0,1,2, …, 14, 15, 0, 1, ….
Counters (3)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
99
• Podemos projetar este contador para que apenas conte (mod10):
0,1,2, …, 8, 9, 0, 1, …
• Mas a lógica necessária de adicionar pode ser mais complexa do que …
Counters (4)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
100
• … do que usar um chip disponível no mercado e adicionar lógica para
fazer reset quando desejado
• Para um contador mod 10 para fazer reset quando a saída for 10.
• É necessário que o chip tenha um reset assíncrono
10(10) = 1010(2)
Q3 = 1
Q2 = 0
Q1 = 1
Q0 = 0
Counters (5)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
101
• Num CPU, o program counter
• é um registo especial, um contador, que é utilizado para apontar o
endereço de memória da instrução a executar
• Pode ser incrementado ou decrementado como um contador, ou
carregado com o endereço
da próxima instrução
CPU (1)
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
102
• Um CPU elementar tem pelo menos:
registos
ALU (efetua operações: AND, OR, …, +, -, …. SHIFT, …)
Lógica de controlo (interpreta o programa):
Seleciona registo(s) fonte
Seleciona registo destino
Seleciona operação
CPU (2)
• Por exemplo, se tivermos 4 registos: R0, R1, R2, R3
• E quisermos fazer a operação: R1 = R0 + R2
• Lógica de controlo:
– Seleciona registos fonte: R0, R2
– Seleciona registo destino: R1
– Seleciona operação: Adição
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
103
R0
R1
R2 +
Register
file
ALU
mux
mux
demx
Control logic
data bus
control bus
CPU (2)
• Por exemplo, se tivermos 4 registos: R0, R1, R2, R3
• E quisermos fazer a operação: R1 = R0 + R2
• Lógica de controlo:
– Seleciona registos fonte: R0, R2
– Seleciona registo destino: R1
– Seleciona operação: Adição
11 March 2022
Sistemas Digitais
Helder Daniel hdaniel@ualg.pt
104
Nos próximos capítulos:
• Memória
• ALU
• intro: Lógica de controlo
e código máquina
R0
R1
R2 +
Register
file
ALU
mux
mux
demx
Control logic
data bus
control bus

07 - Elementos funcionais. pdf. Kkkkkkkk

  • 1.
    07 Elementos funcionais Helder Daniel hdaniel@ualg.pt Biblioprincipal: DIGITAL SYSTEMS, Hans du Buf e Paulo Oliveira BUT HOW DO IT KNOW? The Basic Principles of Computers For Everyone, J. Clark Scott http://www.buthowdoitknow.com v2021/22 1.2
  • 2.
    Conteúdo • Comparadores • Codificadores •Descodificadores • Multiplexers • DeMultiplexers • Contadores • Registos • Barramentos 11 March 2022 2 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 3.
    • Compara 2números binários X e Y • A entrada E permite habilitar o comparador • Para muitas aplicações apenas é necessária uma saída: – Z = 1 se X = Y – Z = 0 se X ≠ Y • Se for necessária informação adicional como por exemplo X < Y ou Y > X pode-se subtrair os números e observar o bit de sinal (MSb): negativo se Y maior que X (bit sinal = 1) X – Y números sem sinal positivo se X maior que Y (bit sinal = 0) Comparador (1) 11 March 2022 3 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 4.
    Comparador (2) 11 March2022 4 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Se um bit de X é diferente do mesmo bit de Y, xor retorna 1 • Se são iguais retorna 0 • Injetando no NOR só se todos forem iguais (isto é zero) então Z = 1
  • 5.
    • Se fornecessária informação adicional como por exemplo X < Y, e daí a negação dá: Y >= X • pode-se desenvolver um circuito comparador – que retorna se um número é maior que outro ou … negativo se Y > X (bit sinal = 1) X – Y positivo se X >= Y (bit sinal = 0) Comparador (3) 11 March 2022 5 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 6.
    • Para determinarse X < Y e também a negação: Y >= X números sem sinal: subtrair e observar o bit de carry X < Y se bit carry = 0 (overflow na subtração) X – Y X >= Y se bit carry = 1 . Comparador (3) 11 March 2022 6 Sistemas Digitais Helder Daniel hdaniel@ualg.pt adição: overflow se carry=1 subtração: overflow se carry=0
  • 7.
    • Para determinarse X < Y e também a negação: Y >= X números com sinal: subtrair e observar os bits de sinal . Comparador (3) 11 March 2022 7 Sistemas Digitais Helder Daniel hdaniel@ualg.pt signal X Signal Y Signal Result X < Y 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 subtrair • qd os sinais de X e Y são diferentes • o negativo é menor • logo X < Y se:
  • 8.
    • Para determinarse X < Y e também a negação: Y >= X números com sinal: subtrair e observar os bits de sinal . Comparador (3) 11 March 2022 8 Sistemas Digitais Helder Daniel hdaniel@ualg.pt signal X Signal Y Signal Result X < Y 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 • qd os sinais de X e Y são iguais • se o sinal do resultado é negativo: X < Y
  • 9.
    • Para determinarse X < Y e também a negação: Y >= X números com sinal: subtrair e observar os bits de sinal . Comparador (3) 11 March 2022 9 Sistemas Digitais Helder Daniel hdaniel@ualg.pt signal X Signal Y Signal Result X < Y 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 1 1 1 1
  • 10.
    • Para determinarse X < Y e também a negação: Y >= X números com sinal: subtrair e observar os bits de sinal . Comparador (3) 11 March 2022 10 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 11.
    • Descodificadores podemter muitos propósitos como por exemplo descodificar BCD para 7 segmentos • Isto é fazem uma conversão • Um descodificador binário: (1 de 2n ) converte um código binário entre 0 e 2n-1 para uma de n linhas • Um descodificador 1 de 4 tem 4 saídas, uma para cada valor binário de 0 a 3 presente nas duas entradas Descodificador (1) 11 March 2022 11 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 12.
    • A entradaE permite habilitar o descodificador quando for desejado • Quando desabilitado coloca 0 nas saídas Descodificador (2) 11 March 2022 12 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 13.
    • Cada portaAND tem uma combinação de x0 e x1 • igual ao valor binário que queremos descodificar e assinalar na saída Descodificador (3) 11 March 2022 13 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 14.
    Descodificador (3) 11 March2022 14 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Cada porta AND tem uma combinação de x0 e x1 • igual ao valor binário que queremos descodificar e assinalar na saída
  • 15.
    Descodificador (3) 11 March2022 15 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Cada porta AND tem uma combinação de x0 e x1 • igual ao valor binário que queremos descodificar e assinalar na saída
  • 16.
    Descodificador (3) 11 March2022 16 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Cada porta AND tem uma combinação de x0 e x1 • igual ao valor binário que queremos descodificar e assinalar na saída
  • 17.
    • Para convertercódigo binário em informação para um display de 7 segmentos • usa-se também um tipo especial de descodificador Descodificador (4) 11 March 2022 17 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 18.
    SN744 LS49 BCD to7 SEGMENT DECODER Descodificador (5) 11 March 2022 18 Sistemas Digitais Helder Daniel hdaniel@ualg.pt Datasheet: http://www.ti.com/lit/ds/symlink/sn7447a.pdf Já vimos no capítulo 4 como projetar este descodificador
  • 19.
    • Um descodificadorde 7 segmentos pode ser programado também com memória • Implementa-se como uma Look up table • Uma lookup table é uma tabela de verdade onde as entradas (o binário, com 4 bits neste caso) • endereça um valor na memória de n bits, neste caso 7 bits Descodificador (6) 11 March 2022 19 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 20.
    • Um descodificadorde 7 segmentos pode ser programado também com memória, ex. ROM • Implementa-se uma Look up table • Uma lookup table é uma tabela de verdade onde as entradas (o binário, com 4 bits neste caso) • endereça um valor na memória de n bits, neste caso 7 bits Descodificador (6) 11 March 2022 20 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 21.
    • Um codificadorfaz o inverso: • Gera o código (ex. binário) correspondente ao índice de uma de n linhas de entrada • Para n=2k entradas apresenta k saídas • Um codificador de 8 bits tem 8 entradas e 3 saídas Codificador (1) 11 March 2022 21 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 22.
    • Pode teruma saída extra para indicar se nenhuma das entradas está ativa (nenhuma tem valor 1) • Nesse caso o valor na saída input active é 0 • Se uma qualquer das entradas tiver 1, input active será 1 Codificador (2) 11 March 2022 22 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 23.
    • A tabelade verdade não incluindo a saída input active • Coloca na saída o número do índice da entrada, de 0 a 7 • . Codificador (3) 11 March 2022 23 Sistemas Digitais Helder Daniel hdaniel@ualg.pt saída binária
  • 24.
    • O circuitopara a saída input active • Basta ligar todas as entradas a um OR • Se alguma delas for 1 input active é também 1 • . Codificador (4) 11 March 2022 24 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 25.
    • Para asaída Z0: • nos casos em que a entrada é 1, liga-se à saída através de um OR • . Codificador (5) 11 March 2022 25 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 26.
    • O mesmopara as outras saídas • nos casos em que a entrada é 1, liga-se à saída através de um OR • . Codificador (5) 11 March 2022 26 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 27.
    • O circuitopara Enable • A entrada E quando ALTA permite habilitar o codificador • Se BAIXA o codificador apresenta 0 em todas as saídas, incluindo input active . Codificador (6) 11 March 2022 27 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 28.
    • Pode existiro caso em que mais que uma entrada está ativa • Neste caso é indicado na saída a entrada ativa com o índice (código) mais elevado • Neste caso temos um codificador prioritário Codificador (7) 11 March 2022 28 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 29.
    Codificador (7) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Pode existir o caso em que mais que uma entrada está ativa • Neste caso é indicado na saída a entrada ativa com o índice (código) mais elevado • Neste caso temos um codificador prioritário Minimizando Q0 = D6'D4'D2'D1 + D6'D4'D3 + D6’D5 + D7 Q1 = D5'D4'D2 + D5'D4'D3 + D6 + D7 Q2 = D4 + D5 + D6 + D7 29
  • 30.
    Codificador (8) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • O circuito do codificador prioritário • retirado das expressões: • Adicionando a saída: Active Input 30
  • 31.
    Codificador (9) 11 March2022 31 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Um codificador pode servir para codificar em binário o índice de um botão pressionado • O circuito abaixo mostra como guardar na memória o código do botão pressionado, de 4 possíveis botões D0 D1 0 0 0 1 1 0 1 1 • Dois FFs tipo D guardam o valor das duas saídas do codificador botões
  • 32.
    Multiplexer (1) • Oseu objetivo é selecionar uma entrada, de várias possíveis, e colocar na única saída • Pode também implementar qualquer função combinatória • As entradas de dados são as linhas D0 a Dk-1 • A saída é única Y • O índice da entrada a colocar na saída é selecionada pela entrada de Select (o valor binário do índice), A0 a Ak-1 • Uma entrada pode ter mais de um bit (m bits). • Neste caso a saída também terá m bits • Na figura temos um Mux 4:1 11 March 2022 32
  • 33.
    • O multiplexermais simples tem duas entradas e um seletor • A tabela de verdade é: Multiplexer (2) 11 March 2022 33 A0 D1 D0 Y 0 X 0 0 0 X 1 1 1 0 X 0 1 1 X 1 A0 D1 D0 Y 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 ou
  • 34.
    Multiplexer (3) 11 March2022 34 • Pode ser implementado diretamente da expressão: • Mas também pode ser implementado com bus drivers
  • 35.
    • Pode serimplementado diretamente da expressão: • Mas também pode ser implementado com bus drivers Multiplexer (3) 11 March 2022 35
  • 36.
    Multiplexer (4) 11 March2022 36 • Mux 4:1 com portas apenas: ou com bus drivers:
  • 37.
    • Podemos colocarmultiplexers em cascata, que respondem ao mesmo seletor para ter mais entradas • No entanto em cascata vai ter mais atraso Multiplexer (5) 11 March 2022 37 =
  • 38.
    • Se quisermosmais bits • coloca-se um Mux por cada bit • Também podemos desenhar Mux multibit Multiplexer (6) 11 March 2022 38 bit0 (…) Mux 2:1 n bits bitn bit0 (…) Mux 2:1 n bits bitn
  • 39.
    • O seuobjetivo é encaminhar dados de uma entrada única para uma de várias possíveis saídas • A função inversa do Multiplexer • Cada entrada pode ter m bits • Neste caso as saídas também terão m bits • A saída a usar é selecionada pela entrada de Select (o valor binário do índice: Ak) Demultiplexer (1) 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 39
  • 40.
    Demultiplexer (1) • Podeser implementado da tabela de verdade . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 40
  • 41.
    Registos e barramentos(1) • O FF tipo D (de Data ou Delay) é usado para guardar dados • O valor recebido na entrada D é armazenado e colocado na saída Q em cada pulso de relógio ck, independentemente do valor anterior: • Como só tem uma entrada, basta uma linha para transportar o valor de um bit • Um FF SR ou JK necessitaria de duas linhas para transportar e armazenar o valor de um bit . 11 March 2022 41 Sistemas Digitais Helder Daniel hdaniel@ualg.pt ck D Qn+1 Operation 0 X Qn stable (read) 1 0 0 reset (write) 1 1 1 set (read)
  • 42.
    11 March 2022 SistemasDigitais Helder Daniel hdaniel@ualg.pt • Podemos com alguns FFs D ligados em paralelo armazenar um conjunto de bits num registo • Na imagem temos um registo de 4 bits com 4 FFs mas podíamos ter 8, 16, 32, 64, … Registos e barramentos (2) 42 4 bit register
  • 43.
    11 March 2022 SistemasDigitais Helder Daniel hdaniel@ualg.pt • O conjunto de todas as linhas de entrada é o barramento de entrada ou input bus ou inbus • À entrada D de cada FF temos ligada uma linha do inbus Registos e barramentos (2) 43
  • 44.
    • A entradade relógio C de cada FF está ligado a um AND à lógica de controlo • Para armazenar no registo o valor dos bits que estão no inbus • A lógica de controlo tem de colocar um pulso ALTO no AND, chamado de input strobe • Para que o clock passe o AND e chegue à entrada C de cada FF • E o valor na linha de input seja armazenada no FF Registos e barramentos (3) 44 input strobe
  • 45.
    • A cadasaída Q temos ligada uma linha (podíamos ter tb a Q’) • O conjunto de todas as linhas de saída é o barramento de saída ou output bus ou outbus • A saídas de cada FF do registo é ligada a um AND • Este AND é ligado também à lógica de controlo Registos e barramentos (4) 11 March 2022 45 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 46.
    Sistemas Digitais Helder Danielhdaniel@ualg.pt • A cada saída Q temos ligada uma linha (podíamos ter tb a Q’) • O conjunto de todas as linhas de saída é o barramento de saída ou output bus ou outbus • A saída de cada FF do registo é ligada a um BUS driver (basta um Tri-state buffer) • Este também é ligado à lógica de controlo Registos e barramentos (5) 11 March 2022 46
  • 47.
    11 March 2022 •Assim para colocar no outbus os valores que se encontram nos FFs do registo • Temos de ter um pulso ALTO no Enable do bus driver, vindo da lógica de controlo • Este pulso é chamado de output strobe Registos e barramentos (6) 47 output strobe
  • 48.
    11 March 2022 •Podemos implementar os registos também com FFs D com entrada de preset (ou set) e reset (ou clear) • É também costume representar todas as linhas do barramento por apenas uma para simplificar o circuito • Assim um registo, com os bus drivers de saída, seria: Registos e barramentos (7) 48 Sistemas Digitais Helder Daniel hdaniel@ualg.pt inbus input strobe clock Output strobe clock input strobe Output strobe
  • 49.
    11 March 2022 •A um barramento podemos ter vários registos ligados, para que comuniquem com o barramento • e assim também entre si Registos e barramentos (7) 49 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 50.
    11 March 2022 •Para que os dados de um registo sejam colocados no barramento, RE=1, para que o bus driver o ligue ao barramento • Para um registo ler os dados do barramento tem de ter WE = 1 • Não se deve ter dois registos com RE=1, pois misturaria os dados de ambos no barramento Registos e barramentos (7) 50 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 51.
    11 March 2022 •Para copiar os dados de um registo para outro coloca-se RE = 1 no registo fonte e WE = 1 no registo destino • No próximo pulso de relógio é feita a transferência pelo barramento Registos e barramentos (7) 51 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 1 ----- 1 ----- X X
  • 52.
    Registos e barramentos(8) 11 March 2022 52 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Podemos ter também bus drivers bidirecionais • Usam tri-state buffers em oposição • habilitados pela lógica combinatória • G’ habilita a comunicação quando for 0 • Se G’ = 0 e DIR = 0 habilita a comunicação no sentido A -> B • Se G’ = 0 e DIR = 1 habilita a comunicação no sentido B -> A • Podem ser usados nos portos digitais dos Microcontroladores, como o Arduíno, para selecionar input de dados ou output, no mesmo porto.
  • 53.
    Ficheiro de registos(1) • Podemos selecionar o acesso a um conjunto de registo com multiplexers e demultiplexers • Podemos ligar dois registos a uma ALU, para que sejam lidos 2 operandos e um terceiro para guardar o resultado de uma operação 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 53 Register file ALU mux mux demx
  • 54.
    8 registos den bits 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 54 Ficheiro de registos (2)
  • 55.
    reset assíncrono 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 55 Ficheiro de registos (2)
  • 56.
    11 March 2022 SistemasDigitais Helder Daniel hdaniel@ualg.pt 56 Ficheiro de registos (2) • we habilita a escrita • Ligado à entrada do DEMUX • sin seleciona qual a saída onde é colocado we • e assim qual o registo que está habilitado a receber dados de in
  • 57.
    11 March 2022 SistemasDigitais Helder Daniel hdaniel@ualg.pt 57 Ficheiro de registos (2) • sout0 e sout1 habilitam a leitura de registos • Ligados à entrada de seleção dos MUXs • selecionam qual o registo que é colocado na saída out0 e out1
  • 58.
    11 March 2022 SistemasDigitais Helder Daniel hdaniel@ualg.pt 58 Ficheiro de registos (2) • Podemos também colocar um bus driver em cada saída out0 e out1 • ligando a uma entrada re que controla quando as saídas são ligadas ao barramento
  • 59.
    Ficheiro de registos(3) • De uma forma simplificada o que temos é uma forma de – selecionar dois registos para serem lidos (operandos) – um para ser escrito (resultado) 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 59 Register file ALU mux mux demx
  • 60.
    Registos de deslocamento(shift) (1) 11 March 2022 60 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Ligando os FFs como visto, isto é em paralelo, podemos transferir informação entre registos em paralelo, isto é todos os bits de uma só vez, num ciclo de relógio • Mas por vezes é necessário transferir bits em série • Por exemplo se for necessário transmitir dados por um porto série, por exemplo USB • Para isso temos de aceder a cada bit no registo e enviá-lo em série • Podemos fazer isso com registos de deslocamento (shift registers)
  • 61.
    Registos de deslocamento(shift) (2) 11 March 2022 61 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Os registos de deslocamento permitem “rodar” os bits num registo para a esquerda ou para a direita • Exemplo de rotação para a direita: 10101001 11010100 11101010 • O bit à direita é perdido a não ser que seja guardado noutro lugar (para ser enviado por um porto série por exemplo) • O bit à esquerda pode ser preenchido com um valor por defeito: 1 ou 0 ou com o valor do bit mais à direita (neste caso a operação por vezes é chamada rotação ou rotate)
  • 62.
    Registos de deslocamento(shift) (3) 11 March 2022 62 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Os registos de deslocamento permitem também “deslocar” os bits num registo para a esquerda ou para a direita • Exemplo de deslocamento para a direita: 10101001 X1010100 -> 1 XX101010 -> 0 … • O bit à direita é perdido a não ser que seja guardado noutro lugar (para ser enviado por um porto série por exemplo) • O bit à esquerda pode ser preenchido com um valor por defeito: 1 ou 0 ou com o valor do bit mais à direita (neste caso a operação por vezes é chamada rotação ou rotate)
  • 63.
    Registos de deslocamento(shift) (3) 11 March 2022 63 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Os registos de deslocamento permitem também “deslocar” os bits num registo para a esquerda ou para a direita • Exemplo de deslocamento para a direita: 10101001 X1010100 -> 1 XX101010 -> 0 … • O bit à direita é perdido a não ser que seja guardado noutro lugar (para ser enviado por um porto série USB por exemplo) • O bit à esquerda pode ser preenchido com um valor por defeito: 1 ou 0 ou com o valor do bit mais à direita como já vimos (rotação)
  • 64.
    Registos de deslocamento(shift) (4) 11 March 2022 64 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • O deslocamento à esquerda e à direita pode servir também para efetuar operações de multiplicação e divisão na base 2 • Cada deslocamento à esquerda é uma multiplicação por 2 • Para multiplicar um valor por quatro desloca-se 2 vezes à esquerda (22): 00000100 (410) 00001000 (810) 00010000 (1610) 00100000 (3210) • Nestes casos o bit mais à direita é preenchido com o valor 0
  • 65.
    Registos de deslocamento(shift) (4) 11 March 2022 65 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • O deslocamento à esquerda e à direita pode servir também para efetuar operações de multiplicação e divisão na base 2 • Cada deslocamento à direita é uma divisão inteira por 2 (a parte fracionária é perdida) • Para dividir um valor por oito desloca-se 3 vezes à direita (23): 00001001 (910) 00000100 (410) 00000010 (210) 00000001 (110) • Nestes casos o bit mais à esquerda é preenchido com o valor 0
  • 66.
    Registos de deslocamento(shift) (5) 11 March 2022 66 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • O deslocamento à esquerda e à direita pode servir também para efetuar operações de multiplicação e divisão com sinal (C/2) • Números com sinal:  10001000 (-12010) -128 + 8 = -120  11000100 (-6010) -128 + 64 + 4 = -60  11100010 (-3010) -128 + 64 + 32 + 2 = -30  11000100 (-6010)  10001000 (-12010) • Nestes casos o bit mais à esquerda fica com o mesmo valor: o sinal • o bit mais à direita é preenchido com o valor 0
  • 67.
    Registos de deslocamento(shift) (6) 11 March 2022 67 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • O deslocamento à esquerda e à direita pode servir também para efetuar operações de multiplicação e divisão de números reais • Números reais, parte do registo tem a parte inteira, o outro a fraccional (fixed point). Exemplo: 16 bits, 8 inteiros e 8 fracionais:  00000010 (210) (,) 01000000 (0.2510)  00000100 (410) (,) 10000000 (0.510)  00001001 (910) (,) 00000000 (010)  00000100 (410) (,) 10000000 (0.510)  00000010 (210) (,) 01000000 (0.2510) • Nestes casos o bit mais à direita e mais à esquerda são preenchidos com o valor 0
  • 68.
    • Um registode deslocamento contém FFs montados de forma a passar a sua informação para a direita ou para a esquerda • Para um registo com deslocamento apenas para a direita, temos os FFs ligados em série, como na figura. • Em cada ciclo de relógio é efetuado um deslocamento de todos os bits para a direita (A saída de cada FF é inserida na entrada do FF à direita) Registos de deslocamento (shift) (7) 11 March 2022 68 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 69.
    • Os registosde deslocamento podem ser implementados com diversos tipos de FFs Registos de deslocamento (shift) (8) 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 69
  • 70.
    • Podemos tambémfazer rotação de bits no registo manipulando apenas as linhas de saída • Em cada ciclo de relógio é efetuado um deslocamento de todos os bits para a esquerda. carry 10100001 1  01000010 0  10000100 • Na direita é introduzido um zero • o bit que saí fica na carry (uma flag de estado do CPU como veremos) Registos de deslocamento (shift) (9) 11 March 2022 70 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 71.
    • Podemos tambémfazer rotação de bits no registo manipulando apenas as linhas de saída • Em cada ciclo de relógio é efetuado um deslocamento de todos os bits para a esquerda. carry 10100001 1  01000010 0  10000100 • Na direita é introduzido um zero • o bit que saí fica na carry (uma flag de estado do CPU como veremos) Registos de deslocamento (shift) (9) 11 March 2022 71 Sistemas Digitais Helder Daniel hdaniel@ualg.pt No Digital podemos manipular n bits de uma só vez Num registo indica-se nas propriedades que manipula 8 bits se quisermos fazer manipulação de cada bit individual: usamos um spliter ( distribuidor)
  • 72.
    • Podemos tambémfazer rotação de bits no registo manipulando apenas as linhas de saída • Em cada ciclo de relógio é efetuado um deslocamento de todos os bits para a esquerda. carry 10100001 1  01000011 0  10000110 • Na direita é introduzido o bit mais à esquerda • o bit que vai da esquerda para a direita pode ser colocado no carry Registos de deslocamento (shift) (9) 72
  • 73.
    Registos de deslocamento(shift) (10) 11 March 2022 73 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Um registo de deslocamento contém FFs montados de forma a passar a sua informação para a direita ou para a esquerda • Passar significa deslocar (shift) • Estes registos agrupam-se em 4 tipos: – Entrada paralela, saída série: Os bits são escritos em paralelo mas são lidos em série deslocando à esquerda ou à direita – Entrada série, saída paralela: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em paralelo – Entrada série, saída série: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em série pelo outro extremo • Nestes casos o bit mais à esquerda é preenchido com o valor 1 • Para multiplicar por 2 desloca-se à esquerda
  • 74.
    • Um registode deslocamento contém FFs montados de forma a passar a sua informação para a direita ou para a esquerda • Passar significa deslocar (shift) • Estes registos agrupam-se em 4 tipos: – Entrada série, saída paralela: Os bits são escritos em série entrando e deslocando pela esquerda ou direita e lidos em paralelo – Entrada série, saída série: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em série pelo outro extremo • NesEntrada paralela, saída série: Os bits são escritos em paralelo mas são lidos em série deslocando à esquerda ou à direita • tes casos o bit mais à esquerda é preenchido com o valor 1 • Para multiplicar por 2 desloca-se à esquerda Registos de deslocamento (shift) (10) 11 March 2022 74 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 75.
    • Um registode deslocamento contém FFs montados de forma a passar a sua informação para a direita ou para a esquerda • Passar significa deslocar (shift) • Estes registos agrupam-se em 4 tipos: – Entrada série, saída série: Os bits são escritos em série entrando e deslocando pela esquerda ou direita e lidos em série – Entrada série, saída paralela: Os bits são escritos em série entrando e deslocando pela esquerda ou direita e lidos em paralelo – outro extremo • NesEntrada paralela, saída série: Os bits são escritos em paralelo mas são lidos em série deslocando à esquerda ou à direita • tes casos o bit mais à esquerda é preenchido com o valor 1 • Para multiplicar por 2 desloca-se à esquerda Registos de deslocamento (shift) (10) 11 March 2022 75 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 76.
    Registos de deslocamento(shift) (10) 11 March 2022 76 Sistemas Digitais Helder Daniel hdaniel@ualg.pt • Um registo de deslocamento contém FFs montados de forma a passar a sua informação para a direita ou para a esquerda • Passar significa deslocar (shift) • Estes registos agrupam-se em 4 tipos: – Entrada paralela, saída paralela: Os bits são escritos em paralelo e lidos também em paralelo. Este tipo permite fazer rotação de bits. – Entrada série, saída paralela: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em paralelo – Entrada série, saída série: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em série pelo outro extremo • Nestes casos o bit mais à esquerda é preenchido com o valor 1 • Para multiplicar por 2 desloca-se à esquerda
  • 77.
    • Um registode deslocamento contém FFs montados de forma a passar a sua informação para a direita ou para a esquerda • Passar significa deslocar (shift) • Um registo de deslocamento universal incluí os 4 tipos – Entrada série, saída série – Entrada paralela, saída paralela – Entrada série, saída paralela: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em paralelo – Entrada série, saída série: Os bits são armazenados em série entrando e deslocando pela esquerda ou direita e lidos em série pelo outro extremo • Nestes casos o bit mais à esquerda é preenchido com o valor 1 • Para multiplicar por 2 desloca-se à esquerda Registos de deslocamento (shift) (10) 11 March 2022 77 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 78.
    Barrel shifter (1) •O registo de deslocamento apresentado pode apenas deslocar um bit em cada ciclo • Se for pretendido deslocar mais que um bit são necessários caminhos de dados alternativos: – Do bit de ordem n para o bit n+1 LEFT Shifter – Do bit n para o bit n+2, … • Uma solução é utilizar multiplexers que encaminham cada bit do registo para as possíveis saídas • Numa montagem em árvore, para minimizar o número de muxs Há outras implementações possíveis com transístores (sem multiplexers) 11 March 2022 78 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 79.
    Barrel shifter (1) •O registo de deslocamento apresentado pode apenas deslocar um bit em cada ciclo • Se for pretendido deslocar mais que um bit são necessários caminhos de dados alternativos: – Do bit de ordem n para o bit n+1 LEFT Shifter – Do bit n para o bit n+2, … • Uma solução é utilizar multiplexers que encaminham cada bit do registo para as possíveis saídas • Numa montagem em árvore, para minimizar o número de muxs • exemplo: um mux 4:1 são 3 mux 2:1 em árvore 11 March 2022 79 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 80.
    Barrel shifter (1) •O registo de deslocamento apresentado pode apenas deslocar um bit em cada ciclo • Se for pretendido deslocar mais que um bit são necessários caminhos de dados alternativos: – Do bit de ordem n para o bit n+1 LEFT Shifter – Do bit n para o bit n+2, … • Uma solução é utilizar multiplexers que encaminham cada bit do registo para as possíveis saídas • Numa montagem em árvore, para minimizar o número de muxs Há outras implementações possíveis com transístores (sem multiplexers) 11 March 2022 80 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 81.
    Barrel shifter (2) •Vamos ver um Left barrel shifter para registo de 4 bits no Digital 81 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 11 March 2022
  • 82.
    Barrel shifter (3) •Left barrel shifter para registo de 4 bits no Digital. • N indica quantos bits deslocar num só ciclo • Se o registo R0 = 0010 • N=0 R0 = 0010 • N=1 R0 = 0100 • N=2 R0 = 1000 • N=3 R0 = 0001 Em LEFT shift o bit 0 poderá ir para 0, 1, 2, 3, dependendo de N Se fosse RIGHT iria para: 0, 3, 2, 1 As ligações nos MUXs determinam a direção de rotação 82
  • 83.
    Barrel shifter (3) •Left barrel shifter para registo de 4 bits no Digital. • N indica quantos bits deslocar num só ciclo • Se o registo R0 = 0010 • N=0 R0 = 0010 • N=1 R0 = 0100 • N=2 R0 = 1000 • N=3 R0 = 0001 Em LEFT shift o bit 1 poderá ir para 3, 0, 1, 2, dependendo de N Se fosse RIGHT iria para: 1, 0, 3, 2 11 March 2022 83
  • 84.
    Barrel shifter (3) •Left barrel shifter para registo de 4 bits no Digital. • N indica quantos bits deslocar num só ciclo • Se o registo R0 = 0010 • N=0 R0 = 0010 • N=1 R0 = 0100 • N=2 R0 = 1000 • N=3 R0 = 0001 Em LEFT shift o bit 2 poderá ir para 2, 3, 0, 1, dependendo de N Se fosse RIGHT iria para: 2, 1, 0, 3 11 March 2022 84
  • 85.
    Barrel shifter (3) •Left barrel shifter para registo de 4 bits no Digital. • N indica quantos bits deslocar num só ciclo • Se o registo R0 = 0010 • N=0 R0 = 0010 • N=1 R0 = 0100 • N=2 R0 = 1000 • N=3 R0 = 0001 Em LEFT shift o bit 3 poderá ir para 1, 2, 3, 0, dependendo de N Se fosse RIGHT iria para: 3, 2, 1, 0 11 March 2022 85
  • 86.
    Barrel shifter (3) •Left barrel shifter para registo de 4 bits no Digital. • N indica quantos bits deslocar num só ciclo • Se o registo R0 = 0010 • N=0 R0 = 0010 • N=1 R0 = 0100 • N=2 R0 = 1000 • N=3 R0 = 0001 11 March 2022 86 Temos aqui um exemplo de uma operação que pode ser implementada na ALU outras operações: AND, or, +, -, …. No próximo capítulo veremos a ALU
  • 87.
    Left and rightbarrel shifter • Podemos usar o mesmo hardware para: – deslocar para a direita – deslocar para a esquerda • por exemplo, tendo um left shifter, para deslocar para a direita: 1) inverter a ordem dos bits 2) deslocar para a esquerda 3) inverter a ordem dos bits 11 March 2022 87 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 88.
    Left and rightbarrel shifter • Podemos usar o mesmo hardware para: – deslocar para a direita – deslocar para a esquerda • por exemplo, tendo um left shifter, para deslocar para a direita: 10110000 >> 2 = 00101100 1) inverter a ordem dos bits: 00001101 2) deslocar para a esquerda 2 bits: 00110100 3) inverter a ordem dos bits: 00101100 11 March 2022 88 Sistemas Digitais Helder Daniel hdaniel@ualg.pt
  • 89.
    Logarithmic shifters • Reduzemo hardware, mas … • … têm um maior datapath • Efetuam o deslocamento por estágios: – deslocamento de 0 a 7 lugares log2(8) = 3 estágios – deslocamento de 0 a 31 lugares log2(32) = 5 estágios 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 89
  • 90.
    Logarithmic shifters • baseadosem Muxs • Este exemplo permite deslocamento [0, 7], entradas: S0, S1 e S2 • 3 estágios . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 90 S2 S1 S0 D7 D6 D5 D4 D3 D2 D1 D0 Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (7,1) (6,1) (5,1) (4,1) (3,1) (2,1) (1,1) (0,1) (7,2) (6,2) (5,2) (4,2) (3,2) (2,2) (1,2) (0,2) (7,3) (6,3) (5,3) (4,3) (3,3) (2,3) (1,3) (0,3) (7,0) (6,0) (5,0) (4,0) (3,0) (2,0) (1,0) (0,0)
  • 91.
    Logarithmic shifters • baseadosem DeMux • Este exemplo permite deslocamento [0, 7], entradas: S0, S1 e S2 • 3 estágios . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 91 Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 D7 D6 D5 D4 D3 D2 D1 D0 S2 S1 S0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (7,1) (6,1) (5,1) (4,1) (3,1) (2,1) (1,1) (0,1) (7,2) (6,2) (5,2) (4,2) (3,2) (2,2) (1,2) (0,2) (7,3) (6,3) (5,3) (4,3) (3,3) (2,3) (1,3) (0,3) (7,0) (6,0) (5,0) (4,0) (3,0) (2,0) (1,0) (0,0)
  • 92.
    Barrel wire shifters •Executam o deslocamento de n bits em um ciclo de relógio • Array ou crossbar shifters • Apenas alinham caminhos para os bits, com transístores ou Drivers . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 92
  • 93.
    Barrel wire shifters •Abaixo temos um exemplo para 4 bits • Para N bits necessitam de N2 transístores. • Podem ter problemas elétricos para palavras muito grandes . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 93
  • 94.
    Barrel wire shifters •Abaixo temos um exemplo para 4 bits • Para N bits necessitam de N2 transístores. • Podem ter problemas elétricos para palavras muito grandes • Pode-se usar uma montagem por estágios, como nos shifters logarítmicos • Reduz o nº de transístores para:N*log2(N) mas o nº de estágios é log2(N) . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 94 bits crossbar (transístores/estágios) logarítmico (transístores/estágios) 8 8 * 8 = 64 / 1 8 * 3 = 24 / 3 32 32*32 = 1024 / 1 32 * 5 = 160 / 5 64 64*64 = 4096 / 1 64 * 6 = 384 / 6
  • 95.
    Barrel wire shifters •Abaixo temos um exemplo para 4 bits • Para N bits necessitam de N2 transístores. • Podem ter problemas elétricos para palavras muito grandes • Pode-se usar uma montagem por estágios, como nos shifters logarítmicos • Reduz o nº de transístores para:N*log2(N) mas o nº de estágios é log2(N) . 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 95 bits crossbar (transístores/estágios) logarítmico (transístores/estágios) 8 8 * 8 = 64 / 1 8 * 3 = 24 / 3 32 32*32 = 1024 / 1 32 * 5 = 160 / 5 64 64*64 = 4096 / 1 64 * 6 = 384 / 6 • Numa ALU dependendo da forma como é implementado o somador e o carry look-ahead • É possível que os estágios do shifter tenham um datapath com um comprimento semelhante ao somador
  • 96.
    Counters (1) • Contadorespodem contar em: – Binary – Gray (…) • Ascendente/descendente • Podem ser inicializados com zero, ou com outro valor, tal como um registo • Por exemplo o MC1451B - binary up/down counter Pode receber um valor de inicialização nas linhas: P0 a P3, qd PE=1 datasheet: http://www.onsemi.com/pub_link/Collateral/MC14516B-D.PDF 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 96
  • 97.
    Counters (2) • Contadorespodem contar em: – Binary – Gray (…) • Ascendente/descendente • Também pode dar uma indicação de carry: quando passa de 15 -> 0 ou de 0 -> 15 na linha "CARRY OUT" 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 97
  • 98.
    Counters (3) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 98 • Podemos projetar contadores que apenas contem parte dos estados possíveis • Por exemplo, com 4 FFs temos um contador mod 16: 0,1,2, …, 14, 15, 0, 1, ….
  • 99.
    Counters (3) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 99 • Podemos projetar este contador para que apenas conte (mod10): 0,1,2, …, 8, 9, 0, 1, … • Mas a lógica necessária de adicionar pode ser mais complexa do que …
  • 100.
    Counters (4) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 100 • … do que usar um chip disponível no mercado e adicionar lógica para fazer reset quando desejado • Para um contador mod 10 para fazer reset quando a saída for 10. • É necessário que o chip tenha um reset assíncrono 10(10) = 1010(2) Q3 = 1 Q2 = 0 Q1 = 1 Q0 = 0
  • 101.
    Counters (5) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 101 • Num CPU, o program counter • é um registo especial, um contador, que é utilizado para apontar o endereço de memória da instrução a executar • Pode ser incrementado ou decrementado como um contador, ou carregado com o endereço da próxima instrução
  • 102.
    CPU (1) 11 March2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 102 • Um CPU elementar tem pelo menos: registos ALU (efetua operações: AND, OR, …, +, -, …. SHIFT, …) Lógica de controlo (interpreta o programa): Seleciona registo(s) fonte Seleciona registo destino Seleciona operação
  • 103.
    CPU (2) • Porexemplo, se tivermos 4 registos: R0, R1, R2, R3 • E quisermos fazer a operação: R1 = R0 + R2 • Lógica de controlo: – Seleciona registos fonte: R0, R2 – Seleciona registo destino: R1 – Seleciona operação: Adição 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 103 R0 R1 R2 + Register file ALU mux mux demx Control logic data bus control bus
  • 104.
    CPU (2) • Porexemplo, se tivermos 4 registos: R0, R1, R2, R3 • E quisermos fazer a operação: R1 = R0 + R2 • Lógica de controlo: – Seleciona registos fonte: R0, R2 – Seleciona registo destino: R1 – Seleciona operação: Adição 11 March 2022 Sistemas Digitais Helder Daniel hdaniel@ualg.pt 104 Nos próximos capítulos: • Memória • ALU • intro: Lógica de controlo e código máquina R0 R1 R2 + Register file ALU mux mux demx Control logic data bus control bus