Code Optimierung - Signalzuweisungen vereinfachen

OP #6258807
Lesenswert?
• ▲
▼
Hallo zusammen,

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

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

Grüße
Bruno
Gast #6258821
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.
Moderator (Firma: Titel) Persönliche Seite #6259911
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:
1
tbuf(6) <= tbuf(5) and qbuf(5);
2
tbuf(7) <= tbuf(6) and qbuf(6);
3
tbuf(8) <= tbuf(7) and qbuf(7);
4
tbuf(9) <= tbuf(8) and qbuf(8);
5
tbuf(1) <= tbuf(0) and qbuf(0);
6
tbuf(2) <= tbuf(1) and qbuf(1);
7
tbuf(3) <= tbuf(2) and qbuf(2);
8
tbuf(4) <= tbuf(3) and qbuf(3);
9
tbuf(5) <= tbuf(4) and qbuf(4);
10
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:
1
  tbuf <= (tbuf(8 downto 0) and qbuf) & en;
Moderator (Firma: Titel) Persönliche Seite #6259964
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:
1
tbuf(tbuf'high downto 1) <= tbuf(tbuf'high-1 downto 0) and qbuf(tbuf'high-1 downto 0);
2
tbuf(0) <= en;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 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.