Hi
Ich will/muss einen 1-Wire Temperatursensor ansprechen und auslesen. Für
die einzelnen Schritte, die dafür notwendig sind, habe ich mir zwei
Zustandsautomaten geschrieben. Einen, der die groben Arbeitsschritte
beschreibt und einen, der das Lesen und Schreiben auf dem Bus sowie die
Einhaltung der Timings übernimmt. Der Code ist noch nicht ganz
vollständig, sollte aber alles wesentliche vom Funktionsumfang her
abdecken. Er wird zwar synthetisiert und auch das Bitfile wird erstellt,
aber leider nur mit massig Warnings. Die will ich gerne loswerden, ich
habe nur ein bisschen den Überblick verloren, weswegen ich mich freuen
würde, wenn ihr einmal einen Blick auf mein Design werfen würdet. Für
konstruktive Tipps aller Art bin ich sehr dankbar. Falls noch
Informationen fehlen sollten, reiche ich die natürlich gerne nach.
Hier einmal die Warnings, die bei der Synthese ausgeworfen werden. Ich
vermute, dass sich irgendwo eine Sackgasse entwickelt hat, ich sehe aber
leider gerade nicht wo.
André M. schrieb:> Für konstruktive Tipps aller Art bin ich sehr dankbar.
Wie sieht es mit einer Testbench und einer Simulation aus?
Erst wenn meine Designs im Simulator laufen (und die gewünschte Funktion
zeigen) kommen sie auf die Hardware.
Duke
André M. schrieb:> Ich vermute, dass sich irgendwo eine Sackgasse entwickelt hat
Jawoll, hier haben wir sie wieder, die kombinatorische Schleife in Form
von Zählern:
Als Gedankenanregung: sowas gehört immer in den getakteten Teil einer
FSM.
Duke Scarring schrieb:> Wie sieht es mit einer Testbench und einer Simulation aus?
Blöd, dass sowas von der Simulation nicht sicher erkannt wird.
"Irgendwie" kann das mit der passenden Sensitivliste nämlich sogar
funktionieren...
Lothar Miller schrieb:> "Irgendwie" kann das mit der passenden Sensitivliste nämlich sogar> funktionieren...
Ja, darauf bin ich auch schonmal reingefallen. Aber hier hatte ich mir
den Code noch garnicht angeguckt.
Duke
Danke schon einmal für eure schnellen Antworten.
Duke Scarring schrieb:> André M. schrieb:>> Für konstruktive Tipps aller Art bin ich sehr dankbar.> Wie sieht es mit einer Testbench und einer Simulation aus?> Erst wenn meine Designs im Simulator laufen (und die gewünschte Funktion> zeigen) kommen sie auf die Hardware.>> Duke
Ich habe leider absolut keine Ahnung, wie ich dynamisches Zeitverhalten
einer externen Quelle in eine statische Simulation bringen soll. Evtl.
hätte eine Simulation schon deutlich gemacht, wo auf jeden Fall nach
Fehlern zu suchen ist. Für mich war aber der Weg über das
Synthesewerkzeug und dessen Auswertung naheliegender, da auch in der
Simulation vieles nachhinten los gehen kann, wie Lothar auch schon
angemerkt hat.
Lothar Miller schrieb:> André M. schrieb:>> Ich vermute, dass sich irgendwo eine Sackgasse entwickelt hat> Jawoll, hier haben wir sie wieder, die kombinatorische Schleife in Form> von Zählern: PRESENCE_WAIT <= PRESENCE_WAIT + 1;> :> BIT_READ <= BIT_READ + 1;> :> BIT_SEND <= BIT_SEND + 1;> http://www.lothar-miller.de/s9y/categories/36-Komb...
Ich habe mir deine beiden Artikel durchgelesen. Nun weiß ich aber noch
nicht, wie ich die Lösung deiner Beispiele auf meinen Fall übertragen
kann. Nehme ich jeweils ein zweites Signal, schreibe z.b. "NEXT_BIT_SEND
<= BIT_SEND + 1" im kombinatorischen Prozess und im getakteten Prozess
"BIT_SEND <= NEXT_BIT_SEND", dann führt das im Wesentlich zu den selben
Warnings.
Das kombinatorische Schieberegister liese sich wohl leicht beseitigen,
indem die von dir zitierte Zeile "einfach" in einen getakteten Prozess
wandert, oder?
Schöne Grüße
André M. schrieb:> schreibe z.b. "NEXT_BIT_SEND <= BIT_SEND + 1" im kombinatorischen Prozess> und im getakteten Prozess "BIT_SEND <= NEXT_BIT_SEND", dann führt das im> Wesentlich zu den selben Warnings.
Glaube ich nicht. Zeig mal den Code und die zugehörigen Warnungen...
BTW:
Lothar Miller schrieb:> André M. schrieb:>> schreibe z.b. "NEXT_BIT_SEND <= BIT_SEND + 1" im kombinatorischen Prozess>> und im getakteten Prozess "BIT_SEND <= NEXT_BIT_SEND", dann führt das im>> Wesentlich zu den selben Warnings.> Glaube ich nicht. Zeig mal den Code und die zugehörigen Warnungen...
André M. schrieb:> Found ... latch for signal ...
Nun, das ist der Klassiker bei einem kombinatorischen Prozess, der keine
Defaultzuweisungen hat. Sowas also:
So, ich habe mittlerweile den Code um die nötigen Defaultzuweisungen
ergänzt und u.a. auch die Schiebeoperationen in den getakteten Prozess
der FSM gepackt und offensichtlich ist mein Synthesewerkzeug jetzt
zufrieden. Noch ist das Design nicht fertig, aber die geposteten
Probleme scheinen offensichtlich behoben zu sein. Ich melde mich noch
mal, falls weitere Probleme auftauchen. Bis dahin aber erstmal vielen
Dank für die Hilfe :-)