www.mikrocontroller.net

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


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier der Link zur Appnote XAPP380:

http://www.xilinx.com/support/documentation/applic...

Autor: iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: iulius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, dank Dir. Klar hast Du recht mit 7.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.