Riesci a interfacciare un banco di prova Modelsim con stimoli esterni


10

Sto lavorando a un team che sta realizzando sia software driver che sviluppo FPGA. La simulazione FPGA viene eseguita in Modelsim e il software del driver è scritto in C. Per ridurre al minimo il rischio di integrazione, mi piacerebbe poter modellare l'interazione tra le due metà del nostro prodotto prima di installarlo sull'hardware.

So che Modelsim supporta un banco di prova che consente di fornire stimoli sotto forma di un file di testo con tempi e valori da inserire. Mi chiedo se Modelsim abbia una modalità che ti consenta di collegare una pipe a un'applicazione esterna (come il nostro driver) ed eseguire una sorta di simulazione distribuita in cui il software può inserire valori nel banco di prova, quindi osservare i risultati in seguito .

Il trucco che non posso fare con un input di file di testo è che le due metà del prodotto interagiscano. Ho bisogno che il software "scriva" i valori nel simulatore FPGA, legga i risultati e quindi scriva nuovi valori nell'FPGA che dipendono dai risultati che legge. I file di testo richiedono che gli input siano indipendenti dall'output.

Ho fatto ricerche sia su StackExchange che su Google, ma non sono stato in grado di trovare un set di parole chiave per restringere la mia ricerca abbastanza da identificare il comportamento che sto cercando o determinare che non esiste.

Risposte:


9

Controllo esterno di una simulazione ModelSim tramite tubi denominati Unix

Riassunto: in questa tesi, presentiamo un metodo per controllare una simulazione ModelSim tramite un programma esterno. La comunicazione tra ModelSim e il programma esterno viene effettuata utilizzando Named Pipes ("FIFOs"), che vengono visualizzati come file normali per ciascuna applicazione. La differenza principale tra l'utilizzo di FIFO rispetto ai file normali per la comunicazione tra processi (IPC) è che un'applicazione che tenta di scrivere su un FIFO viene messa in pausa fino a quando un'altra applicazione tenta di leggere da FIFO e viceversa. Ciò migliora l'affidabilità dell'IPC. I principali vantaggi di questo metodo sono 1) Poiché vengono utilizzate solo operazioni di file generici, l'applicazione esterna può essere scritta in quasi tutti i linguaggi di programmazione; 2) Offre al tecnico addetto alla verifica la possibilità di riutilizzare i pacchetti software di convalida degli standard con una riscrittura minima; 3) Avendo più dispositivi sotto test (DUT) in comunicazione tra loro, è possibile creare una simulazione più accurata del sistema finale; e 4) Le prestazioni della simulazione complessiva possono essere facilmente aumentate su un cluster Single-System Image (SSI) o su un computer multiprocessore anche se il motore di simulazione di ModelSim non è multi-thread. A causa della sua implementazione del file input / output (I / O) per VHDL comportamentale, ModelSim non può leggere o scrivere direttamente questi FIFO. Una soluzione alternativa per questa limitazione è dimostrata utilizzando l'interfaccia di lingua straniera (FLI) di ModelSim. Questo documento mostra anche un esempio funzionante di questo metodo utilizzato nella verifica della prossima generazione di routine in virgola mobile in VHDL. In particolare, il pacchetto software open source IEEE Compliance Checker, che è scritto in C ++,

E il problema con FIFO che richiedono un'interfaccia di programmazione esterna è che l'I / O dei file VHDL non può gestire con garbo il blocco finché i dati non sono disponibili.

Purtroppo la tesi non è disponibile sul web.

Model Sim ® Foreign Language Interface Versione 5.6d , PDF 3.4 MB.

Utilizzo dell'interfaccia in lingua straniera ModelSim per c - VHDL Co-Simulation e per il controllo del simulatore su piattaforma Linux x86 Andre Pool - fli@andrepool.com - Versione 1.5 - creata a novembre 2012, ultimo aggiornamento settembre 2013 , PDF, 320 KB (e non menziona mai FIFO) .

Utilizzo dell'interfaccia in lingua straniera ModelSim per c - VHDL Co-Simulation e per il controllo del simulatore su piattaforma Linux x86 (il repository di codice github corrispondente).

