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 - fli@andrepool.com - 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.