Eine Uhr in Verilog teilen - ist das in Ordnung?

Das Unterteilen einer Uhr in Verilog ist eine grundlegende Übung, und es gibt viele Antworten online, wie es geht. Was ich wissen möchte, ist, ob es in Ordnung ist, eine Uhr zu verwenden, die mit Verilog auf einem echten FPGA heruntergeteilt wurde, um Flip-Flops zu takten.

Ich frage, weil allgemein bekannt ist, dass wir niemals eine kombinatorische Logik auf eine Taktleitung legen und dann das resultierende Signal verwenden sollten, um die Uhr eines Flip-Flops anzusteuern.

Sicher, ein Taktteiler ist nicht das, was wir kombinatorische Logik nennen würden, aber am Ende des Tages würde ich immer noch Logikgatter zwischen ein (vermutlich) komplexes Taktnetzwerk und das Taktsignal eines Flipflops setzen.

Es ist erwähnenswert, dass ich dies sicherlich in einigen Hardwareprojekten getan habe und es funktioniert hat, aber es war auf einem FPGA mit geringer Leistung. Ich frage mich, ob dies auf den meisten FPGAs konsistent und zuverlässig funktionieren würde oder ob ich mit dem von mir verwendeten Chip nur Glück hatte.

Verwenden Sie Ihren Teilerzähler als Taktfreigabe für die Register, die vom nicht geteilten Takt angesteuert werden.
Wie würde ich das machen? Sollte ich eine Sensitivitätsliste wie haben @(enable and posedge clk)?
always @ (posedge clock) begin if (enable) begin ... end end
Meine Güte. Ich kann nicht glauben, dass ich nicht daran gedacht habe. Danke für den Vorschlag.
Es funktioniert im Allgemeinen in FPGAs, aber oft enthalten sie dedizierte Taktteiler und PLL-Ressourcen, die dafür verwendet werden können.
Diese Frage ist zwar kein Duplikat, kann Ihnen aber weiterhelfen.
@ pjc50 leider fehlt der eingebackene Taktteiler auf meinem Chip ziemlich ... er macht nur div1 oder div2.
@TomCarpenter Danke, dass du mich zu dieser Frage geführt hast. Es wird definitiv mein Allgemeinwissen zu diesem Thema verbessern. Ich habe eine Menge Verilog in der Simulation gemacht, aber sehr wenig in der realen Implementierung, daher fehlt es mir in der Abteilung für allgemeines FPGA-Wissen.

Antworten (1)

Es gibt ein paar Dinge zu beachten

  1. Der Chip muss tatsächlich das Routing haben, um ein Taktsignal von einem Registerausgang in ein Taktnetz zu bringen. Die meisten FPGAs, mit denen ich gearbeitet habe, können das aber überprüfen.

  2. Taktnetze sind eine begrenzte Ressource, während einige Chips Flip-Flops von normalen Netzen takten können, was wahrscheinlich ein schlechteres Zeitverhalten aufweist.

  3. Sie müssen dem Timing-Analysator wahrscheinlich manuell mitteilen, was Sie tun, um das richtige Timing-Verhalten / die richtige Analyse zu erhalten. Die Details dazu sind wahrscheinlich chipspezifisch.

  4. Es besteht wahrscheinlich ein erheblicher Phasenversatz zwischen dem ursprünglichen Takt und dem erzeugten Takt.

  5. Um sicherzustellen, dass die Uhr sauber ist, sollte sie direkt von einem Registerausgang kommen, nicht von einer kombinatorischen Logik.

Insgesamt können Sie es tun, aber ich würde es als letzten Ausweg betrachten. Meistens können Sie ähnliche Ergebnisse mit viel weniger Kopfschmerzen erzielen, indem Sie Freigabesignale verwenden und / oder mehrere Ausgänge von der PLL des Chips verwenden.