Mudanças entre as edições de "CIL29003-2015-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 59: Linha 59:
 
=Diário de aulas=
 
=Diário de aulas=
  
<div style="font-size: 140%;"><span style="background:#ff0">'''As listas de exercício encontra-se ao final de cada aula'''</span></div>
+
<div style="font-size: 140%;"><span style="background:#ff0">'''As listas de exercício encontra-se no final do texto de cada aula'''</span></div>
  
 
{{Collapse top |Aula 1 - 3/2/15: Apresentação da disciplina}}
 
{{Collapse top |Aula 1 - 3/2/15: Apresentação da disciplina}}

Edição das 15h56min de 2 de março de 2015

Dados Importantes

Professor: Odilson Tadeu Valle
Email: odilson@ifsc.edu.br
Atendimento paralelo: 2ª das 17h35 às 18h30 e 6ª das 9h40 às 10h35. Local: Lab. de Desenvolvimento.

  • Avaliações
    • 3 avaliações (P1, P2 e P3) mais um projeto final (PF).
    • Cada uma das avaliações terá terá um conceito numérico: 1, 2, ..., 9, 10. Conceito mínimo para não necessitar reavaliação: 6.
    • Um ou mais conceitos abaixo de 6 implica na realização da reavaliação: uma única a ser realizada no último dia de aula.

IMPORTANTE: o direito de recuperar uma avaliação em que se faltou somente existe mediante justificativa reconhecida pela coordenação. Assim, deve-se protocolar a justificativa no prazo de 48 horas, contando da data e horário da avaliação e aguardar o parecer da coordenação.

Plano de Ensino

