Co-simulação HDL

Co-simulação HDL

Olá, caro leitor! Este artigo tem o intuito de expor, de forma resumida, o conceito de co-simulação. Após conceituar o assunto, será demonstrado um projeto básico utilizando duas ferramentas bem conhecidas: Matlab/Simulink e ModelSim. O objetivo principal é demonstrar como simular sistemas compostos por elementos descritos em diferentes níveis de linguagem e abstração.

Design, Validação e Verificação 

Durante o desenvolvimento de um sistema a utilização de técnicas de modelagem e simulação torna-se um fator significante. Nesse sentido, verificar e validar são práticas essenciais para garantir a qualidade do projeto, manter a conformidade com os padrões, atender aos requisitos, eliminar os erros de projeto e posteriormente maximizar o desempenho. Atualmente existem diversas ferramentas de software de apoio, permitindo que um projeto seja desenvolvido e simulado em partes individuais e depois integrados num sistema completo.

Testbench

Uma forma de analisar o comportamento de um sistema é a partir da utilização de testbenches. Um testbench utiliza diversos cenários de teste para estimular um sistema e obter uma resposta. Desse modo, um cenário define um conjunto de entradas de teste, já o sistema quando responde a estes estímulos gera uma resposta. Nesse contexto, um testbench pode ser considerado uma ferramenta para verificação e validação. Cabe ressaltar que nesse processo são utilizados softwares de simulação, que possuem seus prós e contras. Vale lembrar ainda que o sucesso da simulação não garante a funcionalidade do projeto, no mais, o aprofundamento dessas questões não estão no escopo do artigo. 

Para exemplificar, considere o multiplexador descrito em verilog que foi apresentado no artigo do Thiago Lima.

O testbench para esse módulo é mostrado abaixo. Note que para cada conjunto de entrada A, B e S é possível avaliar o comportamento do multiplexador. Esse procedimento é realizado na simulação, sendo o ‘$display’ utilizado para exibir todos os sinais.

Afinal, o que é Co-simulação? 

O processo co-simulção é utilizado para validar um sistema que é composto por diferentes partes, por exemplo, hardware e software. Os modelos de co-simulação são categorizados como homogêneos ou heterogêneos.

  • Num ambiente homogêneo todo o sistema é simulado utilizando a mesma ferramenta, isto determina que os modelos do sistema sejam especificados utilizando a mesma linguagem.
  • No ambiente heterogêneo não é necessário que todas as entidades de um projeto sejam especificadas utilizando a mesma linguagem, ou ainda, a mesma tecnologia. Estes sistemas podem ser divididos em outras duas categorias: Backplane, que necessita de um ambiente para integrar os simuladores, ou Direct coupling, no qual os simuladores utilizam protocolos para trocar informação diretamente.

Neste artigo, será demonstrado a co-simulação heterogênea (vide Figura 1), um processo utilizado para validação de sistemas que é caracterizado por utilizar simuladores independentes que são executados paralelamente. O objetivo é fazer com que partes de um sistema sejam simulados utilizando ferramentas específicas.

Co-simulação HDL: Simulador
Figura 1 – Co-simulação heterogênea

Grosso modo, o processo de co-simulação tem como função realizar a comunicação entre os simuladores. Deste modo, um ambiente de co-simulação deve proporcionar um meio de comunicação entre os simuladores além de garantir a consistência na interação entre as partes.

Co-simulação HDL (HDL Cosimulation)

Como dito, o objetivo é demonstrar como simular sistemas compostos por elementos descritos em diferentes níveis de linguagem e abstração, neste caso será demonstrado a simulação de um módulo VHDL fazendo parte de um modelo do Simulink. Abaixo segue uma breve descrição sobre os dois softwares utilizados na co-simulação:

  • Matlab/Simulink: Simulink® é um ambiente de diagramação gráfica por blocos utilizado para modelagem de sistemas. Tem suporte para simulação, geração automática de código, teste contínuo e verificação de sistemas embarcados. O toolbox que possui o componente de co-simulação HDL é chamado HDL Verifier;
  • ModelSim (PE 10.4a): ModelSim® é um ambiente de simulação de linguagens de descrição de hardware (HDL – Hardware Description Language) desenvolvido pela Mentor Graphics.

Utilizando a co-simulação de módulos HDL é possível verificar o comportamento de um sistema como um todo. Desse modo, a ferramenta de simulação HDL possibilita analisar o código HDL a nível RTL ou Gate Level. Por outro lado, o simulador de modelos permite analisar no nível de sistema o comportamento de vários elementos e, principalmente, a interação entre eles. Além disso, é possível verificar como as diferenças entre os resultados esperados e os resultados da simulação afetam o sistema, tornando-se uma ferramenta importante para validação.

Para mais informações sobre o ModelSim, consulte o artigo do Andre Prado.

Co-simulação na prática

