Hallo zusammen,
ich habe folgende Frage:
Ich habe 1024, nacheinander einkommende 16bit Werte.
Diese werden zusammen mit einem valid-Signal im FPGA erzeugt.
Immer wenn das Valid Signal auf 1 geht weiß ich, dass ein neuer Wert
bereit ist. Das geschieht genau 1024 mal.
Diese nacheinander kommenden Werte möchte ich nun in einer state_machine
aufsummieren und am Ende, wenn alle 1024 Werte addiert worden sind, den
Mittelwert bilden. Der Mittelwert wird dann in ein Fifo geschrieben. Am
Ende soll der Fifo mit 2048 Mittelwerten gefüllt sein.
Nun sind die Daten vom Typ std_logic_vector.
1 | use IEEE.NUMERIC_STD.ALL;
|
2 | signal data_v : STD_LOGIC_VECTOR(15 downto 0);
|
Kann ich diese Daten nun einfach mit
1 | signal data_i : integer range 0 to 2**16;
|
2 |
|
3 | data_i <= to_integer(unsigned(data_v));
|
in sauber verrechenbare signale umwandeln und dann
1 | signal summe_i : integer range 0 to 2**26;
|
2 | signal summe_v : std_logic_vector(25 downto 0);
|
3 |
|
4 | if valid = '1' then
|
5 | summe_i <= summe_i + data_num;
|
6 | end if;
|
7 |
|
8 | if counter = 1023 then
|
9 | summe_v <= to_unsigned(std_logic_vevtor(summe));
|
10 | end if;
|
11 |
|
12 | data_in_fifo <= summe_v(25 downto 10); --10 nach rechts shiften = /1024
|
Meine Überlegungen:
Ich wandle die Daten vom STD_LOGIC_VECTOR in integer um, summiere sie
auf, wandle die Summe wieder zurück in STD_LOGIC_VECTOR, um dann das
Ergebnis 10 Stellen nach rechts zu shiften, was ja /1024 (Anzahl der
Werte) entspricht. Das alles schön getaktet in einer state_machine.
Meine Fragen:
- ist mein Vorgehen prinzipiell möglich und auch richtig beschrieben?
- muss ich für die cast- und konvertierungs-Vorgänge einen Takt
einplanen?
- komme ich mit dem ganzen casten und konvertieren und rechnen mit drei
Takten aus? Denn alle vier Takte kommt ein neuer Datenwert, der wieder
mit aufsummiert werden soll, da sollte die state machine also wieder am
Anfang stehen.
Ich wäre für Hinweise dankbar!
Vielen Dank!
Andi