mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL vs. Schltplan


Autor: Alf schumacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alf Schumacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alf Schumacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und noch was:::

www.sga-asspa.ch/Unterseiten/bulletin/Bulletin%2042.pdf

Seite 2/8 Editorial:

Das Stichwort heißt :: System Generator  ("Gut, nä?  ;-)   ")

Autor: Marillion (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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?

Autor: Jianmin Li (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu zennehoy:

>Aber Vorsicht! VHDL ist keine Programmiersprache!!!

wieso ist VHDL keine Programmiersprache?

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jianmin Li (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Zennehoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Y = a*b + (b+c)

1 Takt

Gruß Hagen

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.