Forum: FPGA, VHDL & Co. Primzahlgenerator


von Johannes H. (Gast)


Lesenswert?

Hallo Leute :)

ich hatte die Idee einen taktsynchronen Primzahlgenerator mittels VHDL 
zu entwerfen, jedoch klappt es irgendwie nicht so wie ich möchte und 
hoffe, dass Ihr mir da vielleicht weiterhelfen könntet.

Also wie oben beschrieben war meine Idee, einen Primzahlgenerator zu 
entwerfen. Die Zahlenfolge (1,2,3,5,7,11,13) will ich zyklisch, mit 
jeder steigenden Taktflanke dual am Ausgang ausgeben. Zusätzlich habe 
ich einen asynchronen Low-aktiven Reset eingebaut, bei dem der Ausgang 
wieder auf 1 zurück gesetzt wird.
1
architecture rtl of prim_gen is
2
begin 
3
  p_prim : process (Reset, Clk)
4
  variable v_var : natural;
5
  begin
6
    if (Reset = '0') then 
7
      Q_o <= "0001";
8
      v_var := 0;
9
    elsif (Clk = '1' and Clk'event) then 
10
      f_cnt : for v_var in v_var to 6 loop 
11
        c_switch : case v_var is
12
          when 0 => Q_o <= "0001";
13
          when 1 => Q_o <= "0010";
14
          when 2 => Q_o <= "0011";
15
          when 3 => Q_o <= "0101";
16
          when 4 => Q_o <= "0111";
17
          when 5 => Q_o <= "1011";
18
          when 6 => Q_o <= "1101";
19
          when others => Q_o <= (others => '0');
20
        end case c_switch;
21
        exit;
22
      end loop f_cnt;
23
    end if;
24
  end process p_prim;
25
end architecture rtl;

Wenn ich diesen Code simuliere, bleibt der Ausgang auf x"1". Ich 
vermute, dass die Variable in der Vorschleife jedes mal wieder bei 0 
anfängt, aber bleiben Variablenwerte trotz deren nicht erhalten?

von Duke Scarring (Gast)


Lesenswert?

Johannes H. schrieb:
> Wenn ich diesen Code simuliere
Wenn Du uns die Testbench zur Verfügung stellst (Anhang) können wir die 
Simulation auch nachvollziehen.

Duke

von Bitwurschtler (Gast)


Lesenswert?

In VHDL taugt "for" nicht für Counter. Schau dir im Internat an wie man 
in VHDL Counter beschreibt.

von Bitwurschtler (Gast)


Lesenswert?

Typo im vorherigen post: Internat -> Internet

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johannes H. schrieb:
> Die Zahlenfolge (1,2,3,5,7,11,13) will ich zyklisch, mit jeder
> steigenden Taktflanke dual am Ausgang ausgeben.
Gleichzeitig?
Denn eine for-Schleife wird in VHDL "prinzipiell" in der Zeit 0 
durchlaufen.

> when others => Q_o <= (others => '0');
Das ist unnötig, weil v_var eh' nur von 0 bis 6 laufen kann...

> aber bleiben Variablenwerte trotz deren nicht erhalten?
Du willst dir doch nicht etwa eine speichernde Variable an die Backe 
kleben?

Lies mal den Beitrag Beitrag "Variable vs Signal" und 
verwende als Anfänger fürderhin erst mal nur Signale. Denn auch wenn du 
"Variablen" und "Schleifen" vieleicht von C her kennst: in VHDL tun die 
ganz was anderes...

> Wenn ich diesen Code simuliere, bleibt der Ausgang auf x"1". Ich
> vermute, dass die Variable in der Vorschleife jedes mal wieder bei 0
> anfängt, aber bleiben Variablenwerte trotz deren nicht erhalten?
Könnte auch sein, dass du im Dauerreset bist...

> f_cnt : for v_var in v_var to 6 loop
Hmmmm, du bist sicher dass du das, was da steht, tatsächlich willst?

: Bearbeitet durch Moderator
von Johannes H. (Gast)


Lesenswert?

Danke leute habe es lösen können. Habe statt der for-Schleife die
1
use IEEE.numeric_std.all
 verwendet.

Ich wollte es eigentlich nur durch die for-Schleife lösen aber 
anscheinend ist es möglich. Kann man eigentlich einen Counter in VHDL 
mittel einer for-Schleife realisieren?

von Stefan (Gast)


Lesenswert?

Auch wenn es nicht zum Kern der Frage gehört, aber die 1 ist momentan in 
der Mathematik keine Primzahl

https://de.wikibooks.org/wiki/Mathematik:_Zahlentheorie:_Warum_1_keine_Primzahl_ist

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johannes H. schrieb:
> Habe statt der for-Schleife die use IEEE.numeric_std.all verwendet.
Du wirfst hier aber ganz heftig Kraut und Rüben in einen Topf!

> Ich wollte es eigentlich nur durch die for-Schleife lösen aber
> anscheinend ist es möglich. Kann man eigentlich einen Counter in VHDL
> mittel einer for-Schleife realisieren?
Jein. Man kann es für die simulation, indem man ein wait until() in die 
Schleife einfügt. Ich würde mich das jetzt aber nicht für die Synthese 
trauen...

von Jan H. (janhenrik)


Lesenswert?

> Kann man eigentlich einen Counter in VHDL
> mittel einer for-Schleife realisieren?

Bestimmt, jedoch wird die for Schleife in VHDL nicht wie in C 
nacheinander durchlaufen, sondern für die anzahl der Durchläufe wird die 
in der Schleife geschriebene Hardware "generiert". Du kannst ein 
einzelnes Zählerglied beschreiben und es mit for mehrmals hintereinander 
platzieren und somit einen Zähler aufbauen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Du kannst ein einzelnes Zählerglied beschreiben und es mit for mehrmals
> hintereinander platzieren und somit einen Zähler aufbauen.
Da wäre es aber schlau, dafür generate statt eines Prozesses zu 
verwenden. Und beim generate sieht man dann auch ganz gut, dass mit 
einer Schleife einfach mehr Hardware gebaut wird.

von J. S. (engineer) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Bestimmt, jedoch wird die for Schleife in VHDL nicht wie in C
> nacheinander durchlaufen
Doch, natürlich wird sie durchlaufen. Aber sie wird vom Synthesetool 
abgearbeitet und ausgeführt und nicht etwa - wie es ein C-Compiler tut - 
nur übersetzt und in anderer Form an den Prozessor weitergereicht.

DAS ist der Unterschied, den Anfänger kapieren müssen:

Das VHDL-Programm läuft sowohl für die Simulation als auch für die 
Synthese komplett in der Synthesesoftware ab. Ob und was da rauskommt, 
hängt von der Beschreibung ab. Das haben wir aber schon zur Genüge 
durchgekaut und ist auch im FPGA-Artikel hinreichend erklärt, auf den 
man verweisen sollte.


> sondern für die anzahl der Durchläufe wird die
> in der Schleife geschriebene Hardware "generiert".

.. sofern das das so steht, ja. Aber in Schleifen in VHDL kann man so 
ziemlich alles formulieren und mehrfach ausführen lassen. Da kommt nicht 
unbedingt Hardware bei raus, sondern gfs auch nur ein kompliziert zu 
ermittelndes Zwischenergebnis. Je nachdem, was man alles in Bedingungen 
und Schleifen stopft, kann man komplette FPGAs dynamisch beschreiben, 
bis hin zum mehrfachen Erzeugen von verteilen Schaltungen in mehreren 
FPGAs, durch Erzeugen unterschiedlicher Versionen oder Teilfunktionen 
i.A. variierender Randbedingungen, die sich dann zu einem Ganzen 
zusammenfügen, wobei in jedem FPGA nur ein Teil einer Funktion oder 
redundante Kopien steckt:
http://www.96khz.org/htm/scalableaudiodsp.htm

Obwohl da 4 Schleifen ineinander laufen und theoretisch X x Y x t x k 
Schaltungen bilden, sind es infolge der Bedingungen nur XYt geteilt 
durch ein Produkt A x B  an Schaltungen, je nachdem, wie groß die FPGAs 
(a) und deren Kapazität (b) für ein Audiomodul ist.

Die Zahl der sichtbaren Durchläufe ist also nicht direkt an eine Breite 
eines Busses oder Zahl von Elementen gekoppelt.

Da muss man genau hinschauen, was da passiert:

Die ganze SOPC-Welt funktioniert ja so, dass alle erdenklichen 
Konfigurationsfälle und Verbindungsoptionen vorgedacht und mit 
Bedingungen verknüpft werden, die dann je nach Anschluss und Konfig 
durch den User beim Abarbeiten ausgeführt werden.

Den Anfängern sage Ich immer, dass VHDL so zu verstehen ist, wie eine 
Arbeitsanleitung an einen Layouter/Schaltungsentwickler. Wenn Ich den 
10mal irgendwas was machen lasse, habe ich nur im Ausnahmefall im 
späteren FPGA eine Schaltung, die zufällig auch 10mal was tut.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

VHLD ist eine Beschreibungs-Sprache. Sie beschreibt (ähnlich wie HTML 
eine Webseite, TeX ein schriftliches Dokument oder troff eine 
Unix-Manpage beschreibt) eine digitale Schaltung.

Der Witz an all diesen Sprachen ist, daß letztendlich nicht das 
Programm, das da läuft, interessant ist, sondern das Ergebnis des 
Programmlaufs: eben die HTML-Seite, das TeX-DVI, die Manual-Page oder 
eben das Bitfile, das als Ergebnis der Synthese rausfällt.

von Johannes H. (Gast)


Lesenswert?

Hallo Leute :)

