Forum: FPGA, VHDL & Co. Code Optimierung - Signalzuweisungen vereinfachen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bruno K. (b0bbyr4y)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe folgenden Code für die Zuweisung von Signalen:
tbuf(0) <= en;
tbuf(1) <= tbuf(0) and qbuf(0);
tbuf(2) <= tbuf(1) and qbuf(1);
tbuf(3) <= tbuf(2) and qbuf(2);
tbuf(4) <= tbuf(3) and qbuf(3);
tbuf(5) <= tbuf(4) and qbuf(4);
tbuf(6) <= tbuf(5) and qbuf(5);
tbuf(7) <= tbuf(6) and qbuf(6);
tbuf(8) <= tbuf(7) and qbuf(7);
tbuf(9) <= tbuf(8) and qbuf(8);

Geht das auch in einer Art Loop?
Pseudocode:
tbuf(0) = en;
for i in 0 to 8
   tbuf(i+1) = tbuf(i) and quf(i);
end for;

Grüße
Bruno

von Theor (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Versuch macht kluch. Die Sprachbeschreibung auch. :-)

von Erwartung Svoller (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Code Optimierung

Und ich dachte schon hier wird mal so richtig was optimiert
dass das Zeug richtig schnell wird .... also "sophisticated
Programming" ..... (nix war's) ...

Dabei geht's nur um die Einrollung einer entrollten Schleife.

von Josef G. (bome) (Gast)


Bewertung
0 lesenswert
nicht lesenswert
tbuf(9 downto 1) <= tbuf(8 downto 0) and qbuf(8 downto 0);
tbuf(0) <= en;
Natürlich nur mit Takt sinnvoll.

von Robert P. (fpgazumspass) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Warum nicht gleich so?
tbuf <= (tbuf(8 downto 0) and qbuf(8 downto 0) & en

von Josef G. (bome) (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Robert P. schrieb:
> Warum nicht gleich so?

Wenn es nicht auch noch ein tbuf(10) gibt.

von Strategic Head of Lunch Planning (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Es kommt eh immer das selbe raus.
Ob eingerollt oder ausgerollt.
Schlauch bleibt Schlauch!

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Entweder mit generate Statements oder:
tbuf(0) <= en;
tbuf(tbuf'high downto 1) <= tbuf(tbuf'high-1 downto 0) and qbuf(qbuf'high-1 downto 0);

Dann bleibt die Struktur erhalten, auch falls sich mal die Laenge von 
tbuf und qbuf aendert.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bruno K. schrieb:
> Geht das auch in einer Art Loop?
Ja. Das geht auch.
Du musst einfach nur den Pseudocode als VHDL code hinschreiben. Es ist 
übrigens egal, ob du die Schleife "verkehrt herum" laufen lässt. Oder ob 
du deinen Code so schreibst:
tbuf(6) <= tbuf(5) and qbuf(5);
tbuf(7) <= tbuf(6) and qbuf(6);
tbuf(8) <= tbuf(7) and qbuf(7);
tbuf(9) <= tbuf(8) and qbuf(8);
tbuf(1) <= tbuf(0) and qbuf(0);
tbuf(2) <= tbuf(1) and qbuf(1);
tbuf(3) <= tbuf(2) and qbuf(2);
tbuf(4) <= tbuf(3) and qbuf(3);
tbuf(5) <= tbuf(4) and qbuf(4);
tbuf(0) <= en;

Robert P. schrieb:
> Warum nicht gleich so?
> tbuf <= (tbuf(8 downto 0) and qbuf(8 downto 0) & en
Mit der richtigen Klammerung samt fehlendem Strichpunkt wäre das mein 
Stil. Und wenn man dann noch davon ausgeht, dass der qbuf eh' ein 8-Bit 
Vektor ist, dann käme sowas dabei heraus:
  tbuf <= (tbuf(8 downto 0) and qbuf) & en;

von Bruno K. (b0bbyr4y)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke für die Vorschläge!

Werde die Variante von Tobias verwenden. Die Variante von Lothar gefällt 
mir auch. Leider ist der qbuf auch 10bit lang.

Danke nochmal für die schnelle Hilfe! Stand da irgendwie auf dem 
Schlauch.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Bruno K. schrieb:
> Leider ist der qbuf auch 10bit lang.
Ich würde ich die Wortbreite für die Berechnung nur vom tbuf abhängig 
machen, dann kann die Wortbreite des qbuf sein (oder gar ändern) wie sie 
will, für die verUNDung wird trotzdem die korrekte (gleiche) Breite 
verwendet:
tbuf(tbuf'high downto 1) <= tbuf(tbuf'high-1 downto 0) and qbuf(tbuf'high-1 downto 0);
tbuf(0) <= en;

: Bearbeitet durch Moderator

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.

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