Noções de Verificação Funcional para Circuitos Digitais
O projeto de fabricação de um circuito digital envolve várias fases, das quais merece destaque a verificação funcional. Essa é uma metodologia que pode mostrar se o objetivo de um hardware foi conservado.
Por Lucas Danrley Cajé de Souza
Os circuitos digitais estão cada vez mais inseridos no nosso ambiente. Com o crescimento e avanço das novas tecnologias, a utilização de circuitos digitais também está crescendo, porém de maneira exponencial, assim como sua complexidade. Para que tais circuitos cheguem ao mercado, é necessário que passem por vários testes e verificações, dos quais uma parte é chamada de verificação funcional. Segundo Camara (2011), atualmente existem três tipos de verificações no campo da microeletrônica, são elas: a formal (ou estática), a funcional (ou dinâmica) e a híbrida (ou semiformal).
A verificação do tipo formal pode mostrar a existência de erros mediante expressões lógicas e matemáticas. Por meio dela serão verificados os modelos e equivalências, ou seja, se um circuito é logicamente igual a outro. Por sua vez, a verificação funcional é realizada em simulações que buscam identificar os erros, e não a ausência deles. Já a híbrida é um modelo que combina as duas verificações anteriores.
Conforme Bergeron (2002), o termo “verificação funcional” é muitas vezes confundido. Para evitar que isso ocorra, utiliza-se o conceito adotado na bibliografia da área, o qual ressalta que essa técnica não é apenas uma série simples de testes, mas sim um processo que visa demonstrar que o objetivo de um projeto foi preservado na fase de implementação, ou seja, quando o circuito integrado (CI) for fabricado.
Sua utilização no processo de fabricação de um CI, conhecidos na área como IP Core (Intellectual Property Core ), é de extrema importância, pois é mais fácil encontrar e reparar erros antes que o mesmo seja fabricado, o que deixa o custo final menor, já que consertar hardwares desse tipo, na maioria das vezes, é inviável, além disso o projeto torna-se mais confiável. Dessa maneira, tal metodologia pode estar presente do início ao fim do projeto, detendo boa parte do tempo do mesmo.
A sua implementação se dá por meio de simulações computacionais, como já mencionado, geralmente desenvolvidas em linguagens de descrição de hardware (VHDL ou Verilog), ao se implementar os chamados testbench, termo que se refere ao ambiente no qual as simulações são realizadas. Nele, o dispositivo que será verificado, chamado de DUV (Design Under Verification), receberá estímulos, ou seja, entradas, e a partir daí serão verificadas as saídas e comparadas com os valores ideais.
Os estímulos de entradas são determinados nas fases iniciais do projeto, tendo em vista a funcionalidade e objetivo do hardware que está sendo desenvolvido, assim como suas saídas. A verificação funcional atua, então, determinando quais os padrões de entradas para um CI que funcione corretamente e comparando se suas saídas estão condizentes. Na Figura 1 é mostrada uma estrutura básica de um testbench, na qual percebe-se que esse é um sistema fechado, onde não há nenhuma entrada ou saída.
Figura 1. Estrutura geral de um testbench implementado a um DUV. [Fonte: Bergeron, 2002]
Para que o testbench seja considerado bom, ele deve comparar automaticamente o resultado de saída do DUV com o modelo de referência, ou seja, o padrão considerado ideal, pois o trabalho de comparação manual está sempre mais propenso a erros. Mas, como nenhum sistema está isento de falhas, um dos problemas mais comuns que podem ocorrer na verificação funcional se encontra justamente na má implementação desse testbench. Além disso, caso haja interpretações erradas das especificações ou uma descrição do hardware má elaborada, a verificação pode não ser bem-sucedida (Silva, 2007).
Quando se trata de um projeto de hardware muito grande, a verificação é comumente realizada em blocos, pois existe uma dificuldade maior para identificar onde o erro está localizado, tornando a metodologia mais complexa. Assim, o DUV é dividido em blocos a fim de facilitar a procura de erros. Todavia, serão necessários mais testbenches, pois cada bloco necessita de um, assim como o modelo de referência, em que cada bloco terá o seu.
Atualmente existem várias metodologias de implementação que podem auxiliar os profissionais responsáveis pela tarefa de verificação. Exemplos dessas metodologias são a OVM (Open Verification Methodology), BVM (Brazil-IP Verification Methodology) e UVM (Universal Verification Methodology), que está se consolidando.
A OVM é uma metodologia aberta que tem sua biblioteca de verificação escrita na linguagem System Verilog. Nesse ambiente de verificação, seus componentes são chamados de UVC (Universal Verification Component), e um conjunto deles são chamados de OVC (OVM Verification Components). Esses UVCs devem ser reusáveis, para que possam ser utilizados em outros projetos.
Embora tenha representado um avanço na área, essa metodologia não é capaz de criar e executar o ambiente de verificação sem que um modelo comportamental já exista, sendo necessário o desenvolvimento de um novo com o UVC sempre que o DUV é implementado.
Já a metodologia BVM consegue, tal como outra chamada VeriSC, incluir o testbench pronto antes da criação do DUV. O modelo do seu testbench pode ser visto na Figura 2.
Figura 2. Testbench para o modelo BVM. [Fonte: Camara, 2011]
Por fim, a metodologia UVM, criada em 2010, é uma ferramenta de verificação muito poderosa que surgiu com o objetivo de unificar todas as outras metodologias anteriores, deixando um padrão aceitável por toda a comunidade de verificação de circuitos digitais, além de garantir uma maior confiabilidade aos projetos. Assim como as demais, ela também possui código aberto. A verificação funcional mostra-se então uma ótima ferramenta ao garantir que os projetos de circuitos digitais se tornem mais baratos e confiáveis.
Referências:
BERGERON, J. Writing Testbenches: Functional Verification of HDL Models. Disponível em http://read.pudn.com/downloads105/doc/432641/(Kluwer)%20Writing%20Testbenches--Functional%20Verification%20of%20HDL%20Models.pdf. Acesso em 26 de julho de 2017.
CAMARA, R. C. P. OVM_tpi: Uma Metodologia de Verificação Funcional para Circuitos Digitais. 2011. 227 f. Dissertação (Mestrado em Ciências da Computação) – Universidade Federal de Pernambuco. Recife, 2011.
COSTA, E. B. PERONE, V. A. BARBOSA, T. L. A. et al. Verificação Funcional para Sistemas Digitais utilizando System Verilog. Disponível em http://sbesc.lisha.ufsc.br/sbesc2012/tiki-download_file.php?fileId=112. Acesso em 26 de julho de 2017.
OLIVEIRA, J. D. Jr. Verificação Funcional de Modelos Transacionais de Processadores. 2014. 138 f. Trabalho de Conclusão de Curso (Bacharelado em Engenharia Elétrica) – Universidade de Brasília, Brasília, 2014. Disponível em http://bdm.unb.br/bitstream/10483/8219/1/2014_JairDiasdeOliveiraJunior.pdf. Acesso em 26 de julho de 2017.
SILVA. K. R. G. Uma Metodologia de Verificação de Verificação Funcional para Circuitos Digitais. 2007. 133 f. Tese (Doutorado em Engenharia Elétrica) – Universidade Federal de Campina Grande. Campina Grande, 2007.
|