Forum: FPGA, VHDL & Co. XAPP380 / Dynamische Bits zusammen setzen


von Dirk (Gast)


Lesenswert?

Hallo, ich würde gerne 16 Eingangssignale freiwählbar in ein 8 Bit 
Register schreiben. Nach einigem suchen hab ich die XAPP380 von Xilinx 
gefunden, aber es ist ein bisschen zu aufgebläht. Die Selektierten Bits 
müssten auch von LSB nach MSB sortiert werden. Hier ein Beispiel


Eingang:
Bit 0    =  1
Bit 1    =  0
Bit 2    =  1
Bit 3    =  1
Bit 4    =  1
Bit 5    =  0
Bit 6    =  1
Bit 7    =  1
Bit 8    =  1
Bit 9    =  0
Bit 10   =  1
Bit 11   =  1
Bit 12   =  1
Bit 13   =  0
Bit 14   =  1
Bit 15   =  1

Selektierregister :
Bit 11, Bit 13, Bit 14, Bit 15 werden ausgewählt
Hex = E8 00

Speicherregister (8Bit):

Bit 0 = 1
Bit 1 = 0
Bit 2 = 1
Bit 4 = 1
Bit 5 = x
Bit 6 = x
Bit 7 = x

Geht es vielleicht etwas einfacher als die Xapp380 ?

von Dirk (Gast)


Lesenswert?


von iulius (Gast)


Lesenswert?

wo bekommst du denn die Info welche Bits genutzt werden her und vor 
allem : wie schnell muss das umgesetzt werden ?


bsp : du bekommst von außen eine bitposition pro takt.

dann würde ich einfach jeden takt über einen pointer ein bit des vektors 
auswählen und in speicherregister reinschieben.

etwa so :

if new_order='1' then
  save_reg <= save_reg(7 downto 1) & input_reg(to_integer(reg_to_get));
end if;


bei einer steuerung von außen musst du so zwar immer alle 8 bits 
durchlaufen, dafür dürfte sich der hardwareaufwand in grenzen halten. 
(ein großer mux halt...)


wenn zeit keine rolle spielt : das input_reg entsprechend 
"durchschieben" und immer die gleiche position (z.b. LSB) abgreifen.

von Dirk (Gast)


Lesenswert?

Hallo Iulius, die Vorgabe gibt der User über USB und wird nach jeder 
Konfigurationsänderung neu eingestelllt. Schnell muss es in dem Fall 
nicht sein, weil es nur zur Konfigurationszeit eingestellt wird.

if new_order='1' then
  save_reg <= save_reg(7 downto 1) & input_reg(to_integer(reg_to_get));
end if;

Ist eine schoene Lösung. Sollte es aber nicht so lauten ??

if new_order='1' then
  save_reg <= save_reg(7 downto 0) & input_reg(to_integer(reg_to_get));
end if;

von iulius (Gast)


Lesenswert?

Das wird dir der synthesizer nicht abnehmen, da (7 downto 0) bereits 8 
bit sind und der zielvektor auch 8 bit groß ist.

Das Ziel ist jedoch ein schieberegister welches 7 alte bits übernimmt 
und ein neues, 8tes bit reinschiebt.

Eventuell nochmal das "&" und seine Bedeutung(konkatenation) anschauen.

von Dirk (Gast)


Lesenswert?

Hallo, dank Dir. Klar hast Du recht mit 7.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.