Hallo, ich habe folgendes Problem: Ich benutze für den Versuch ein Digilent Basys2 Boards und die Xilinx Design Suite und programmiere in schematics. Ich würde gerne eine Ampelsteuerung entwickeln, welche aus einer Ampel für Autos und einer Bedarfsampel für Fußgänger besteht. Sprich die Ampel für die Autos ist dauerhaft auf grün und die Fussgängerampel kann bei Bedarf, jedoch nur gedrückt werden wenn die Ampel der Autofahrer auf grün steht. Ich habe hierfür einen 4-bit Johnson Zähler verwendet und habe die jeweils 4 Ausgänge mittels verschiedener ANDs auf meine 8 Zustände verbunden. Der Zähler hat einen CLK Eingang welcher auch von der CLK des Boards beschaltet wird. Und die jeweiligen AND Ausgänge hab ich mit I/Os verbunden und diese programmiert. Hier komm ich nun zu meinen Problemen: -Wenn ich den Zustand 0, welcher mein Ruhezustand ist mit dem Taster zusammen per AND verbinde und auf den Schalter der Fussgängerampel lege meckert Xilinx er kann keinen out- und input zusammenschalten. -Wenn ich mittels Befehl: NET "" LOC = ""; eine meiner LEDs definiere kann ich diese nur einmal definieren obwohl ich diese bei mehreren Zuständen benötige. da meckert Xilinx ebenso Was kann ich also tun? Bin ein wenig verzweifelt ...
Sebbowicz schrieb: > programmiere in schematics. Warum? Wer zwingt dich? > meckert Xilinx er kann keinen out- und input zusammenschalten. Mit welchen Worten genau? > -Wenn ich mittels Befehl: NET "" LOC = ""; eine meiner LEDs definiere > kann ich diese nur einmal definieren obwohl ich diese bei mehreren > Zuständen benötige. da meckert Xilinx ebenso Logisch kannst du einem einzigen Pin nur ein einziges Signal zuordnen. Oder was willst du damit erreichen?
Sebbowicz schrieb: > Hallo, > > ich habe folgendes Problem: > Ich benutze für den Versuch ein Digilent Basys2 Boards und die Xilinx > Design Suite und programmiere in schematics. Schematix nix gut, du solltest VHDL oder Verilog lernen. Hier verwendet niemand mehr schematics, und höchstwahrscheinlich hat auch niemand Lust, sich durch die Logik durchzubeissen. > Ich würde gerne eine Ampelsteuerung entwickeln, welche aus einer Ampel > für Autos und einer Bedarfsampel für Fußgänger besteht. Sprich die Ampel > für die Autos ist dauerhaft auf grün und die Fussgängerampel kann bei > Bedarf, jedoch nur gedrückt werden wenn die Ampel der Autofahrer auf > grün steht. Ist ja die klssische Hausaufgabe, aber für HDL. > Ich habe hierfür einen 4-bit Johnson Zähler verwendet und habe die > jeweils 4 Ausgänge mittels verschiedener ANDs auf meine 8 Zustände > verbunden. Der Zähler hat einen CLK Eingang welcher auch von der CLK des > Boards beschaltet wird. Und die jeweiligen AND Ausgänge hab ich mit I/Os > verbunden und diese programmiert. > Hier komm ich nun zu meinen Problemen: > > -Wenn ich den Zustand 0, welcher mein Ruhezustand ist mit dem Taster > zusammen per AND verbinde und auf den Schalter der Fussgängerampel lege > meckert Xilinx er kann keinen out- und input zusammenschalten. > -Wenn ich mittels Befehl: NET "" LOC = ""; eine meiner LEDs definiere ???, Soetwas definiert kein Signal, sondern weisst das Signal an einen bestimmten Pin zu. > kann ich diese nur einmal definieren obwohl ich diese bei mehreren > Zuständen benötige. da meckert Xilinx ebenso > > Was kann ich also tun? VHDL oder Verilog lernen ... > Bin ein wenig verzweifelt ... Nicht aufgeben, wird schon...
Mein Problem ist das es eine Projektarbeit für ein Labor werden soll und dieses eben leider in schematics sein muss, da VHDL oder verilog für 3 Stunden zu viel Aufwand darstellen bzw einiges an Vorarbeit mit sich bringt ... Bei einer Logosteuerung kann ich aber auch ein und Ausgang zusammen schalten ... Also euer Tipp wäre VHDL bzw Verilog? Wie komplex wäre da denn eine Ampelsteuerung und was müsste ich in etwa an Zeit einplanen um eine Fertige Programmierung zu haben? Danke im vorraus!
Sebbowicz schrieb: > Wie komplex wäre da denn eine Ampelsteuerung Halb so schlimm: Beitrag "Re: Ampelsteuerung" > was müsste ich in etwa an Zeit einplanen um eine Fertige Programmierung > zu haben? Nachdem du VHDL noch lernen musst, kann das schon mal ein paar Abende kosten. Stell dich auf gute 2 Wochen ein, Abend für Abend. Ich habe dafür 15 Minuten gebraucht... Zum Thema "Schaltplaneingabe" lies mal den ganzen Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)" durch. Sebbowicz schrieb: > Mein Problem ist das es eine Projektarbeit für ein Labor werden soll und > dieses eben leider in schematics sein muss, da VHDL oder verilog für 3 > Stunden zu viel Aufwand darstellen bzw einiges an Vorarbeit mit sich > bringt Aber es ist m.E. Blödsinn, das Thema "FPGA" in 3 Stunden reinzupacken. Und es ist noch mehr Blödsinn, das anhand von Schaltplaneingabe zu machen!
:
Bearbeitet durch Moderator
Hmm..., hier sind verschiedene Ampelsteuerungen sehr gut beschrieben in VHDL. Da sieht man auch wie komplex die Geschichte ist. http://astro.uni-tuebingen.de/groups/electronics/VHDL.pdf Gruss
Ich habe mal die Kreuzungsampeldemo aus Kapitel 5 umgesetzt für den VGA-Monitor. Dann braucht man für die Demo keine Platine löten. 1 Autoampel stellt 2 gegenüberliegende dar die zusammengeschaltet sind. 1 Fussgängerampel stellt die 4 Ampeln dar für die 4 Fußgängerüberwege. Umgesetzt für DE0/DE1. Gruss
Gibt es literaturtechnisch denn ein "Einsteigerwerk" oder Ähnliches was zu empfehlen wäre bzw. einen gut zu solchen Aufgaben hinführt?
Probiers mal mit Reichardt&Schwarz "VHDL Synthese". peter schrieb: > Ich habe mal die Kreuzungsampeldemo aus Kapitel 5 umgesetzt Ja und? Dein Post wäre bestenfalls dann sinnvoll, wenn du deine VHDL Beschreibung mit angehängt hättest. So ist es nur billige Protzerei und Ego-Politur...
:
Bearbeitet durch Moderator
Ein einziges Einstiegswerk gibts wahrscheinlich nicht, es überschneiden sich ja verschiedene Bereiche wie z.B. Digital-Design und die Sprache VHDL in seiner gesamten Komplexität (zum Designen und Simulieren). Für HDL gibts wie schon erwähnt Reichardt&Schwarz. Für Digital-Design gibts sehr viele Bücher, ich habe mal eins geschenkt bekommen: Wakerly "Digital Design". ist nicht sehr anspruchsvoll aber sehr umfangreich und bei EBay&Co für wenige Euros erhältlich. Dazu noch die Datasheets deines Board-/FPGA-Hersteller und du bist rundumversorgt.
vga_ampel , beinhaltet vag_text, weil das mit zum vga_modul gehört.
peter schrieb: > Da sieht man auch wie komplex die Geschichte ist. Strukturelle Beschreibung und Zerlegung des Designs in Mikro-Subkomponenten. Das ist VHDL Stil aus dem letzten Jahrtausend (passt ja auch grob zum Jahr der Veröffentlichung), so bekam VHDL den Ruf "umständlich und geschwätzig" zu sein... Im Anhang mal die Ampel in Verhaltensbeschreibung mit zwei Arrays als Speicher für die Lichtfolge und die Dauer.
Aber Lothar, so schnell kann doch keiner anfahren (zumindest nicht ohne Gummistreifen auf der Straße). Grünphase nur 3µs... :-)))
?!? schrieb: > Grünphase nur 3µs... :-))) Naja, er hat schon 1000 mal mehr Zeit. Und wenn das immer noch nicht reicht, ändert er den Wert dort auf 50000000:
1 | if prescOneSec<50000-1 then -- schon eine Sekunde vorbei? |
Oder er baut einen 50kHz Quarz ein... ;-)
:
Bearbeitet durch Moderator
?!? schrieb: > War doch bloss ein Scherz... Hatte ich auch so aufgefasst ;-) Und ausserdem kann so ein kleiner "Fehler" auch mal zum Mitdenken beim Kopierer anregen...
Lothar Miller schrieb: >Strukturelle Beschreibung und Zerlegung des Designs in >Mikro-Subkomponenten. Das ist VHDL Stil aus dem letzten Jahrtausend >(passt ja auch grob zum Jahr der Veröffentlichung), so bekam VHDL den >Ruf "umständlich und geschwätzig" zu sein... Naja, Verilog basiert ja mehr oder weniger auf den selben Konzepten wie VHDL, insbesondere "Signal" und "Komponente", also auch der Zerlegung eines Designs in Subkomponenten. Also wäre Verilog auch eine "geschwätzige" Sprache. IHMO basiert "geschwätzig" aber auf der Syntax von VHDL, die bei Verilog kompakter gehalten ist. Und mit "Stil aus dem letzten Jahrtausend" meinst du doch hoffentlich nicht "überaltert", denn das Zerlegen von Problemen in Teilprobleme wirds immer geben und ist idR auch oft der beste Ansatz (ausser der übertriebenen Kleinst-Zerlegung).
Ich habe deine neue Ampelschaltung bei mir in VGA reingebracht, 8 Auto-Ampel und 8 Fussgängerampel auf dem Screen. Ist eine Kreuzung , auf jeder Fahrseite eine Ampel sowie beim Fussgängerüberweg. Jetzt bringe ich da noch die Fussgängerbedarfsschaltung unter. Gruss
Sigi schrieb: > Und mit "Stil aus dem letzten Jahrtausend" meinst du doch hoffentlich > nicht "überaltert", denn das Zerlegen von Problemen in Teilprobleme > wirds immer geben und ist idR auch oft der beste Ansatz (ausser der > übertriebenen Kleinst-Zerlegung). Nein, damit meine ich die Strukturbeschreibung bis runter zu einzelnen Flipflops bzw. Gattern. Dass ein Design in einzelne Komponenten aufgeteilt (oder besser aus einzelnen Komponenten zusammengesetzt) wird, das wird ja beim Schaltungsdesign allgemein so gemacht: Versorgung, Prozessor, EA, Schnittstellen, Speicher... Und weil VHDL ja eine Schaltungsbeschreibungssprache ist, ist auch dort eine Aufteilung sinnvoll. > IHMO basiert "geschwätzig" aber auf der > Syntax von VHDL, die bei Verilog kompakter gehalten ist. Verilog ist m.E. deshalb kompakter, weil dort viele Dinge implizit angenommen und vorausgesetzt werden.
:
Bearbeitet durch Moderator
Sebbowicz schrieb: > -Wenn ich den Zustand 0, welcher mein Ruhezustand ist mit dem Taster > zusammen per AND verbinde und auf den Schalter der Fussgängerampel lege > meckert Xilinx er kann keinen out- und input zusammenschalten. Womit Schwester ISE ja auch völlig Recht hat. Aber das ist kein Problem von HDL versus Schematics, sondern ein Denkfehler. Du solltest allerdings lieber beschreiben, was du tatsächlich meinst, denn unter "Wenn ich den Zustand 0, welcher mein Ruhezustand ist mit dem Taster zusammen per AND verbinde" kann man sich alles Mögliche vorstellen, eine exakte Beschreibung dessen, was du tun willst, ist es nicht. Also: du kannst den Ausgang eines Gatters (AND, OR, FF usw.) nach deinem Belieben an den Eingang eines anderen Gattes führen. Das geht immer. ABER: du hast die Buffer vergessen. Wenn du sowas nicht zeichnest, dann versucht die ISE, sich selbige dazuzudenken. Dehalb werden deine Signale "Taster", "Clk", "Zustand_4" und so weiter automatisch zu I/O-Signalen und die sind NICHT geeignet, an anderweitige Logik geführt zu werden. Physikalisch sind das dedizierte I/O-Treiber, die die Verbindung zwischen Pin und Logik-Array herstellen. Korrekt wäre es so: (pin)--[IBUF]-*---[Gatter]---[OBUF]---(pin) |---[anderes Gatter]---... (hoffentlich kann man's erkennen) So, was du machen kannst: 1. einfach mit korrekten IBUF's und OBUF's zeichnen 2. dich von Lothar und den anderen zu einer HDL überreden lassen. (1. geht viel fixer) und nochwas: wenn du eine LED bei mehreren Zuständen eingeschaltet haben willst, dann mußt du das eben auch in einer passenden Verknüpfung (OR gatter) tun, bevor du das Signal an einen OBUF und von dort aus an einen Outputmarker (beim Toplevel-Schematic ist das der Statthalter für dein Pin) führst. und noch etwas: Beiträge wie "Schematix nix gut,...Hier verwendet niemand mehr Schematics" finde ich an dieser Stelle ebenfalls NIX GUT, weil der TO dediziert genau danach gefragt hat. Wenn man mangels eigener Übung kein Schematics kann und deshalb auch darin nicht aussagefähig ist, wäre es besser, freiweg anstelle von nixgut zu sagen "kenn ich nicht, sorry." W.S.
W.S. schrieb: > und noch etwas: > Beiträge wie "Schematix nix gut,...Hier verwendet niemand mehr > Schematics" finde ich an dieser Stelle ebenfalls NIX GUT, weil der TO > dediziert genau danach gefragt hat Ich finde allerdings die Idee seltsam, jemanden, der laut eigener Aussage keine Ahnung von der Sache hat, auf eigenen Wunsch ins Verderben rennen zu lassen. Man darf einem solchen erklärten Anfänger durchaus Alternativen vorstellen. Wenn er danach weiterhin Schaltpläne zusammenclickt und damit ans Ziel kommt, dann ist das ja auch schon was.
So also danke schonmal für alle Posts hier. Die Bedarfsfußgängerampel läuft nun und auch Programm zwei mit einer Kreuzung ist kein Problem. Allerdings sollen wir nun zwischen beiden Programmen per Schalter switchen können. Nun ist meine Frage wie ich das mache? Hab verschiedenes ausprobiert und entweder sagt er mit der vbuf ist falsch oder es ist nicht zugewiesen. Habe eine ganz normale Zuweisung mit 0 und 1 gemacht. HAbe oben mal den Code in Form von .vhd Datei angehängt. Danke für die Hilfe!
Das sieht auf den ersten Blick so falsch nicht aus. Du solltest dich noch entscheiden, ob dein "Umschalter" nun "SW" oder "SWITCH" heißen soll. Ersteres fragst Du ab, letzteres würde (wahrscheinlich) etwas bewirken (wenn es denn mit irgendwas verbunden wäre).
Wie gesagt beide Programme einzeln gehen ja. Ich weiß nur nicht wie ich es unsetzen muss. Das es an dem SWITCH bzw SW liegt weiß ich, sber nicht wie ich es beheben soll ;)
Sebbowiczs schrieb: > weiß ich, aber nicht wie ich es beheben soll ;) Einfach ausführen was Markus gesagt hat: Du hast einen input SWITCH und ein lokales Signal SW auf welches Du überprüfst (welches aber nie zugewiesen wird). Entweder prüfst Du gleich auf SWITCH oder Du weist das Signal zu (SW <= SWITCH;).
:
Bearbeitet durch User
Sebbowiczs schrieb: > beide Programme Es sind keine "Programme" sondern "Beschreibungen". Sonst würde VHDL nicht VHDL heißen, sondern VHPL... > Das es an dem SWITCH bzw SW liegt weiß ich, sber nicht wie ich es > beheben soll ;) Der Synthesizer kann keine Kommentare auswerten:
1 | signal SW : std_logic; -- SWITCH einlesen |
Deshalb solltest du das besser mal selber machen:
1 | ...
|
2 | architecture Behavioral of main_tut is |
3 | signal SW : std_logic; -- lokales Signal für Schalter |
4 | ...
|
5 | begin
|
6 | SW <= SWITCH; -- SWITCH einlesen |
7 | |
8 | process begin |
9 | wait until rising_edge(CLK); |
10 | if (SW = '0') then |
11 | ....
|
Oder, viel einfacher, den SWITCH gleich direkt verwenden:
1 | ...
|
2 | architecture Behavioral of main_tut is |
3 | ...
|
4 | begin
|
5 | process begin |
6 | wait until rising_edge(CLK); |
7 | if (SWITCH = '0') then |
8 | ....
|
War das jetzt so schwierig? BTW1: Du hast hier Glück, dass der SWITCH quasistatisch ist. Denn sonst müsstest du ihn unbedingt einsynchronisieren! BTW2:
1 | use IEEE.STD_LOGIC_ARITH.ALL; |
2 | use IEEE.STD_LOGIC_UNSIGNED.ALL; |
Der Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete" hat jetzt schon fast 5 Jahre auf dem Buckel. Er gilt aber immer noch...
:
Bearbeitet durch Moderator
Ok der SWITCH funktioniert jetzt! Er zeigt mir jetzt allerdings noch folgenden Fehler bei STEPP an. Ist die Syntax STEPP <= 0; nicht korrekt?
Sebbowicz schrieb: > Er zeigt mir jetzt allerdings noch folgenden Fehler bei STEPP an Da ist kein Fehler zu sehen! Du hast das falsche Bild gepostet. Das hier...
1 | if(STEPCLKK /= 0) then |
2 | STEPCLKK <= STEPCLKK - 1; |
3 | end if; |
4 | |
5 | if (STEPCLKK = 0) then |
6 | ...
|
7 | end if; |
... ginge so kompakter:
1 | if(STEPCLKK /= 0) then |
2 | STEPCLKK <= STEPCLKK - 1; |
3 | else
|
4 | ...
|
5 | end if; |
:
Bearbeitet durch Moderator
Oh ja sorry :/ er zeigt mir als Fehler an Stepp is not used and unsigned.
Sebbowiczs schrieb: > er zeigt mir als Fehler an Stepp is not used and > unsigned. Das ist kein Fehler, sondern nur eine Warnung. Duke
Duke Scarring schrieb: > Sebbowiczs schrieb: >> er zeigt mir als Fehler an Stepp is not used and >> unsigned. > Das ist kein Fehler, sondern nur eine Warnung. > > Duke Ist eine berechtigte Warnung. if Schachtelung ist falsch, die Abfrage if ( SW = '1' ) ist deswegen immer false, d.h. alles zu STEPP etc wird wegeoptimiert.
Irgendwie doppelt gemoppelt:
1 | if (STEPCLKK /= 0) then |
2 | STEPCLKK <= STEPCLKK - 1; |
3 | end if; |
4 | |
5 | if (SW = '0') then |
6 | ...
|
7 | |
8 | if (SW = '1') then |
9 | if(STEPCLKK /= 0) then |
10 | STEPCLKK <= STEPCLKK - 1; |
11 | end if; |
12 | |
13 | if (STEPCLKK = 0) then |
14 | ...
|
Aber Glück gehabt: STEPCLKK ist ein Signal und übernimmt den neuen Wert
erst am Ende des Prozesses...
> Und wie kann ich das Problem lösen?
Zu deinem eigentlichen "Fehler": kontrollier mal, ob alle deine if und
end-if zusammenpassen. Und wenn du das korrigierst, dann funktioniert es
auf einmal...
Aber trotzdem ist dieser Beschreibungsstil Murks. Es reicht eigentlich
eine einzige FSM, die die Lampen einschaltet. Und dann wird abhängig vom
Schalter in dieser FSM herumgesprungen.
:
Bearbeitet durch Moderator
Sebbowiczs schrieb: > Und wie kann ich das Problem lösen? Indem du einen anständigen Editor benutzt, der VHDL kennt und die Struktur anzeigt. So sieht es derzeit aus:
1 | if (SW = '0') then |
2 | ... |
3 | |
4 | if (SW = '1') then |
5 | .... |
6 | end if |
7 | end if |
Preisfrage, was ist falsch? Wenn du es jetzt auch nicht siehst, solltest du auf Bäcker umsatteln.
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.