Überlassen Sie die mühsame Verarbeitung Python

Einführung

Vor und nach mir ist das Generieren von HDL aus Python, das Synthetisieren von Gates direkt aus Python und ((((; ゚ Д ゚)))) ruckelig, aber dies ist ein sehr einfacher Artikel.

SystemVerilog ist nicht nur zum Schreiben von Hardware gedacht, oder? Ich meine, ich konnte HDL verwenden, seit ich Mitglied der Gesellschaft geworden bin, aber ich habe nie Hardware synthetisiert. Ich programmiere nur mit SystemVerilog, aber der Nachteil ist, dass es ineffizient ist, weil es nur wenige Bibliotheken gibt (obwohl es viele Bibliotheken zur Überprüfung gibt). Wenn es eine normale Sprache wäre, wäre es eine Aufnahme in der Bibliothek. .. .. Trotzdem ist es ziemlich stressig, es selbst schreiben zu müssen.

In einem solchen Fall stellen wir eine Verbindung zu Python her, das jeder liebt, und schreiben so wenig wie möglich.

fließen

Verwenden Sie das System Verilog DPI. In einigen Büchern (System Verilog Design Startup?) Ist geplant, DPI nicht nur mit C, sondern auch mit verschiedenen Sprachen zu verbinden. Derzeit gibt es jedoch nur DPI-C, also über DPI-C, mit System Verilog Sie werden Python verbinden.

SystemVerilog - (DPI) - C - Python

Es ist ein Fluss.

Dieses Mal möchte ich den Koeffizienten der quadratischen Gleichung von SystemVerilog an Python übergeben und die Lösung an SystemVerilog zurückgeben.

Python Lassen Sie SymPy die quadratische Gleichung lösen.

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 Es ist zum ersten Mal seit ein paar Jahren C, also denke ich nicht, dass es sich sehr gut anfühlt. Ich denke, es kann vielseitiger gemacht werden. .. ..

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);             //Generieren Sie ein Argumenttupel, das an Python übergeben werden soll
  for (i=0; i<order+1; i++) {
    pValue = PyFloat_FromDouble(ary[i]);
    PyTuple_SetItem(pArgs, i, pValue);
  }

  pValue = PyObject_CallObject(pFunc, pArgs);    //Führen Sie die Python-Funktion aus

  for (i=0; i<order; i++) {          //Sammeln Sie Python-Ergebnisse.
    answer[i] = PyFloat_AsDouble(PyList_GetItem(pValue, i));
  }

  Py_Finalize();
}

SV-Code

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 Wenn Sie einen hochpreisigen Simulator haben, können Sie den SV-Code und den C-Code an den Simulator übergeben, der sofort kompiliert und ausgeführt wird. Wenn es nicht teuer ist, sollte ich * .o machen und es mit -sv_lib übergeben?

Tatsächlich. .. ..

Ein besseres Beispiel finden Sie unter https://github.com/rfukatani/pylink. Es scheint, dass die ΔΣ-Modulation im Python-Teil geschrieben ist. Wenn ich das betrachte, habe ich das Gefühl, dass ich ohne Matlab an einen bestimmten Ort gehen kann.

Auf diese Weise können Sie mühsame Arbeiten in Python ausführen, was Ihre Produktivität erheblich steigert. Wie viel SV-Code reduziert werden kann, ist für mich der erste Schritt zum Glück.

Recommended Posts

Überlassen Sie die mühsame Verarbeitung Python
Zeichnen Sie Diagramme in Julia ... Überlassen Sie die Diagramme Python
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Im Python-Befehl zeigt Python auf Python3.8
So erhalten Sie die Python-Version
[Python] Ändere das Alphabet in eine Zahl
Python Amateur versucht die Liste zusammenzufassen ①
Die Geschichte der Verarbeitung A von Blackjack (Python)
Der Weg zum Kompilieren zu Python 3 mit Thrift
Auf Python 2.7.9 aktualisiert
Python-Bildverarbeitung
Python-Dateiverarbeitung
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
"Backport" zu Python 2
Verwendung der C-Bibliothek in Python
Der schnellste Weg für Anfänger, um Python zu beherrschen
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
Python-Konstanten wie None (laut Referenz)
Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen
Verwenden Sie den zu Boto3 hinzugefügten Wiederholungsverarbeitungsmodus
So führen Sie eine Mehrkern-Parallelverarbeitung mit Python durch
Bedienen Sie das Speech Signal Processing Toolkit über Python
Versuchen Sie, das Problem der Python-Klassenvererbung zu lösen
[Python] So ändern Sie das Datumsformat (Anzeigeformat)
Der einfachste Weg, um Stimme mit Python zu synthetisieren
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Dynamisches Ersetzen der nächsten Methode in Python
Begrüßen Sie die Welt mit Python mit IntelliJ
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Bildverarbeitung? Die Geschichte, Python für zu starten
Excel X Python Die schnellste Arbeitstechnik
Der einfachste Weg, OpenCV mit Python zu verwenden
Tipps zum Schreiben werden in Python kurz abgeflacht
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
[Algorithmus x Python] Verwendung der Liste
Verwenden Sie das Python-Framework "cocotb", um Verilog zu testen.
So löschen Sie die von Python ausgegebenen Zeichen
Einführung in Python mit Atom (unterwegs)
Lassen Sie uns experimentieren und Beweise hinterlassen, um die Spezifikationen zu bestimmen.
So erhalten Sie die Dateien im Ordner [Python]
Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen
[Einführung in den Algorithmus] Finden Sie den kürzesten Weg [Python3]
Python Amateur versucht die Liste zusammenzufassen ②
[Python] Ich werde FTP auf den FTP-Server hochladen.
Wissensnotizen erforderlich, um das Python-Framework zu verstehen
[Python] Wirf eine Nachricht an den Slack-Kanal
Python unerfahrene Person versucht, 100 Sprachverarbeitung 05-06 zu klopfen
Ein Artikel, der die Fallstricke von Python zusammenfasst
Ich möchte den Fortschritt in Python anzeigen!
Python unerfahrene Person versucht, 100 Sprachverarbeitung 00-04 zu klopfen
Python verteilte Verarbeitung Spartan
Finden Sie das maximale Python
Einfache Möglichkeit, die Quelle der Python-Module zu überprüfen
[Python] So entfernen Sie doppelte Werte aus der Liste