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
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
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)
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.