Laissez le traitement gênant à Python

introduction

Avant et après moi, générer du HDL à partir de Python, synthétiser des portes directement à partir de Python, etc. ((((; ゚ Д Д)))) est un taureau saccadé, mais c'est un article très simple.

SystemVerilog n'est pas seulement pour écrire du matériel, n'est-ce pas? Je veux dire, j'ai pu utiliser le HDL depuis que je suis devenu membre de la société, mais je n'ai jamais synthétisé de matériel. Je programme uniquement avec SystemVerilog, mais l'inconvénient est qu'il est inefficace car il y a peu de bibliothèques (bien qu'il y ait beaucoup de bibliothèques pour la vérification). Si c'était une langue normale, ce serait un plan dans la bibliothèque. .. .. Même ainsi, c'est assez stressant de devoir l'écrire soi-même.

Dans un tel cas, connectons-nous à Python, que tout le monde aime, et écrivons le moins possible.

couler

Utilisez le système Verilog DPI. Dans certains livres (Démarrage de la conception de System Verilog?), DPI est prévu pour être connecté non seulement à C mais aussi à différentes langues, mais pour le moment, il n'y a que DPI-C, donc via DPI-C, avec System Verilog Vous allez connecter Python.

SystemVerilog - (DPI) - C - Python

C'est un flux.

Cette fois, je voudrais passer le coefficient de l'équation quadratique de SystemVerilog à Python et renvoyer la solution à SystemVerilog.

Python Demandez à SymPy de résoudre l'équation quadratique.

two_order_eq_py.py


import sympy

def calc_two_order_eq(a, b, c):
  x = sympy.symbols('x')
  f = a*x**2 + b*x + c
  solve = sympy.solve(f, x)
  return solve

C C'est C pour la première fois depuis quelques années, donc je ne pense pas que ça fait du bien. Je pense qu'il peut être rendu plus polyvalent. .. ..

two_order_eq.c


#include <stdio.h>
#include <stdlib.h>
#include <Python.h>
#include <svdpi.h>

void two_order_eq(double* ary, double* answer) {
  PyObject *pName, *pModule, *pFunc;
  PyObject *pArgs, *pValue;
  int i, order=2;

  Py_Initialize();
  pName = PyString_FromString("two_order_eq_py");       
  pModule = PyImport_Import(pName);                                   
  pFunc = PyObject_GetAttrString(pModule, "calc_two_order_eq");

  pArgs = PyTuple_New(order+1);             //Générer un argument touple à passer à Python
  for (i=0; i<order+1; i++) {
    pValue = PyFloat_FromDouble(ary[i]);
    PyTuple_SetItem(pArgs, i, pValue);
  }

  pValue = PyObject_CallObject(pFunc, pArgs);    //Exécuter la fonction Python

  for (i=0; i<order; i++) {          //Collectez les résultats Python.
    answer[i] = PyFloat_AsDouble(PyList_GetItem(pValue, i));
  }

  Py_Finalize();
}

Code SV

two_order_eq.sv


module top();
real ary[3];
real answer[2];

import "DPI-C" function void two_order_eq(input real ary[3], output real answer[2]);

initial begin
  ary = {1, -1, -6};
  two_order_eq(ary, answer);
  $display("Answer is %f, %f", answer[0], answer[1]);
  $finish;
end
endmodule

Make Si vous avez un simulateur coûteux, vous pouvez transmettre le code SV et le code C au simulateur qui se compilera et s'exécutera à la fois. Si ce n'est pas cher, devrais-je créer * .o et le passer avec -sv_lib?

Réellement. .. ..

Un meilleur exemple peut être trouvé à https://github.com/rfukatani/pylink. Il semble que la modulation ΔΣ soit écrite dans la partie Python. En regardant cela, je sens que je peux aller à un certain endroit sans Matlab.

Quoi qu'il en soit, cela vous permet de lancer un travail fastidieux dans Python, ce qui augmente considérablement votre productivité. La quantité de code SV pouvant être réduite est la première étape vers le bonheur pour moi.

Recommended Posts

Laissez le traitement gênant à Python
Dessinez des graphiques dans Julia ... Laissez les graphiques à Python
python3 Mesurez la vitesse de traitement.
Dans la commande python, python pointe vers python3.8
Comment obtenir la version Python
[Python] Changer l'alphabet en nombre
Python amateur tente de résumer la liste ①
L'histoire du traitement A du blackjack (python)
La route de la compilation vers Python 3 avec Thrift
Mis à jour vers Python 2.7.9
traitement d'image python
Traitement de fichiers Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
"Backport" vers python 2
Comment utiliser la bibliothèque C en Python
Le moyen le plus rapide pour les débutants de maîtriser Python
Introduction à Python Préparons l'environnement de développement
Constantes Python comme None (selon la référence)
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 14-16
Utilisez le mode de traitement des nouvelles tentatives ajouté à Boto3
Comment faire un traitement parallèle multicœur avec python
Utilisez le kit d'outils de traitement du signal vocal via python
Essayez de résoudre le problème de l'héritage de classe Python
[Python] Comment changer le format de la date (format d'affichage)
Le moyen le plus simple de synthétiser la voix avec python
Afficher le résultat du traitement de la géométrie en Python
Essayez de résoudre le diagramme homme-machine avec Python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Pour remplacer dynamiquement la méthode suivante en python
Dites bonjour au monde avec Python avec IntelliJ
Une manière intelligente de chronométrer le traitement avec Python
Traitement d'image? L'histoire du démarrage de Python pour
Excel X Python La technique de travail la plus rapide
Le moyen le plus simple d'utiliser OpenCV avec python
Conseils pour rédiger un aplatissement concis en python
[Introduction à Python3 Jour 20] Chapitre 9 Démêler le Web (9.1-9.4)
[Algorithm x Python] Comment utiliser la liste
Utilisez le framework Python "cocotb" pour tester Verilog.
Comment effacer les caractères générés par Python
Introduction à Python avec Atom (en route)
Expérimentons et laissons des preuves pour déterminer les spécifications.
Comment obtenir les fichiers dans le dossier [Python]
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 07-09
Une personne inexpérimentée en Python tente de frapper 100 traitement du langage 10 ~ 13
[Introduction à l'algorithme] Trouvez l'itinéraire le plus court [Python3]
amateur python tente de résumer la liste ②
[Python] Je vais télécharger FTP sur le serveur FTP.
Notes de connaissances nécessaires pour comprendre le framework Python
[Python] Lancer un message sur le canal Slack
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 05-06
Un article résumant les pièges accro au python
Je veux afficher la progression en Python!
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 00-04
Traitement distribué Python Spartan
Trouvez le maximum de Python
Un moyen simple de vérifier la source des modules Python
[Python] Comment supprimer les valeurs en double de la liste