Tut mir Leid, dass ich erst jetzt zurück und auch vielen Dank für die 
vielen Antworten. Wie schon erwähnt habe ich das Beispiel gelöst und es 
funktioniert auch, jedoch bin ich mir jetzt unsicher, ob es so "schön" 
geschrieben ist und ob man es besser schreiben machen könnte. Irgendwie 
habe ich das Gefühl, dass es zu sehr "C-Mäßig" geschrieben ist
1
 library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.numeric_std.all;
4
5
architecture rtl of prim_gen is
6
begin 
7
  p_prim : process (Reset, Clk)
8
  variable v_var : natural;
9
  begin
10
    if (Reset = '0') then 
11
      Q_o <= "0001";
12
      v_var := 0;
13
    elsif (Clk = '1' and Clk'event) then 
14
        c_switch : case v_var is
15
          when 0 => Q_o <= "0001";
16
          when 1 => Q_o <= "0010";
17
          when 2 => Q_o <= "0011";
18
          when 3 => Q_o <= "0101";
19
          when 4 => Q_o <= "0111";
20
          when 5 => Q_o <= "1011";
21
          when 6 => Q_o <= "1101";
22
          when others => Q_o <= (others => '0');
23
        end case c_switch;
24
        v_var := v_var + 1;
25
          if (v_var > 6) then 
26
            v_var := 0;
27
          end if;
28
    end if;
29
  end process p_prim;
30
end architecture rtl;

von Gerald B. (gerald_b)


Lesenswert?

Ich hatte das zu Heimcomputerzeiten in Basic so gelöst:
- Aus der zu untersuchenden Zahl die Quadratwurzel ziehen, gucken ob 
ohne Rest, wenn ja verwerfen, wenn nein, als Variable speichern
- versuchen durch 2 zu teilen, wenn ohne Rest möglich, Zahl verwerfen, 
ansonsten gucken ob Ergebnis größer als Wurzel
- Teiler um eins erhöhen, wenn ohne Rest möglich, Zahl verwerfen, 
ansonsten gucken ob Ergebnis größer als Wurzel...
wenn der Teiler das Ergebnis der Wurzel übersteigt, dann ist die 
untersuchte Zahl eine Primzahl

da ab der Wurzel sich Teiler und Ergebnisse nur umkehren, kann ich so 
die Hälfte des Berechnungsaufwandes unter den Tisch fallen lassen :-)
Die Idee ist mir irgendwann als Optimierung meiner Routine gekommen. 
Zuvor habe ich bis 1 kleiner der zu untersuchenden Zahl den Teiler 
erhöht.

