Mudanças entre as edições de "ELD129002-Engtelecom (Diário) - Prof. Marcos Moecke"
(→ATUAL) |
|||
(23 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1 442: | Linha 1 442: | ||
{{collapse top | expand=true |Unidade 4 - Introdução a linguagem VHDL e Quartus/ModelSim }} | {{collapse top | expand=true |Unidade 4 - Introdução a linguagem VHDL e Quartus/ModelSim }} | ||
− | + | ||
;Encontro 17 (18 abr.) - Linguagem VHDL: | ;Encontro 17 (18 abr.) - Linguagem VHDL: | ||
*Ver resumo em [https://moodle.ifsc.edu.br/pluginfile.php/311793/mod_resource/content/2/Introdu%C3%A7%C3%A3o%20a%20linguagem%20de%20descri%C3%A7%C3%A3o%20de%20hardware.pdf Introdução a linguagem de descrição de hardware (DHL)] | *Ver resumo em [https://moodle.ifsc.edu.br/pluginfile.php/311793/mod_resource/content/2/Introdu%C3%A7%C3%A3o%20a%20linguagem%20de%20descri%C3%A7%C3%A3o%20de%20hardware.pdf Introdução a linguagem de descrição de hardware (DHL)] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ;Encontro | + | ;Encontro 19 (25 abr.) - Linguagem VHDL: |
− | *Ver resumo em [https://moodle.ifsc.edu.br/pluginfile.php/ | + | *Ver resumo em [https://moodle.ifsc.edu.br/pluginfile.php/311793/mod_resource/content/2/Introdu%C3%A7%C3%A3o%20a%20linguagem%20de%20descri%C3%A7%C3%A3o%20de%20hardware.pdf Introdução a linguagem de descrição de hardware (DHL)] |
* Estrutura do código VHDL | * Estrutura do código VHDL | ||
Linha 1 547: | Linha 1 541: | ||
;PASSO 5: | ;PASSO 5: | ||
*Modifique a descrição do circuito para implementar o circuito da função Y = (A.B)' + C.D'B', salve o projeto Ckt2.vhd e de o mesmo nome para a entity. | *Modifique a descrição do circuito para implementar o circuito da função Y = (A.B)' + C.D'B', salve o projeto Ckt2.vhd e de o mesmo nome para a entity. | ||
+ | |||
+ | ;PARA O PRÓXIMO ENCONTRO | ||
+ | *Escreva em VHDL o circuito do [https://wiki.sj.ifsc.edu.br/index.php/ELD129002-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE1_-_Projeto_de_um_conversor_de_bin.C3.A1rio_para_mostrador_de_7_segmentos AE1 - Projeto de um conversor de binário para mostrador de 7 segmentos] | ||
+ | :*Use como modelo: | ||
+ | <syntaxhighlight lang=vhdl> | ||
+ | -- A bibliteca std e o pacote standard são autodeclarados, então as linhas abaixo podem ser comentadas com "--" | ||
+ | --library std; | ||
+ | --use std.standard.all; | ||
+ | |||
+ | entity BCD2SSD is | ||
+ | port ( | ||
+ | -- Entradas ABCD do circuito | ||
+ | A, B, C, D: in bit; | ||
+ | -- Saidas para os leds do mostrador de 7 segmentos. Note que o nome a, b, .. g foi mudado para ssd_a, ssd_b, ... ssd_g pois o VHDL é insensível a caixa | ||
+ | ssd_a, ssd_b, ssd_c, ssd_d, ssd_e, ssd_f, ssd_g : out bit | ||
+ | ); | ||
+ | end entity; | ||
+ | |||
+ | architecture ifsc_v1 of BCD2SSD is | ||
+ | begin | ||
+ | -- descreva a expressão lógica obtida para cada uma das saídas; | ||
+ | -- Por exemplo: se for a = A + C + (B'.D') + (B.D) | ||
+ | ssd_a <= A or C or (not B and not D) or (B and D); | ||
+ | |||
+ | ssd_g <= ; | ||
+ | end architecture; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Ler [https://pt.wikipedia.org/wiki/VHDL VHDL] na Wikipedia. | ||
+ | *Guardar [[Folha de consulta de VHDL]] | ||
+ | |||
+ | ;Encontro 20 (30 abr.) [https://wiki.sj.ifsc.edu.br/index.php/ELD129002-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE2_-_Conhecendo_os_dispositivos_l.C3.B3gicos_program.C3.A1veis AE2 - Conhecendo os dispositivos lógicos programáveis] | ||
+ | |||
+ | ====ATUAL==== | ||
+ | ;Encontro 21 (2 mai.) [https://wiki.sj.ifsc.edu.br/index.php/ELD129002-Engtelecom_(Di%C3%A1rio)_-_Prof._Marcos_Moecke#AE2_-_Conhecendo_os_dispositivos_l.C3.B3gicos_program.C3.A1veis AE2 - Conhecendo os dispositivos lógicos programáveis]: | ||
+ | :*(Continuação) | ||
+ | ;Encontro 22 (7 mai.) AE3: | ||
+ | [[Preparando para gravar o circuito lógico no FPGA]] | ||
+ | |||
+ | <!-- | ||
+ | ;Encontro 18 (18 abr.) - Avaliação A1c (6 pontos): | ||
+ | *Simplificação de expressões lógicas e mapa de Karnaugh | ||
+ | *Representação de circuitos lógicos - '''Diagrama de portas lógicos = Tabela Verdade = Expressão lógica''' | ||
+ | |||
+ | ;Encontro 18 (28 set) - Linguagem VHDL (cont): | ||
+ | *Ver resumo em [https://moodle.ifsc.edu.br/pluginfile.php/262427/mod_resource/content/1/Introdu%C3%A7%C3%A3o%20a%20linguagem%20de%20descri%C3%A7%C3%A3o%20de%20hardware.pdf Introdução a linguagem de descrição de hardware (DHL)] | ||
+ | |||
;Encontro 19 (3 out.) - Simulador ModelSim: | ;Encontro 19 (3 out.) - Simulador ModelSim: | ||
Linha 2 644: | Linha 2 685: | ||
:3) Para cada saída deve ser apresentada a expressão lógica minimizada e também o circuito lógico obtido. | :3) Para cada saída deve ser apresentada a expressão lógica minimizada e também o circuito lógico obtido. | ||
*A entrega será feita pessoalmente para o professor no prazo indicado no Moodle. | *A entrega será feita pessoalmente para o professor no prazo indicado no Moodle. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ===AE2 - Conhecendo os dispositivos lógicos programáveis=== | ||
+ | {{collapse top | expand=true| bg=lightyellow | AE2 - Conhecendo os dispositivos lógicos programáveis}} | ||
+ | ;Objetivos: | ||
+ | *Conhecer o Quartus Prime e as características dos dispositivos lógicos programáveis | ||
+ | *Analisar os tempos de propagação em um circuito combinacional | ||
+ | *Alterar configurações do compilador | ||
+ | *Fazer a simulação funcional de um circuito combinacional. | ||
+ | |||
+ | ;Atividades: | ||
+ | *'''PASSO 1:''' Realize a atividade descrita em [[Conhecendo os dispositivos lógicos programáveis - QUARTUS PRIME]] | ||
+ | :*Ao escolher a família de FPGAS, escolha inicialmente um dispositivo da família '''Max II'''. Anote o código desse dispositivo. | ||
+ | :*Capture as telas solicitadas e depois utilize-as no relatório da atividade. | ||
+ | :*Anote o tempo utilizado para cada uma das etapas do processo de compilação. | ||
+ | :*Anote o número de elementos lógicos utilizados e o número de pinos utilizados, bem com o percentual em relação ao número total do dispositivo. | ||
+ | :*Anote algum erro ('''Error''') ou alertas ('''Warnings''') que o Quartus II indicar no painel de mensagens '''[Messages]''' | ||
+ | :*Ao final salve o projeto em um arquivo QAR (sugestão PJ1.QAR) | ||
+ | |||
+ | *'''PASSO 2''': Repita a atividade descrita em [[Conhecendo os dispositivos lógicos programáveis - QUARTUS PRIME]], trocando a família e dispositivo a ser usado na implementação. Escolha nesta vez um dispositivos da família '''Cyclone IV E''' ou '''Stratix II GX'''. Anote o código desse dispositivo. | ||
+ | :*Observe as mudanças que ocorrem tanto no tipo de Elemento Lógico disponível, no Chip Planner, no Pin Planner, e no circuito dos pinos de I/O. Note que estes FPGAs também apresenta novos componentes, tais como: Memória, Multiplicadores, DSP, PLL, DLL, etc. Verifique se consegue encontra-los no leiaute mostrado no Chip Planner, e documente aqueles que encontrar. | ||
+ | :*Compare os resultados obtidos nos procedimentos do PASSO 1 e PASSO 2. | ||
+ | |||
+ | *'''PASSO 3''': Realize o procedimento descrito em [[Medição de tempos de propagação em circuitos combinacionais - Quartus Prime]] | ||
+ | :*Ao escolher a família de FPGAS, escolha um dispositivo FPGA da família '''Cyclone IV E'''. Anote o código desse dispositivo. | ||
+ | :*Se você está com o código da '''AE1 - Projeto de um conversor de binário para mostrador de 7 segmentos''' escrito, use este código no lugar do código do '''cálculo da distância de Hamming''' | ||
+ | :*Capture as telas mostradas no roteiro e depois utilize-as no relatório da atividade. | ||
+ | :*Anote o máximo tempo de propagação entre entrada e saída. | ||
+ | :*Anote o número de elementos lógicos utilizados e o número de pinos utilizados, bem com o percentual em relação ao número total do dispositivo. | ||
+ | :*Experimente modificar as configurações do compilador, conforme mostrado em '''Configurando o compilador'''. Se desejar mude a semente inicial trocando o valor de '''[Seed: 1]''' | ||
+ | :*Experimente inserir diferentes restrições de atraso máximo para o compilador, e analise o resultado obtido. | ||
+ | :*Anote algum erro ('''Error''') ou alertas ('''Warnings''') que o Quartus II indicar no painel de mensagens '''[Messages]''' | ||
+ | :*Ao final salve o projeto em um arquivo QAR (sugestão PJ2.QAR) | ||
+ | |||
+ | *'''PASSO 4''': Realize a simulação funcional de um dos projetos '''CI74161''' ou do '''cálculo da distância de Hamming''' ou '''conversor de binário para mostrador de 7 segmentos''' | ||
+ | :*Capture as telas que mostram o circuito funcionando e depois utilize-as no relatório da atividade. | ||
+ | |||
+ | ;Entregas: | ||
+ | #Envie um arquivo QAR contendo todos os arquivos necessário para compilar cada um dos projetos. | ||
+ | #Envie um relatório em PDF, incluindo as imagens capturadas (inclua um título para cada figura) e escreva para cada imagem um texto comentando o que representa. O relatório também deve ter a identificação (autor, título, data) uma breve introdução e uma conclusão. A descrição dos procedimentos feita na página wiki não precisa incluída no relatório. | ||
+ | #Use preferencialmente o [[Uso_do_Overleaf | Overleaf]] para gerar o relatório. Mas o uso de MS-Word, Libreoffice e Google Docs também é permitida. | ||
+ | #A entrega será feita através do Moodle da disciplina. Observe o prazo de entrega. | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ===AE3 - Programação do kit Mercurio IV=== | ||
+ | {{collapse top | expand=true | bg=lightyellow | AE3 - Programação do kit Mercurio IV}} | ||
+ | ;Objetivos: | ||
+ | * Apreender como programar um FPGA usando um kit de desenvolvimento | ||
+ | * Baseado na '''AE1 - Projeto de um conversor de binário para mostrador de 7 segmentos''', implementar o projeto em VHDL. | ||
+ | * Descrever um circuito que você projetou em VHDL, implentá-lo e testá-lo. | ||
+ | * Fazer as adaptações necessárias para que o circuito projetado funcione no kit escolhido | ||
+ | * Testar o circuito, e anotar os resultados. | ||
+ | |||
+ | ;Procedimento de laboratório: | ||
+ | ;Passo 1 - Descrevendo o hardware e fazendo a Análise e Síntese: | ||
+ | *Abra o projeto do '''conversor de binário para mostrador de 7 segmentos''' (já simulado em aula anterior) | ||
+ | *Fazer a análise e síntese e corrigir eventuais erros. | ||
+ | |||
+ | <syntaxhighlight lang=vhdl> | ||
+ | -- A bibliteca std e o pacote standard são autodeclarados, então as linhas abaixo podem ser comentadas com "--" | ||
+ | --library std; | ||
+ | --use std.standard.all; | ||
+ | |||
+ | entity BCD2SSD is | ||
+ | port ( | ||
+ | -- Entradas ABCD do circuito | ||
+ | eA, eB, eC, eD: in bit; | ||
+ | -- Saidas para os leds do mostrador de 7 segmentos. Note que o nome a, b, .. g foi mudado para ssd_a, ssd_b, ... ssd_g pois o VHDL é insensível a caixa | ||
+ | ssd_a, ssd_b, ssd_c, ssd_d, ssd_e, ssd_f, ssd_g : out bit | ||
+ | ); | ||
+ | end entity; | ||
+ | |||
+ | architecture ifsc_v1 of BCD2SSD is | ||
+ | begin | ||
+ | -- descreva a expressão lógica obtida para cada uma das saídas; | ||
+ | -- Por exemplo: se for a = A + C + (B'.D') + (B.D) | ||
+ | ssd_a <= eA or eC or (not eB and not eD) or (eB and eD); | ||
+ | |||
+ | ssd_g <= ; | ||
+ | end architecture; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ;Passo 2 - Configurando o dispositivo e os pinos a serem utilizados: | ||
+ | Veja os detalhes em [[Preparando para gravar o circuito lógico no FPGA]]. Após escolher o kit a ser usado no projeto, é necessário informar ao Quartus II a família e o dispositivo (device) que será utilizado | ||
+ | *para DE2-115 '''{Assignments > Device... > Device family (Family: [Cyclone IV E], Name filter: [EP4CE115F29C7] ) > [OK]}''' | ||
+ | *para MERCÚRIO IV '''{Assignments > Device... > Device family (Family: [Cyclone IV E], Name filter: [EP4CE30F23C7] ) > [OK]}''' | ||
+ | |||
+ | Para evitar que saídas de circuitos da placa sejam ligadas ao terra através do FPGA, defina como alta impedância o estado dos pinos não utilizados no projeto. | ||
+ | *'''{Assignments > Device... > Device and Pin Options... > Category: Unused Pins > Reserve all unused pins: [As input tri-stated] > [OK] > [OK]}''' | ||
+ | |||
+ | Atribua os pinos conforme a necessidade do projeto. | ||
+ | * Uso do Pin Planner '''{Assignments > Pin Planner}''' no modo tabela. Digite o número do pino na coluna {Location}. Apenas posições válidas são aceitas. | ||
+ | |||
+ | *Abra a página com o resumo da pinagem do kit [[Pinagem dos dispositivos de entrada e saída do kit MERCURIO IV]]. Observe a tabela com a pinagem das chaves disponíveis neste kit. | ||
+ | {| class="wikitable" style="vertical-align:middle; background-color:#FFF; color:#222;" | ||
+ | |- style="font-weight:bold;" | ||
+ | ! Signal | ||
+ | ! Name FPGA | ||
+ | ! Pin No. Description | ||
+ | ! I/O Standard | ||
+ | |- | ||
+ | | SW[0] || PIN_Y22 || Chave tipo Slide Switch 0 || 3.3V | ||
+ | |- | ||
+ | | SW[1] || PIN_W21 || Chave tipo Slide Switch 1 || 3.3V | ||
+ | |- | ||
+ | | SW[2] || PIN_W22 || Chave tipo Slide Switch 2 || 3.3V | ||
+ | |- | ||
+ | | SW[3] || PIN_V21 || Chave tipo Slide Switch 3 || 3.3V | ||
+ | |} | ||
+ | * Configurar como entrada os seguintes pinos: | ||
+ | eA V21 | ||
+ | eB W22 | ||
+ | eC W21 | ||
+ | eD Y22 | ||
+ | *Observe a tabela com a pinagem dos display (mostrador de sete segmentos) disponíveis neste kit. | ||
+ | {| class="wikitable" style="vertical-align:middle; background-color:#FFF; color:#222;" | ||
+ | |- style="font-weight:bold;" | ||
+ | ! Signal | ||
+ | ! Name FPGA | ||
+ | ! Pin No. Description | ||
+ | ! I/O Standard | ||
+ | |- | ||
+ | | DISP0_D[0] || PIN_V2 || Segmento A - Display 0 || 3.3V | ||
+ | |- | ||
+ | | DISP0_D[1] || PIN_V1 || Segmento B - Display 0 || 3.3V | ||
+ | |- | ||
+ | | DISP0_D[2] || PIN_U2 || Segmento C - Display 0 || 3.3V | ||
+ | |- | ||
+ | | DISP0_D[3] || PIN_U1 || Segmento D - Display 0 || 3.3V | ||
+ | |- | ||
+ | | DISP0_D[4] || PIN_Y2 || Segmento E - Display 0 || 3.3V | ||
+ | |- | ||
+ | | DISP0_D[5] || PIN_Y1 || Segmento F - Display 0 || 3.3V | ||
+ | |- | ||
+ | | DISP0_D[6] || PIN_W2 || Segmento G - Display 0 || 3.3V | ||
+ | |} | ||
+ | |||
+ | * Configure como saída do FPGA os seguintes pinos: | ||
+ | ssd_a V2 | ||
+ | ssd_b V1 | ||
+ | ssd_c U2 | ||
+ | ssd_d U1 | ||
+ | ssd_e Y2 | ||
+ | ssd_f Y1 | ||
+ | ssd_g W2 | ||
+ | *A final do processo, o Pin Planner '''{Assignments > Pin Planner}''' deverá mostrar a correta pinagem conforme exemplificado na figura abaixo: | ||
+ | <center>[[Arquivo:PinagemSSDM4.png| 400px]]</center> | ||
+ | |||
+ | Uma vez completada a configuração e pinagem, execute o '''Fitter (Place & Route)'''. Após a compilação a mensagem de warning '''"Critical Warning (XXXXX): No exact pin location assignment(s) for XX pins of XX total pins"''' não deverá mais ser mostrada. Caso seja mostrada verifique qual o pino que não foi configurado corretamente e corrija. | ||
+ | |||
+ | ;Passo 3 - Programando o FPGA: | ||
+ | Veja o procedimento de como deve ser feita a programação do FPGA em [[Programando o FPGA através da USB-Blaster]] | ||
+ | |||
+ | ;Passo 4 - Testes de validação: | ||
+ | *Realizar os seguintes testes, acionando as chaves A, B, C e D e observando o resultado no mstrador de sete segmentos: | ||
+ | :# Carregar nas chaves os valores binários de 0 ("0000") a 9 ("1001") e observar se o valor mostrado é o desejado. | ||
+ | :# Carregar nas chaves os valores binários de 10 ("1010") a 15 ("1111") e observar se o que é mostrado. | ||
+ | :# Anote todos os resultados | ||
+ | [[Arquivo:Display7Seg.png|thumb| 300px|right]] | ||
+ | {| class="wikitable" style="vertical-align:middle; background-color:#FFF; color:#222;" | ||
+ | |+ | ||
+ | |- | ||
+ | ! Digito | ||
+ | ! ABCD | ||
+ | ! ssd_a | ||
+ | ! ssd_b | ||
+ | ! ssd_c | ||
+ | ! ssd_d | ||
+ | ! ssd_e | ||
+ | ! ssd_f | ||
+ | ! ssd_g | ||
+ | ! Mostrador | ||
+ | |- | ||
+ | | 0 || 0000 || ON || ON || ON || ON || ON || ON || OFF || [[Arquivo:ssd0.png|15px]] | ||
+ | |- | ||
+ | | 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 || || || || || || || || | ||
+ | |} | ||
+ | |||
+ | |||
+ | ;Relatório Técnico: | ||
+ | * Documentar o experimento em um relatório técnico que contenha no mínimo: | ||
+ | :* Identificação (título, disciplina, data, autores); | ||
+ | :* Introdução; | ||
+ | :* Descrição do procedimento realizado; | ||
+ | :* Resultados obtidos (com imagens dos itens importantes) e análise dos resultados; | ||
+ | :* Conclusão. | ||
+ | :* Apêndice (se desejar pode ser disponibilizados vídeos do funcionamento do circuito no Passo 4 | ||
+ | * O relatório deve também responder as questões levantadas e mostrar que os objetivos apresentados na introdução foram atendidos. | ||
+ | {{collapse bottom}} | ||
==Referências Bibliográficas:== | ==Referências Bibliográficas:== | ||
<references/> | <references/> | ||
{{ENGTELECO}} | {{ENGTELECO}} |
Edição atual tal como às 18h02min de 6 de maio de 2024
Registro on-line das aulas
Unidade 1 - Aula inicial, Introdução a disciplina
- 1 ENCONTRO
Unidade 1 - Aula inicial, Introdução a disciplina |
---|
|
Unidade 2 - Sistema de numeração e códigos
- 4 ENCONTROS
Unidade 2 - Sistema de numeração e códigos | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
O ser humano precisa contar para determinar quantidades de coisas, com as quantidades ele pode fazer operações matemáticas e comparações.
O quadro abaixo mostra as representações em binário dos valores de +15 a -8 no sistema sem sinal (UNSIGNED), com signal-magnitude , com sinal em complemento de um , com sinal em complemento de dois (SIGNED). No quadro é importante notar que sempre os números negativos tem o msb = 1. Adicionalmente alguns sistemas possuem dois zeros (+0 e -0). No tipo SIGNED note que o valor máximo positivo será menor que o valor absoluto do mínimo negativo, por uma unidade.
13 (decimal) = 1101 (binário sem sinal) +13 (decimal) = 01101 (binário em sinal-magnitude) -13 (decimal) = 11101 (binário em sinal-magnitude) +13 (decimal) = 01101 (binário em complemento de um) -13 (decimal) = 10010 (binário em complemento de um) +13 (decimal) = 01101 (binário em complemento de dois) -13 (decimal) = 10011 = 10010 + 1 (binário em complemento de dois)
O código ASCII (American Standard Code for Information Interchange), é um padrão de codificação de caracteres para comunicação digital. Ele tem apenas 128 pontos de código, sendo 95 são caracteres imprimíveis e os demais são não imprimíveis (em azul no quadro abaixo), sendo usados para diversos controles de equipamentos eletrônicos. Atualmente esse código está sendo substituido pelos códigos UNICODE, que tem milhões de pontos de código, mas nos UNICODE os primeiros 128 são iguais ao conjunto ASCII.
Exemplo de leitura do quadro acima:
Descubra o que está escrito neste código binário onde cada 8 bits correspondem a um simbolo ASCII: 01000010 01101111 01101101 00100000 01100100 01101001 01100001 00100000 01110000 01100101 01110011 01110011 01101111 01000001 01001100 01001100
O Unicode é capaz de representar uma ampla variedade de caracteres, incluindo caracteres alfabéticos, numéricos, símbolos, caracteres especiais e até mesmo caracteres em idiomas e sistemas de escrita complexos, como chinês, árabe, hindi, hebraico, japonês, emojis entre outros. O Unicode possui um espaço de codificação grande o suficiente para suportar milhares de caracteres diferentes. O Unicode é implementado nos esquemas de codificação UTF-8, UTF-16 e UTF-32. O mais utilizado na web é o UTF-8, por ser eficiente em uso de número de bits e ser compatível com o ASCII. Hoje em dia o UTF-8 é usado em 98% de todos os websites conhecidos [1]. Para cobrir uma vasta gama de caracteres, o Unicode os organiza em blocos. Exemplos de blocos: "Latin basic","Greek and Coptic", "Chess Symbols", "Emoticons", "Mayan Numerals", etc.
Exemplo: Estender o número binário sem sinal de 5 bits "01101" para 8 bits: Número original: 01101 = (13 em decimal), pois 8 + 4 + 1 = 13 Número estendido: 00001101 = (13 em decimal), pois 8 + 4 + 1 = 13
Exemplo: Estender o número binário com sinal em complemento de 2 de 5 bits "10011" para 8 bits: Número original: 10011 = (-13 em decimal), pois -16 + 2 + 1 = -13 Número estendido: 11110011 = (-13 em decimal), pois -128 + 64 + 32 + 16 + 2 + 1 = -13
Exemplo: Estender o número binário com sinal em sinal-magnitude de 5 bits "10011" para 8 bits: Número original: 11101 = (-13 em decimal), pois -(+8 + 4 + 1) = -13 Número estendido: 10001101 = (-13 em decimal), pois -(+8 + 4 + 1) = -13
Embora o expoente possa ser positivo ou negativo, em formatos binários ele é armazenado como um número sem sinal que possui um "viés" fixo adicionado a ele. A faixa de expoente para números normais é [−126, 127] para precisão simples, [−1022, 1023] para dupla. Existem três tipos principais de números: normalizados, denormalizados (ou desnormalizados) e especiais (como infinito e NaN - "Not a Number"). Nos formatos IEEE, o bit 1 inicial de um significando normalizado não é realmente armazenado. É chamado de bit "oculto" ou "implícito". Por causa disso, o formato de precisão simples na verdade tem um significando com 24 bits de precisão, o formato de precisão dupla tem 53. O layout para o ponto flutuante de 32 bits e de 64 bits são mostrados abaixo:
Exemplo: Dado o número 85,125 converta para a representação floating point de 32 bits P1: 32 bits, portanto o viés é 127. P2: 85 em binário é 1010101. 0.125 em binário é 0.001. Portanto, 85,125 em binário é 1010101.001 P3: 1010101.001 => 1.010101001 × 2^6 P4: O número é positivo, então o bit de sinal é 0. O expoente é o deslocamento necessário para normalizar a mantissa. No caso, 6. A mantissa é a parte fracionária normalizada, que é 010101001.(note que o 1 a esquerda do ponto decimal não será representado. P5: Expoente = 6 + 127 = 133 em binário é 10000101. P6: Sinal: 0, Expoente: 10000101, Mantissa: 01010100100000000000000 (completar com zeros até 23 bits), portanto 0 10000101 01010100100000000000000
Exemplo: Dado o número representado em floating point de 32 bits = 11000000111000000000000000000000 P1: Expoente tem 8 bits => viés = 127 (28-1-1) P2: Sinal (msb): 1 => é um número negativo (-) P3: Expoente (8 bits): 10000001 = 129 P4: expoente (e = E - vies) 129 - 127 = 2 P5: Mantissa: (23 bits): 11000000000000000000000 P6: Valor (24 bits):1.11000000000000000000000 = 1,75 P7: Resultado: (-) 1,75 x 22 = -7
Os números sub_normais são indicados pelo Expoente = 00000000. Esse Expoente será interpretado como 2-126. Eles, ao contrário dos números normalizados, não usam um "1" implícito no início da mantissa. Isso significa que a mantissa desses números começa com um "0" explícito antes da parte fracionária, permitindo representar valores muito pequenos que não podem ser normalizados devido à limitação dos bits do expoente. Exemplos: 0 00000000 00000000000000000000000 corresponde ao número +0 1 00000000 00000000000000000000000 corresponde ao número -0 0 00000000 10000000000000000000000 corresponde ao número 0,5 x 2-126 = 5.877472E-39 1 00000000 00000000000000000000001 corresponde ao número -2-23 x 2-126 = -0.00000011920928955078125 x 2-126 = -1.40129846432481707092373E-45 (2-149
Mantissa: Todos os bits definidos como 0 (23 bits) Representação em 32 bits: 0 11111111 00000000000000000000000
Mantissa: Todos os bits definidos como 0 (23 bits) Representação em 32 bits: 1 11111111 00000000000000000000000
Mantissa: Pelo menos um bit não nulo (23 bits) Representação: x 11111111 yyyyyyyyyyyyyyyyyyyyyyy (onde "x" é o bit de sinal e "y" são bits da mantissa)
Unidade 3 - Funções, portas lógicas e álgebra booleana
Unidade 4 - Introdução a linguagem VHDL e Quartus/ModelSim
Unidade 5 - Circuitos lógicos combinacionais (com VHDL)
Unidade 6 - Circuitos aritméticos (com VHDL)
AvaliaçõesDurante o semestre serão realizadas 4 avaliações. As avaliações devem ser enviadas pela plataforma Moodle com os arquivos solicitados.
Atividade relâmpago (AR)As atividades relâmpago devem ser entregues no Moodle da disciplina. A não entrega dessas atividades não gera nenhum desconto, apenas geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN. Atividade extra-classe (AE)A média ponderada das atividades extra-classe será considerada no cálculo do conceito final da UC. A entrega das mesmas será feita pelo Moodle, e cada dia de atraso irá descontar 0,2 na nota da atividade. Muitas dessas atividades também geram pontos de BÔNUS que são adicionados aos conceitos das avaliações A1 a AN. Para os BÔNUS só serão considerados projetos entregues no prazo.
AE1 - Projeto de um conversor de binário para mostrador de 7 segmentos
AE2 - Conhecendo os dispositivos lógicos programáveis
AE3 - Programação do kit Mercurio IV
Referências Bibliográficas:
|