C'è un po 'più di open source, usando le chiamate di funzione VHPI Foreign in ghdl: vhdl / src / sim / ghdlex_mein su master · texane / vhdl · GitHub .

E quello che sembra un aggiornamento di Martin Strubel nell'elenco GHDL_discuss: http://www.section5.ch/downloads/ghdlex-0.051.tgz che mostra una data per il 15 aprile 2014.

FLI ti bloccherebbe per definizione su Modelsim, non sicuro dello stato del loro supporto VHPI (che fa parte di IEEE Std 1076-2008, VHDL LRM).

Utilizzando un socket o un file FIFO consente l'esecuzione del processo software e hardware a velocità diverse, fornendo il buffering delle tariffe. Non è sempre necessario se il tuo sistema software ha ordini di grandezza più veloci della simulazione hardware (e generalmente lo è).

C'è uno sforzo per fornire funzionalità UNIX (POSIX) a VHDL, vedere pacchetti VHDL di dominio pubblico , che contiene un puntatore a un documento precedente SNUG San Jose 2002 1 Funzioni C / UNIX per banchi di prova VHDL Funzioni C / UNIX per banchi di prova VHDL insieme a una diapositiva set con note aggiuntive su pipe Unix e rsh . Questo mostra come mantenere aperte le pipe denominate. È possibile scaricare anche tutto il codice VHDL. Sono dell'opinione che ciò porterebbe al modo più semplice per raggiungere il tuo obiettivo.

Quindi c'è qualcosa di nativo in Modelsim che ti consente di collegarti a una pipe? Probabilmente no, tanto più in Windows. Si può fare? Sì, ma la strada non è per i deboli di cuore. È possibile bloccare in blocco un'estremità o l'altra o eventualmente entrambi in attesa della disponibilità dei dati.

Un'interfaccia di programmazione esterna consente teoricamente di generare un processo figlio per l'una o l'altra estremità della 'pipe', il che significa anche che è possibile utilizzare un modello di memoria condivisa per comunicare tra le due estremità.


Grazie per la risposta meravigliosamente ricercata! "Foreign Language Interface" era esattamente la frase di cui avevo bisogno per estrarre la documentazione di riferimento di cui avevo bisogno, non avrei mai immaginato! Integrazione precoce qui vengo!
Cort Ammon,

5

Potresti voler dare un'occhiata a Cocotb . È una libreria di co-simulazione basata su Python, uno degli obiettivi di progettazione era quello di abilitare la metodologia che descrivi, simulando facilmente software di produzione non modificato e RTL.

C'è un esempio nel repository di eseguire un pingcomando non modificato contro una simulazione e un tutorial che guida attraverso il codice.

Per i driver di spazio utente, utilità di configurazione ecc. Hai un paio di opzioni per eseguire il tuo software non modificato :

  1. Se i tuoi accessi al dispositivo si riducono a poche funzioni (ad esempio una chiamata di lettura e una scrittura) puoi collegarti a una libreria di simulazione che si blocca durante l'esecuzione dell'accesso contro la simulazione. Questo funziona molto bene per la configurazione.

  2. Se per accedere al dispositivo il tuo software utilizza i puntatori di IO e di dereferenze mappati sulla memoria, le cose diventano leggermente più complesse: devi creare un'area di memoria condivisa con bit di protezione impostati e accessi trap .

Se si utilizza la rete, è possibile utilizzare interfacce virtuali come TUN / TAP (vedere il tutorial sopra citato), sospetto che potrebbero esserci opzioni simili per il trasferimento USB o altre interfacce host comuni.

Cocotb funziona con una varietà di simulatori e progetti VHDL (tramite VHPI) o Verilog / SystemVerilog (tramite VPI). Purtroppo Modelsim non implementa VHPI, quindi come utente VHDL sei bloccato con FLI, che non è così utile come un'interfaccia. Potresti lamentarti con Mentor per cercare di convincerli a implementare un'interfaccia standard del settore, oppure potresti valutare un altro simulatore che supporta VHPI.

Purtroppo, sembra che i produttori di strumenti in generale non siano particolarmente interessati al mercato VHDL, a giudicare dal tempo impiegato per implementare qualsiasi funzionalità relativa al VHDL ...

Disclaimer: sono uno sviluppatore Cocotb.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.