von Martin S. (strubi)


Lesenswert?

Markus F. schrieb:
> VHLD ist eine Beschreibungs-Sprache. Sie beschreibt (ähnlich wie HTML
> eine Webseite, TeX ein schriftliches Dokument oder troff eine
> Unix-Manpage beschreibt) eine digitale Schaltung.
>

Und auch wenn es immer wieder gebetsmühlenartig als 
"Beschreibungssprache" bezeichnet wird: VHDL ist immer noch eine 
Programmiersprache. Turing würde sich im Grabe umdrehen...
Dass man damit HW beschreibt, heisst nicht, dass man es mit einer 
Nicht-Turing-Beschreibungssprache wie HTML verwechseln darf. Faktisch 
ist VHDL Ada mit ein paar Erweiterungen.

Aber zum Thema Primzahlen: Versuch doch mal einen anderen Ansatz, ich 
geb mal nen Hinweis:

signal p2 : std_logic_vector(1 downto 0) := "01";
signal p3 : std_logic_vector(2 downto 0) := "001";
signal p5 : std_logic_vector(4 downto 0) := "00001";
.. (vervollständige weiter).

Nun die Uebung: Ueberleg dir mal, was du mit Shift-Registern mit 
"rotate"
(was hinten rausfällt kommt vorne wieder rein) und OR-Gattern daraus 
machen kannst, um weitere Primzahlen herauszusieben (nach Eratosthenes).
Also denke erst in Gattern, dann schreibst es hin. Ohne Variablen, nur 
mit Signalen. Und einen Zähler brauchst du.

