Byteweise addieren eines Vektors

OP #3266359
Lesenswert?

Hallo liebe Community,

ich bin vor kurzem damit angefangen, mich ins Thema VHDL, FPGA's und Co 
einzuarbeiten. Aktuell sitze ich an einem Projekt, das Vektoren 
vergleichen soll. Nichts großartiges.

Auf ein kleines Problem stoße ich da:

Ein 32 Bit breiter Vektor enthält die Ergebnisse von 4 Vergleichen in 
den einzelnen Bytes.
1
result_reg <= data_reg (31 downto 24) + data_reg (23 downto 16) + data_reg (15 downto 8) + data_reg (7 downto 0);

Wäre die Addition der einzelnen Bytes in ein Ergebnisregister. Auf einen 
möglichen Überlauf brauch nicht geachtet werden, da die Ergebnisse nicht 
entsprechend groß werden können. Die Addition geschieht in einem 
sequentiellem Prozess.

Nun möchte ich diese Zeile durch eine For-Schleife tauschen, um später 
auch größere Vektoren zu verwenden, ohne dort was ändern zu müssen.

Mein Konstrukt (Versuch) sieht bisher so aus:
1
for i in 0 to adder_amount_g-1 loop
2
   result_reg <= result_reg + data_reg(byte+(byte*i)-1 downto byte*i);
3
end loop;

Die Register sind vom selben Typ, entsprechende Libraries sind 
eingebunden,
die in dem Package definierten Konstanten "adder_amount_g" und "byte" 
haben den Wert 4 und 8.

Bin ich gänzlich auf dem Holzweg? Wie würde ein entsprechender Code 
aussehen?

Ich bin für alle Ideen dankbar.
Mit freundlichen Grüßen
Hille
OP #3275061
Lesenswert?

Danke für die kleine, aber feine Antwort. Sie hat durchaus geholfen. Das 
funktionierende Konstrukt sieht nun so aus:

1
       for i in 0 to adder_amount_g-1 loop --adder_amount_g entspricht 3
2
          result_var (7 downto 0) := result_var (7 downto 0) + data_reg(7+(byte*i) downto byte*i); --byte entspricht (natürlich) dem Wert 8
3
       end loop;

Und später im Prozess erfolgt natürlich noch eine Zuweisung von der 
Variable zu dem ursprünglichen Register "result_reg".

Vielen Dank dafür. Solche Tipps sind für Anfänger nicht gegen Gold 
aufzuwiegen.

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