VHDL-Forum - Anfänger

mehr als 3x Variable ändern

 mehr als 3x Variable ändern

Hallo Leute!
im Vorraus : Bin nen Anfänger.

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???

Bilder und Code sind in der Zip

greez Nobbe





pwm_prob.zip (134 kByte)
anzeigen - speichern
Datei wurde schon 377-mal heruntergeladen.

Re: mehr als 3x Variable ändern

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.

Gruß

Bernd





main.vhd (2 kByte)
anzeigen - speichern
Datei wurde schon 332-mal heruntergeladen.

Re: mehr als 3x Variable ändern

hmm..jetzt tuts gar nicht mehr

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.

Gruß

Bernd





main.vhd (2 kByte)
anzeigen - speichern
Datei wurde schon 408-mal heruntergeladen.

Re: mehr als 3x Variable ändern

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

greez