Experiências com design em Verilog ou VHDL Test Driven Development (TDD) para a lógica (chip)

StackOverflow https://stackoverflow.com/questions/1633559

Pergunta

Eu olhei na web e as discussões / exemplos parecem ser para desenvolvimento de software tradicional. Desde Verilog e VHDL (usado para design de chips, por exemplo, FPGAs e ASICs) são semelhantes ao desenvolvimento de software C e C ++ parece fazer sentido. No entanto, eles têm algumas diferenças sendo fundamentalmente paralelas e exigindo hardware para integralmente os ensaios.

Que experiências, boas e más, você já teve? Todos os links que você pode sugerir sobre este pedido específico?

Edita / esclarecimentos: 10/28/09: Eu estou particularmente perguntando sobre TDD. Eu estou familiarizado com a realização de bancos de testes, incluindo os auto-verificação. Eu também estou ciente de que SystemVerilog tem algumas características particulares em bancadas de teste.

10/28/09:. As questões implícitas incluem: 1) escrever um teste para qualquer funcionalidade, nunca usando formas de onda para simulação e 2) escrevendo teste / testbenches primeira

11/29/09: Em Empirical Studies Mostrar Test Driven Development Melhora qualidade eles relatam para (software) TDD "a densidade de defeito pré-libertação dos quatro produtos, medidos como defeitos por cada mil linhas de código, diminuiu entre 40% e 90% em relação aos projectos que não utilizam TDD. gestão das equipes relataram subjetivamente um aumento de 15-35% no tempo de desenvolvimento inicial para as equipes usando TDD, embora as equipes concordaram que este foi compensado por custos de manutenção reduzidos." Os erros reduzidos reduz risco de fita-out, à custa do impacto agenda moderada. Este também tem alguns dados.

11/29/09: Eu estou fazendo principalmente o controle e caminho de dados de código, não o código DSP. Para DSP, a solução típica envolve uma Matlab mordeu-accurate simulação.

03/02/10: A vantagem de TDD é que você verifique se o teste falhar em primeiro lugar. Suponho que isso poderia ser feito com afirmações também.

Foi útil?

Solução

eu escrever código para FPGAs, não ASICS ... mas TDD é minha ainda a minha abordagem preferida. Eu gosto de ter um conjunto completo de testes para todo o write funcional código que eu, e eu tento (nem sempre com sucesso) para escrever testcode primeiro. Olhando para formas de onda sempre acontece em algum momento quando você está depuração, mas não é uma boa maneira de validar o seu código (IMHO).

Dada a dificuldade de realizar testes apropriados no hardware real (estimulando casos de canto é particularmente difícil) eo fato de que um VHDL-compilação leva segundos (vs a compilação "para hardware" que leva muitos minutos (ou até mesmo horas)) , eu não vejo como alguém pode operar qualquer outra forma!

Eu também construir afirmações na RTL como eu escrevê-lo para pegar coisas que eu sei não deve acontecer. Aparentemente isso é visto como um pouco "estranho", como há uma percepção de que verificação engenheiros escrever afirmações e os designers RTL não. Mas principalmente eu sou meu próprio engenheiro de verificação, então talvez seja por isso!

Outras dicas

Eu uso VUnit para Test Driven Development com VHDL.

VUnit é uma biblioteca Python que invoca o compilador VHDL e simulador e lê os resultados da simulação. Ele também oferece vários bons VHDL bibliotecas que torna muito mais fácil de escrever melhores bancadas de teste, como um href="https://vunit.github.io/com/user_guide.html" comunicação biblioteca , biblioteca logging e uma verificar biblioteca.

Existem muitas possibilidades, uma vez que é invocado a partir de Python. É possível tanto para gerar dados de teste, bem como verificar os dados de saída a partir do teste em Python. Eu vi este exemplo no outro dia, onde eles usaram Octave - uma Matlab cópia - para traçar os resultados dos testes .

VUnit parece muito ativa e eu tenho várias vezes sido capaz de realmente fazer perguntas diretamente para os desenvolvedores e obteve ajuda muito rapidamente.

A desvantagem é que ele é mais difícil de erros de compilação de depuração uma vez que existem tantas variações função / procedimento com o mesmo nome nas bibliotecas. Além disso, algumas coisas é feito por trás da cena de pré-processamento do código, o que significa que alguns erros podem aparecer em lugares inesperados.

