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.
Es gibt ein paar Dinge zu beachten
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.
Taktnetze sind eine begrenzte Ressource, während einige Chips Flip-Flops von normalen Netzen takten können, was wahrscheinlich ein schlechteres Zeitverhalten aufweist.
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.
Es besteht wahrscheinlich ein erheblicher Phasenversatz zwischen dem ursprünglichen Takt und dem erzeugten Takt.
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.
Tom Tischler
John M
@(enable and posedge clk)
?Tom Tischler
always @ (posedge clock) begin if (enable) begin ... end end
John M
pjc50
Tom Tischler
John M
John M