Antes de iniciar a construção do sistema, é necessário estabelecer o canal de comunicação entre os simuladores. Sem entrar em muitos detalhes, a comunicação entre os simuladores pode ser estabelecida de diversas formas, por exemplo, via sockets ou memória compartilhada. Neste exemplo, a conexão será estabelecida utilizando um socket. Para isso, o comando mostrado abaixo deve ser executado na linha de comando do Matlab.

Algumas mensagens podem aparecer após a execução do comando, conforme a Figura 2. Neste exemplo, a versão do ModelSim utilizada não é padrão do toolbox instalado (HDL Verifier), contudo a interação entre os simuladores foi bem sucedida.

Co-simulação HDL: vsim
Figura 2 – Iniciando ModelSim na linha de comando do Matlab

Após a execução do comando, o ModelSim será iniciado. Neste ponto, um projeto será criado para incluir um módulo VHDL. O código mostrado abaixo é um exemplo de tutorial do Matlab, sua função é inverter o valor da entrada e atribuir este valor na saída em cada evento de clock.

No ModelSim, acesse o menu File -> New -> Project e crie um projeto. Esse processo é mostrado na Figura 3.

Co-simulação HDL: Novo projeto no Multisim
Figura 3 – Menu Create Project do ModelSim

Após criar o projeto, acesse o item Add Existing File e adicione o módulo VHDL mostrado acima, conforme a Figura 4.

Co-simulação HDL: Add File no Multisim
Figura 4 – Adicionando arquivo VHDL no projeto

Com o arquivo adicionado ao projeto, o próximo passo é compila-lo. Para isso, selecione o arquivo na aba Project e execute a operação de compilação como mostra a Figura 5.

Co-simulação HDL: Compile File
Figura 5 – Compilação do módulo VHDL

Após a operação, analise o console Transcript para verificar se o processo de compilação ocorreu corretamente. Na Figura 6 é mostrado o resultado da compilação do módulo VHDL.

Co-simulação HDL: Mensagem de Compilação
Figura 6 – Mensagens geradas após a compilação

Finalizado o processo, o próximo passo é indicar para o simulink o arquivo que será simulado. No ModelSim, é necessário executar a operação mostrada abaixo.

Após a execução do comando algumas mensagens serão exibidas, conforme a Figura 7.

Co-simulação HDL: Modelsim vsim
Figura 7 – Iniciando ambiente de simulação

Na tela de simulação, selecione os sinais que serão exibidos na linha do tempo, conforme a Figura 8.

Co-simulação HDL: simulação do Multisim
Figura 8 – Ambiente de simulação do ModelSim

O próximo passo é criar um sistema no simulink. Para cria-lo acesse o menu Simulink Library no Matlab, em seguida crie um modelo para simulação. Esse processo é mostrado na Figura 9.

Co-simulação HDL: Novo modelo no Multisim
Figura 9 – Criando Modelo no Simulink

No Simulink Browser Library acesse o item ‘for “Use with Mentor Graphics ModelSim” presente no pacote “HDL Verifier”, conforme a Figura 10.

Co-simulação HDL: HDL Verifier
Figura 10 – HDL Verifier

Selecione o item HDL Cosimulation para inserir no modelo, conforme a Figura 11.

Co-simulação HDL: Componente HDL Cosimulation
Figura 11 – Componente HDL Cosimulation

A primeira configuração que deve ser realizada é a da conexão com o simulador HDL. Acessando as propriedades de conexão do bloco HDL Cosimulation, especifique o tipo de conexão socket e a porta 4449, conforme a Figura 12.

Co-simulação HDL: Connection
Figura 12 – Configuração de conexão

Ainda nas configurações, acesse a aba Ports e utilize a operação Auto Fill para exportar os sinais definidos na entidade do módulo VHDL. Esse processo é mostrado na Figura 13.

Co-simulação HDL: Importações dos sinais
Figura 13 – Importação dos sinais definidos no módulo VHDL

Em seguida remova os sinais previamente definidos no bloco. Apenas os sinais definidos no módulo VHDL devem estar presentes, conforme a Figura 14.

Co-simulação HDL: Configuração dos sinais
Figura 14 – Configuração dos sinais do bloco HDL Cosimulation

A Figura 15 mostra o bloco HDL Cosimulation configurado conforme o arquivo VHDL.

Co-simulação HDL: Componente HDL Cosimulation configurado
Figura 15 – Componente HDL Cosimulation configurado

A Figura 16 mostra o cenário de simulação que será utilizado, cabe ressaltar que os tipos de dados utilizados nos componentes devem ser equivalentes. Os componentes utilizados são listados abaixo:

  • Entrada clk: Para a entrada de clock foi utilizado o gerador de clock (Clock) configurado com frequência de 1000 Hz. A saída deste componente varia de 0 para 1 e de 1 para 0. Na sequência esses valores são convertidos (Data type conversion, Simulink) para booleano;
  • Entrada inport: Para esta entrada foi utilizado um contador de 8 bits (Counter Free-Runing) com sample time de 5 milissegundos;
  • Saída outport: A saída do módulo foi conectada ao componente scope.
