Kann ich die C-Sprache verwenden, um ein CPLD/FPGA zu programmieren?

Ich wollte wissen, ob ich CPLDs/FPGAs mit der Sprache C programmieren kann? Wenn ja, wird es allgemein praktiziert? Was sind die Schritte und die erforderlichen & Tools dafür?

Hmm. Sehen Sie sich erneut das Thema "C zu HDL" an.
Dafür gibt es SystemC ( en.wikipedia.org/wiki/SystemC ).
Diese Frage wurde auch auf Stack Overflow beantwortet .

Antworten (3)

Im Allgemeinen können Sie. Es gibt kostenloses SystemC für HLS (High Level Synthesis). HLS wird immer beliebter, aber Sie müssen bedenken, dass Sie CPLDs / FPGAs nicht in C-Sprache programmieren, sondern Hardware in C-Sprache beschreiben. Damit es auf echter Hardware funktioniert, benötigen Sie herstellerspezifische HLS-Tools.

Meiner Meinung nach ist das Schreiben einer synthetisierbaren Beschreibung in C schwieriger als in Verilog/VHDL, aber normalerweise geht es schneller, wenn Sie mit der Syntax vertraut sind und einige zusätzliche Regeln befolgen.

Für FPGAs ja. Ich glaube nicht, dass es viele Tools gibt, um CPLDs mit C anzusprechen (obwohl es theoretisch durchaus möglich sein sollte).

Ich spreche hier vielleicht von Häresie, aber (für mich) besteht der Vorteil von C-to-Gates darin, dass Sie einen großen Teil Ihrer Algorithmusentwicklung und -verifizierung in reinem C ausführen können (unter Verwendung Ihrer normalen C-Entwicklungsumgebung und gut verstandener Software). Tools/Debugger...) und sobald es zu Ihrer Zufriedenheit funktioniert, richten Sie es auf das FPGA aus.

Dann müssen Sie nur noch die C-to-Gates- Transformation (dh das Werkzeug) in Simulation und Hardware validieren. Wenn Sie Ihren Algorithmus in HDL schreiben, müssen Sie den Algorithmus in einer sehr langsamen Simulation verifizieren und dann Ihre Implementierung in Hardware (und/oder einer noch langsameren Simulation auf Gatterebene) verifizieren und validieren.

Möglicherweise müssen Sie für die Leistung iterieren (aber Sie mussten dies wahrscheinlich sowieso nach der Synthese tun, sogar in HDL, es sei denn, Sie waren sehr gut in der HDL-Optimierung ... und ich behaupte, dass Sie nach ein paar Monaten sehr gut in C- sein können. For-Gates-Optimierung und dann auch nicht so viel iterieren)

Sie können einen HDL-plausiblen Algorithmus auch als C-Programm validieren und ihn dann in einem HDL erneut ausdrücken.
Im Allgemeinen sind CPLDs zu klein, um sie mit HLS-Tools anzusprechen.
@ChrisStratton - das kannst du ja. Aber dann müssen Sie überprüfen, ob Ihre HDL-Implementierung bei jeder Änderung mit C übereinstimmt. Wenn ich das C-to-Gate-Tool ausreichend validiere, kann ich genug Vertrauen gewinnen, um diesen Schritt zu überspringen. Außerdem muss ich keine HDL-Ingenieure für die Übersetzung einstellen oder, noch schlimmer, diese seltenen Ingenieure (wie mich :) finden, die gerne mit beidem spielen!
Wenn Sie einen Algorithmus ausführen möchten, der am besten in C ausgedrückt wird, warum nicht Hardware verwenden, die speziell für die Ausführung von C entwickelt und optimiert wurde? Ich habe gehört, dass solche Dinge CPUs genannt werden.
@Cuadue - Ich mache mir mehr Sorgen um die Überprüfung als um das Ausdrücken von Algorithmen. Ich kann einen Signalverarbeitungsalgorithmus in verschiedenen Sprachen ausdrücken. Mit C kann ich überprüfen, ob es einigermaßen effizient funktioniert (indem ich diese CPU-Dinge ausnutze, von denen Sie gehört haben :). Wenn ich den richtigen Algorithmus zum Ausdrücken auswähle, kann ich ihn auf viel kostengünstigere und leistungsstärkere Hardware ausrichten und trotzdem meine harten Echtzeitziele erreichen.

Dazu gibt es im Wesentlichen zwei Möglichkeiten: Eine ist mit HLS, wo Sie eine Beschreibung eines High-Level-Algorithmus in c schreiben und diese in HDL oder eine Netzliste übersetzt wird. HLS ist jedoch nicht wirklich für ein komplettes Design geeignet, normalerweise nur für einige wenige Teile. Die andere Möglichkeit besteht darin, eine Soft-CPU auf das FPGA zu setzen und diese dann in C zu programmieren. Einige FPGAs enthalten auch harte CPU-Kerne (Zynq hat ARM-Kerne, verschiedene Virtex-Chips haben PowerPC-Kerne) und diese können sicherlich in C programmiert werden.