Baixe o app para aproveitar ainda mais
Prévia do material em texto
USP -ESCOLA POLITÉCNICA PCS - DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E SISTEMAS DIGITAIS PCS3115 Sistemas Digitais I – 1o Semestre de 2016 Exercício 4 (a ser entregue no dia 17 de junho, sexta-feira, às 17:00, na Secretaria do PCS) Objetivos: Este exercício possui dois objetivos principais: familiarizar o aluno com a ferramenta de descrição e simulação de sistemas digitais em VHDL, o Altera Quartus II Web Edition; Exercitar os conceitos de blocos combinatórios básicos discutidos em aula Exercitar a síntese de circuitos combinatórios usando VHDL Atividade 1 (2 pontos): Familiarização com a ferramenta de HDL (1) Instale a ferramenta Altera Quartus II (versão 9.1 SP2), disponível em https://wl.altera.com/download/software/quartus-ii-we/9.1sp2. Será necessário realizar um cadastro para fazer o download do arquivo (1,8 GB na versão MS-Windows). (2) Diversos tutorias e materiais complementares estão disponíveis no Repositório do Ae, na pasta "Material Complementar – VHDL”. Se preferir (e já quiser ir se adiantando em outra disciplina da Poli...), você também pode usar os tutoriais na página do Laboratório Digital: http://www.pcs.usp.br/~labdig/apoio.html (3) Crie o projeto adder1mod4 no Quartus para o circuito mostrado ,a Figura 1, que calcula S = (E+1) mod 4 para uma entrada E de 2 bits, indicando também quando a entrada tem o valor máximo. (4) Execute a simulação do projeto adder1mod4 e gere formas de onda para todos os 4 valores possíveis de entrada. O que entregar: Em uma página, escrito manualmente, apresente a Tabela Verdade para todas as combinações de entradas e explique quais os valores de entrada testados, justificando sua escolha. Discuta se as formas de onda obtidas para os sinais de saídas coincidem com os valores esperados. Apresente uma impressão do diagrama lógico do circuito e da simulação realizada no Quartus. Figura 1 – Circuito para cálculo de S = (E+1) mod 4 Exemplo de forma de onda (para um somador de 1 bit): Atividade 2: Blocos combinatórios -- Decodificador Considere a seguinte descrição em VHDL, que corresponde a um decodificador binário 3x8. library IEEE; use IEEE.std_logic_1164.all; entity decoder is port (d : in STD_LOGIC_VECTOR (2 downto 0); s : out STD_LOGIC_VECTOR (7 downto 0)); end decoder; architecture decoder_behavior of decoder is begin with d select s <= "00000001" when "000", "00000010" when "001", "00000100" when "010", "00001000" when "011", "00010000" when "100", "00100000" when "101", "01000000" when "110", "10000000" when "111", "00000000" when others; end decoder_behavior; (5) (1 ponto) Crie um projeto no Quartus para o código acima. Execute e apresente a simulação do módulo para todas as combinações possíveis de valores de entrada. (6) (1 ponto) Modifique o código VHDL apresentado para incluir uma entrada de enable ativo em alto, criando a entidade denominada decoderEn. Execute e apresente a simulação do módulo para todas as combinações possíveis de entradas quando enable =1, e para pelo menos 2 valores de entrada quando enable = 0. (7) (2.5 pontos) Crie um novo módulo VHDL, denominado meuNUSP, que construído usando a abordagem estrutural com o decoder como um dos componentes para calcular F = soma de mintermos correspondentes aos 4 últimos dígitos do seu número USP, substituindo 8 e 9 por 0. Exemplos: *1234 F = ∑(1,2,3,4); *2288 F = ∑(2,0), *8899 F = ∑(0). A entidade meuNUSP deve respeitar a descrição a seguir: library IEEE; use IEEE.std_logic_1164.all; entity meuNUSP is port (d : in STD_LOGIC_VECTOR (2 downto 0); s : out STD_LOGIC); end meuNUSP; Para facilitar, use o componente OR4 cujo código VHDL é fornecido a seguir, ou algum outro componente OR que você queira construir (nota: não use a biblioteca unisim mencionada no livro-texto, porque ela é dependende de fabricante...) library IEEE; use IEEE.std_logic_1164.all; entity or4 is port (I0,I1,I2,I3 : in STD_LOGIC; O : out STD_LOGIC); end or4; architecture or4_arch of or4 is begin O <= I0 or I1 or I2 or I3; end or4_arch; (8) (3.5 pontos) Na área de criptografia, é comum o uso de aritmética de corpos finitos binários. Para exercitar esse conceito, vamos fazer uma operação simples com 7 bits: a multiplicação de um número N por 2, usando como polinônimo irredutível x 7 +x+1. Isso equivale a: (1) deslocar N para a esquerda de 1 posição, jogando-se fora o bit mais significativo b e adicionando-se 0s à direita, e então (2) caso b seja 1, realiza-se um XOR dos 7 bits restantes com 0011. (Veja https://en.wikipedia.org/wiki/Finite_field_arithmetic para detalhes). b 0000001 (deslocamento) 0000010 (sem XOR com 0000011) 0000010 Exemplos: 1000000 (deslocamento) 0000000 (fazer XOR com 0000011) 0000011 1000011 (deslocamento) 0000110 (fazer XOR com 0000011) 0000101 Crie em VHDL um componente denominado mulGF, que realiza essa operação. Você pode usar a abordagem estrutural ou comportamental, mas é proibido neste exercício (1) usar uma descrição sequencial (com uso de process), mesmo se você já tiver experiência anterior com HDLs, ou (2) fazer um código do tipo “força-bruta”, listando (quase) todas as 127 possibilidades e (3) usar a biblioteca unisim mencionada no livro-texto (de novo, porque ela é dependende de fabricante...). Simule o circuito para os seguintes valores de N: 0, 63, 64, 127, e (o valor binário correspondente aos dois últimos dígitos do seu número USP). A entidade mulGF deve respeitar a descrição abaixo: entity mulGF is port (x : in STD_LOGIC_VECTOR (6 downto 0); y : out STD_LOGIC_VECTOR (6 downto 0)); end mulGF; O que entregar: O seu projeto completo contendo o decoderE, o meuNUSP, e o mulGF. Para isso, no Quartus vá em “Project Archive Project” e salve o projeto com o nome “[seu_numero_usp].qar”. Entregue também as quatro formas de onda geradas a partir da sua simulação, uma para cada um dos itens de 5 a 8.
Compartilhar