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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren