Ich habe ein Problem mit VHDL und einem FPGA. Ich will ein PWM erzeugen, bei welchem ich mit 4 Schaltern die Pulsdauer änern kann. Das PWM erzeugen funzt, wenn ich nur 3 Schalter benutze/programmiere tut es auch(Bild1), aber sobald ich den 4ten hinzufüge -> seht selbst (Bild2/3) (die Doppelbalken im Bild3 kommen vom Oszi, ist nicht mehr das beste)
Habt Ihr eine Ahnung warum? Auf mich macht es den Eindruck, das ich eine Varaible nicht mehr als 3mal ändern kann. Kann das sein???
ja wie? hat hier keine eine idee woran das liegen könnte? es liegt aber nicht an der hardware, denn wenn ich z.b. den dip4 wieder einkommentiere und dafür den 3er raus mache tut es auch
greez
Re: mehr als 3x Variable ändern
Hallo Nobbe,
so direkt habe ich keinen Fehler in Deinem Code entdeckt. Ich würde zwar eigentlich keine Integer-Werte verwenden, sondern std_logic_vector bevorzugen, oder zumindetens die Integer begrenzen (variable dip_int : interger range 15 downto 0;), aber sonst ...???
Was sagt denn die Simulation? Mal die Synthese-, Place/Route-Fehlermeldungen angeschaut?
Gruß Ines
Re: mehr als 3x Variable ändern
Hallo! Das ist ja grad das komschie, im Simulator tut das wunderbar... Aber wie würde das mit dem "std_logic_vector" aussehen? Kann mir das grad nicht vorstellen.
greez
Re: mehr als 3x Variable ändern
Hallo Nobbe,
hab dir mal das Ganze auf Std_logic umgestellt. Leider habe ich hier keine Hardware zum Austesten. Die Synthese und Simulation sieht gut aus.
und was muss ich mir genau unter einem "std_logic_vector" vorstellen? ist das eine art array?
hmmm... ich verstehe den folgenden zeile nicht ganz, kannst du die mir erklären? "pulsdauer := 6 * to_integer(unsigned(dip_int));"
hoffe die fragen sind nicht zu "dumm"
greez
Re: mehr als 3x Variable ändern
Hallo Nobbe,
ich habe die Schaltung heute in Hardware gegossen. Funktioniert aber bei mir auch nicht. Ich denke, wir müssen deine PWM etwas umschreiben.
Zu deiner ersten Frage: std_logic_vector ist ein Bus der sich aus einzelnen std_logic Signalen zusammensetzt, dabei gibt man die Busbreite in der Klammer an. Die einzelnen Bussignale kann man dann wieder durch Angabe des entsprechenden Bits in der Klammer hinter dem Bus-Namen angeben. Als Beispiel nehmen wir mal einen 16Bit Datenbus. Dem gibst du den Namen "Data" und definierst ihn als std_logic_vector(15 downto 0). Wenn du nun z.B. Bit 0 einzeln ansprechen willst, schreibst du "Data(0)".
Zu deiner zweiten Frage: Wenn man eine integer Zahl ( in diesem Fall 6) mit einem Wert vom Typ std_logic_vector multiplizieren will, muss man den Typ erst konvertieren. Std_logic kann ja auch "U,Z oder X" sein. Diese Umwandlung macht man mit der angegebenen Formel (to_integer(unsigned(std_logic_vector))). Damit das funktioniert muss man die library IEEE.numeric_std.all einbinden.
Ich hoffe, das beantwortet deine Fragen
Gruß
Bernd
Re: mehr als 3x Variable ändern
Hallo Nobbe,
auf Grund deiner Fragen habe ich dein File noch einmal etwas umgeschrieben. Jetzt funktioniert es auch in Hardware.
ok, das muss ich dann mal heute abend ausprobieren, auf arbeit habe ich kein board dabei
aber das mit dem "to_integer(unsigned(Dip))" habe ich noch nie gerhört, steht auch nicht in der syntax.pdf die ich habe. liegt wahrscheinlich daran, das es in der "IEEE.numeric_std.ALL;" enthalten ist. gibts draüber auch eine syntax-beschreibung?
und soweit ich den code verstanden habe muss ich jetzt in der *.ucf datei dann stat "dip1" z.B. "dip(0)" schreiben oder?
aber was ich nicht verstehe warum du mir auch die LED's in ein vector gemacht hast.
greez
Re: mehr als 3x Variable ändern
hmm... hab den code mal ausprobiert, es tut zwar jetzt, habe aber einen dc-offset, und mein fpg wird sau heiß...naja ich glaube da stimmt was noch net, habe das mit dem vecotr aber jetzt begriffen und werd bei gelgenheit das mal versuchen selber zu schreiben... aber das mit dem umformen...muss da wohl mal in google schauen, obs da ne gute erklärung gibt