von Klaus F. (kfalser)


Lesenswert?

Martin S. schrieb:
> Und auch wenn es immer wieder gebetsmühlenartig als
> "Beschreibungssprache" bezeichnet wird: VHDL ist immer noch eine
> Programmiersprache. Turing würde sich im Grabe umdrehen...
> Dass man damit HW beschreibt, heisst nicht, dass man es mit einer
> Nicht-Turing-Beschreibungssprache wie HTML verwechseln darf. Faktisch
> ist VHDL Ada mit ein paar Erweiterungen.

Und wenn man tausend Jahre darüber streiten kann, was denn 
Programmierung sein und was nicht, aber der Begriff 
"Beschreibungssprache" steckt bei VHDL schon im Namen:
"VHSIC Hardware Description Language".
Wenn das kein Beweis ist...

von Markus F. (mfro)


Lesenswert?

Martin S. schrieb:
> Und auch wenn es immer wieder gebetsmühlenartig als
> "Beschreibungssprache" bezeichnet wird: VHDL ist immer noch eine
> Programmiersprache.

Dem würde ich keinesfalls widersprechen (und was ich oben schrob, 
widerspricht dem m.E. auch nicht).

Wenn das einer wollte, könnte man wohl einen Texteditor in VHDL 
schreiben. Wahrscheinlich ist alles dafür da, was man braucht. Als 
Beweis für "Programmiersprache" sollte das wohl ausreichen.

Man könnte sicher auch C++-Code schreiben, der - in einem passenden 
Synthese-Programm ausgeführt - ein Bitfile auswerfen kann (wenn man denn 
wüsste, wie das aussehen soll). Würde das C++ zur Beschreibungssprache 
"degradieren"?

von Achim S. (Gast)


Lesenswert?

Johannes H. schrieb:
> Irgendwie
> habe ich das Gefühl, dass es zu sehr "C-Mäßig" geschrieben ist

