Wie erstelle ich ein Lauflicht in VHDL am besten/einfachsten/sinngemässesten? Die Hardware kann ich mir vorstellen (Counter mit D-FlipFlops). Doch um das in VHDL umzusetzen, fehlt mir irgendwie die nötige Kenntnis. Dieses Lauflicht soll dann mal immer laufen. Als Chip habe ich einen XC2C256 und einen 40MHz Clock. Ich möchte keine fixfertige Lösung, eher einen Tipp. Gruss
Gast
#787949
Verwende ein Schieberegister. Jedes Bit steht für eine LED. So kannst du ein beliebiges Muster durchschieben. Getaktet wird das Schieberegister dann von einem Taktteiler, der die System-Clock auf einen vernünftigen Wert hinunterteilt.
Gast
#787950
Das Tutorial/Example zum Webpack? (JohnsonCounter) Rick
>Verwende ein Schieberegister. Jedes Bit steht für eine LED. So kannst du >ein beliebiges Muster durchschieben. Getaktet wird das Schieberegister >dann von einem Taktteiler, der die System-Clock auf einen vernünftigen >Wert hinunterteilt. So mit dem Schieberegister hab ichs mir überlegt. Nur weiss ich nicht wie programmieren. Den Clock möchte ich nicht mehr teilen (also volle Kanne :)). CLK = 40MHz. Damit das Lauflicht wieder von vorne zu zählen beginnt, muss wohl noch ein Zähler hin. >Das Tutorial/Example zum Webpack? (JohnsonCounter) sorry konnte ich leider nicht finden...ich suchte unter: VHDL\Synthesis Constructs\Cidung Examples\
@ Dave E. (eschlair) >Den Clock möchte ich nicht mehr teilen (also volle Kanne :)). CLK = >40MHz. Und welches Alien soll dann noch ein Lauflicht sehen? Taktung FPGA/CPLD Wobei in diesem Beispiel ein Derived Clock möglich wäre. >Damit das Lauflicht wieder von vorne zu zählen beginnt, muss wohl noch >ein Zähler hin. Richtig. Etwa so.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
MFG Falk
Gast
#788370
Alternativ: Zähler um den Takt runterzuteilen, und dann ein Ring-Schieberegister.
Aber wie geht so ein Ringschieberegister (nur alternativ - vielen Dank an Falk :)). >Und welches Alien soll dann noch ein Lauflicht sehen? :)) Also ein 'Lauflicht' war nicht korrekt von mir. Es 'läuft', aber ohne Licht :). Ich möchte nur mal wissen, ob ein CPLD 40MHz schalten kann. Und wie dann so die Flanken aussehen... Falls das Resultat nicht befriedigend ist, könnte ich den Takt teilen (hmm wie ging das schon wieder?) oder hätte sonst noch 3MHz aufm Board. Hab kurzerhand beschlossen, einen Print mit D-Sub und Decoder mit 7-Segment zu löten - mit Schalter. Könnte dann externen Print geben; mit Würfelfunktion. Dank dem Decoder wäre dann nur noch ein Counter bis "0111" nötig. Ein CPLD für einen Würfel...naja. dient ja nur Experimentierzwecken.
Gast
#788792
Beispiel Ringschieberegister für ein Lauflicht mit 10 LEDs:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
Gast
#788793
Das Clock-Runterteilen überlasse ich dir mal als Übung. Tipp: Ein weiteres "if", welches den Schiebeblock nur dann ausführt, wenn der Taktteiler(-Zähler) einmal durch ist. Das entspricht einem Clock-Enable (= sauberer Taktteiler statt Logik im Clock-Pfad).
Hier ist auch noch ein Beispiel. Hab das gestern mal auf mein Spartan3E board geladen und funktioniert super: http://www.obviousobscurity.org/?p=50 Der wesentliche code ist hier:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
Der code erlaubt das Einschalten, Umschalten der Richtung und der Geschwindigkeit mit Hilfe mit Hilfe von switches (sw). Rince
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.