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 ganzenBeitrag "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!
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
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...
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.
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.
?!? 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
ifprescOneSec<50000-1then-- schon eine Sekunde vorbei?
?!? 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.
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;).
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
signalSW:std_logic;-- SWITCH einlesen
Deshalb solltest du das besser mal selber machen:
1
...
2
architectureBehavioralofmain_tutis
3
signalSW:std_logic;-- lokales Signal für Schalter
4
...
5
begin
6
SW<=SWITCH;-- SWITCH einlesen
7
8
processbegin
9
waituntilrising_edge(CLK);
10
if(SW='0')then
11
....
Oder, viel einfacher, den SWITCH gleich direkt verwenden:
1
...
2
architectureBehavioralofmain_tutis
3
...
4
begin
5
processbegin
6
waituntilrising_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:
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...
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.
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.
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.