mikrocontroller.net

Forum: FPGA, VHDL & Co. viele std_logic_vector vergleichen - minimum finden


Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich bastel gerade an einem FPGA Projekt und bin beim vhdl coden
auf ein Problem gestossen:
Ich möchte zB 4 verschiedene std_logic_vector (je 9bit) vergleichen.
var1: std_logic_vector(8 downto 0);
var2: std_logic_vector(8 downto 0);
var3: std_logic_vector(8 downto 0);
var4: std_logic_vector(8 downto 0);
out: std_logic_vector(1 downto 0);

Je nachdem welcher dieser std_logic_vectoren den kleinsten Zahlenwert
hat möchte ich out zuweisen.

Ich würde jetzt ein riesen if then elsif Gebilde bauen.
Da gibts aber bestimmt nen Trick ;)
Das wird total unübersichtlich wenn ich das ganze zb mit 20 Zahlen
machen will...

Achja, das ganze soll in einem Takt berechnet werden, Schleifen
scheiden also aus ;)

Jemand eine Idee oder nen Tipp ?
Ich programmiere mit Xilinx Webpack und Zielfpga ist ein Spartan3

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pseudocode !!

Vergleich <= (Var1 < Var2) & (Var3 < Var4);
case vergleich is
  when "00" => Result <= Var2 < Var4;
  when "01" => Result <= Var2 < Var3;
  when "10" => Result <= Var1 < Var4;
  when others => Result <= Var1 < Var3;
end case


Gruß Hagen

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
D'OH...
Ich denk echt immer zu kompliziert (zumindest bei vhdl ;D)
Danke!

Ich hatte vorhin mal ein
if (a<b) then
 t0 = a
else
 t0 =b
end if

if (c<d) then
 t1 = c
else
 t1 =d
end if

if (t0<t1) then
 res = t0
else
 res = t1
end if

ausprobiert.
Bin echt erstaunt gewesen wie super das der "compiler" optimiert hat
und wie wenig Ressourcen das verbrauchte :-X

War natürlich superschlecht zu lesen 8)
Deine Lösung gefällt mir sehr gut, muss ich mal mit
mehreren variablen ausprobieren.

Später sollen es 4*5=20 Variablen sein.
Wobei ich immer nur 4 mögliche ausgaben habe.
(ich will damit Farben eines Cmos Sensors in 4 Farbklassen einteilen)

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst in VHDL mit Funktionen arbeiten. Du bastelst also eine
Funktion die das Minimum von 5 Eingabewerten berechnet. Dann nur noch 4
mal nacheinander die Ausgabesignale damit befüllen. Diese Kombinatorik
ist dann im schlimmsten Falle im FPGA 4 mal implementiert, im besten
Falle mir Resourcesharing falls es optimierbar ist liegt es nur 1 mal
im FPGA.

Eines kannst du dir aber sicher sein, die heutigen VHDL Compiler
omptimieren solche Sachen besser als man vermuten würde. In einigen
Tests haben verschiedene Leute ganz verscheidene Lösungen einer Aufgabe
entwickelt, und es stellte sich schlußendlich heraus das sie alle fast
die gleichen Resourcen verbrauchten.

Gruß Hagen

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habs erstmal größtenteils ohne Funktionen als 4x4 gecodet.
Muss ich heute abend mal testen ob es funktioniert, danach schreibe ich
es als Funktionen um ;)
Ressourcenverbrauch ist momentan ~43% der slices und ~42% der 4LUTs.
(ich muss noch ein paar Abstände berechnen etc.)

Eine Frage hätte ich noch, ich musste mir eine boolean2bit function
schreiben:
tmp : bit_vector(1 downto 0);
tmp := bool2bit(a < b) & bool2bit(c < d);

Gibts da nicht sowas fertiges wie conv_std_logic_vector() ?

Ich bin echt überrascht wie gut der vhdl compiler die sachen
optimiert...
Zu beginn hatte ich die Abstandsberechnungsfunktion durch ein
return 123 ersetzt.

Da hab ich mich über die 0% der slices verbraucht Meldung gewundert,
mein Schaltplan bestand dann nur aus: Vcc|-----> output(0) g

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.