Nö, passt schon. Alles, was du jetzt geschrieben hast, lässt sich direkt 
auf Hardwarekomponenten abbilden. Du hast einen Zähler, der bei jedem 
Takt eins hochzuählt und beim Überlauf auf 0 zurückspringt. Und du hast 
ein Schaltnetz (-> LUT), das aus dem Zälerstand einen Ausgabewert 
generiert.

Du könntest dir nur selbst einen Gefallen tun, wenn du den Zähler per 
Signal statt per Variable beschreibst (du müsstest den Überlauf dann 
etwas anders regeln).

Hier funktioniert zwar eigentlich beides gleich gut, aber ich würde dir 
empfehlen, Variablen erst/nur dann einzusetzen, wenn du dir der 
Unterschiede zwischen Variable und Signal wirklich bewusst bist und wenn 
du eine Variable brauchst (weil es mit einem Signal nicht gehen würde). 
Wurde ja glaube ich weiter oben schon mal empfohlen.

von Heidbutel (Gast)


Lesenswert?

Klaus F. schrieb:
> "Beschreibungssprache" steckt bei VHDL schon im Namen:
> "VHSIC Hardware Description Language".
> Wenn das kein Beweis ist...

Was aber nicht bedeutet, dass alles, was nicht genannt ist, nicht 
stimmt.

XML wäre dann auch weder eine Programmier- noch eine 
Beschreibungssprache, denn im Namen steckt nix davon drin.

Eigentlich ist es kaum zu fassen, wie angebliche Ingenieure so 
engstirnig sein können und sich an Begriffen hochziehen, die in aller 
Regel dadurch zustande gekommen sind, dass ein Nerd spät des Nachts 
irgendeinen Einfall hatte und ausprobiert hat, mit welchen Abkürzungen 
man das halbwegs gut formulieren kann, damit es klingt. Auf Inhalte hat 
da nie einer genau geschaut. Ausserdem entwicklen sich Dinge und 
entfernen sich von ihrer ursprünglichen Bedeutung und Deklaration.

So eine hadere Begriffsgläubigkeit kennt man sonst nur von Juristen!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ist nicht alles eine Programmiersprache?

Ich hatte da zu Anfang der Computerära so ein Erlebnis mit einer 
Sekretärin,  die sagte, sie würde jetzt auch programmieren. Nach einer 
kurzen Abklärungsphase war dann klar, dass sie Texte in den Computer 
"programmierte".

Heute wird mir klar: die Frau war uns allen voraus...

Was mich aber hauptsächlich nachdenklich stimmt, ist, dass nach meiner 
Erfahrung diese verbissene VHDL-ist-eine-Programmiersprache Einstellung 
vorrangig von ehemaligen Softwerkern kommt.

Heidbutel schrieb:
> Eigentlich ist es kaum zu fassen, wie angebliche Ingenieure so
> engstirnig sein können und sich an Begriffen hochziehen
Ja, dann lass mich doch weiterhin von einer Beschreibungssprache 
sprechen. Andere dürfen das meinetwegen auch eine Programmiersprache 
oder sonstwas nennen.

: Bearbeitet durch Moderator
von Weichbirne (Gast)


Lesenswert?

Lothar M. schrieb:
> dass sie Texte in den Computer
> "programmierte".
Vielleicht stand die Dame ja auch  LaTEX :D

von C. A. Rotwang (Gast)


Lesenswert?

Lothar M. schrieb:

> Heidbutel schrieb:
>> Eigentlich ist es kaum zu fassen, wie angebliche Ingenieure so
>> engstirnig sein können und sich an Begriffen hochziehen
> Ja, dann lass mich doch weiterhin von einer Beschreibungssprache
> sprechen. Andere dürfen das meinetwegen auch eine Programmiersprache
> oder sonstwas nennen.

Vorschlag: Nenne es nicht FPGA-Programmierung und auch nicht 
FPGA-Beschreibung, sondern "Digitaler Schaltungsentwurf mit FPGA".