Cronograma de atividades
Aula Data Horas Conteúdo Recursos
1 4/2 2 Aula inaugural, apresentação da disciplina Sala de Aula, Projetor multimídia
2 6/2 2 Sistemas de numeração Binário, Octal, Hexadecimal e conversão entre sistemas. Sala de Aula, Projetor multimídia
3 11/2 2 Códigos Gray, Binário, BCD e one-hot, representaçao de números negativos: sinal-magnitude e complemento de 2 Sala de Aula, Projetor multimídia
4 13/2 2 Ponto fixo e ponto flutuante Sala de Aula, Projetor multimídia
5 20/2 2 Soma e subtraçao binária (com complemento de 2) Sala de Aula, Projetor multimídia
6 25/2 2 Deslocamentos (SXL, SXA, ROX), uso para multiplicaçao e divisao. Multiplicacao binária (com e sem sinal) Sala de Aula, Projetor multimídia
7 27/2 2 Laboratório 1 – Uso do software Quartus para ensino de Circuitos Lógicos Laboratório de Programação
8 4/3 2 Divisao binaria, aritmetica de ponto flutuante. Exercicios Sala de Aula, Projetor multimídia
9 6/3 2 Laboratório 2 – Uso do software QSIM e Programação do FPGA Laboratório de Programação
10 11/3 2 Cap 4 – Portas AND, NAND, OR, NOR Sala de Aula, Projetor multimídia
11 13/3 2 Cap 4 – Porta XOR, Buffer, Tri-state Sala de Aula, Projetor multimídia
12 18/3 2 AVALIAÇÃO 1 – Sistemas de Numeração e Aritmética Binaria Sala de Aula, Projetor multimídia
13 20/3 2 Cap 5 – Algebra de Boole. Teoremas, Tabelas-Verdade Sala de Aula, Projetor multimídia
14 25/3 2 Cap 5 – Algebra de Boole. Mintermos, Maxtermos, Equações SOP e POS Sala de Aula, Projetor multimídia
15 27/3 2 Cap 5 – Algebra de Boole. Mintermos, Maxtermos, Equações SOP e POS Sala de Aula, Projetor multimídia
16 1/4 2 Cap 5 – Mapa de Karnaugh Sala de Aula, Projetor multimídia
17 8/4 2 Cap 5 – Mapa de Karnaugh Sala de Aula, Projetor multimídia
18 10/4 2 Cap 5 – Mapa de Karnaugh Sala de Aula, Projetor multimídia
19 15/4 2 Laboratório 3 – Codificador de 7 segmentos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, X, E, X, X, -, b) Laboratório de Programação
20 17/4 2 Cap 11 -Circuitos Combinacionais Logicos Sala de Aula, Projetor multimídia
21 22/4 2 Cap 11 -Circuitos Combinacionais Logicos Sala de Aula, Projetor multimídia
22 24/4 2 Cap 11 -Circuitos Combinacionais Logicos Sala de Aula, Projetor multimídia
23 29/4 2 AVALIAÇÃO 2 – Cap 4, Cap 5 Sala de Aula, Projetor multimídia
24 6/5 2 Cap 12 -Circuitos Combinacionais Aritméticos Sala de Aula, Projetor multimídia
25 8/5 2 Cap 12 -Circuitos Combinacionais Aritméticos Sala de Aula, Projetor multimídia
26 13/5 2 Laboratório 4 – Circuitos Aritméticos (Somador, Complemento de 2 e Subtrator) Laboratório de Programação
27 15/5 2 Cap 4 – Flip-Flop D, Registrador de deslocamento Sala de Aula, Projetor multimídia
28 20/5 2 Laboratório 5 - Comparadores, Multiplicadores Laboratório de Programação
29 22/5 2 Cap 4 – Contadores Assincronos, Sincronos, Gerador de Sequencia Pseudo Aleatória Sala de Aula, Projetor multimídia
30 27/5 2 Cap 13 – Registradores, Latches e FlipFlops Sala de Aula, Projetor multimídia
31 29/5 2 Cap 14 -Circuitos Sequenciais Sala de Aula, Projetor multimídia
32 3/6 2 Cap 14 -Circuitos Sequenciais Sala de Aula, Projetor multimídia
33 10/6 2 Laboratório 6 – Contadores Laboratório de Programação
34 12/6 2 Projeto Final em Equipes – Definição das equipes e especificação dos projetos Laboratório de Programação
35 17/6 2 Projeto Final em Equipes – Trabalho das equipes (Apresentação dos circuitos comerciais necessários para os projetos) Laboratório de Programação
36 17/6 2 Projeto Final em Equipes – Trabalho das equipes Laboratório de Programação
37 24/6 2 Projeto Final em Equipes – Trabalho das equipes Laboratório de Programação
38 26/6 2 Projeto Final em Equipes – Apresentação do Relatório Laboratório de Programação
39 1/7 2 Projeto Final em Equipes – Apresentação do Relatório Laboratório de Programação
40 3/7 2 Reavaliação final Sala de Aula, Projetor multimídia
TOTAL 80

Diário de aulas

As listas de exercício encontra-se no final do texto de cada aula
Aula 1 - 3/2/15: Apresentação da disciplina
  • Apresentação da disciplina, plano de aula, trabalhos e métodos de avaliação.
  1. Auto apresentação
  2. Apresentação da Wiki
  3. Ementa
  4. Apresentação do modelo de aulas a ser adotado
    1. Laboratórios
    2. Bibliografia
  5. Avaliações
    1. 3 avaliações (P1, P2 e P3) mais um projeto final (PF)
    2. Cada uma das avaliações terá terá um conceito numérico: 1, 2, ..., 9, 10. Conceito mínimo para não necessitar reavaliação: 6.
    3. Reavaliação única no último dia de aula.
  6. Relação com outras disciplinas do curso
  7. Conceitos iniciais:
    1. Analógico x Digital
      1. ADC <==> DAC
    2. Lógica binária: 2 níveis, 0 e 1
      1. 4 bits = nibble
      2. 8 bits = byte
      3. n bits = word (16, 32, 64)
    3. Circuitos digitais: cada circuito digital pode ser descrito por uma função binária que é como ele processa os bits que recebe.
Aula 2 - 5/2/15: Sistemas de numeração Binário, Octal, Hexadecimal e conversão entre sistemas