Co-simulação HDL: Modelo para simulação
Figura 16 – Modelo para simulação

Antes de iniciar a simulação é necessário realizar uma configuração fundamental, a relação do tempo de simulação entre os simuladores utilizados! Neste exemplo será utilizada a seguinte relação: 1 segundo no Simulink corresponde a 1 segundo no ModelSim. Conforme a Figura 17, esta opção é realizada na aba Timescales.

Co-simulação HDL: Configuração do timescale
Figura 17 – Configuração do timescale

Feito isso, é necessário determinar o tempo no qual os sinais do bloco HDL são avaliados. As entradas utilizam o sample time do Simulink, já na saída foi definido um sample time de 1 milissegundo (1e-3), isto é, durante a simulação a saída outport será amostrada a cada 1 milissegundos. A Figura 18 mostra a configuração dos sinais de entrada e saída.

Co-simulação HDL: Sample Time do sinal de saída
Figura 18 – Sample Time do sinal de saída

Para iniciar a simulação, basta definir o tempo total e executar a operação Run no meu do Simulink, conforme a Figura 19. No exemplo foi utilizado tempo total de 5 segundos.

Co-simulação HDL: Run
Figura 19 – Iniciando simulação do Modelo

A Figura 20 mostra a saída do sistema capturada pelo componente Scope após a finalização da simulação.

Co-simulação HDL: Saída do módulo VHDL amostrada pelo componente Scope
Figura 20 – Saída do módulo VHDL amostrada pelo componente Scope

Como a simulação HDL é realizada no ModelSim os sinais também podem ser verificados no painel Wave, conforme a Figura 21. Cabe ressaltar que para realizar uma nova simulação é necessário reiniciar a simulação no ModelSim.

Co-simulação HDL: Resultado da simulação no ModelSim
Figura 21 – Resultado da simulação no ModelSim

Conclusão

Nesse artigo, objetivou-se demonstrar que projetos de sistemas podem ser simulados utilizando diversos ambientes, isto é, que diferentes partes podem ser simuladas individualmente e depois integradas num processo chamado de co-simulação. Utilizando esta técnica um módulo descrito em VHDL foi simulado utilizando o software ModelSim, no entanto este módulo fazia correspondência a um sistema modelado utilizando o software Matlab/Simulink. Assim, foi possível determinar as entradas em um simulador e analisar o comportamento de um módulo simulado por outra ferramenta. Cabe ressaltar que os cenários de teste podem ser bem mais elaborados do que o demonstrado neste artigo, por exemplo, gerar casos de teste utilizando scripts do Matlab ou ainda adicionando mecanismos de validação entrada/resposta.

Para saber mais

Referências

HDL Verifier: HDL Cosimulation

HDL Verifier: Cosimulation and FPGA-in-the-Loop in MATLAB-to-HDL Workflow

Crédito para a imagem destacada: https://pixabay.com/pt/espiral-escada-etapas-escadas-926736/

Veja + conteúdo

Fascinado por computação, especialmente na interface entre hardware e software, me engajei na área de sistemas embarcados. Atuo com desenvolvimento de sistemas embarcados e sou docente da Faculdade de Engenharia de Sorocaba.

Para mais informações: https://about.me/fdelunogarcia

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Caio Pereira
Caio Pereira
23/11/2015 07:40

Muito legal esse tipo de integração com o Simulink, ví bastante gente fazendo de forma manual e independente no Matlab/Modelsim , mas dessa forma que você apresentou é bem interessante.

Fernando Deluno Garcia
Fernando Deluno Garcia
Reply to  Caio Pereira
24/11/2015 10:45

Olá, Caio.

Obrigado pelo retorno!

É bem interessante pelo fato de automatizar esse processo de integração entre as entradas/saídas dos modelos simulados. Realizar essa integração manualmente pode ser bem difícil para um sistema complexo.

Allyson Filgueira
Allyson Filgueira
12/01/2017 21:00

Meu simulador não está lendo a derivada do erro de um sistema de nível T__T se eu colocar derivada discreta, será que dá certo?

Fernando Deluno Garcia
Fernando Deluno Garcia
Reply to  Allyson Filgueira
16/01/2017 19:04

Você adicionou o bloco de conversão de dados? É necessário adequar as entradas para o bloco do Modelsim.

Allyson Filgueira
Allyson Filgueira
Reply to  Fernando Deluno Garcia
23/01/2017 22:36

sim,coloquei as entradas como “integer” e usei o datatype conversion.Mas a entrada da derivada do erro eu tenho dúvida: no erro, eu só discretizei (coloquei um z-¹(delay). na derivada do erro, na frente do bloco (du/dt) eu só discretizo, ou tenho que trocar esta derivada, para a derivada discreta?

Allyson Filgueira
Allyson Filgueira
27/10/2016 11:29

usei o mesmo software do modelsim e ele não consegue carregar o arquivo .vhd pelo fato desta versão não conter o pacote “std” alguém pode me ajudar?

Talvez você goste:

Séries

Menu