Ich möchte einen Manchester-Encoder in VHDL programmieren, also 8-Bit Eingangsdaten und 8-Bit + 1 Parität Ausgang (Pulsbreite wird dabei noch angegeben). Habe dabei Warnings und kann diese nicht genau zuordnen (VHDL-Amateur :-))
Könnte mir vielleicht jemand helfen? Danke!! Oder irgendwelche konstruktive Verbesserungsvorschläge?
Gruss, DeLUru
Latch ManchesterEncoder:Encoder|data_reference has unsafe behavior Ports D and ENA on the latch are fed by the same signal ManchesterEncoder:Encoder|act_state.generate_data
Latch ManchesterEncoder:Encoder|clock_reference has unsafe behavior Ports D and ENA on the latch are fed by the same signal ManchesterEncoder:Encoder|act_state.generate_data
Latch ManchesterEncoder:Encoder|\PublicProcess:act_data_idx[3] has unsafe behavior Ports D and ENA on the latch are fed by the same signal ManchesterEncoder:Encoder|act_state.generate_data
Ports D and ENA on the latch are fed by the same signal ManchesterEncoder:Encoder|act_state.generate_dataLatch ManchesterEncoder:Encoder|\PublicProcess:data_counter[0] has unsafe behavior
Das Problem tritt auf wenn Du ein Latch baust, dessen Enable Signal auch als Dateineingang dient. Das ist nicht gut! Ich habe leider nicht sehen können an welcher Stelle in Deinem Design das auftritt. Auf den ersten Blick sind aber im PublicProcess fast alle Signale bei Dir als Latch ausgelegt. Auch das ist nicht gut. Eigentlich sollte Dir der Synthetisierer das auch im Logfile mitteilen. Allgemein gilt, dass alle Latche, die Du nicht explizit geplant hast auch nicht ins Design gehören. Der Grund für das Vorhandensein der Latche ist, dass die betroffenen Signale nicht in jedem Zweig (if-else, case) voll beschrieben sind. Du solltest vielleicht erstmal alle Signal auskommentieren und nur mit act_state und nxt_state beginnen und mit jeden neuen Signal überprüfen (Dir darüber bewusst werden), ob es ein Latch hervorruft oder nicht. Was mir noch auffällt, Deine Counter-Values werden nicht in Registern gespeichert (sondern als Latch). Du braucht einen ähnliches Konstrukt wie bei den States. Also ein Clock-Prozess (bzw. den selben) der Speichert.
Gruß DaMicha.
Re: Latch XY has unsafe behavior
Hi DaMicha,
Danke für die schnelle Antwort. Ich hab das jetzt etwas geändert. In der Simulation (Altium Designer) scheint alles ok zu sein, aber wenn ich das Projekt auf den FPGA übertrage, dann tut das nicht das, was es tun soll.
Aus Latch-Sicht sieht der StateMachine-Prozess schon ganz gut aus. Du solltest Dir aber nochmal die Signale clock_reference und act_data_idx anschauen. Der Counters-Prozess geht aus meiner Sicht so nicht. Erstmal brauchen Deine Werte einen (asynchronen) Reset, wie im Trigger-Prozess. Dann solltest Du das Rücksetzen zu clock_counter und data_counter mit in den Clock-Pfad nehmen, da Du Dir hier einen intern über Kombinatorik generierten asynchronen Reset gebaut hast. Das fliegt Dir "in echt" ganz bestimmt um die Ohren. Vielleicht solltest Du mal mit dem synthetisierten Design (besser noch nach dem Place and Route) simulieren. Wenn es damit nicht geht, dann funktioniert es im FPGA auch nicht. Hierbei musst Du aber beachten, dass Du die Setup- und Hold-Zeiten aus der Testbench für das Design einhältst. Also Eingangssignal nicht mit, sondern vor der Taktflanke setzen.