Prüfen ob Wert innerhalb eines Bereiches liegt und in welchem

OP #6064213
Lesenswert?

Hallo zusammen

Folgendes:

ich habe ein Array, gefüllt mit Grenzwerten.

Beispiel:
1
type t_bounds is array (0 to 5) of integer range 0 to 40;
2
...
3
signal bounds : t_bounds (0 => 10, 1 => 15, 2 => 20, 3 => 25, 4 => 30, 5 => 37);

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.
Gast #6064226
Lesenswert?

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
Gast #6064245
Lesenswert?

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):
1
type t_bounds_cam is array(0 to 40) of integer(0 to 5);
2

3
signal bounds_cam :  t_bounds_cam :=
4
(0 => 0, 1 => 0, 2 => 0, ... 10 => 1, 11 => 1, ... 15 => 2 ,... 37 => 5 , ... 40 => 5);

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.
OP #6064268
Lesenswert?

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.
#6064308
Lesenswert?

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 :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren