Hallo!
ich muss bzw. möchte langsam vhdl und programmierbare Logic lernen.
Den allerersten Einstieg spare ich mir und komme zur Sache. Ich habe auf
der super homepage des Herrn Lothar Miller das Luxus Knightrider Licht
als Anleitung genommen und etwas modifiziert.
Den Taktteiler brauche ich für mein Evaluation Bord wohl eh, zudem
wollte ich mehrfache Instanzen davon erzeugen...etc.
Alles in allem sozusagen das Beispiel zum üben heranziehen und
dahingehend ändern, daß es in einen Kodierungsstil führt, den ich mir
später angewöhnen kann. (beruhigt angewöhnen)
Frage: wie sieht es aus? Ich habe ja quasi Millers Stil übernommen, das
sollte also passen. Der Zähler für die pwm Erzeugung: wenn man ohnehin
16 Stufen nimmt, könnte man also einen unsigned Vector überlaufen
lassen?
Das tatsächliche Dimmen der Leds: verstehe ich. Aber ich frage mich ob
und wie man es anders machen könnte. Ich befürchte ich bin gefährdet die
Übersicht zu verlieren.
2 Allgemeine Fragen nur noch. Es wird ja durch die Bank das Buch von
Schwarz empfohlen zum lernen. Aber(!) von einigen der Ratschläge und
Stile wird hier absolut abgeraten..... trotzdem kaufen? Verwirrung am
Horizont?
und dann noch die Anmeldung.
Würde ich im hinblick auf komplexere Probleme gern maschen aber ist man
dadurch spam gefährdeter? Ich bin auch im Netz recht zurückhaltend, von
daher ist das offenlegen von Namen incl email irgendwie... naja ich bin
da nicht so modern. Erfahrungen?
trotzdem kaufen?
Ich selbst hab es auch mit diesem Buch gelernt und es ist auch mein
einzigstes VHDL Buch. Ich kenne kein Besseres. Das soll aber nicht
heissen, das das Buch gut ist. An vielen stellen ist es unnötig
Kompliziert geschrieben. Auch die Ausdrucksweise ist oftmals schwer zu
verstehen und missverständlich, so als ob das Buch von 2 Professoren
geschrieben wäre :-)
Das nächste mal werde ich mich bei einem Post an den zumeist üblichen
Standard hier im Forum halten vielleicht wird dir dann auch die Frage an
sich bewusst.
Konkret zu Fehlern haste nix, Hans? :-(
Michael L. schrieb:> Konkret zu Fehlern haste nix...
Was sagt denn die Simulation?
> Ich habe ja quasi Millers Stil übernommen...
Ja, aber leider nur "quasi" und offenbar übersehen, dass meine Zähler
idR. immm mit integern aufgebaut sind. Ich würde behaupten, deine
gedimmten LEDs sind etwa 4096 mal dunkler als meine... :-o
Wie weit zählt denn dein Zähler:
1
signalpwm_gen:unsigned(15downto0);
2
:
3
pwm:processbegin
4
waituntilrising_edge(clk);
5
pwm_gen<=pwm_gen+1;
6
endprocesspwm;
Und warum habe ich selber das so gemacht:
1
signalpwmcnt:integerrange0to15:=0;-- PWM Zähler
2
:
3
process...begin
4
waituntilrising_edge(clk);
5
:
6
if(pwmcnt<15)then-- PWM für gedimmte LEDs
7
pwmcnt<=pwmcnt+1;
8
else
9
pwmcnt<=0;
10
endif;
11
endif;
12
endprocess;
Ein
>>> integer range 0 to 15;
ist ganz was anderes als ein
>>> unsigned(0 to 15)
oder ein
>>> unsigned(15 downto 0)> Es wird ja durch die Bank das Buch von Schwarz empfohlen zum lernen.> Aber(!) von einigen der Ratschläge und Stile wird hier absolut> abgeraten..... trotzdem kaufen?
Ja, es gibt m.E. kein besseres deutsches Buch zum Thema VHDL Synthese
Der Post der mich bischen zickig hat werden lassen, regte mich auf, weil
ich das nicht leiden kann. Entweder posten, weil man was dazu sagen kann
oder einfach ignorieren.
Bin selbe in einem anderen Forum recht aktiv und handhabe das immer so.
(es gibt auch Dinge wo ich mich auskenne, das Forum hat nichts mit
Elektronik oder gar vhdl zu tun g)
Mit deinem Post lässt sich im Gegensatz dazu auch was anfangen. Na klar
(!!) wenn ich es mit unsigned Vektor Versuche, müsste ich den auch nur 4
bits lang machen.
Dass integer anzuraten ist hatte ich grundsätzlich auch vernommen, aus
Gründen des Ausprobierens habe ich unsigned gewählt. Ok der ist viel zu
lang.
Die Simulation zeigt mit keine pwm. Ok, das mag an der zu langen Zeit
liegen, die ich erreichen würde, das probier ich morgen aus!
Mir kam das shiften der leds auch seltsam vor, aber ich bin bis Morgen
nicht zu Hause und kann nachsehen.
Vielleicht habe ich auch ein falsches testprogramm? Außer einem Takt wie
clk <= not clk after 10 ns muss da eigentlich gar nichts rein? Es gibt
ja gar keine relevanten Signale als Stimuli?
vielen Dank an Lothar, der sicher auch einen kontraproduktiveren Post in
den Fingern hatte und es doch schafft, dies zu umgehen.
Michael L. schrieb:> und dann noch die Anmeldung.> Würde ich im hinblick auf komplexere Probleme gern maschen aber ist man> dadurch spam gefährdeter? Ich bin auch im Netz recht zurückhaltend, von> daher ist das offenlegen von Namen incl email irgendwie... naja ich bin> da nicht so modern. Erfahrungen?
Für Registrierungen in Foren aller Art legt man sich einfach ne
zusätzliche Freemail-Adresse zu, die man dann an sein huaptpostfach
weiterleitet. Da bei µc.net niemand die Adresse sehen kann, habe ich da
aber wenig Bedenken wegen Spamgefahr. Was man nie machen sollte ist die
Adresse als Klartext in einen Betrag zu schreiben (und das machen ja
meist nur die unregistrierten Nutzer, da man sie nicht per PN erreichen
kann).
Martin schrieb:> Habe Ihr Euch schon mal in Hardware angeschaut wie tödlich so ein> kleiner Vergleich ist. Noch besser ist ein kleiner = Vergleich.
Habe ich. Ist halb so wild... ;-)
Das haben die Tools soweit ganz gut im Griff.
Denn wenn du das hier meinst:
1
if(pwmcnt<15)then-- PWM für gedimmte LEDs
2
pwmcnt<=pwmcnt+1;
3
else
4
pwmcnt<=0;
5
endif;
Hier macht die Toolchain einen ordinären 4-Bit-Zähler draus. Die
erkennt, dass der Überlauf geschenkt ist...
Wichtiger zu beachten: variable Zähler beginnen bei 0 und zäahlen zum
Endwert hoch. Wenn der erreicht ist, geht es wieder bei 0 los.
Es funktioniert. Danke an alle und gelernt habe ich auch noch was
1
shift:processbegin
2
waituntilrising_edge(clk);
3
if(clkshift='1')then
4
if(step<13)then
5
step<=step+1;
6
else
7
step<=0;
8
endif;
9
endif;
10
leds_1<=ledrom(step);
11
leds_2<=leds_1;
12
endprocessshift;
war der zweite Hauptfehler. Das schieben der alten Zustände darf
natürlich nur bei clkshift passieren, sonst sind ja in Nullkomma nix
alle auf leds_1 Wert.
Die Frage, ob bei integer Verwendung und 16 Zählstufen ein 4 bit Vektor
rauskommt, hat sich erledigt :-)