VHDL Linguagem de Descrição e Síntese de Circuitos Digitais Sistemas Digitais Especificação da Estrutura do Sistema Especificação da Estrutura do Sistema Especificação da Estrutura do Sistema Especificação da Estrutura do Sistema Especificação da Estrutura do Sistema Especificação da Estrutura do Sistema Especificação da Estrutura do Sistema Instanciação Direta Especificação da Estrutura do Sistema Instanciação Direta Especificação da Estrutura do Sistema Instanciação Direta Especificação da Estrutura do Sistema Componentes Especificação da Estrutura do Sistema Componentes Especificação da Estrutura do Sistema Componentes Especificação da Estrutura do Sistema Componentes Algumas Práticas que Devem ser Evitadas Maus exemplos: process (a,b) begin if (a = ‘1’) then q <= b; end if; end process; process(c) begin case c is when ‘0’ => q <= ‘1’; z <= ‘0’; when others => q <= ‘0’; end case; end process; • • Exemplo1 falta else Exemplo2 falta atribuição de z quando c é diferente de ‘0’. • • • • Para evitar: atribua valores default as saídas process(inputs,state) begin – outpus <= ‘0’; – case (state) – ... – end case; end process; • Teste x Verificação • Verificação – usado para verificar se o projeto está de acordo com o desejado – objetivo é verificar a funcionalidade – a ferramenta mais utilizada é o simulador • Teste – usado para verificar a fabricação do dispositivo – objetivo não é verificar a funcionalidade – objetivo é exercitar os nós físicos do sistema • nós devem ir de 0 para 1 ou de 1 para 0 – usa padrões específicos para exercitar estes nós • estes padrões são gerados por ferramenta de ATPG (automatic test pattern generation ) Test Bench testbench geração de estímulos UUT referencial avaliação de respostas Test Bench Test Bench Test Bench Test Bench Test Bench Test Bench Exemplo: Geração de estímulos • Origem dos estímulos: – formas de onda – de arquivos – de tabelas – aleatória – mista Estímulos Tipo Forma de Onda process begin s <= ‘0’ ; wait for 20 ns; s <= ‘1’ ; wait for 10 ns; s <= ‘0’ ; wait for 10 ns; s <= ‘1’ ; wait for 20 ns; s <= ‘0’ ; wait for 50 ns; s <= ‘1’ ; wait for 10 ns; s <= ‘0’ ; wait for 20 ns; s <= ‘1’ ; wait for 10 ns; s <= ‘0’ ; wait for 20 ns; s <= ‘1’ ; wait for 40 ns; s <= ‘0’ ; wait for 20 ns; end process; Estímulos de Arquivos procedure ReadFile() is variable lineAux : line; file PatternFile : TEXT open READ_MODE is “inputPattern.txt"; begin for i in 0 to nPolig-1 loop readline(PatternFile , lineAux); Vantagem: simples read(lineAux,value); implementação para padrões simples ... end loop; Desvantagem: end procedure; •difícil de implementar para padrões complexos •aumenta tempo de simulação devido as chamadas de sistema Estímulos de Tabela type vector is record LD : std_logic; LL : std_logic; Vantagem: menor tempo de RST : std_logic; simulação que estímulo de D : std_logic_vector(7 downto 0); arquivo P : std_logic; end record; type vectorArrayType is array (0 to TABLE_SIZE) of vector; constant vectorTable : vectorArrayType := ( -- LD LL RST D P ( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘0’), Desvantagem: ( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’), •aumenta tempo de compilação ( ‘0’, ‘0’, ‘1’, “xxxxxxxx” ‘0’), ( ‘1’, ‘0’, ‘0’, “00000101” ‘0’), •consome memória para muitos ( ‘0’, ‘1’, ‘0’, “11010100” ‘0’), padrões ( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’), ( ‘0’, ‘0’, ‘0’, “xxxxxxxx” ‘1’), ... ); Test Bench - Verificação Test Bench - Verificação Exemplo: Práticas Básicas • Convenções de nomes (sinais, entidades, arquivos, etc) • Incluir headers nos fontes – descrição (func, autor, versão, etc) – formato e temp. de entrada e saída – histórico • Comentários (inglês) • Indentação • Instanciação (associação por nomes) • Uma linha por comando/declaração • Usar tipos baseados nos tipos padrões IEEE – std_logic, std_ulogic • Não usar valores fixos na descrição – use generic ou constant DISCIPLINA !!!