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/

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.

[wpseo_breadcrumb]
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
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services