Moin, ich versuche es erstmal ohne angehängten code. Kann sich jemand vorstellen oder weiß jemand von euch, warum der Befehl << when ohters => A = 0; >> innerhalb einer case anweisung nicht synthetisiert wird(A ist die zustandsvariable/integer)? diesen fall habe ich gerade und kann mir nicht erklären, warum das so ist bzw. finde den fehler nicht. habe ich vorher auch noch nie gehabt obwohl ich diese anweisung nicht zum ersten mal verwende ??? gruß sebastian
...nee, zu voreilig, hatte ich schon so, war nur ein schreibfehler im Forum ...
...nein, mein synthesewerkzeug streikt weiter. der befehl funktoniert nicht in verbindung mit einem integersignal.
..dann liegt es wahrscheinlich daran, dass A von 0 bis 12 deklariert ist und alle Fälle mit "case n" (n von 0 bis 12) untersucht werden und in solchem Fall kein "when others" benötigt wird... Welche Fehlermeldung erzeugt denn das Synthesewerkzeug?
Du hast dem Compiler gesagt, daß die Variable A von 0 bis 12 geht. Im Case Statement sind damit alle Fälle abgedeckt, für die others clause bleibt nichts mehr übrig. Du hattest wahrscheinlich eine fail-safe Konstruktion im Sinn um die übrigen 3 Zustände abzudecken, wenn man A mit 4 Bit darstellt. Dazu mußt Du entweder : - A von 0 bis 15 laufen lassen - Als State Variable einen 4 Bit Std_logic_vector verwenden. - oder den Compiler anweisen, einen Fail-Safe Konstruktion einzubauen. Das geht (glaube ich) mit Hilfe der Synthese-Optionen. An deinem Code ist mir auch noch aufgefallen, daß Du den Takt vorteilst und den Ausgang des Teilers als Takt für deine State-Machine verwendest. Das soll man aus mehreren Gründen nicht machen. Innerhalb deines FPGA's oder CPLD's gibt es eigene Leitungen für den Takt, welche dann nicht verwendet werden. Viel besser ist es, nur den Takt clock zu werwenden. Ein Vorteiler liefert dann nur einen Puls "clk" alle 65563 Takte, und um die Case A anweisung gibst Du noch ein if (clk = '0') then case A .... end if. Damit das Case statement nur alle 65563 Zyklen aktiv. Grüße Klaus
...es sagt: Case OTHERS is not synthesized. @all: kann mal bitte jeman das kleine Programm bei sich testen und schauen, ob alle Ausgänge der Reihe nach angesprochen werden, kurz um, ob alle Zustände korrekt ablaufen. Ich habe irgend ein Problem nach nem Softwareupdate und versuche grad einzugrenze bzw. heraus zu finden, was im Code noch falsch sein könnte ... Das wäre großartig. Vielen Dank!
@Klaus: Danke für die Hinweise. Allerdings brauche ich die Signale so langsam, damit ich bei der Inbetriebnahme der gesamten Platine wirklich jeden verwendeten Ausgang vernünftig testen kann, nacheinander anspreche. Ok, ich kann natürlich auch einfach alle Ausgänge gleichzeitig schalten, es muss ja nicht nacheinander sein ... naja, warum einfach wenns auch kompliziert geht ...
Du das Signal A mit jeder aufsteigenden Flanke von clock auf 0 und Du setzt A mit jeder aufsteigenden Flanke von clk auf einen neuen Wert. Erstens gibts keine Hardware, (jedenfalls nicht in den erhältlichen FPGA's) bei der man ein Signal mit 2 verschiedenen Flanken setzen kann und zweitens bleibt A immer 0, weil clock viel öfter kommt. Klaus
Der andere Ratschlag von mir bzg. der Taktsignale hat nichts mit langsam oder schnell zu tun. Einen niederen Takt aus einem höheren so zu erzeugen wie Du es gemacht hast, ist immer ungünstig. - Werden die speziellen Leitungen im Chip für die Taktverteilung nicht verwendet, dann können die Tools meist nicht das korrekte Timing garantieren. - Der niedere Takt (clk) ist zum höheren Takt verzögert, weil er am Ausgang eines Flip-Flop auftritt. Die Schaltungsteile, welche mit deinem langsamen Takt laufen, sind ebenfalls verzögert. Wenn Du nun Signale hast, welche zwischen den beiden Clock-Domains hin- und hergehen, dann müssten diese Verzögerungen in der Berechung der Setup- und Hold-Zeiten berücksichtigt werden. Die Tools machen das meist aber nicht. Außerdem hängen die Verzögerungen von Bausteingröße und -Typ ab, sodaß ein eventuell funktionierendes Design nur deshalb nicht mehr funktioniert, weil der Hersteller des FPGA's etwas Gutes tun wollte und den Baustein schneller gemacht hat. Tu Dir also einen Gefallen und lerne rechtzeitig, wie man Schaltungsteile mittels eines Enable-Signals (wie oben beschrieben) langsamer laufen läßt. Grüße Klaus
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.