UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO AUTOMA ÇÃO - DCA
LISTA DE EXERCÍCIOS CIRCUITOS DIGITAIS
ELDER SANTOS SILVA 2015013591
NATAL-RN, 2017
Lista de questões feitas
Q1
Q10
Q19
Q2
Q11
Q23
Q3
Q12
Q24
Q4
Q13
Q25
Q5
Q14
Q26
Q6
Q15
Q36
Q7
Q16
Q37
Q8
Q17
Q38
Q9
Q18
Q1. No registrador de carga paralela, quando o load for 0, a saída mantém seu valor anterior, já quando o load for 1, a saída receberá o valor atual da entrada. Além disso, quando o clear for 1, a saída será zero independentemente de qualquer outro valor. Vale também salientar que os valores do load e do clear só serão passados adiante para o registrador na subida do clock.
Q2. Criando registrador em 4 passos: 1. Determinar tamanho do MUX de acordo com o número de operações: problema define um MUX 4x1 que realiza 4 operações;
2. Criar tabela de operação do MUX: codificar cada operação com um valor de S0 e S1.
S1
S0
Operação
0
0
Manter valor presente
0
1
Carregar entradas
1
0
Apresentar 0000
1
1
Apresentar complemento do registro atual
3. Conectar entradas do MUX: consiste em conectar as entradas dos MUXs adequadamente aos flip-flops do registrador, de modo que os seletores, compartilhados entre os MUXs, determinem qual entrada passará para saída.
4. Linhas de mapa de controle: consiste em mapear cada operação do registrador, que equivale a uma combinação de S0 e S1, com uma entrada externa ao MUX específica para realização de tal operação.
Entradas
Saídas
CLR
CMPLT
LOAD
S1
S0
Operação
0
0
0
0
0
Manter valor presente
0
0
1
0
1
Carregar entradas
1
X
X
1
0
Apresentar 0000
0
1
X
1
1
Apresentar complemento do registro atual
Lógica combinacional dos seletores: S0 = CLR’*CMPLT’*LOAD + CLR’*CMPLT S1 = CLR + CLR’*CMPLT
Q3. Projetando o sistema: 1. Escolher tamanho do MUX que ficará na frente de cada flip-flop: a. Como o sistema é simples e realiza apenas as operações de salvar e manter valor presente, um MUX 2x1 é o suficiente. 2. Criar tabela de operação do MUX: Seja L0 o seletor do MUX, temos a seguinte tabela de operações:
L0
Operação
0
Manter valor presente
1
Salvar
3. Conectando as entradas dos MUXs com os flip-flops e montando circuito:
4. Criando linhas de mapa de controle:
Entradas
Saídas
R
S
L0
Operação
1
X
0
Manter valor presente
0
1
1
Carregar entradas
Lógica do circuito combinacional: L0 = R’*S
Q4.
Breve explicação do funcionamento: o sistema possui uma entrada de 8 bits I que será carregada em três registradores (Ra, Rb e Rc) quando as respectivas entradas La, Lb e/ou Lc forem 1 e a entrada R for 0. Quando R for 1, o MUX permitirá a passagem da entrada I1 e os registradores carregarão a saída do seu vizinho que se encontra à esquerda do seguinte modo: Ra = Rb, Rb = Rc, Rc = Ra. A entrada R possui prioridade sobre as entradas La, Lb e Lc, pois quando R for 1, não importa o valor de L, o registrador sempre carregará a saída do vizinho.
Q5. Somando a = 111 com b = 011:
Num intervalo de 2ns, um somador completo (FA) realiza a operação de soma dos bits (a, b e ci), propaga o resultado s quase que imediatamente e, com um pouco de delay, propaga também o valor do carry on. Então, como temos um somador para cada bit do número (3, neste caso), precisa-se de 3 ciclos de soma para que os carries se propaguem adequadamente, chegando até as entradas ci, e o resultado seja correto.
Q6. AND = 2ns, OR = 1ns, XOR = 3ns Para somar cada bit dos dois números a e b de 8 bits é necessário um somador como esse da figura. Neste caso, considerando os atrasos descritos acima, temos a seguinte situação: todos os bits das entradas “a” e “b” chegam no
somador imediatamente, então, passam pelas portas lógicas e chegam às saídas “co” e “s” com 3ns de atraso. No entanto, a entrada “ci” vem da saída “co” do somador do bit anterior, portanto demora 3ns para poder chegar, gerando um atraso adicional em cada somador, exceto no primeiro cuja entrada “ci” é zero. Seguindo esse raciocínio, temos:
3ns * 8 somador es = 24ns para realizar a soma corretamente. Q7.
Basta cascatear 3 somadores de 4 bits, ligando a saída “co” de um na entrada “ci” do próximo. Lembrando que, internamente, cada somador de 4 bits é formado por 4 somadores completos de 1 bit cada, por isso, como precisa-se somar apenas 10 bits, os somadores de índices 10 e 11 não serão utilizados, fazendo com que a saída “co” seja deslocada para uma posição após a última saída de soma “s”, neste caso, “s10”. Basta lembrar do funcionamento individual de cada somador interno que forma os somadores de 4 bits.
Q8. A temperatura T de 8 bits, que sai do sensor, entra no somador e é compensada
(somada)
de acordo com o valor desejado,
através
do
acionamento das chaves “a”, “b” e “c”.
Q9.
O primeiro comparador vai comparar os dois primeiros números de 4 bits. Se eles forem iguais, as saídas “AgtB”, “AeqB” e “AltB” serão, respectivamente, 0 1 0 e entraram nas entradas “Igt”, “Ieq” e “Ilt” do segundo comparador, forçando, assim, a comparação entre o primeiro (ou segundo, são iguais) número e o terceiro número. Se as saídas do segundo comparador também forem 0 1 0, significa que os três números são iguais.
Q10.
*OBS: saída gte = 1 e lte = 1 indica que os números são iguais. Equações dos comparadores de 1 bit: out_gte = (in_gte * in_lte’) + ((in_gte * in_lte) * ((a * b’) + (a XNOR b))) out_lte = (in_gte’ * in_lte) + ((in_gte * in_lte) * ((a’ * b) + (a XNOR b)))
Raciocínio: Cada
comparador
individual
(estágio)
deve,
primeiramente,
levar
em
consideração a comparação do estágio anterior. Se a saída da comparação do estágio anterior for out_gte = 1 e out_lte = 1, indicando que o par de bits é igual, então deve-se comparar os valores de a e b atuais. Caso contrário, se o estágio anterior indicar que existe um valor maior que o outro (out_gte = 1 e out_lte = 0, por exemplo), esta saída da comparação deve se propagar até o final do comparador, independentemente dos demais bits que estavam esperando para serem comparados.
Q11.
Raciocínio: inicialmente, no comparador superior, compara-se os dois primeiros números de 8 bits, “a” e “b”. Se “a” < “b”, então a saída “AltB” será 1 e , consequentemente, o seletor do MUX 2x1, “S0”, também será 1, permitindo a passagem da entrada “I1”, que recebe o valor de “a”. Caso contrário, o MUX propagará o valor da entrada “I0”. No comparador inferior, compara-se o outro número de 8 bits, “c”, com o menor valor do comparador superior, “O”, propagado pelo MUX. Se “c” < “O”, o seletor “S0” será 1, e propagará o valor de “c”, indicando que ele é o menor dentre os três números de 8 bits iniciais. Caso contrário, “O” será o menor.
Q12.
Raciocínio: basta comparar um número qualquer “a” de 8 bits com os limites do intervalo, 75 e 100, respectivamente. No primeiro comparador, a saída “AgtB” será 1 quando “a” > 01001011 (75 em binário). Já no segundo comparador, a saída “AltB” será 1 quando “a” < 01100100 (100 em binário). Unindo essas duas saídas dos comparadores por uma porta AND, “S” será 1 quando ambas as condições forem satisfeitas.
Q13.
Raciocínio: seja o número de 8 bits T a temperatura corporal, basta fazer as devidas comparações. O primeiro comparador define A = 1 se T é menor ou igual que 95 (01011111 em binário), por meio de uma porta OR conectada nas saídas AeqB (A = B) e AltB (A < B). O segundo comparador, em conjunto com o primeiro, seta B = 1 se T está no intervalo entre 96 e 204 (11001100 em binário), por meio de uma porta AND conectada na saída AgtB (A > B) do primeiro comparador e AltB (A < B) do segundo comparador. Já o terceiro comparador, define C = 1 se T é maior ou igual que 105 (01101001 em binário), de maneira análoga ao primeiro caso, porém, agora, usando a saída AgtB (A > B) invés de AltB.
Q14.
Raciocínio: o multiplicador do tipo array-style imita a maneira de multiplicar à mão. Dois números de 8 bits são multiplicados da seguinte forma: cada bit do multiplicador (b), multiplica todos os bits do multiplicando (a), por meio de uma porta AND, cuja lógica é idêntica à da multiplicação. Então, a cada multiplicação, é gerado um produto parcial (neste caso, 8 bits, 8 multiplicações, 8 produtos parciais) com um bit zero à mais adicionado na sua extremidade direita, correspondente ao deslocamento feio à mão, este produto parcial se soma ao produto parcial da próxima multiplicação e assim sucessivamente, até que todos os bits do multiplicador tenham multiplicado os bits do multiplicando.
Q15.
Raciocínio: o primeiro multiplicador (mais da esquerda) realiza a operação A*B e sua saída entra no outro multiplicador para que seja feita a operação (A*B)*C. No multiplicador inferior, é realizada a operação D*3 (11 em binário). As duas saídas dos multiplicadores do meio são somadas e o resultado é somado novamente com 12 (1100), dando origem a saída F.
Q16. Decimal: a) 011111111 Primeiro bit 0 => positivo. Basta converter normalmente: 011111111 = 255.
b) 111111111 Primeiro bit 1 => negativo. Inverte todos os bits e soma 1, depois converte o valor obtido e acrescenta o sinal negativo: 111111111 => 000000000 + 1 = 000000001 = -1
c) 100000000 100000000 => 011111111 + 1 = 100000000 = -256
d) 110000000 110000000 => 001111111 + 1 = 010000000 = -128
e) 111111110 111111110 => 000000001 + 1 = 000000010 = -2
Q17. Complemento de 2 de 8 bits: a) 6 Número positivo: basta converter normalmente por divisões sucessivas por 2 (agrupando os restos do último para o primeiro) e adicionar um bit 0 na frente representando o sinal positivo. Neste caso, completa-se com zeros até que se tenha 8 bits. 6/2 = 3, R = 0
1/2 = 0, R = 1
3/2 = 1, R = 1
6 = 00000110
b) 26 26/2 = 13, R = 0
3/2 = 1, R = 1
13/2 = 6, R = 1
1/2 = 0, R = 1
6/2 = 3, R = 0
26 = 00011010
c) -8 Número negativo: converte normalmente utilizando o mesmo procedimento descrito anteriormente, depois completa-se os bits com 0 até completar os 8 bits e encontra-se seu complemento de 2, invertendo os bi ts e somando 1. 8/2 = 4, R = 0
8 = 00001000
4/2 = 2, R = 0
Comp. de 2: 11110111 + 1 = 11111000
2/2 = 1, R = 0
-8 = 11111000
1/2 = 0, R = 1
d) -30 30/2 = 15, R = 0
1/2 = 0, R = 1
15/2 = 7, R = 1
30 = 00011110
7/2 = 3, R = 1
Comp. de 2: 11100001 + 1 = 11100010
3/2 = 1, R = 1
-30 = 11100010
e) -60 60/2 = 30, R = 0
1/2 = 0, R = 1
30/2 = 15, R = 0
60 = 00111100
15/2 = 7, R = 1
Comp. de 2: 11000011 + 1 = 11000100
7/2 = 3, R = 1
-60 = 11000100
3/2 = 1, R = 1
f) -90 90/2 = 45, R = 0
1/2 = 0, R = 1
45/2 = 22, R = 1
90 = 01011010
22/2 = 11, R = 0
Comp. de 2: 10100101 + 1 =
11/2 = 5, R = 1
10100110
5/2 = 2, R = 1
-90 = 10100110
2/2 = 1, R = 0
Q18. Dividindo o projeto em etapas para facilitar no desenvolvimento: 1. Definir quais entradas e saídas são necessárias ao subtrator completo:
Entradas: “a” e “b” os números a serem subtraídos (a - b), e “wi” o valor emprestado para coluna direita.
Saídas: “s” o resultado da subtração e “wo” o valor que foi emprestado pela coluna esquerda. 2. Criar tabela verdade afim de descrever o comportamento esperado do subtrator:
a
b
wi
s
wo
0
0
0
0
0
0
0
1
1
1
0
1
0
1
1
0
1
1
0
1
1
0
0
1
0
1
0
1
0
0
1
1
0
0
0
1
1
1
1
1
3. Extrair as equações das saídas à partir da tabela verdade: s = a’*b’*wi + a’*b*wi’ + a*b’*wi’ + a*b*wi s = a’*(b’*wi + b*wi’) + a*(b’wi’ + b*wi) s = a’*(b XOR wi) + a*(b XNOR wi)
wo = a’*b’*wi + a’*b*wi’ + a’*b*wi + a*b*wi wo = a’*(b’*wi + b*wi’) + b*wi*(a’ + a) wo = a’*(b XOR wi) + b*wi 4. Construir o projeto com portas lógicas:
Q19. Dividindo o projeto em etapas para facilitar o desenvolvimento: 1. Definir entradas e saídas do sistema:
Entradas: “A” que representa um número binário com sinal de 8 bits. Saídas: “Q” que representa o valor absoluto de “A”, um número binário sem sinal de 8 bits. 2. Capturar comportamento do sistema e criar equações para as saídas: Quando o bit mais significativo de “A” for 0, “ A” será positivo e, portanto, Q = A. Mas quando o bit mais significativo de “A” for 1, “A” será negativo e, portanto, Q = complemento de 2 de A. 3. Projetar circuito:
Q23.
Raciocínio: a entrada I, de 8 bits, tem cada um de seus bits ligado a um deslocador que, quando shr = 0, permite a passagem dos bits da entrada I para saída O, também de 8 bits, sem deslocamento. No entanto, quando shr = 1, cada bit da entrada I é colocado na entrada que está duas posições à sua direita e são preenchidas com zero as duas primeiras entradas, fazendo com que a saída O fique deslocada duas posições para direita.
Q24.
Raciocínio: basta somar todas as entradas (duas a duas) e depois deslocar o resultado final da soma dois bits para direita, que é equivalente a dividir o número por 4.
a) A figura da esquerda ignora os problemas de overflow, mantendo a mesma quantidade de fios. Informações serão perdidas.
b) A figura da direita leva em consideração o overflow e adiciona os fios necessários para evitar a perda de informações na saída dos somadores, além de remover os fios desnecessários na saída do deslocador.
Q25. Raciocínio: basta pegar a entrada A, deslocar seus bits 4 posições para esquerda (equivalente à multiplica-la por 8) depois somá-la com ela mesmo sem deslocamento, resultando em D = 9*A.
Q26. Raciocínio: basta coloca DEMUX 1x6 e, a partir dos seletores a, b e c escolher para qual das saídas se deseja mandar a entrada I. A saída escolhida terá o deslocador apropriado para realizar a devida multiplicação.
OBS: cada deslocamento de 1 posição para
esquerda,
equivale
a
uma
multiplicação por 2.
Q36. Em circuitos digitais, dois critérios importantes são considerados como avaliadores de qualidade do circuito: atraso (delay) e t amanho (size).
Otimização: quando se consegue projetar um circuito que realiza a mesma tarefa de outro, mas que seja melhor em ambos os critérios citados acima ou pelo menos melhor em um e igual no outro. Por exemplo, um circuito com menos atrasos de portas lógicas e menos entradas de portas.
Tradeoff: quando se consegue projetar um circuito que realiza a mesma tarefa de outro, mas que melhore em um dos critérios e piore no outro. Por exemplo, um circuito com menos entradas de portas, porém, com mais atrasos de portas lógicas.
Q37. F(a; b; c) = ab’c + abc + a’bc + abc’
a) Métodos algébricos: F = ab’c + abc + a’bc + abc’ F = ab’c + abc + abc + abc + a’bc + abc’ F = ac(b’ + b) + bc(a + a’) + ab(c + c’) F = ab + ac + bc
OBS: repetir um termo na equação booleana não altera a expressão. b) Mapa K:
F = ab + ac + bc
Q38. F(a; b; c; d) = a’bc’ + abc’d’ + abd
F = abd + bc’
OBS: quando o literal estiver faltando no produto, coloca-se 1 no mapa para todos os valores do literal faltante.