Verificação MO801/MC912 Passos de Projeto 1. 2. 3. 4. 5. 6. 7. Requisitos Especificação geral e arquitetura Projeto em alto nível Implementação em HDL Verificação funcional Projeto físico (ferramentas específicas) Fabricação Definições • Validação – Certificação de que o circuito final é equivalente ao HDL que o gerou • Verificação – Certificação de que o HDL é equivalente à especificação do projeto – Nosso foco Exemplo • O sinal de trânsito entre as ruas Elm e Main deve ficar ativo (verde) por um minuto em cada direção quando possuir tráfego • Sensores foram instalados nas duas ruas Código library ieee; use ieee.std_logic_1164.all; entity traffic is port (clk, reset, timer_pulse, Main_street, Elm_street : in std_ulogic; Light_Direction : out std_ulogic_vector(1 downto 0)); end entity traffic; Código architecture rtl of traffic is signal current_state_din, current_state_dout : std_ulogic_vector(1 downto 0); begin dfp : process(timer_pulse, Main_Street, Elm_Street, current_state_dout) begin current_state_din <= current_state_dout; if timer_pulse = ‘1’ then if Main_street = ‘1’ then current_state_din <= “01”; elsif Elm_Street = ‘1’ then current_state_din <= “10”; end if; end if; end process dfp; Código reg_proc: process(clk, reset) begin if (reset = ‘0’) then current_state_dout <= “01”; elsif clk’event and clk = ‘1’ then current_state_dout <= current_state_din; end if; end process reg_proc; Light_Direction <= current_state_dout; end rtl; Fluxograma Esperar 60s Não Tráfego em Main? Sim Não Tráfego em Elm? Sim Elm verde Main verde Comentários • A ferramenta de síntese é capaz de sintetizar a descrição errada do circuito • É possível produzir o chip errado • É responsabilidade do engenheiro de verificação detectar essa falha de projeto Primeiro desafio da verificação • Explosão de estados • O exemplo simples tem – 5 entradas – 4 possíveis estados – 128 combinações possíveis a serem tratadas • E num circuito com memória? – 1Mb de memória interna. Quantos estados? Como tratar • Quebrar o componente em módulos menores • Tratar cada módulo individualmente • Proceder para testes de integração apenas quando cada submódulo estiver correto • Cuidado com deduções – Se cada módulo está correto individualmente, o circuito está correto? Estados inválidos • Alguns estados nunca devem ser alcançados – No caso do semáforo, apenas alternativas são válidas • Podem ser descartados? • O que fazer nesses casos? – O engenheiro de verificação deve verificar se o circuito realmente não entra nesses estados – Deve existir uma forma de sair de um desses estados Segundo desafio • Comportamento errado • São detectados através dos estímulos e transições • Focar numa modelagem de mais alto nível ao invés dos sinais separadamente – Observar que o clock e reset do semáforo têm significados bem definidos e checá-los separadamente Exemplos do que verificar • Microprocessador • Dispositivo de Entrada/Saída • Controlador de memória de um sistema multiprocessado • Conversor de vídeo digital Microprocessador • Estímulo funcional – Instruções carregadas na memória • Resultado da validação – Os registradores estão com os valores corretos após cada instrução? • Desafio – Todas as combinações de instruções foram verificadas? Dispositivo de Entrada e Saída • Estímulo funcional – Cabeçalho de dados, seguido por endereços, dados e bits de verificação • Resultado da validação – O dado foi transportado para o destino correto? • Desafio – O dispositivo é capaz de gerenciar centenas de fontes de dados simultaneamente? Controlador de memória de um sistema multiprocessado • Estímulo funcional – Solicitação de dados e comandos de escrita de múltiplos processadores • Resultado da validação – Os dados foram armazenados e lidos corretamente? • Desafio – A coerência global foi mantida? Conversor de vídeo digital • Estímulo funcional – Vídeo codificado num stream • Resultado da validação – O vídeo pode ser mostrado corretamente num monitor? • Desafio – Como saber se um ponto está errado? Os dois desafios • Definir cenários de estados e entradas para verificação • Indicar qualquer comportamento incorreto do circuito Como atacá-los • Verificação baseada em simulação – O circuito é simulado com um subconjunto das entradas e dos estados possíveis • Verificação formal – É feita uma prova formal de que o circuito se comporta de uma determinada forma Missão e objetivos da verificação • Tempo – Chegar atrasado no mercado pode expor o produto a uma concorrência maior • Custo – Quanto mais tarde um erro for descoberto, mais caro será corrigi-lo • Qualidade – Produto com problemas gera despesas de manutenção e afeta o nome da empresa Custo Custo de corrigir um problema Verificação Teste do sistema Usuário Tempo Número de bugs Aumento de produtividade Verificação Teste de sistema Tempo Bugs • Guardar um histórico de bugs detectados • Bugs simples devem aparecer no início da verificação – Se bugs simples aparecerem no final dos testes, rever o plano de verificaçao • Bugs complexos (exotéricos) devem aparecer no final Níveis de verificação • Especificação – Em geral bem documentada – Indica as entradas, saídas e funcionalidade geral • Implementação – Informações dos desenvolvedores – Em geral com documentação pior – Inclui componentes internos que precisam ser testados Fator humano • A equipe de projeto e a de testes precisam conviver! • Cuidado ao falar – “Encontrei um bug no seu projeto” • Talvez seja melhor – “Encontrei um caso de teste que gera resultados inconsistentes” Custos da verificação • Engenharia • Ferramentas • Tempo Custo de engenharia • Em geral, é aconselhável ter uma equipe de verificação separada da de projeto – O engenheiro de verificação deve ter habilitades diferentes do de projeto – O projetista que faz a verificação corre o risco de cometer o mesmo erro duas vezes – Um cenário não observado no projeto, provavelmente não será observado nos testes Custo de engenharia • Os projetistas são os primeiros verificadores – Ex.: erros de sintaxe não podem existir • Devem indicar partes do circuito que precisa ser verificada com mais detalhes • Devem fornecer uma documentação adequada Custo de ferramentas • É um dos grandes custos de projeto • É possível economizar engenheiros de verificação com o uso de ferramentas mais avençadas • Devem ser capazes de – Simular, checar cobertura, visualizar respostas, gerar testes baseados em padrões, controlar múltiplas simulações, suportar assertions Custo de tempo • Tempo É dinheiro • Tempo demais gasto em verificação é tempo de mercado perdido • Pouco tempo gasto em verificação pode gerar produto com problema no mercado O ciclo de verificação • • • • • • • • Especificação funcional Plano de verificação Desenvolvimento do ambiente Ambiente de depuração Teste de regressão Processo de fabricação do hardware Teste do sistema (depuração do hardware) Análise do hardware Especificação funcional • Descreve as funcionalidades do circuito • É desenvolvida pelos projetistas • É incorporada no ambiente de testes para comparação com o circuito final Plano de verificação • Perguntas – O que será verificado? – Como será verificado? • Conteúdo – – – – – – Testes e métodos Ferramentas necessárias Critério de parada Recursos necessários e cronograma Funcionalidade a verificar Funções não cobertas Desenvolvimento do ambiente • Criar o conjunto de ferramentas necessário para realizar os testes • A maior parte do projeto dos testes é nessa fase • Preocupação com os testes a serem gerados – determinísticos, aleatórios, formais, casos de contorno • Deve ser reavaliado constantemente Ambiente de depuração • Integrar o ambiente de verificação ao ambiente de projeto • Executar os testes projetados sobre o circuito • Comparar os resultados obtidos com os esperados Testes de regressão • Garantem que erros antigos não surjam novamente • No caso de testes aleatórios, garantem que seja possível executar novamente uma mesma instância para achar os bugs • Deve ser possível executar novamente todos os testes antes de enviar para produção Outras fases • Fora do nosso escopo, mais detalhes no livro – Processo de fabricação do hardware – Teste do sistema (depuração do hardware) – Análise do hardware