Verilog - Eine Linie bleibt hoch, ich brauche sie, um nach einer Weile niedrig zu werden

Ich arbeite an einer Schaltung in Verilog, die auf einem CPLD implementiert werden soll. Der Ausgang der Schaltung treibt einen Schrittmotor an. Die Eingabe ist ein Strom von Impulsen von einer Maschine.

Ich erzeuge alle X Spindelimpulse einen Schrittimpuls. Kein Problem, funktioniert super.

Während der Simulation ist mir jedoch aufgefallen, dass das Schrittsignal hoch bleibt, wenn das Schrittsignal hoch ist, wenn die Spindelimpulse stoppen (z. B. wenn jemand die Maschine ausschaltet). Dies liegt daran, dass ich es an der Vorderflanke des Spindelimpulses auf niedrig zurücksetze und es keine weiteren gibt.

Dies bedeutet, dass (bei einer schlechten Implementierung) der Stepper mit voller Geschwindigkeit betrieben werden könnte, was zu einem Maschinenabsturz führen würde. Jetzt würde ich hoffen, dass der Stepper-Controller nur an der Vorderkante arbeitet, aber man weiß nie.

Abschließend die Frage - da ich mich nicht darauf verlassen kann, dass meine "Uhr" (die Spindelimpulse) endlos weitergehen, was ist ein guter Weg, um den Stepper-Impuls nach "einer Weile" niedrig zu halten.

Wie Sie sehen, kann ich es nicht einmal richtig beschreiben, also kann ich es nicht googeln, lol. Wenn mir jemand ein paar Wörter zum Suchen geben könnte (oder noch besser, eine Standardtechnik beschreiben könnte), würde ich mich auf den Weg zu den Rennen machen.

Danke!

BEARBEITEN -

Ich experimentiere mit Folgendem (aus dem Gedächtnis getippt...) Ist das Traurigkeit oder eine gute Idee?

always @(posedge Stepper) begin
     #50 // or whatever, this is a low Hz system...
     Stepper = 0;
     end

Oder funktioniert die Verzögerung nur im Simulator?

In Bezug auf Ihre Bearbeitung funktioniert diese Verzögerung nur für die Simulation. Die einzige Möglichkeit, dies zu tun, besteht darin, einen anderen Eingang oder eine andere Uhr zu verwenden. Wenn Sie den Eingangsimpuls als Takt verwenden, gibt es beim Stoppen nichts, was die Logik "nach x ms niedrig setzen" ansteuern könnte. Ich werde später etwas in Xilinx ISE arbeiten - wenn es die Zeit erlaubt, kann ich versuchen, eine einfache Vorlage zu schreiben, um Ihnen den Einstieg zu erleichtern, wenn Sie beim Code Hilfe benötigen. Teilen Sie mir einfach die Spezifikationen mit (z. B. Dinge wie das Teilungsverhältnis und das Timing) und ich werde sehen, was ich tun kann.
Ich weiß das Angebot zu schätzen, aber ich werde es in Kürze herausfinden. Der Weg ist das Ziel und so weiter. Der CoolRunner enthält eine Uhr, ich muss ihn nur benutzen. Die einzige Variable ist, wie lange der Stepperpuls hoch sein muss – der Rest ist nur angenehme Arbeit.
Gute Sachen, ich stimme zu, dass das Wissen sicherlich besser bleibt, wenn Sie es so weit wie möglich selbst durcharbeiten. Wie auch immer, wenn Sie auf Probleme stoßen und Hilfe benötigen, aktualisieren Sie einfach Ihre Frage und posten Sie den Code oder posten Sie ihn als Antwort, wenn Sie ihn zum Laufen bringen.

Antworten (1)

Der beste Weg (je nachdem, wie komplex Ihr endgültiges Design sein wird) wäre wahrscheinlich, einen separaten schnellen CMOS-Oszillator für Ihren CPLD-Systemtakt zu verwenden und ihn die Eingangsimpulse verarbeiten und den Schrittimpuls ausgeben zu lassen.
Auf diese Weise läuft die Uhr die ganze Zeit, wenn das System eingeschaltet ist, und sie kann die Periode ab dem letzten Eingangsimpuls messen - wenn sie über einer bestimmten Grenze liegt, setzen Sie die Schrittleitung auf niedrig.

So funktioniert ein typisches synchrones Design, Sie haben einen unabhängigen systemweiten Takt und dieser wird verwendet, um externe asynchrone Signale zu "lesen" (dh in ein Register) und zu verarbeiten (im Gegensatz zu den externen Signalen, die die Logik direkt takten).

Eine andere einfachere Möglichkeit wäre, eine weitere "Reset" -Eingangsleitung zu haben, die alle Register und Ausgänge auf einen bestimmten Zustand setzt, wenn sie niedrig wird. Sie könnten dann einen einfachen RC-Tiefpassfilter für die Eingangsimpulse verwenden, sodass die Leitung beim Stoppen auf Low fällt und das CPLD zurückgesetzt wird.