As extensões SystemVerilog para o IEEE Verilog padrão incluem uma variedade de construções que facilitam a criação de conjuntos de testes minuciosos para a verificação complexos projetos de lógica digital. SystemVerilog é uma das o Hardware Verificação Languages ??(CSR), que é usado para verificar chips ASIC projeta através de simulação (em oposição a emulação ou usando de FPGA).

Benefícios significativos ao longo de um Hardware tradicional Design Língua (Verilog) são:

  • restrita randomização
  • afirmações
  • coleta automática de dados de cobertura funcional e afirmação

A chave é ter acesso a software de simulação que suporta este recente (2005) padrão. Nem todos os simuladores de apoiar plenamente as características mais avançadas.

Além do padrão IEEE, há uma biblioteca SystemVerilog open-source de componentes de verificação disponíveis a partir VMM Central ( http://www.vmmcentral.com ). Ele fornece uma estrutura razoável para a criação de um ambiente de teste.

Você também pode fazer mais pesquisas sobre o tema, pesquisando na VERIFICAÇÃO Aliança fórum.

SystemVerilog não é a única HVL, e VMM não é a única biblioteca. Mas, eu recomendaria ambos, se você tem acesso ao apropriada Ferramentas. Eu descobri que isso seja uma metodologia eficaz na busca de design erros antes tornar-se silício.

Eu não sei muito sobre hardware / design de chips, mas estou profundamente em TDD, para que eu possa, pelo menos, discutir a adequação do processo com você.

A pergunta que eu chamaria mais pertinente é: Como pode rapidamente seus testes de lhe dar feedback sobre um projeto? Relacionado a isso: Como rapidamente você pode adicionar novos testes? E quão bem as suas ferramentas de suporte à refatoração (estrutura de mudar sem mudar o comportamento) de seu projeto?

O processo de TDD depende em grande parte sobre a "suavidade" de software - boas automatizada testes de unidade executar em segundos (minutos no lado de fora), e orientar rajadas de construção focado e refatoração. Seus ferramentas suportam este tipo de fluxo de trabalho -? Ciclismo rapidamente entre escrever e executar testes e construir o sistema em teste em iterações curtas

Com relação à refatoração ferramentas para linguagens de hardware, eu gostaria de apontar-lhe a nossa ferramenta Sigasi HDT . Sigasi fornece um IDE com refatorações analisador e VHDL embutidos VHDL.

Philippe Faes, Sigasi

ANVIL - Outra Verilog palestras Interaction camada sobre este algum. Eu ainda não tentei.

Eu nunca ativamente tentou TDD em um projeto RTL, mas eu tinha meus pensamentos sobre este assunto.

O que eu acho que seria interessante é experimentar esta abordagem em relação a afirmações. Você seria basicamente primeira anote na forma de afirmações que você supor / esperar de seu módulo, escrever o seu RTL e depois você pode verificar essas afirmações usando ferramentas formais e / ou simulação. Em contraste com testcases "normal" (onde você provavelmente precisará escrever aqueles dirigidos) você deve ter uma cobertura muito melhor e as afirmações / suposições podem ser de uso posterior (por exemplo, no nível do sistema) também.

No entanto eu não confiar totalmente em afirmações, isso pode se tornar muito peludo.

Talvez você pode expressar seus pensamentos sobre este assunto, bem, como você está pedindo por isso eu acho que você levar algumas idéias na sua cabeça?

O que é TDD para você? Você quer dizer ter todo o seu código exercido pelos testes automáticos em todos os momentos, ou você ir mais longe para dizer que os testes são escritos antes do código e nenhum código novo é escrito a menos que testes falham?

Qualquer abordagem que você preferir, teste de código HDL não é muito diferente de teste de software. Ele tem suas vantagens (muito melhor cobertura e profundidade de testes) e desvantagens (difíceis de configurar e incómodo relativamente ao software).

Eu tive uma experiência muito boa com o emprego de Python e transatores HDL genéricos para a implementação de testes abrangentes e automáticas para módulos de HDL sintetiz�eis. A idéia é um pouco semelhante ao que Janick Bergeron presentes em seus livros, mas em vez de SystemVerilog, Python é usado para (1) gerar o código VHDL de cenários de teste escrito em Python e (2) a verificação dos resultados escritos pelos transatores monitoramento que aceitam formas de onda do projeto durante a simulação.

Há muito mais a ser escrito sobre esta técnica, mas eu não tenho certeza do que você quer focar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top