Comment intégrer Systemverilog Interpreter à l’aide de DPI-C?

Description du problème :

Je conçois dans SystemVerilog et écris les bancs d’essai dans le même langage. Je souhaite pouvoir comstackr ma conception et tester différentes fonctions au cours de la simulation, comme vous le feriez avec un interprète avec e. Idéalement, j’aurais une fenêtre contextuelle lors de la simulation lorsque le simulateur heurterait une ligne.

Idées potentielles :

J’ai examiné le DPI-C et il semble que je devrais “exporter” toutes les tâches de mon projet afin de les exécuter à partir de l’interprète. Cependant, je ne sais pas comment procéder automatiquement ou s’il existe une meilleure solution. De plus, je ne sais pas comment j’obtiendrais C pour ouvrir un deuxième shell afin que je puisse taper les tâches SystemVerilog (que je voudrais exécuter).

C’est un problème qui fait écho à mes collègues et qui rendrait la vie beaucoup moins pénible si on ne devait pas attendre 10 minutes entre chaque compilation d’un banc d’essai.

Salut, je fournis mes deux cents avec un autre exemple.

EXEMPLE SV-CODE

//////////////////////////////////////////////////////////////////////// //IMPORT FUNCTION DPI DECLARATION FROM C //////////////////////////////////////////////////////////////////////// import "DPI-C" function void python_sign_msg(ssortingng key_file_name, ssortingng msg_file_name, ssortingng signed_file_name ); import "DPI-C" function ssortingng return_ssortingng_in_c(ssortingng text, inout ssortingng output_txt); typedef class keycontrol_seq_handles; //----------------------- class keycontrol_predictor#(int PARAM_PLACEHOLDER = 1) extends pve_predictor#(keycontrol_seq_handles);//extends uvm_component; ……….. ////////////////////// //USE OF DPI ////////////////////// ssortingng output_c,output2_c; output_c = return_ssortingng_in_c("This text",output2_c); python_sign_msg("file.txt","bla","blo"); endclass 

Le meilleur choix est probablement d’utiliser DPI avec une sorte de langage de script pour vos tests. Par exemple, j’ai bien vu que cela fonctionne: Python -> Boost.Python -> C ++ -> DPI -> Verilog / SystemVerilog

Cela limite ce que vous pouvez faire dans votre test (approchez-vous comme une interface TLM entre les deux langues, c’est-à-dire ne faites que passer des transactions entre elles), mais en réalité cela vous oblige généralement à utiliser de bonnes pratiques d’abstraction. Lisez «rendement» en Python pour comprendre comment vous passez le contrôle entre le python et le simulateur.

Pourquoi ne pas aller au terminal de ligne de commande interactif du simulateur. Ce n’est pas un terminal shell typique tel que celui d’Unix. Il s’agit d’un mode interactif spécifique au fournisseur lié au simulateur. Dans la plupart des cas, il est déclenché avec $stop Verilog. Il est spécifique au fournisseur. Vous devrez donc vous reporter à votre manuel pour connaître toutes les fonctionnalités. Certaines autorisent les tâches d’appel et les fonctions définies dans Verilog / SystemVerilog.

Il semble également que vous n’ayez pas besoin de traiter toutes vos conditions dans une simulation. Une stratégie une fois et plusieurs exécutée devrait fonctionner dans votre situation. Les fonctions système SystemVerilog $test$plusargs et $value$plusargs peuvent détecter les arguments utilisés pour démarrer votre simulation. Voir norme IEEE 1800-2012 § 21.6 Entrée en ligne de commande

 // ... int testid; // ... initial begin // ... if(!$value$pluseargs("TESTID=%d",testid)) begin // code if +TESTID= is not an argument end case(testid) 0 : run_task_test0(/*...*/); 1 : run_task_test1(/*...*/); 2 : run_task_test2(/*...*/); 3 : run_task_test3(/*...*/); // ... endcase // ... end 

Puis comstackz une fois et lancez la simulation autant de fois que nécessaire.

 % [comstack-cmd] % [sim-cmd] +TESTID=0 % [sim-cmd] +TESTID=3 % [sim-cmd] +TESTID=1 % [sim-cmd] +TESTID=2