Esportare i compiti a 'C utilizzando DPI
-
05-09-2019 - |
Domanda
Ho un banco di prova Verilog base, interfacciato a 'sorgente C utilizzando DPI. Ora utilizzando DPI sto progettando di scrivere tutta la mia firmware. Per fare questo ho bisogno di 3 cose
- Registrati Leggi
- Registrati Scrivi
- gestore di interrupt A quanto ho capito, il registro di lettura e scrittura sono compiti che ho bisogno di esportare dal banco di prova RTL. E gestore Interrupt (I implementata mediante l'importazione di una funzione da 'C).
Ho controllato la maggior parte della documentazione cadenza e non ha trovato suggerimenti utili. Ho anche registrato con la comunità degli utenti di cadenza, ma sembra che non posso chiedere domanda fino a che approvano la mia registrazione.
Nel caso in cui qualcuno è a conoscenza di questo, avrebbe apprezzato il loro aiuto.
Soluzione
In realtà ho capito qualcosa di simile.
//--From RTL ---
export "DPI" task reg_read;
task reg_read;
input int nAddr;
output int nVal;
// -- read implementation --
endtask
// -- From C code
extern void reg_read (int nAddr, int *pVal);
void test_read (void)
{
int nRegVal;
// Dummy checking !!
reg_read (0x100, &nRegVal);
}
// -- Again in RTL --
import "DPI" context task test_read ();
Questo funziona per me usando ncverilog.
Altri suggerimenti
Cool ... ho scritto un articolo su questo argomento. link
La carta è effettivamente esportando il registro di lettura e scrittura e cose attraverso il DPI e poi l'aggiunta di un interprete TCL ad esso in modo che è possibile utilizzare TCL per controllare la vostra sim. Questo era qualcosa che i tizi di laboratorio amato dal momento che tutti i loro strumenti sono già in Tcl.
Si può solo seguire le istruzioni per integrare la funzione chiamate da C a SV attraverso il DPI, e poi fermarsi quando la roba TCL entra in gioco.