Sistemas de numeração

Observe a Figura do odômetro.

Odometro.jpg

Supoha que o mesmo possua somente duas roldanas de algarismos e que cada algarismo represente exatamente 1 km. Qual a quantidade máxima de quilômetros que o suposto odômetro pode representar?

0 0
0 1
0 ...
0 8
0 9
1 0
1 1
1 ...
1 8
1 9
... ...
9 0
9 1
9 ...
9 8
9 9
0 0
... ...

Agora suponha que cada roldana tenha impresso somente os valores 0 e 1. Qual a quantidade máxima de quilômetros que o mesmo pode representar?

MSB LSB
0 0
0 1
1 0
1 1
0 0
... ...

Obs.: LSB (least significant bit) é o bit menos significativo que é o equivalente as unidades na representação decimal. MSB (most significant bit) é o bit mais significativo e sempre ocupa a posição mais a esquerda da representação.

Este sistema de numeração é conhecido como binário ("que tem aspecto dual, ou é formado por dois elementos ou partes").

No caso anterior como poderíamos representar maiores quantidades de quilômetros?

Em outra linha de raciocínio, como pode-se aumentar a capacidade de contagem quilométrica, mais do que o permitido no sistema decimal? Aumenta-se o número de símbolos disponíveis em cada roldana. Por exemplo, se adotarmos a seguinte simbologia: 0, 1, ..., 8, 9, A, B, C, D, E, F, pode-se ter a seguinte representação quilométrica:

0 0
0 1
0 ...
0 E
0 F
1 0
1 1
1 ...
1 E
1 F
... ...
9 0
9 1
9 ...
9 E
9 F
A 0
A 1
... ...
F E
F F
0 0
... ...

Este é o sistema de numeração hexadecimal.

Um outro importante sistema de numeração é o octal.

Perceba que é possível a construção de qualquer sistema de numeração.

Conversão entre sistemas de numeração

Como é de conhecimento geral, o sistema de numeração mais utilizado port seres humanos é o sistema decimal. Não tão conhecido assim, mas muito utilizado, é o sistema de numeração binário, amplamente adotado nos sistema informatizados.

Uma pergunta que cabe é, por exemplo, quando digitamos algum número em uma calculadora, o que acontece? Em primeiro lugar, a calculadora apresenta o valor digitado no visor, para termos certeza do que digitamos e, em seguida, internamente à calculadora este valor é convertido para binário, o sistema de numeração que ela entende. Como esta conversão ocorre?

Conversão de outras bases para a base decimal

A regra geral para conversão de binário para um número decimal é assim expressa:

onde é um número decimal e é sua representação binária usual.

Observe que esta regra pode ser estendida para qualquer sistema de numeração.

Por exemplo, vamos converter para a base decimal.

Outro exemplo, vamos converter para a base decimal.

Conversão da base decimal para outras bases

A conversão de um número da base decimal para qualquer outra base pode ser efetivada usando-se divisões sucessivas do valor decimal pela base a ser convertido, tomando-se com resultado os sucessivos restos dessa divisão.

Por exemplo, para converter 23 para a base binária devemos fazer o seguinte procedimento:

ConversaoDecimalBinario.jpg

O procedimento para outras bases é o mesmo, por exemplo, para converter-se 258 para a base 8, utiliza-se o mesmo procedimento acima, substituindo os valores 2 por 8, no divisor.

Conversão entre bases de origem binária

Para conversão entre as bases binária, octal e hexadecimal, basta fazer-se o uso das seguintes tabelas de conversão.

octal binário
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111
hexadecimal binário
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Por exemplo, para converter para binário, deve-se tomar dígito a dígito da tabela acima e ir montando o valor binário equivalente: , e . Portanto o resultado da conversão é

