Você pode conectar um banco de teste Modelsim com estímulos externos

10

Estou trabalhando em uma equipe que está desenvolvendo software de driver e desenvolvimento de FPGA. A simulação FPGA está sendo feita no Modelsim e o software do driver está escrito em C. Para minimizar o risco de integração, eu adoraria poder modelar a interação entre as duas metades do nosso produto antes de colocá-lo no hardware.

Eu sei que o Modelsim suporta um testbench que permite fornecer estímulos na forma de um arquivo de texto com horários e valores a serem inseridos. Gostaria de saber se o Modelsim tem um modo que permite conectar um cano a um aplicativo externo (como nosso driver) e executar uma espécie de simulação distribuída em que o software pode inserir valores no banco de testes e observar os resultados posteriormente .

O truque que não posso fazer com uma entrada de arquivo de texto é fazer as duas metades do produto interagirem. Eu preciso que o software "grave" valores no simulador FPGA, leia os resultados e, em seguida, escreva novos valores no FPGA, que dependem dos resultados que lê. Os arquivos de texto exigem que as entradas sejam independentes da saída.

Fiz pesquisas no StackExchange e no google, mas não consegui criar um conjunto de palavras-chave para restringir minha pesquisa o suficiente para identificar o comportamento que estou procurando ou determinar que ele não existe.

Cort Ammon
fonte

Respostas:

9

Controle externo de uma simulação ModelSim através de pipes nomeados Unix

Resumo: Nesta tese, apresentamos um método de controle de uma simulação ModelSim através de um programa externo. A comunicação entre o ModelSim e o programa externo é realizada usando pipes nomeados ("FIFOs"), que aparecem como arquivos normais para cada aplicativo. A principal diferença entre o uso de FIFOs versus arquivos normais para a Comunicação entre processos (IPC) é que um aplicativo que tenta gravar em um FIFO fica em pausa até que outro aplicativo tente ler do FIFO e vice-versa. Isso melhora a confiabilidade do IPC. As principais vantagens deste método são: 1) Como apenas operações genéricas de arquivo são usadas, o aplicativo externo pode ser escrito em praticamente qualquer linguagem de programação; 2) Dá ao engenheiro de verificação a capacidade de reutilizar pacotes de software de validação de padrões com um mínimo de reescrita; 3) Com vários dispositivos sob teste (DUT) se comunicando, uma simulação mais precisa do sistema final pode ser criada; e 4) O desempenho da simulação geral pode ser aumentado facilmente em um cluster SSI (Single-System Image) ou computador multiprocessador, mesmo que o mecanismo de simulação do ModelSim não seja multiencadeado. Devido à sua implementação de entrada / saída de arquivo (E / S) para VHDL comportamental, o ModelSim não pode ler ou gravar esses FIFOs diretamente. Uma solução alternativa para essa limitação é demonstrada usando a interface de linguagem estrangeira (FLI) do ModelSim. Este documento também mostra um exemplo de trabalho desse método sendo usado na verificação da próxima geração de rotinas de ponto flutuante em VHDL. Especificamente, o pacote de software de código aberto IEEE Compliance Checker, escrito em C ++,

E o problema com os FIFOs que exigem uma interface de programação estrangeira é que a E / S do arquivo VHDL não pode lidar normalmente com o bloqueio até que os dados estejam disponíveis.

Infelizmente, a tese não está disponível na web.

Interface de Idioma Estrangeiro Model Sim ® Versão 5.6d , PDF 3.4 MB.

Usando a interface de linguagem estrangeira ModelSim para c - Co-simulação VHDL e controle de simulador na plataforma Linux x86 Andre Pool - [email protected] - Versão 1.5 - criada em novembro de 2012, última atualização em setembro de 2013 , PDF, 320KB (e nunca menciona FIFOs) .

Usando a Interface de linguagem estrangeira ModelSim para co-simulação em V-CHD e para controle de simulador na plataforma Linux x86 (o repositório de códigos do github correspondente).

Existe um pouco mais de código aberto, usando a função Foreign VHPI no ghdl: vhdl / src / sim / ghdlex_mein no master · texane / vhdl · GitHub .

