Hallo zusammen stehe gerade vor einem kleinen Problem umd finde nichts gescheites im I-net... hoffe mir kann einer weiter helfen.. ich will den Wert 3.000.000 mit einem Eingangswert (Vector 25 bit groß) vergleichen hab geplant das so zu machen MAX_VAL <= conv_std_logic_vector(3000000,25); habe das im Process drin stehen, aber weil ich das im process drin stehen habe wird der Wert erst mit einem Takt verzögert benutzt.. deswegen wollte ich das jetzt als Signal definieren signal MAX_VAL : integer range 0 to 16777215 := 3000000; das ist aber jetzt ein integer und kann dem Ausgangsvector nicht zugewiesen werden wie löse ich das? wie kann ich die 3.000.000 ine einen vector wandeln? vielen dank shconmal für die hilfe..
Schreib
1 | MAX_VAL <= conv_std_logic_vector(3000000,25); |
doch einfach außerhalb des Process-Blocks. Ist ja sowieso ne Konstante. Hat also nichts im Prozeß zu suchen.
bin vor 1 min selber drauf gekommen :D aber trotzdem danke für die schnelle antwort..
Lars schrieb: > habe das im Process drin stehen, aber weil ich das im process drin > stehen habe wird der Wert erst mit einem Takt verzögert benutzt.. Das kommt nicht einen Takt verzögert, weil du es in einem Prozess stehen hast, sondern weil dieser Prozess getaktet ist. Sowas nennt sich Latency... > hoffe mir kann einer weiter helfen.. Zeig doch mal deinen Code (als Anhang mit Endung .vhd). EDIT: > conv_std_logic_vector Nimm besser gleich die numeric_std, nicht die alten Synopsys-Libs...
Hab jetzt doch noch ein Problem was den counter angeht ich möchte ihn mit 10.000.000 initialisieren und immer wieder bei abbruch des counter auf die 10.000.000 zurück setzen so initialisiere ich ihn ja mit 0 ich könnte ihn natürlich mit "00..." initialisieren signal count : std_logic_vector (24 downto 0) := (others => '0'); es gibt aber auch die möglichkeit einem vector so einen wert zu zuweisen MAX_VAL <= conv_std_logic_vector(10000000,25); funktioniert das wenn ich das wenn ich das wie folgt mache? signal MAX_VAL : std_logic_vector (24 downto 0) := conv_std_logic_vector(16000000,25); oder macht man das so nicht? und @ lothar miller was genau meinst du mit numeric_std?
Lars schrieb: > @ lothar miller was genau meinst du mit numeric_std? Such mal so: http://www.mikrocontroller.net/search?query=numeric_std+std_logic_arith&forums[]=9&max_age=-&sort_by_date=1 Und du findest: Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete" Beitrag "Re: std_logic_vector auf integer umwandeln" Beitrag "Re: Ganze Zahl in Ziffern zerlegen" Und hier eine Übersicht: http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html > funktioniert das wenn ich das wenn ich das wie folgt mache? > signal MAX_VAL : std_logic_vector (24 downto 0) := > conv_std_logic_vector(16000000,25); Eingentlich ja, aber es kommt darauf an, ob MAX_VAL überhaupt ein speicherndes Signal ist (vermutlich schon, denn den max Wert soll ja festgahlten werden). Aber wie gesagt, ich würde das mit der numeric_std so schreiben: signal MAX_VAL : std_logic_vector (24 downto 0) := std_logic_vector(to_unsigned(16000000,25)); Denn dann weiß ich sicher, dass das ganze ein unsigned Wert ist, und muß nicht vertrauen, dass irgendwo die use IEEE.STD_LOGIC_UNSIGNED.ALL; eingebunden wurde... BTW: > ich möchte ihn mit 10.000.000 initialisieren > : > funktioniert das wenn ich das wenn ich das wie folgt mache? > signal MAX_VAL : std_logic_vector (24 downto 0) := > conv_std_logic_vector(16000000,25); Nein, denn 16000000 /= 10000000 :-o
Lothar Miller schrieb: > Und hier eine Übersicht: > http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html ... die Diagramme habe ich mir ausgedruckt und einlaminiert. Sowie die "VHDL Quick Reference Card". Liegen immer am Arbeitstisch. Danke dir, Lothar!
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.