Se desejarmos converter da base octal para a hexadecimal e vice-versa, a maneira mais fácil é primeiro a conversão da base de origem para a base binária e, em seguida, desta para a base destino. Por exemplo, para converter para a base octal procedemos primeiro a conversão para a base binária () e em seguida, tomando três a três dígitos a partir do LSB, convertemos para o octal usando a tabela, resultando em

Exercícios

Converta para decimal

Converta para a base indicada:

Aula 3 - 5/2/15: Representações binárias

A tabela a seguir representa os númerios decimais de 0 a 15 pelos códigos binário convencinal, octal, hexadecimal, Gray, one-hot, Johnson e BCD. Tabela de equivalência entre códigos

Código Gray: código de distância unitária porque a distância entre duas palavras adjacentes é sempre 1 bit [1].

Código one-hot: frequentemente utilizado na codificação de máquinas de estados [2] [3].

Código Johnson: Também utilizado para representar máquinas de estados. É um código intermediário entre o one-hot e o Gray, em termos de uso do hardware.

Código BCD (binary-coded decimal): cada dígito de um número decimal é representado por um conjunto de 4 bits do código binário.

Códigos para números negativos

Como representar sinal no código binário?

Código sinal-magnitude

Nesse caso o MSB representa o sinal: 0 = + e 1 = -. Assim sendo, o MSB não faz parte da representação sequencial binária do número. Ex:

  1. 0000 = +0
  2. 1001 = -1
  3. 110011 = -19
  4. 010011 = +19
  5. 111100111 = -231

Código complemento de um

Se o MSB for 0 (número positivo), para obter o equivalente negativo, basta inverter todos os bits. Ex:

  1. 0000 = +0 ==> 1111 = -0
  2. 0101 = +5 ==> 1010 = -5

Código complemento de dois

Esta é a opção adota para representar números negativos em praticamento todos os computadores e outros sistema digitais.

A representação binária de um número negativo é obtida tomando sua representação positiva, invertendo todos os bits e então adicionando um a ele. Exemplo, -7 (5 bits) é igual a 00111 ==> 11000 + 1 ==> 11001

Regra prática

Para cálculo do equivalente decimal de um número representado em complemento de dois, pode-se fazer uso do modelo apresentado no exemplo:

1 0 1 1 0 1
-32 + 0 +8 +4 +0 +1

Ao somar-se todos os valores da segunda linha da tabela acima, obtém-se o valor 19.

Usando números de 8 bits, Calcule o complemento de dois para:

  1. -0
  2. -1
  3. -17
  4. -123
  5. -128

Algum problema?

Exercícios

  1. Livro Pedroni: 2.16 -> 2.32
  2. Qual é o maior e menor valor decimal que se consegue representar em complemento de dois com 8 dígitos binários?
Aula 4 - 13/2/15: Ponto fixo e ponto flutuante

Como é a representação (e conversão para decima) de um número binário fracionário?

Representação por ponto fixo

A representação segue a regra

S I F

onde:

  • S = sinal. 0 para positivo e 1 para negativo
  • I = parte inteira do valor. Representação binária tradicional
  • F = parte fracionária do valor. O expoente do base inicia em -1 e vai sendo decrementado.

Por exemplo:

0 1 1 1 0 1 1 0 1
+
+ 16 8 4 0 1 0,5 0 0,125

Portanto o decimal equivalente é: 29,625

Representação por ponto flutuante

Como representar número inteiros?

Padrão IEEE 754

S E F

onde:

  • S = sinal. 0 para positivo e 1 para negativo
  • E = expoente. 8 bits para precisão simples e 11 bits para precisão dupla
  • F = parte fracionária. 23 bits para precisão simples e bits para precisão dupla

Observe que tem-se 32 bits totais para a precisão simples e 64 bits para a precisão dupla.

Precisão simples

O número decimal equivalente é obtido por:

Ex1: Encontre o valor decimal equivalente para o valor abaixo que está em ponto flutuante com precisão simples.

10111111110...0

Analisando o número acima obtemos: S = 1, E = 01111111 = 127, F = 10...0 = = 0,5. Portanto

