mikrocontroller.net

Forum: FPGA, VHDL & Co. Bitvector in VHDL


Autor: der Türke (derturke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo leute

die Aufgabe ist folgende:zählen wieviele Bits in einem Bitvector auf 1
gesetzt sind und sie anschließen rechtsbündig ausgibt

also beispiel a=100101101 conv(a)=000011111

hat da einer ne idee wie man das realisieren kann in VHDL ?wie man die
high positionen zählt ist mir klar aber das rechtsbündig ausgeben ist
mir noch unklar?

MFG
Der Turk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Der Türke (derturke)

>die Aufgabe ist folgende:zählen wieviele Bits in einem Bitvector auf 1
>gesetzt sind und sie anschließen rechtsbündig ausgibt

>also beispiel a=100101101 conv(a)=000011111

Das glaube ich nicht. Es ist die Anzahl der '1' Bit gefragt. Hier also 
5.

>hat da einer ne idee wie man das realisieren kann in VHDL ?wie man die
>high positionen zählt ist mir klar

Glaub ich nicht so ganz. das kann man seriell mit einem Schieberegister 
machen oder parallel mit vielen kleinen ROMs + Addieren.

> aber das rechtsbündig ausgeben ist mir noch unklar?

Wahrscheinlich eine sehr akademische Formulierung für ein stinknormale 
Binärzahl, welche logischerweise rechtsbündig orientiert ist (sprich LSB 
ganz links = Bit#0).

MFG
Falk

Autor: der Türke (derturke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich habs folgendermasen gemacht! 2 Funktionen die eine zählt die 
'1' im bitvector und gibt die anzahl als integer zurück wobei zu 
bemerken ist wenn zb. drei '1' im bitvector wäre er mir nicht 3 ausgibt 
sondern 2 hoch 3-1 damit ich später bei der Conv funktion den Vector mit 
1 dann rechtsbündig habe.

Die andere funktion wandelt die integer zahl in einen Bitvector um

01101 => 3 einsen
2^3-1=7 => 0111
so hab ich mir das vorgestellt!!!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Der Türke (derturke)

>so hab ich mir das vorgestellt!!!

Kann man so machen, wenn das die Aufgabe ist.

MFG
Falk

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die große Frage ist wie so oft, ob das ganze synthetisierbar sein soll. 
Falls nein (nur Simulation), stimmt deine Lösung.

Falls es aber synthetisierbar sein soll, sieht die Sache schon ganz 
anders aus. Da kommen dann auch so Fragen dazu wie: Soll es asynchron 
oder synchron sein, und wenn letzteres in wievielen Takten? Wie viele 
Bits ist der Vector breit, oder soll das als Parameter einstellbar sein? 
Wie gut soll die Lösung optimiert sein?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Morin (Gast)

>anders aus. Da kommen dann auch so Fragen dazu wie: Soll es asynchron
>oder synchron sein, und wenn letzteres in wievielen Takten? Wie viele

ASYNCHRON soll es sicher NIE sein, aber ggf. kombinatorisch. ;-)

MfG
Falk

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als noch nicht sehr erfahrener FPGA-Designer frag ich mich jetzt, ob man 
das nicht auch mit den LUTs gut implementieren kann, sodass sich von den 
LUTs her eine Baumstruktur ergibt. Für einen 16-bit Vektor kommen zuerst 
4 LUTs, nächste Stufe 2 LUTs und dann schließlich das Ergebnis.

Wie der Code dazu ausschaut sodass das Synthesetool wirklich das macht, 
was mir vorschwebt, ist mir zwar noch nicht ganz klar, aber im Prinzip 
müsste das doch möglich sein. Dazu noch vergleichsweise 
ressourcenschonend und auch schnell, wenn man noch in regelmäßigen 
Abständen Register dazwischenschaltet.

Oder hab ich da was übersehen?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Matthias (Gast)

>LUTs her eine Baumstruktur ergibt. Für einen 16-bit Vektor kommen zuerst
>4 LUTs, nächste Stufe 2 LUTs und dann schließlich das Ergebnis.

Kann man so machen. Wurde schon mal hier diskutiert. Such mal mit der 
Suchfunktion oben in der Menuleiste.

>Wie der Code dazu ausschaut sodass das Synthesetool wirklich das macht,
>was mir vorschwebt, ist mir zwar noch nicht ganz klar, aber im Prinzip

Nimm ein einfaches Case mit 16 Mögilchkeiten, der Ausgang ist ein drei 
Bit Vektor.

>müsste das doch möglich sein. Dazu noch vergleichsweise

Ja.

>ressourcenschonend und auch schnell, wenn man noch in regelmäßigen
>Abständen Register dazwischenschaltet.

Ja.

MFG
Falk

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.