Question

J'ai un banc de test à base de Verilog, interfacé à « source C en utilisant DPI. Maintenant, en utilisant DPI Je prévois d'écrire mon firmware entier. Pour ce faire, je dois 3 choses

  • Inscrivez-vous Lire
  • écriture de registre
  • gestionnaire d'interruption Si je comprends bien, registre lectures et écritures sont des tâches que je dois exporter à partir du banc d'essai RTL. Et gestionnaire Interrompre (I mis en œuvre par l'importation d'une fonction de « C).

J'ai vérifié plus la documentation de cadence et trouvé aucune indication utile. J'ai aussi enregistré avec la communauté des utilisateurs de cadence, mais il semble que je ne peux pas poser des questions jusqu'à ce qu'ils approuvent mon inscription.

Juste au cas où quelqu'un est au courant de cela, apprécierait leur aide.

Était-ce utile?

La solution

En fait, je pensais que ce quelque chose comme ça.

//--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 ();

Cela fonctionne pour moi en utilisant ncverilog.

Autres conseils

cool ... j'ai écrit un article sur ce sujet. lien

Le document est en fait registre exportait lit et écrit et des choses à travers le DPI, puis en ajoutant un interpréteur TCL afin que vous pouvez utiliser TCL pour contrôler votre sim. Ce fut quelque chose les gars de laboratoire ont aimé puisque tous leurs outils sont déjà en Tcl.

Vous pouvez simplement suivre les instructions pour intégrer votre appels de fonctions C à SV à travers le DPI, puis arrêter quand les choses TCL entre en jeu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top