Ex2: Encontre o valor decimal equivalente para o valor abaixo que está em ponto flutuante com precisão simples.

010000001010...0

Precisão dupla

O número decimal equivalente é obtido por:

Observações:

  1. Na representação por ponto flutuante, a representação de números negativos é equivalente a representação sinal magnitude, ou seja, obtida pela simples inversão de todos os bitas da representação positiva do número.
  2. As equações não produzem valor 0 (zero), portanto, uma representação especial se faz necessário para representar esse valor: S=0/1, E=0 e F=0 é equivalente a +0 e -0.
  3. Representação de infinito: S=0/1, E=max e F=0 é equivalente a .
  4. Representação NaN (not a number) que são o btidas por números inválidos ou indeterminados (0/0, etc): S=0/1, E=0 e é equivalente a NaN (erro).

Ex: determinar as representações binárias por ponto flutuante de precisão simples para:

-2,625 = -2 + 1/2 + 1/8 = -21/8 =

portanto S=1, F=0101..., E=128 (10000000), já que 128-127=1, que é o expoente da base binária do número obtido

Ponto flutuante versus inteiro

Ponto flutuante pode representar números muito grandes e números muito pequenos.

Por exemplo, com os 32 bits da precisão simples pode-se representar a faixa de até aproximadamente . Enquanto que na representação inteira consegue-se somente a faixa até

Qual o preço a pagar? A precisão dos números em ponto flutuante pode ser menor.

Ex: Dado um valor inteiro de 32 bits

y1 = 11111111 11111111 11111111 00000001
   = 1,1111111 11111111 11111111 00000001

Ponto flutuante equivalente

y2 = 1,1111111 11111111 11111111
S=0, F=1111...1, E=158

O erro relativo é dado por:

(y1-y2)/y1 = (00000000 00000000 00000000 00000001)/y1 = 1/y1 que é aproximadamente 

Perceba que esse é o menor erro possível. Qual seria o erro aproximado para 11111111 11111111 11111111 10000000?

Exercícios

Livro texto: 2.33 ==> 2.38

Aula 5 - 20/2/15: Aritmética binária

Adição sem sinal

Ex:

 1101       4 bits
+1011       4 bits
_____
11000       5 bits

Normalmente computadores armazenam somente N bits, ou seja, pode ocorrer overflow (estouro) como é o caso do exemplo acima com N = 4.

Adição sem sinal com entrada de N bits e saída de N bits

Como pode ocorrer overflow deve-se ter critérios para detecção automática caso esse caso ocorra:

  1. se o último bit do carry for 1 ==> ocorreu overflow
  2. baseado nos operandos: quando ambos MSB são 1 ou quando são diferentes é o resultado de sua soma é zero.

Ex:

0000                 1111                                   1000
 1001                 1001                                   1000
+0110  Certo!        +0111  Errado!                         +1000    Errado!
_____                _____  Pelos dois critérios            _____    Pelo primeiro critério.
 1111                 0000                                   0000

Adição sem sinal com entrada de N bits e saída de N+1 bits

Nunca ocorre overflow!

Adição e subtração com sinal

Subtração binária

0-1-1 0  --> borrow (empresta-um)
  1 0 0 1
- 0 1 1 1
_________
0 0 0 1 0

Na prática a subtração não é utilizada. Utiliza-se complemento de dois, já que, por exemplo, a-b=a+(-b), onde "-b" é o complemento de dois de "b".

Adição e subtração com sinal com entradas de N bits e saída de N bits

Como pode ocorrer overflow deve-se ter critérios para detecção automática caso esse caso ocorra:

  1. se os dois últimos bits de carry forem diferentes, então ocorreu overflow
  2. se o MSB dos operandos forem iguais e o MSB da soma for diferente deles, então ocorreu overflow.

Ex:

0000              0111                              1111               1000                              1100
 0101              0101                              1011               1011                              0101
