Hallo zusammen,
ich habe ein kleines Problem mit einem VHDL-Code.
Vor einer SPI-Schnittstelle bekomme ich Daten angeliefert ins LCA. Der
Dateninhalt ist RunLength-codiert. Das erste Bit ist die Run_Value und
die nächsten Bits sind die Lauflänge (RunCount).
Diese Werte will ich in einer Vektor der Länge 420 (Din) schreiben. Wenn
also eine RunValue='1' ist und RunLength ='127' dann sollen von Position
0..126 der Wert '1' in den Vektor Din geschrieben werden.
Die letzte RunLength merke ich mir und beim nächsten Durchlauf wird ab
dieser Position mit der neuen RunLength der Wert von RunValue in den
Vektor geschrieben, solange bis 420 Bits geschrieben wurden.
Vom Prinzip her also so:
1 | Wortbreite := 420;
|
2 | run_count <= to_integer(unsigned(Data_In(6 downto 0)));
|
3 | run_value <= to_integer(unsigned(Data_In(7)));
|
4 |
|
5 | if (Wortbreite - index) >= 0 then
|
6 | for i in (run_count + index) downto index loop
|
7 | Din (i) <= run_value;
|
8 | end loop;
|
9 | index <= run_count + 1;
|
10 | end loop;
|
11 | end if;
|
Das Problem ist jetzt, das es so nicht Synthesefähig ist, da run_count +
index nicht konstant ist.
Mir fehlt einfach die Idee, wie ich einen Variablen Vektor in VHDL
erzeugen kann.
Gruß
Lars