E o que parece ser uma atualização de Martin Strubel na lista GHDL_discuss: http://www.section5.ch/downloads/ghdlex-0.051.tgz mostrando uma data para fifo.c de 14 de abril de 2014.

Por definição, a FLI o prenderia ao Modelsim, sem ter certeza do estado do suporte a VHPI (que faz parte do IEEE Std 1076-2008, o VHDL LRM).

O uso de um soquete ou arquivo FIFO permite que o processo de software e hardware seja executado em taxas diferentes, fornecendo buffer de taxa. Nem sempre é necessário se o seu sistema de software possui ordens de magnitude mais rápidas que a simulação de hardware (e geralmente é).

Há um esforço para fornecer a funcionalidade UNIX (POSIX) ao VHDL, consulte Pacotes VHDL de domínio público , que contém um ponteiro para um artigo anterior SNUG San Jose 2002 1 Funções C / UNIX para bancos de teste VHDL Funções C / UNIX para bancos de teste VHDL, juntamente com um slide conjunto com notas adicionais sobre pipes Unix e rsh . Isso mostra como manter pipes nomeados abertos. Todo o código VHDL também pode ser baixado. Sou da opinião de que isso levaria à maneira mais fácil de alcançar seu objetivo.

Então, existe algo nativo para o Modelsim que permite conectar a um cano? Provavelmente não, quanto mais no Windows. Isso pode ser feito? Sim, mas o caminho não é para os fracos de coração. Você pode bloquear um extremo ou outro, ou possivelmente ambos, aguardando a disponibilidade dos dados.

Uma interface de programação estrangeira teoricamente permite gerar um processo filho para uma ou a outra extremidade do 'pipe', o que também significa que você pode usar um modelo de memória compartilhada para se comunicar entre as duas extremidades.

user8352
fonte
Obrigado pela resposta maravilhosamente pesquisada! "Interface de idioma estrangeiro" era exatamente a frase que eu precisava para acessar a documentação de referência que eu precisava, eu nunca teria adivinhado isso! Integração inicial aqui vou eu!
precisa
5

Você pode querer olhar para Cocotb . É uma biblioteca de co-simulação baseada em Python, um dos objetivos do projeto era ativar a metodologia que você descreve, simulando facilmente software de produção não modificado e RTL.

Há um exemplo no repositório de execução de pingcomandos não modificados em uma simulação e um tutorial percorrendo o código.

Para drivers de espaço do usuário, utilitários de configuração, etc., você tem algumas opções para executar o software sem modificação :

  1. Se seus acessos ao dispositivo se resumirem a algumas funções (por exemplo, uma chamada de leitura e gravação), você poderá vincular-se a uma biblioteca de simulação que bloqueia ao executar o acesso à simulação. Isso funciona muito bem para configuração.

  2. Se o seu software usa ponteiros de E / S mapeados na memória e desreferencia os ponteiros para acessar o dispositivo, as coisas ficam um pouco mais complexas - você precisa criar uma área de memória compartilhada com os bits de proteção definidos e interceptar os acessos .

Se você usar rede, interfaces virtuais como TUN / TAP podem ser usadas (consulte o tutorial mencionado acima), suspeito que possa haver opções semelhantes para transferência USB ou outras interfaces de host comuns.

O Cocotb trabalha com uma variedade de simuladores e projetos VHDL (via VHPI) ou Verilog / SystemVerilog (via VPI). Infelizmente, o Modelsim não implementa o VHPI, portanto, como usuário de VHDL, você fica preso ao FLI, o que não é tão útil quanto uma interface. Você pode lamentar-se com o Mentor para tentar convencê-los a implementar uma interface padrão do setor ou avaliar outro simulador compatível com VHPI.

Infelizmente, parece que os fornecedores de ferramentas em geral não estão particularmente interessados ​​no mercado de VHDL, julgando pelo tempo que leva para implementar qualquer funcionalidade relacionada a VHDL ...

Isenção de responsabilidade: Sou desenvolvedor da Cocotb.

Chiggs
fonte