Hat man Erfahrung darin, arbeitet es sich viel leichter mit VHDL und Co. 
Ein Problem ist allerdings das Lehrbücher über Schaltungsentwurf gern 
beim Urschleim wie die Unterschieder zwischen TTL und CMOS oder 
Gattermodell eines FF/Counter anfangen, so dass der geneigte Leser 
ermüdet bevor er bei den essentiellen FPGA-Grundlagen wie synchroner 
Schaltungsentwurf/FSM-Design/Clocknetwork ankommt. Falls letzteres über 
in den Lehrbüchern behandelt wird.

von nicht"Gast" (Gast)


Lesenswert?

Heidbutel schrieb:
> XML wäre dann auch weder eine Programmier- noch eine
> Beschreibungssprache, denn im Namen steckt nix davon drin.

Nanu, seit wann ist denn XML eine Programmiersprache? Auf die Idee würde 
keiner kommen. Das mit der Beschreibungssprache steckt in dem Markup 
schon irgend wie mit drin.

von C. A. Rotwang (Gast)


Lesenswert?

nicht"Gast" schrieb:
> Heidbutel schrieb:
>> XML wäre dann auch weder eine Programmier- noch eine
>> Beschreibungssprache, denn im Namen steckt nix davon drin.
>
> Nanu, seit wann ist denn XML eine Programmiersprache? Auf die Idee würde
> keiner kommen. Das mit der Beschreibungssprache steckt in dem Markup
> schon irgend wie mit drin.

Wurde XML nicht mal wie SGML als Seitenbeschreibungssprache bezeichnet?!

Das Problem ist das "Programmieren" im Deutschen fast ausschließlich 
*Computer*-Ablauf programmieren benutzt wird, während es im Englischen 
im Sinne von Ablaufsteuerung weiter gefasst wird. HTML steuert also den 
Ablauf des Parsers/Renders die die Seite produziert. Aber es gibt noch 
das Tagesprogramm und das Programmieren des Videorecorders/Mikrowelle 
(im Sinne von Zeitschaltuhr einstellen).

von Martin S. (strubi)


Lesenswert?

Lothar M. schrieb:
> Ist nicht alles eine Programmiersprache?

Nö. Siehe Turing-Vollständigkeit.
Und genau darin besteht der Unterschied zw. Beschreibung und 
Programmierung.
Lax ausgedrückt, sobald prozedurale Elemente vorkommen, ist es keine 
Beschreibung mehr.
Dazu kommt, dass es für eine Beschreibung typischerweise in der Syntax 
verankerte Designregeln gibt (die der korrekten Beschreibung zielführend 
sind), bei XML z.B. ein Schema.
Bei VHDL ist das schon nicht mehr der Fall. Da wurde faktisch Ada 
(Programmiersprache) aufgebohrt, um HW zu simulieren.
Für die eigentliche Beschreibung von HW gibt es keine Syntaxregeln. Man 
kann eine Menge programmieren, was sich nicht in eine Beschreibung 
umsetzen lässt.
Deswegen ist VHDL für eine konkrete Beschreibung recht schwerfällig, da 
sich digitale Vorgänge zu leicht abstrahieren lassen, dementsprechend 
offenbart sich hier immer wieder der harzige Weg zu einer korrekten 
Beschreibung.

C. A. Rotwang schrieb:
> Vorschlag: Nenne es nicht FPGA-Programmierung und auch nicht
> FPGA-Beschreibung, sondern "Digitaler Schaltungsentwurf mit FPGA".

Bingo. Es geht ja schlussendlich um ein Design. Designs kann man 
durchaus prozedural programmieren. Ob das Synthesetool daraus eine 
richtige Beschreibung macht, ist immer das Abenteuer.

Was XML angeht: Es gibt Ansätze, HDL wirklich als echte Beschreibung in 
XML zu formulieren, um darauf Designregeln-Checks laufen zu lassen.

Um die Verwirrung so ganz am Rande noch komplett zu machen: Es gibt auch 
bei XML eine Ausnahme: XSLT gilt wie LaTeX als Turing-vollständig. Man 
hat damit eine Beschreibung programmatischer Abläufe in XML...

