Hallo zusammen Erst einmal möchte ich dieses Forum einwenig loben. Ein ganz tolle Sache und eine gute Quelle um an Praxis Informationen dritter zu gelangen. Doch nun zu meiner eigentlichen Frage. Woran mag es liegen, das gerade im Bereich FPGA bzw. CLPD Programmierung überwiegend in VHDL und weniger mit einem Schematic-Editor programmiert wird? Ich selber bevorzuge im Schaltplan-Mode zu arbeiten. Obwohl VHDL eine scheinbar einfache Sprache ist, kann ich komplexere Aufgaben als Schaltplan viel schneller aufnehmen und umsetzen. Mein Verständnis bei zB. der Verkettung von mehreren Gattern, Zählern usw. tut sich in VHDL einwenig, nein, besser gesagt sehr viel schwerer bis hin zu unmöglich. Ist es falsch wenn ich glaube, dass man mit einem Schaltplan-Editor schneller zum Ziel gelangt (trifft zumindest in meinem Fall zu). Wie kommt es nun, das Open-Source-Code praktisch nur in VHDL angeboten werden? Nur wegen der Portiebarkeit? Selbst hier im Forum gibt`s fast alles nur in VHDL. Gruß Alf
Moin... Welchen "Schaltplan" Editor meinst du? Gegen den HDL Designer von Mentor ist kaum etwas einzuwenden. Der erzeugt allerdings sofort lesbaren HDL Code. Das Gemurkse von Xilinx hat das Problem das die einzelnen Hierachien getrennt bleiben und nicht über Blockgrenzen hin optimiert werden kann. Außerdem sind die schon beim dritten fremdeigekauften Format, jedesmal mit Totalverlust da keine Konverter angeboten wurden. -- Sven Johannes
Hallo Sven, jo, vielleicht "oute" ich mich jetzt. Aber ich arbeite tatsächlich mit dem Schematic-Editor von Xilinx. Fehlermeldungen wie "out of grid at..." kommen in der ISE-Version 6.3 Gott sei Dank kaum noch vor. >...Der erzeugt allerdings sofort lesbaren HDL Code...< gilt nicht für mich :-). Wenn ich mir vorstelle, eine 32-Bit Division in HDL zu erstellen; oh je. Ich meine, ich hab` nie Informatik oder Elektrotechnik studiert. Ist VHDL (HDL?) wegen der Ausbildung im Studium so populär? Gruß Alf
VHDL und Verilog haben sich einfach durchgesetzt, weil eine Hardware-Beschreibungssprache bei Änderbarkeit, Wiederverwendbarkeit und Portierbarkeit gegenüber Schematics Entry unschlagbar ist ! Man kann Designs schreiben, die sich durch Änderung von wenigen Konstanten an neue Anforderungen anpassen lassen, sog. Cores. Das ist per Schaltplan nicht möglich. Wenn Du mit dem Schaltplan-Editor klarkommst dann ist das ja OK, aber eine Firma kann damit nicht wirklich arbeiten. Die VHDL-Files kann ich unter CVS (Revision Control) stellen und dann einen File-Diff machen und sofort sehen, was geändert wurde. Einen Dividierer als Schalplan zu malen findest Du einfacher als a <= c / b; zu schreiben ? OK, ob die Synthese das kann ist ne andere Frage aber für die Simulation gehts schon mal. Ich denke, wenn man VHDL beherrscht, wird man nie wieder Schaltpläne eingeben wollen. Ein 64bit-Counter mit Begrenzung des Zählumfanges kostet Dich letztendlich 5 Zeilen VHDL (von dem Prozess-Statement mal abgesehen) ist das nicht super? Mit VHDL kannst Du Sinus-Signale in der Simulation erzeugen, diese durch Dein FIR-Filterdesign schicken und am Ausgang das Ergebnis (Frequenzgang) im Simulator anschauen. Also ohne VHDL möchte ich wirklich nicht arbeiten.
Vielleicht suche ich an dieser Stelle auch nur nach Argumenten, die mich überzeugen und ermutigen tiefer in VHDL einzusteigen. Ob ich beruflich jemals Sinussignale simulieren bzw. verarbeiten muß wage ich imo zu bezweifeln. Z.Z. sind`s halt sehr massiv logische Verknüpfungen und Steuerungen die jedoch recht komplexe Abläufe regeln. Das Problem liegt wohl eher darin, dass ich mit TTL-Technik groß geworden bin. Da fällt mir das Umdenken wohl etwas schwer. Schauen wir mal. Gruß Alf
FPGA_user schrieb: Mit VHDL kannst Du Sinus-Signale in der Simulation erzeugen, diese durch Dein FIR-Filterdesign schicken und am Ausgang das Ergebnis (Frequenzgang) im Simulator anschauen. Also ohne VHDL möchte ich wirklich nicht arbeiten. ...wa? kaum zu glauben! wie geht denn das? was heißt schnell? das kann ich mir nur als blockschaltbild im Schematic-Editor vorstellen! heftige mathematische sachen wie signalfaltung, wie führt man das auf +, -, mal und geteilt zurück unter berücksichtigung der einzelnen berechnungszeiten? unglaublich!!
Wie wuerdest du das denn im Schematic-Editor angeben??? Mit einem Block der genau das macht? Und woher den Block nehmen? Zugegeben, das ohne Vorlage in VHDL schreiben ist nicht ganz einfach, aber mir ist schleierhaft wie du dass als Schematic darstellen willst. Alles was du per hand im Schematic-Editor verbinden kannst, kannst du auf genau die gleich weise mit VHDL auch. Nur das VHDL dir halt die Platzierung erspart, per Generics konfigurierbar ist, und du mit der Hilfe von Schleifen einiges an Arbeit sparen kannst! Zen
ps. Aber Vorsicht! VHDL ist keine Programmiersprache!!! Sie ist eine Beschreibungs-Sprache fuer Hardware. Daher ist ein Blockschaltbild eigentlich auch erforderlich, wenn man mit VHDL arbeitet. Zumindest muss man sich immer im klaren sein, wie die Hardware am Ende in etwa aussehen und zusammenhaengen wird. Daher ist es auch fuer manche Leute praktischer ein Design als Schematic einzugeben. Dabei macht man sich automatisch auch ein Bild von der resultierenden Schaltung. Bei VHDL geht dies leicht verloren! Um gescheit mit VHDL umgehen zu koennen, muss man erst mal etwas erfahrung darin sammeln wie einfache Konstrukte (zb Addierer, Register, RAM etc) als VHDL-Code aussehen. Deshalb darf man auch nicht gleich mit so grossen Projekten anfangen. Dort gehen die Details naemlich unter!
Ist bei mir auch noch nicht solange her, seit ich es gelernt habe. "Das Problem liegt wohl eher darin, dass ich mit TTL-Technik groß geworden bin" Wieso Problem? Wenn man weiss, wie man etwas mit Gattern aufbauen kann und die VDHL-Syntax etwas kennt hat man schon fast gewonnen. Mir hilft es beim Programmieren immer ungemein, mir vorzustellen, wie ich etwas diskret aufbauen würde. Das vereinfacht vieles! Deshalb finde ich auch das Buch "VHDL-Synthese" so gut, da es eine Vorstellung davon vermittelt, was für Hardware der Fitter aus dem Code erzeugt. Gruss Hernik
nochmal zu zennehoy: ich gebe zu, ich habe eigentlich noch 0 erfahrungmit vhdl und fpgas! habe aber vieles aus dem internet runtergeladen, wie man dies und jenes realisiert. unter anderem auch, dass man mit matlab/simulink "einfach" ein paar funktionale blocks zusammenfügt, (von denen man wissen muss, was für signale dort ein-und ausgehen),ein paar verzögerungsblocks, die gewärleisten, dass die signale für eine erneute berechnung aufeinander "warten". dieses simuliert man dann und danach erzeugt man direkt daraus ein file, dass man brennt! eine frequenzanalyse (fft z.B. oder dft) ist schnell (eine stunde?)aus ein paar blocks gebaut und simuliert. das ganze in VHDL? das kostet doch ohne ende gehirnschmalz, oder? das ist mir auf einem blatt papier ja schon fast zuviel und dann noch mit +,-,x und% mit vhdl? danach muss ich wohl ins irrenhaus! oder seh ich das falsch?
Entweder wir reden hier von voellig unterschiedlichen Dingen, oder ich bin stark beindruckt! Kann man mit Simulink wirklich auch Hardware erstellen? Oder ist das nur zum Simulieren? Klar, MatLab ist fuer solche anwendungen deutlich einfacher zu benutzen, es geht aber darum aus einzelnen Gattern ein digitales System aufzubauen, um das ganze als HARDWARE zu implementieren. Trotzdem, wenn es zu Simulink die ensprechenden Bloecke auch als Hardware-Implementierung gibt, koenntest du diese wiederum auch per VHDL zusammen binden. Ich nehme auch schwer an, dass die Bloecke selbst mit einer HDL beschrieben worden sind. Hat jemand praktische Erfahrung mit MatLab/SimuLink -> FPGA? Was kommt dabei raus, sprich ist das Ganze auch nur halbwegs effizient? Wuerde mich schon interessieren... Cheers! Zen
habe was gefunden: www.microlab.ch/pdf/Papers/soc01.pdf schaut ma auf seite 5/6, da steht: ...kann ein Subset von Matlab/Simulink Blöcken direkt in synthetisierbaren VHDL Code übersetzt werden.... der ganze bericht ist interessant!!
und noch was::: www.sga-asspa.ch/Unterseiten/bulletin/Bulletin%2042.pdf Seite 2/8 Editorial: Das Stichwort heißt :: System Generator ("Gut, nä? ;-) ")
>Wenn Du mit dem Schaltplan-Editor klarkommst dann ist das
ja OK, aber eine Firma kann damit nicht wirklich arbeiten.
Soso, hm, verflixt, womit wird den bei mir Geld verdient?
zu zennehoy: >Aber Vorsicht! VHDL ist keine Programmiersprache!!! wieso ist VHDL keine Programmiersprache?
Ganz einfach: weil man mit VHDL keine Programme schreibt sondern Hardware BEschreibt. Unter Programm verstehe ich eine sequentielle Reihe von Befehlen, die nacheinander Abgearbeitet werden. Es sollte offensichtlich sein, dass dies einer Hardware nicht entspricht. Es ist wahr, dass man beim Testbenchschreiben VHDL eher als Programmiersprache verwendet. Dies ist aber nur ein Ausnahmefall, und eine Testbench ist schliesslich auch nicht Synthetisierbar. Das Gefaehrlich fuer Anfaenger ist mit VHDL genauso umzugehen wie mit C/asm/perl/... Das mag am anfang noch gehen, aber erstens wird das Ganze dabei fast automatisch asynchron, ausserdem koennen die Tools das Design dann nicht gescheit optimieren. Wie ich schon oben gesagt habe, man muss sich bei Hardwarebeschreibung immer im klaren darueber sein, wie das resultierende System (und nicht nur der resultierende Code!) strukturiert ist. Also: VHDL ist eine Beschreibungssprache, keine Programmiersprache. Zen
>Ganz einfach: weil man mit VHDL keine Programme schreibt sondern Hardware BEschreibt. Unter Programm verstehe ich eine sequentielle Reihe von Befehlen, die nacheinander Abgearbeitet werden. Es sollte offensichtlich sein, dass dies einer Hardware nicht entspricht. Ich bin nicht dafür, weil man mit VHDL nicht nur die Struktur von einem Komponent von Hardware beschreiben kann, sondern auch die Funktionsverhaltnis. Das heißt, dass man mit VHDL auf Behavioral-Level, auf RTL-Level, sogar bis hin zu Gate-Level, Hardware beschreiben. Wenn man das Verhaltnis beschreibt, benutzt man Process-Block. In Process-Block von VHDL werden die Befehle auch sequentielle abgearbeitet, aber die zwei oder mehrere Process-Blöcke laufen parallel, außer Process-Block sind Signalwertzuweisungen auch parallel. Mit C, Handel-C und SystemC kann man auch Verhaltnis von Hardware beschreiben, es gibt jetzt auch Synthesis-Tools(solche Tools bezieht sich auf System-Level oder Algorithmus-Level)davon, um den Code in die Netlist zu übersetzen.
Es ist wahr, dass man VHDL auch fuer andere Zwecke nutzen kann. Allerdings sind generell nur Designs auf und unter der RTL-Ebene gescheit synthetisierbar. Die Erfahrung habe ich jedenfalls bisher gemacht. Ein Anfaenger sollte auf alle Faelle erstmal mit den niedrigeren Ebenen anfangen, und am besten zuerst ein paar Schaltungen auf Gatterebene synthetisieren um einen Eindruck dafuer zu bekommen, was eigentlich bei einer HDL gemacht wird. > In Process-Block von VHDL werden die Befehle auch sequentielle abgearbeitet Das mag zwar beim Simulator so sein, aber in der Hardware stimmt das eigentlich nicht mehr. Zumindest nicht was Signale betrifft. Deshalb ja auch der Unterschied zwischen "<=" und ":="! Zen
Sequentiell kann eine Hardware nur arbeiten wenn sie eine Statemachine enthält und somit getaktet ist. Auch Prozesse in VHDL werden in parallel ausgeführt. Man kann aber eben mit VHDL einen parallelen Vorgang durch sequentielle "Programmierung" erzeugen. D.h. innerhalb von Prozessen kann man mit Variablen, Schleifen etc., einen Vorgang der in der Hardware in parallel abgearbeitet wird, sequentiell darstellen. Mir als langjähriger professioneller Programmierer viel das Umdenken in VHDL auch ziemlich schwer. Auch ich betrachte VHDL nicht als Programmiersprache sondern als Beschreibungs-sprache. Es ist wichtig das nicht zu vergessen da man ansonsten immer wieder "sequentielle" Denkfehler macht :) Andererseits ist jede Programmiersprache eben auch eine beschreibende Sprache, man beschreibt das Verhalten einer Logik, eines Algorithmus. Man kann also in VHDL schon sequentielle Algorithmen erzeugen, aber dann immer nur unter der Prämisse das eine parallel abarbeitende Machine eine Logik verpasst bekommt die quasi immer eine Statemachine darstellt. Aus dieser Sichtweise ist VHDL/Abel wohl eine der mächtigsten "Programmiersprachen" für mich. Der große Vorteil von VHDL/Abel im Vergleich zu den Schematics liegt eben in der nötigen Abstraktionsschicht. Während ein Schematik immer eine Darstellung von konkreter Hardware ist, wird im VHDL ausschließlich nur das Verhalten einer möglichen Hardware beschrieben. Ob und auf welcher Hardware das Syntheseprodukt eines VHDL Sources dann real läuft ist komplett unabhängig. Durch diesen Schritt in der Abstraktion eines Projektes wird es erst überhaupt möglich auch komplexere Probleme umzusetzen. Anders ausgedrückt, im übertragenen Sinne: Urmenschen können sich nicht über Raketen unterhalten, nicht weil sie keine Raketen hatten, sondern weil einfach die dafür nötige und komplexe Beschreibungs-Sprache fehlte. Und genau diese abstrahierende und komplexe Beschreibungssprache ist VHDL im Vergleich zu Schematics. Im Grunde benötigte man eine Sprache mit der man einer Machine = Computer einen komplexen Sachverhalt so darstellen kann das diese Machine in der Lage ist sowas zu optimieren und zu synthetisieren, und wir Menschen denoch die Möglichkeit haben unser komplexes Denkmuster in der Programmier-/Beschreibungs-sprache wiederzuerkennen. Das Gleiche trifft für jede andere moderne Programmiersprache zu. Gruß Hagen
zu sequentiell: darf ich da mal was "schlaues" fragen?: wenn ich eine einheit wie folgt in vhdl beschreibe: x:=a+b; b:=4; a=10; dann ist es in vhdl vollkommen wurst, in welcher reihenfolge diese drei befehle stehen! in c/c++ müssten (zum vergleich) müssen die letzten beiden befehle zuerst kommen, da diese sequentill abgearbeitet werden!! stimmt? das?
@Olli Ja genau, du liegst vollkommen richtig, wenn du diese Befehle außerhalb von Prozessen schreibst, dann werden sie parallel abgearbeitet, innerhalb eines Prozesses wäre es so wie in c. Alos ich habe mal probiert verschieden in Schematic und VHDL gleichzeitig zu programmieren, bzw. bzu beschreiben. Ich kam jedesmal mit VHDL besser und schneller zum Ziel.
Kleine Knobelaufgabe zum thema sequentiell : eine entity habe 3 statische eingangssignale, a,b und c jeweils 32 bit, folgender prozess führt eine rechnung durch: process(clk) begin if rising_edge(clk) then x1 <= a * b; x2 <= b + c; x3 <= x1 + x2; for i in 0 to 31 loop x4(i) <= x3(i); end loop; end if; end process; y <= x4; Was ist das ergebnis y und nach wieviel takten liegt es erstmals an? (zu beginn sind alle register 0)
1.takt: x1=a*b x2=b+c x3=0 x4=0 y=0 2.takt: x1=a*b x2=b+c x3=a*b+b+c x4=0 y=0 3.takt: x1=a*b x2=b+c x3=a*b+b+c x4=a*b+b+c y=a*b+b+c wobei die for-schleife ja unheimlich wichtig ist ;-)
@peter hey, es gib ja doch noch profis. die for-schleife sollte etwas zur verwirrung beitragen und wäre ja auch ne gute möglichkeit, mal fix alle bits zu spiegeln oder ähnliches.
Ah shit ich habe nicht berücksichtigt das X1,X2,X3,X4 alles Signale sind,sprich Zuweisung mit <= statt := wie bei Variablen. bei process(clk) variable X1,X2,X3: ... begin if rising_edge(clk) then x1 := a * b; x2 := b + c; x3 := x1 + x2; for i in 0 to 31 loop x4(i) <= x3(i); end loop; end if; end process; wären es aber nur ein Takt, oder ? Gruß Hagen
@Hagen korrekt, jetzt hängt das Ergebnis aber von der Reihenfolge der Berechnungen ab, vorher hätte ich die 3 Zeilen in beliebiger Reihenfolge schreiben können
Nur um sicher zu gehen: mit der korrekten Reihenfolge beziehst du dich auf den Fakt das für X3 erst X1 und X2 berechnet worden sein muß um Y = a * c + b + c ? Gruß Hagen
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.