VHDL: Auswerten variabler Zahl von Signalen in for-Schleife

Gast #2422372
Hallo,

ich bitte um Durchsicht dieses Codes. Ich habe ihn aus einem VHDL-Buch 
übernommen und geändert.

Damit soll folgendes erreicht werden:
wenn alle Bits des Vektors rx_packet_rdy_s '1' sind, soll send_flag '1' 
werden, sonst soll send_flag '0' bleiben. Habe mein Design, das den Code 
enthält, schon synthetisiert und alles läuft wie erwartet (sieht bis 
jetzt zumindest so aus), aber so ganz sicher bin ich mir bei dem Code 
trotzdem nicht. Ist es in Ordnung so? Wenn nicht, wie macht man das 
richtig? Wenn ja, kann man das anders/besser machen?

Danke!

1
  
2
process ( rx_packet_rdy_s )
3
   variable flag : boolean;
4
begin                  
5
   flag := true;
6
   for a in 0 to SPI_NUMBER-1 loop
7
     if rx_packet_rdy_s(a) = '0' then
8
        flag := false;
9
     end if;
10
   end loop;
11
   if flag then send_flag <= '1';
12
   else send_flag <= '0';
13
   end if;
14
end process;
Moderator (Firma: Titel) Persönliche Seite
Keine Ursache.

Da fällt mir noch was ein: mit 'range lassen sich ganz elegant Schleifen 
programmieren, bei denen egal ist, ob sie mit to oder downto 
signalen aufgerufen werden:
1
   process (rx_packet_rdy_s) begin
2
     send_flag <= '1';
3
     for a in  rx_packet_rdy_s'range  loop   -- Bitreihenfolge egal 
4
       if rx_packet_rdy_s(a) = '0' then
5
         send_flag <= '0';
6
         exit;
7
       end if;
8
     end loop;
9
   end process;
Gast
Erinnert im Prinzip an meine allererste Version, nur ohne Variable und 
der Bereich für a anders angegeben. Was bewirkt hier "exit"? Kenne das 
im Zusammenhang mit VHDL noch gar nicht.
Gast
> Was legt der Name von exit nahe?

In C wird der Schleifendurchlauf abgebrochen, wenn eine Bedingung 
erfüllt ist. Aber in VHDL? Da gibt es meines Wissens keine 
Schleifendurchläufe in dem Sinne. Zumindest nicht in Hardware. Die 
Simulation ist schon eine andere Welt.
Moderator (Firma: Titel) Persönliche Seite
noips schrieb:
> Aber in VHDL?
> Da gibt es meines Wissens keine Schleifendurchläufe in dem Sinne.
Wenn es eine Schleife gibt, dann gibt es auch Durchläufe... ;-)
Das Ergebnis ist allerdings ganz was anderes als bei einer prozeduralen 
Programmiersprache.


> Ich meine damit, auch ohne exit-Statement würde ich diesen Code
> als fehlerfrei sehen.
Richtig: er würde hier das selbe Ergebnis herausbekommen. In anderen 
Fällen käme auch was anderes raus:
1
   process (vektor) 
2
     variable i : integer;
3
   begin
4
     i := 0;
5
     for i in  vektor'range  loop
6
       if vektor(a) = '0' then
7
         idx <= i;
8
         exit;           -- mit exit:  die Position der "ersten" 0 wird gefunden
9
       end if;           -- ohne exit: die Position der "letzten" 0 wird gefunden
10
       i := i+1;
11
     end loop;
12
   end process;

> diesen Code
Es ist kein Code.
Es ist eine Beschreibung, nämlich eine Hardwarebeschreibung.
Gast
Lothar Miller schrieb:
> Es ist kein Code.
> Es ist eine Beschreibung, nämlich eine Hardwarebeschreibung.

Ja, "Code" klingt eher nach Programmiersprache. Man kann darüber 
streiten, ob man die Hardwarebeschreibung in VHDL einen Code nennen kann 
oder nicht. Ich meine, immer wenn irgendwelche Dinge mit vereinbarten 
Zeichen(folgen) beschrieben werden, kann man von einem Code sprechen. 
Wenn man bei Google "vhdl coding style" eingibt, bekommt man 38.500 
Treffer.
Moderator (Firma: Titel) Persönliche Seite
noips schrieb:
> Wenn man bei Google "vhdl coding style" eingibt, bekommt man 38.500
> Treffer.
Wenn ich "armani coding style" eingebe bekomme ich 28.000 Treffer...
Wenn ich "vhdl beschreibung" eingebe, bekomme ich 38.000 Treffer...
Wenn ich "vhdl programm" eingebe, dann gibts immerhin schon 83.000 
Treffer...
 ;-)

> kann man von einem Code sprechen.
Ein Code war mal etwas Verschlüsseltes, oder etwas, das zum Entschlüssln 
von Verschlüsseltem zu brauchen war, oder etwas, das jemandem Zugang 
irgendwohin verschafft hat...

> ... würde ich diesen Code als fehlerfrei sehen ...
Es dauert nicht viel länger und ist dem Akronym "Very High Speed 
Integrated Circuit *Hardware Description Language*" angemessen, wenn du 
statt dessen einfach sagst:
... würde ich diese Beschreibung als fehlerfrei sehen ...

Aber sei's drum...  ;-)
Gast
Lothar Miller schrieb:
> Wenn ich "armani coding style" eingebe bekomme ich 28.000 Treffer...

und ich nur 1 Treffer, und zwar diesen Thread, von der Werbung mal 
abgesehen. Eingabe mit Einführungszeichen vorausgesetzt.

Bei Suche nach "vhdl programm" (mit Einführungszeichen) bekomme ich nur 
2350 Treffer.
Gast
noips schrieb:
> und ich nur 1 Treffer
Google ist eben auch nicht mehr das, was es mal war.

Was mich in letzter Zeit extrem nervt, wenn Seiten gefunden werden, die 
meinen Suchbegriff gar nicht enthalten, sondern nur (im Kontext gesehen) 
enthalten könnten :-(

Duke
Moderator (Firma: Titel) Persönliche Seite
Duke Scarring schrieb:
> Was mich in letzter Zeit extrem nervt, wenn Seiten gefunden werden, die
> meinen Suchbegriff gar nicht enthalten
Was mich überaus nervt, ist, dass gar nicht das gesucht wird, was ich 
will, sondern das, was Google meint, das ich wollten könnte. Und 
insbesondere, dass es keine Wildcards mehr gibt. Das kann sogar EBAY 
noch besser...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.