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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top