Mit dem Ausflug in die TI sind wir allerdings jetzt gehörig vom Thema 
abgedriftet und der TO hat wohl die Nase voll von VHDL :-)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Lies mal den Beitrag Beitrag "Variable vs Signal"

Und täglich grüßt das Murmeltier ... Wollte gerade mal wieder meine 
Kenntnisse bzgl Variable vs Signal auffrischen - dann stelle ich fest, 
der damalige Thread wurde von mir erstellt ...

Ich bin immer noch der Meinung, dass Variablen vieles vereinfachen und 
man sie nicht pauschal verteufeln sollte :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin S. schrieb:
> Lothar M. schrieb:
>> Ist nicht alles eine Programmiersprache?
> Nö. Siehe Turing-Vollständigkeit.
Hast du mal einen Link, der definiert, dass Programmiersprachen generell 
Turing-Vollständigkeit besitzen müssen (*)?
Oder einen, der definiert, dass Turing-Vollständigkeit aus irgendwas 
automatisch eine Programmiersprache macht?

(*)https://www.golem.de/news/crema-eine-programmiersprache-ohne-turing-vollstaendigkeit-1508-115591.html



Mampf F. schrieb:
> Ich bin immer noch der Meinung, dass Variablen vieles vereinfachen und
> man sie nicht pauschal verteufeln sollte :)
Ich verteufle Variablen nicht. Ich verwende sie ja selbst,  wo es 
sinnvoll ist. Ich weise nur ausdrücklich darauf hin, daß Variablen in C 
und in VHDL außer dem Namen nichts gemein haben. Und dass man wissen 
sollte, wo in VHDL sinnvoller Signale oder Variablen eingesetzt werden.


C. A. Rotwang schrieb:
> Vorschlag: Nenne es nicht FPGA-Programmierung und auch nicht
> FPGA-Beschreibung, sondern "Digitaler Schaltungsentwurf mit FPGA".
Das ist aber auf einer anderen Abstraktionebene angesiedelt. Wie nenne 
ich die Beschreibung eines einzelnen Zählers? Frage ich da
"Wie sieht das VHDL-Programm für den Zähler aus?" oder frage ich "Zeig 
mal die Beschreibung des Zählers."  oder verbiege ich mich und sage "Wie 
sieht der VHDL-Schaltungsentwurf für den Zähler aus?"
Was sage ich dann, wenn es kein Entwurf mehr, sondern nach der 
Serieneinführung schon tausendfach umgesetzte Realität ist?
Und warum sollte die Problematik durch die Einführung eines dritten 
Begriffs einfacher oder klarer werden?

: Bearbeitet durch Moderator
von C. A. Rotwang (Gast)


Lesenswert?

> C. A. Rotwang schrieb:
>> Vorschlag: Nenne es nicht FPGA-Programmierung und auch nicht
>> FPGA-Beschreibung, sondern "Digitaler Schaltungsentwurf mit FPGA".
> Das ist aber auf einer anderen Abstraktionebene angesiedelt. Wie nenne
> ich die Beschreibung eines einzelnen Zählers? Frage ich da
> "Wie sieht das VHDL-Programm für den Zähler aus?" oder frage ich "Zeig
> mal die Beschreibung des Zählers."  oder verbiege ich mich und sage "Wie
> sieht der VHDL-Schaltungsentwurf für den Zähler aus?"
> Was sage ich dann, wenn es kein Entwurf mehr, sondern nach der
> Serieneinführung schon tausendfach umgesetzte Realität ist?
> Und warum sollte die Problematik durch die Einführung eines dritten
> Begriffs einfacher oder klarer werden?