+0010  Certo!     +0011  Errado!                    +1101    Certo!    +1100  Errado!                    +1110    Certo!
_____             _____  Pelos dois critérios       _____              _____  Pelos dois critérios       _____
 0111              1000                              1000               0111                              0011

Adição e subtração com sinal com entradas de N bits e saída de N+1 bits

Nunca ocorre overflow, MAS:

  1. se as entradas tiverem sinais diferentes, o MSB do carry deve ser invertido e incrementado ao resultado final.

Ex:

0111              1000          0000          1111
 0111              1000          0111          1001
+0111             +1000         +1000         +0111
_____             _____         _____         _____  
01110             10000         11111         00000

Regra prática: extensão do sinal em cada operando, desprezando novo overflow Ex:

 00111              11000          00111          11001
+00111             +11000         +11000         +00111
 _____              _____          _____          _____  
 01110              10000          11111          00000

Exercícios

Livro texto: 3.1 ==> 3.6

Aula 6 - 25/2/15: Uso de deslocamentos nas operações aritméticas e multiplicação binária.

Princípios da divisão e multiplicação

O que ocorre a uma palavra binária de N bits se a deslocarmos um bit a direita?

1100110 (102) --> 0110011 (51)
1100111 (103) --> 0110011 (51)

Percebe-se que o número é dividido por 2 (base), com certo erro em alguns casos.

O que ocorre a uma palavra binária de N bits se a deslocarmos um bit a esquerda?

01100110 (102) --> 11001100 (204)
1100111 (103) --> 1001110 (78)

Percebe-se que o número é multiplicado por 2 (base), com erro grave em caso de overflow.

Operações de deslocamento (SHIFT)

SHIFT lógico

A palavra binária de N bits é deslocada um certo número de posições para a direita ou para a esquerda, as posições vazias são preenchidas por zeros.

SRL = shift right logical

SLL = shift left logical

Ex:

10111 SRL2 = 00101
10100 SRL2 = 00101
11101 SLL1 = 11010
11101 SRL-1 = 11010

SHIFT aritmético

O vetor binário é deslocado um certo número de posições para a direita ou para a esquerda. Quando deslocado para a direita, as posições vazias são preenchidas com o valor do bit original da estrema esquerda (bit de sinal). Quando deslocado para a esquerda, em VHDL, as posições vazias são preenchidas com o valor do bit original da estrema direita.

SRA = shift right arithmetic

SLA = shift left arithmetic

Ex:

10101 SRA2 = 11101
10101 SLA1 = 01011

SHIFT circular (rotação)

Semelhando ao SHIFT lógico, com a diferença que as posições vazias são preenchidas com os bits removidos.

ROR = rotational right

ROL = rotational left

Ex:

11001 ROR2 = 01110
11001 ROL1 - 10011

Divisão usando SHIFT lógico para números sem sinal

Regra: um deslocamento lógico de uma posição para a direita resulta na divisão do número por 2 (base), duas posições por 4 (base²)...

Ex:

101110 SRL1 = 010111
110101 SRL1 = 011010
101100 SRL2 = 001011
101111 SRL2 = 001011

Divisão usando SHIFT aritmético para números com sinal

Ex:

01110 --> 00111
00111 --> 00011
10000 --> 11000
11001 --> 11100

Multiplicação usando SHIFT lógico

Regra: um deslocamento lógico de uma posição para a esquerda resulta na multiplicação do número por 2

Números sem sinal, ex:

01110 --> 11100
11010 --> 10100

Número com sinal, ex:

00111 --> 01110
01110 --> 11100
11000 --> 10000
10000 --> 00000

Observe que quando o par de bits iniciais for igual o resultado é correto e incorreto em caso contrário.

Multiplicação usando SHIFT lógico e uma saída mais larga

Na prática, dobra-se o número de bits (2N) do resultado, garantindo assim a não mais ocorrência do overflow com até N deslocamentos.

Números sem sinal com 4 deslocamentos, ex:

0011 (3) --> 0000 0011 (3) --> 0011 0000 (48)
1000 (8) --> 0000 1000 (8) --> 1000 0000 (128)

