Arbeiten mit Spartan-6 LX9 Uhr

Ich bin ein Neuling im digitalen Design und lerne Dinge mit "Advanced Digital Design with the Verilog HDL" zusammen mit einem Spartan-6 LX9-Board von Xilinx. Bisher ist es mir gelungen, einige LEDs auf der Platine blinken zu lassen, indem ich mit einem Beispiel von der Website von Xilinx beginne. Den Code finden Sie hier . Ich konnte den DCM-Teil des Beispiels jedoch nicht vollständig verstehen. Soweit ich weiß, ist dies ein herstellerspezifisches Modul, das zum Verschieben der Taktphase usw. verwendet wird. Im Grunde genommen ein Modul, das den Rohtakteingang anpasst. Ich konnte keine Dokumentation für dieses Modul für mein LX9-Board finden, und die nächste, die ich gefunden habe, ist für Spartan-3A ( hier ). Daher habe ich ein paar Fragen:

  • Gibt es eine Dokumentation dafür, die generisch ist oder die Spartan-6 LX9-Karte abdeckt?
  • Ist die Verwendung dieses Moduls in diesem Beispiel unbedingt erforderlich? Ist es möglich, dasselbe einfach ohne dieses Modul zu tun?
  • Wie gehen die Leute normalerweise mit herstellerspezifischen Dingen wie der Uhr um? Zum Beispiel, wenn man sowohl Altera-FPGAs als auch Xilinx-FPGAs ansprechen möchte. Wie ist der Prozess, um das zu erreichen? Ist es ähnlich wie bei gewöhnlichen C-Präprozessor-Typdefinitionen usw.?

assign LED[3:0] = led_count[26:23]; Und warum darf man sich jetzt innerhalb des Blocks bewegen always @? Liegt es daran, dass LED keine Registervariable ist? Und wie oft wird diese "Codezeile" dann ausgeführt? In dem Buch, das ich gerade lese, geht normalerweise alles in den always @Geltungsbereich (aber sie funktionieren nicht mit bestimmten Ausgabeports).

Vielen Dank für Ihre Hilfe.

Ihre letzte Frage (nach den Stichpunkten) sollte in eine andere Frage verschoben werden; Es ist eher eine allgemeine Verilog-Frage, die sich nicht auf Besonderheiten von Xilinx-Chips bezieht.

Antworten (1)

  1. Gibt es eine Dokumentation dafür, die generisch ist oder die Spartan-6 LX9-Karte abdeckt?

    Das DCM ist vollständig im FPGA-Chip enthalten. Es spielt also keine Rolle, welches Board du hast. Die Dokumentation basiert darauf, welchen Chip Sie haben.

    Informationen zur Spartan-6-Familie finden Sie im Spartan 6 Clocking Resources User Guide

  2. Ist die Verwendung dieses Moduls in diesem Beispiel unbedingt erforderlich? Ist es möglich, dasselbe einfach ohne dieses Modul zu tun?

    Wenn Sie nur LEDs blinken, müssen Sie das DCM wahrscheinlich nicht verwenden. Wahrscheinlich haben sie es verwendet, weil es ein sehr komplizierter Block ist, und sie wollten speziell ein Beispiel für die Verwendung des DCM ohne viel mehr komplexe Logik geben, um Dinge zu verwirren.

  3. Wie gehen die Leute normalerweise mit herstellerspezifischen Dingen wie der Uhr um? Zum Beispiel, wenn man sowohl Altera-FPGAs als auch Xilinx-FPGAs ansprechen möchte. Wie ist der Prozess, um das zu erreichen? Ist es ähnlich wie bei gewöhnlichen C-Präprozessor-Typdefinitionen usw.?

    Leider sind komplexe harte Kerne wie das Taktmanagement einer der Bereiche, in denen es nicht viel Kompatibilität zwischen den Anbietern gibt. Sie müssen wahrscheinlich erhebliche Codeänderungen vornehmen, wenn Sie ein Design mit diesen Funktionen wünschen, das zwischen zwei Gerätefamilien portierbar ist, unabhängig davon, ob sie von demselben oder von unterschiedlichen Anbietern stammen.

    Wenn Sie Ihre Schnittstelle so vereinfachen können, dass Sie nur einen Eingangstakt von außerhalb des Chips haben und eine Reihe abgeleiteter Takte, die auf den Rest Ihrer Logik verteilt werden, besteht die sauberste Lösung wahrscheinlich darin, den gesamten herstellerspezifischen Code zu übertragen in ein einzelnes Modul, das Sie in Ihrem Top-Level-Code instanziieren können. Dann können Sie einfach ein anderes „Uhrenverwaltungs“-Modul verwenden, je nachdem, auf welches Gerät Sie abzielen.

    Wenn Sie z. B. die Phasenbeziehung zwischen verschiedenen Takten dynamisch ändern oder zwischen mehreren Optionen für die Referenztaktfrequenz wechseln möchten, haben Sie wahrscheinlich keine andere Wahl, als erhebliche Logikblöcke für verschiedene Zielgeräte neu zu codieren.

    Denken Sie daran, dass neben dem Verilog-Code wahrscheinlich auch zahlreiche Einschränkungen definiert werden müssen, die auch für verschiedene Geräte unterschiedlich sein müssen.