Nun habe ich einen Wert, z.B. 22
Ich möchte nun prüfen, an welches Position innerhalb des Arrays dieser
liegt.
In diesem Beispiel wäre dies zwischen Index 2 und 3.
In C würde ich dies mittels einer Schleife machen. Gerne möchte ich
jedoch, dass dieses Konstrukt mittels eines direkten Vergleichs
stattfindet.
Gibt es eine VHDL-Struktur, mit welcher dieses Problem optimal gelöst
werden kann?
Vielen Dank.
Holger K. schrieb:> In C würde ich dies mittels einer Schleife machen. Gerne möchte ich> jedoch, dass dieses Konstrukt mittels eines direkten Vergleichs> stattfindet.
Auch in VHDL kann man das in einer Schleife lösen:
Es werden dann mehrere Komperatoren parallel instanziiert.
> Gibt es eine VHDL-Struktur, mit welcher dieses Problem optimal gelöst> werden kann?
Was ist optimal? Geringer Platzbedarf oder schnelle Durchlaufzeit?
Duke
Abhängig von der Anzahl der möglichen Werte, kannst du dein Array so
repräsentieren, dass der Wert als Adresse den Bereich zurückliefert
(Stichwort CAM):
Bis zu gewissen Größen kann man sowas ganz vernünftig in Block-RAMs
ablegen und hat das Ergebnis in einem Takt. Dann hat man geringen
Platzbedarf und geringe Durchlaufzeit.
Duke Scarring schrieb:> Holger K. schrieb:>> In C würde ich dies mittels einer Schleife machen. Gerne möchte ich>> jedoch, dass dieses Konstrukt mittels eines direkten Vergleichs>> stattfindet.> Auch in VHDL kann man das in einer Schleife lösen:> Es werden dann mehrere Komperatoren parallel instanziiert.>>> Gibt es eine VHDL-Struktur, mit welcher dieses Problem optimal gelöst>> werden kann?> Was ist optimal? Geringer Platzbedarf oder schnelle Durchlaufzeit?>> Duke
Danke für deine Antwort. Ja, hab an sowas gedacht, dass da Komparatoren
resultieren. Ziel ist, möglichst geringe Laufzeit.
VHDL hotline schrieb im Beitrag #6064245:
> Bis zu gewissen Größen kann man sowas ganz vernünftig in Block-RAMs> ablegen und hat das Ergebnis in einem Takt. Dann hat man geringen> Platzbedarf und geringe Durchlaufzeit.
Interessanter Ansatz.
Es handelt sich um einen Wertebereich von 1-3000.
Holger K. schrieb:>>> Gibt es eine VHDL-Struktur, mit welcher dieses Problem optimal gelöst>>> werden kann?>> Was ist optimal? Geringer Platzbedarf oder schnelle Durchlaufzeit?>>>> Duke>> Danke für deine Antwort. Ja, hab an sowas gedacht, dass da Komparatoren> resultieren. Ziel ist, möglichst geringe Laufzeit.
Form follows function: Zuerst herausfinden ob man eine Look-up-table,
Komparatoren oder eine andere Hardware Struktur möchte. Daraus ergibt
sich die VHDL Struktur dann meistens schon fast von alleine.
VHDL ist keine High-level Sprache :-)
Die naheliegende Lösung wäre zunächst eine verschachtelte IF_Abfrage für
den Fall, dass die Werte aufsteigend sortiert sind. Die wird vom
Compiler aufgelöst und optimiert und ist im schlechtesten Fall so
langsam wie ein WHEN im günstigsten Fall schneller, wenn eine frühe Zahl
gefunden wird.
Macht aber nicht viel Unterschied.
Eine eigene Frage?
Dieser Thread ist über 6 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.