Números com sinal com 4 deslocamentos, ex:

0011 (3) --> 0000 0011 (3) --> 0011 0000 (48)
1000 (-8) --> 1111 1000 (-8) --> 1000 0000 (-128)
1111 (-1) --> 1111 1111 (-1) --> 1111 0000 (-16)

Exercícios

Livro texto: 3.7 ==> 3.16

Aula 7 - 27/2/15: Multiplicação e divisão binária e operações aritmética de ponto flutuante

Multiplicação sem sinal

Com N bits de entrada e 2N bits de saída não ocorre overflow.

Algoritmo básico.

Ex:

     1101
    x1100
    _____
     0000
    0000
   1101
  1101
 ________
 10011100

Qualquer algoritmo de multiplicação é derivado do algoritmo utilizado para a resolução do exemplo anterior. Quando faz-se uma implementação no hardware, do zero, utiliza-se esse algoritmo.

Por outro lado a multiplicação pode ser efetuada usando somente operações de adição e deslocamento, abordagem empregada por exemplo em computadores, já que os mesmos possuem uma ALU que faz adições enquanto a unidade de controle pode facilmente deslocar os registradores de dados conforme a necessidade.

Um exemplo de multiplicação sem sinal baseada em ALU é mostrado na figura a seguir. Multiplicação de 1001 (multiplicando) por 1100 (multiplicador):

Algoritmo de multiplicacao.jpg

Em resumo: se o bit de produto da extrema direita for 1, o multiplicando é adicionado a metade esquerda do produto, em seguida o registrador de produto é deslocado uma posição para a direita, entretanto, se o bit for 0, deve ocorrer somente a operação de deslocamento (a multiplicação de qualquer valor por zero é igual a zero, por isso não ocorre a soma).

Multiplicação com sinal

Algoritmos para a multiplicação com sinal também são derivados do algoritmo básico. Na figura a seguir é ilustrado o multiplicador Baugh-Wooley modificado.

Muliplicacao-com-sinal.jpg

Por exemplo, vamos empregar o algoritmo acima para multiplicar 1101 e 1100:

     padrão                    Baugh-Wooley
       1101                       1101 (-3)
      x1100                      x1100 (-4)
      _____                      _____
       0000                      11000
      0000           -->         1000
     1101                       0101
    1101                      11010
   _________                 __________
                              00001100 (+12)

Algoritmo baseado em ALU, algoritmo de Booth. Multiplicação de 01110 (multiplicando) por 10010 (multiplicador). 5 bits nos operandos leva a necessidade de 5 iterações e 10 bits de saída:

Algoritmo de Booth.jpg

Em resumo: se os bits da extrema direita forem 10, o multiplicando deve ser subtraído da metade esquerda do registrador de produto e o resultado deve ser deslocado aritmeticamente para a direita. Se os bits forem 01 então o multiplicando deve ser somado à metade esquerda do registrador de produto e o resultado deslocado aritmeticamente para a direita. Por fim, se os bits forem 00 ou 11, então deve ocorrer somente o deslocamento aritmético para a direita.

Divisão sem sinal

Algoritmo básico, 1101 (13) dividido por 0101 (5):

    decimal (para relembrar :) )             binário

dividendo --> 173 |_7  <--divisor          0001101 |_0101
              00   024 <-- quociente       0000      0010 <-- quociente
              __                           ____
              17                            0011
              14                            0000
              __                            ____
              033                            0110
               28                            0101
               __                            ____
               05  <-- resto                  0011 <-- resto

Obs:

  1. Se forem usados N bits para representar as entradas, então, novamente, serão necessários 2N bits para representar as saídas: 4 para o quociente e 4 para o resto.
  2. O dividendo deve ser incrementado com 0's a esquerda até possuir um total de 2N-1 bits