Ich kann dir hier nicht folgen. Meines Erachtens ist das keine weitere 
Abstraktionsebene sondern eine konkrete Realisierung mit "komplexen" 
bausteinen. Zähler ist vielleicht nicht das beste Beispiel. Aber einer 
der Digitalentwurf gelernt hat, weiss schon mal das man hier einen binär 
synchronzähler nimmt und dem Überlauf realisiert indem man mit 
komperator den Zustand der Zähl-FF mit dem Eckwertvergleich und dessen 
Ausgang an die Reset der FF führt. Weis man das quält man nicht das 
Synthesetool mit unsynthetierbaren VHDL-Konstrukten, die sich nur im 
Simulator wie ein Counterverhalten. Oder Flanken detector, wer 
schaltungstechnik gelernt hat, weiss das man das mit einen D-FF und 
Gatter realisiert. Und einem Schaltungstechniker muss man nicht erklären 
das clock zwar auch nur ein Signal ist, es aber nicht auf "normale" 
Signal-Netze gehört, sondern einem clock tree.

Außerdem führt der Hinweis mit dem Schaltungsdesign dazu das man sich 
das passende Buch neben der VHDL-Syntaxbeschreibung auf den Schreibtisch 
stellt, bspw Tietze, Schenk Schaltungstechnik. Den dort werden solche 
esentialen Begriffe wie Taktnetzwerk, sequentielle und Kombinatorische 
Logik, shiftregister, Multiplexer, kritisch Pfad, Setup/Hold-time 
geklärt und nicht/kaum in Literatur zur VHDL-syntax.

So wie man beispielsweise für das Programmieren von 
Bildverarbeitungstools nicht nur den C++ Syntax braucht sondern auch 
Wissen über 
Bildverarbeitungsalgorithmen/Farbmodelle/Koordinatentransformation/alais 
ing  ...

von Martin S. (strubi)


Lesenswert?

Jetz kann man schon fast nen Thread dazu aufmachen...

>> Lothar M. schrieb:
>>> Ist nicht alles eine Programmiersprache?
>> Nö. Siehe Turing-Vollständigkeit.
> Hast du mal einen Link, der definiert, dass Programmiersprachen generell
> Turing-Vollständigkeit besitzen müssen (*)?
> Oder einen, der definiert, dass Turing-Vollständigkeit aus irgendwas
> automatisch eine Programmiersprache macht?
>

Zu letzterem kann man sich garantiert streiten.
Ich würde mich auf Aussagen von Niklaus Wirth in seinen Vorlesungen  aus 
den 90ern berufen..
Ansonsten:

https://de.wikipedia.org/wiki/Turing-Vollst%C3%A4ndigkeit

"Einige Autoren definieren den Begriff „Programmiersprache“ auf Basis 
der Turing-Vollständigkeit.[6]"

> (*)https://www.golem.de/news/crema-eine-programmiersp...

Guck ich mir jetz lieber nich im Detail an...
Andauernd werden in nerdy Hinterzimmern eine Menge 
"anwendungsorientierter" Sprachen erfunden...

Aber das Thema mit der Endlosschleife <-> Turing-complete ist ein 
kontroverses. Was für n Abend und n Bier...

Irgendwo muss halt die Trennlinie gezogen werden. Visual Basic oder 
Excel-Makros sind für mich wie LaTeX gerade noch Programmiersprache, 
während es XSLT nicht mehr ist (wenn auch Turing-completeness hingefaket 
wird).
IP-XACT oder die div. XHDL-Ansätze mit einem Schema hingegen sind 
definitiv Beschreibungssprachen. Eine eindeutig abbildende 
Beschreibungssprache sollte eigentlich immer ein Schema haben.

So ganz am Rande für die Freaks: man kann den AST (abstrahierten 
Syntax-Baum) von VHDL in eine echte 'XHDL' übersetzen, die sogar über 
Umwege synthetisiert. Da gehen aber momentan auch nur Konstrukte, die 
strikt "beschrieben" werden, sobald programmatische Elemente 
(Funktionen, Schleifen) im Spiel sind, meckert der 'DRC'.
Beispiel: https://section5.ch/dclib/xhdl/, um damit zu spielen (d.h. 
VHDL auf Designregeln zu checken) ist allerdings ne aktuelle 
GHDL-Version mit XML-Ausgabe nötig.

Grüsse,

- Strubi

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
Noch kein Account? Hier anmelden.