Do ponto de vista de hardware, é mais difícil implementar divisões dedicadas do que multiplicadores dedicados. Por essa razão, a abordagem mais comum é empregar algoritmos baseados em ALU para a divisão, os quais utilização operações de adição, subtração e deslocamento. Um algoritmo desse tipo é mostrado na figura a seguir, onde 1101 (13) é dividido por 0101 (5). Deve-se ter N iterações para a solução e o registrador de resto deve ter 2N bits.

Algoritmo de divisao sem sinal.jpg

Em resumo: o divisor é subtraído da metade esquerda do resto, se o resultado for negativo, o divisor é somado de volta ao resto, restaurando seu valor, e então é realizado um shift para a esquerda e a posição vazia é preenchida com um zero. Ao contrário, se o resultado for positivo, o registrador de resto é deslocado para a esquerda e a posição vazia é preenchida com um 1. Após a última iteração, a metade esquerda do registrador de resto deve ser deslocada para a direita e a posição vazia preenchida com um zero. O quociente aparecerá na metade direita do registrador de resto, enquanto o resto verdadeiro aparecerá em sua metade esquerda.

Divisão com sinal

A divisão com sinal é normalmente efetuada como se os números não tivessem sinal. Isso implica que, em primeiro lugar, os números negativos devem passar por complemento de dois. Além disso, se o dividendo e o divisor tiverem sinais diferentes, então o quociente deve ser negativado (complemento de dois) e o resto também.

Ex: 1001 (-7) / 0011 (+3)

Complemento de dois de 1001 é 0111

        0000111 |_ 0011
        0000       0010 <-- quociente
        ____
         0001
         0000
         ____
          0011
          0011
          ____
           0001 <-- resto
complemento de dois de 0010 é 1110 (-2)
complemento de dois de 0001 é 1111 (-1)

Operações com ponto flutuante

Ver seções 3.8, 3.9 e 3.10 do livro do Pedroni.

Exercícios

Livro texto: 3.17 ==> 3.22

Aula 8 - 4/3/15: Laboratório 1
  1. Leia o tutorial Quartus II Introduction - Using Schematic Designs.
  2. Há duas formas de executar o Quartus, acesso local e acesso remoto. Nas máquinas do laboratório de programação utilizaremos o acesso local, basta rodar o Quartus versão 13.
  3. Quem desejar praticar em casa pode acessar remotamente, mas antes peça ao professor para criar uma conta na máquina de acesso remoto. Para acesso remoto o procedimento é o seguinte:
    1. Conecte remotamente a máquina servidora com o seguinte comando: ssh -X nome_de_usuario@200.135.233.26
    2. Execute o Quartus com o comando: /opt/altera/13.0sp1/quartus/bin/quartus &
    3. Somente no primeiro uso, ajuste o atalho para o navegador, para poder ler os manuais quando necessário, por meio de Tools > Options > Internet Connectivity, no campo Web browser preencha: /usr/bin/firefox.
  4. Ao salvar arquivos e projetos tome sempre as seguintes precauções, sob pena de erros de compilação:
    1. Cada projeto deve ter um diretório próprio.
    2. Não inicie o nome de projetos e/ou circuitos com caracteres numéricos.
    3. Não nomeie diretórios e/ou arquivos com espaço em branco, se necessário utilize "_" (underline) como caracter separador.
  5. Seguindo orientações do referido tutorial execute as seguintes operações:
    1. Typical CAD Flow
    2. Getting Started
    3. Starting a New Project
      1. Family=Cyclone / device=EP1C3T100A8
    4. Schematic Design Entry
    5. Compiling the Design
    6. Pin Assignment DEpinSW Led.png
    7. Simulating the Designed Circuit
    8. Programming and Configuring the FPGA Device
    9. Testing the Designed Circuit
Board Device Name
DE0 Cyclone III EP3C16F484C6
DE0-Nano Cyclone IVE EP4CE22F17C6
DE1 Cyclone II EP2C20F484C7
DE2 Cyclone II EP2C35F672C6
DE2-70 Cyclone II EP2C70F896C6
DE2-115 Cyclone IVE EP4CE115F29C7