Ich habe hier , hier und hier Fragen zum TI TLC5944 LED-Treiber gestellt
Eigentlich sollte ich zunächst folgendes Design simulieren. Ich musste auch die Treiberfunktionalität simulieren (da uns der Treiberchip nicht zur Verfügung stand).
Aber jetzt bittet mich mein Mentor, mich nicht um die Simulation des Fahrers zu kümmern, da er den Fahrer sehr bald bekommen wird. Meine Aufgabe ist es nun, Verilog-Code (zum Beleuchten einer Reihe einer LED-Matrix) zu schreiben, der auf einer Gitterplatine ausgeführt wird. Ich kann meinen Code nicht testen, da ich den echten Chip noch nicht bei mir habe. Aber ich muss den Code schreiben, vorausgesetzt, ich habe den Treiberchip.
Ich habe die Spezifikation dieses Treibers bereits gelesen und verstanden. Ich habe verstanden, wie die Signale kommen und welche Signale erforderlich sind, um eine bestimmte LED-Reihe zu beleuchten. Das Problem ist, dass ich noch nie einen externen Chip zusammen mit einem FPGA verwendet habe. Und deshalb fühle ich mich bei diesem Projekt nicht wohl. In der Vergangenheit habe ich einige kleine Projekte durchgeführt, wie z. B. das Konvertieren eines 24-Bit-BMP-Bildes in ein 1-Bit-Bild, das Entwerfen von Zählern, Arbiter, Bildkomprimierung usw. Bei keinem davon musste ich mit einem externen Chip kommunizieren.
Wie fange ich an, an meinem aktuellen Design zu arbeiten, das einen externen Chip, dh Treiber, hat? Was ist die Grundidee dahinter?
Aktualisieren
Nur um mehr zu verdeutlichen: Mein Problem ist NICHT, dass ich den Code schreiben muss, ohne den Treiberchip tatsächlich zu haben, sondern wie schreibe ich Code, wenn das FPGA mit dem externen Treiber kommuniziert. Ich habe noch nie Code in FPGA geschrieben, der mit einem externen Chip interagiert.
Während des Firmware-Erstellungsprozesses ordnet die Map-Phase die Top-Level-Signale Ihrer Firmware physischen FPGA-Pins zu. Diese Zuweisung erfolgt fast immer manuell, indem Pin-Zuweisungen in eine Datei namens Constraints-Datei aufgenommen werden (zumindest vom xilinx-Toolset). Wenn keine Einschränkungen gefunden werden, werden die Pins vom Build-Tool zugewiesen.
Im Wesentlichen sind alle Ihre Top-Level-Modulsignale physische Pins. Hier ist ein Beispiel von einem Board, das ich gerade entwerfe:
Und dies ist ein Auszug aus der Xilinx Constraints-Datei:
(Ihre sehen möglicherweise anders aus, wenn Sie die Tools eines anderen Anbieters verwenden)
NET "DEBUG_CONN_1" LOC = "M7";
NET "DEBUG_CONN_2" LOC = "M8";
NET "DEBUG_CONN_3" LOC = "R4";
NET "DEBUG_CONN_4" LOC = "P4";
NET "DEBUG_CONN_5" LOC = "M6";
NET "DEBUG_CONN_6" LOC = "L6";
NET "DEBUG_CONN_7" LOC = "P3";
NET "DEBUG_CONN_8" LOC = "N4";
NET "DEBUG_CONN_OE" LOC = "M5";
Dies teilt dem FPGA-Map-Tool mit, welche Signale welchem Pin zugeordnet werden sollen.
Und schließlich ein Auszug aus der Entität der obersten Ebene:
(Dies ist VHDL, weil ich das verwende, aber es sollte Ihnen die richtige Vorstellung vermitteln.)
ENTITY 6slx45fgg484 is
PORT (
DEBUG_CONN_1 : OUT STD_LOGIC;
DEBUG_CONN_2 : OUT STD_LOGIC;
DEBUG_CONN_3 : OUT STD_LOGIC;
DEBUG_CONN_4 : OUT STD_LOGIC;
DEBUG_CONN_5 : OUT STD_LOGIC;
DEBUG_CONN_6 : OUT STD_LOGIC;
DEBUG_CONN_7 : OUT STD_LOGIC;
DEBUG_CONN_8 : OUT STD_LOGIC;
DEBUG_CONN_OE : OUT STD_LOGIC;
.
.
.
);
END 6slx45fgg484;
Die Constraints-Datei wird verwendet, um verschiedene Parameter über die physikalischen Pins zu spezifizieren. Beispielsweise können IO-Standards, Abschluss- und Laufwerksstärken alle in der Beschränkungsdatei spezifiziert werden. Darüber hinaus geben Sie hier Taktraten für die Timing-Analyse und die Zuordnung größerer Firmware-Blöcke wie eingebauter Transceiver an.
Wenn Sie mit einem Gerät verbunden sind, das einen Takt verwendet, um Daten in das oder aus dem FPGA zu takten, müssen Sie möglicherweise die Taktdomänen ändern oder Ihre Signale dreifach registrieren, um die Signale auf dem Weg in Ihre Arbeitsdomäne umzuwandeln, oder die Domäne des Geräts auf dem Weg nach draußen.
Wenn Sie nur Code schreiben, um der Hardware vorzugreifen, können Sie im Allgemeinen einfach ein Modul schreiben, bei dem die Eingangs- und Ausgangsentitätssignale mit denen des Geräts übereinstimmen. Wenn die Hardware ankommt, müssen Sie Ihre Entity-Signale bis zur obersten Ebene abbilden, die Einschränkungen so konfigurieren, dass sie mit der Hardware übereinstimmen, und Sie sollten startklar sein.
Ich gehe davon aus, dass in Ihren früheren FPGA-Projekten die Module, die Sie geschrieben haben, mit anderen Modulen innerhalb desselben FPGAs verbunden waren. Daher mussten Sie auf die zeitlichen Beziehungen zwischen den verschiedenen Schnittstellensignalen achten.
Die Anbindung eines FPGA an einen oder mehrere externe Chips ist aus funktionaler Sicht nicht anders. Sie müssen die erforderlichen zeitlichen Beziehungen verstehen und Ihren Code schreiben, um sie zu erfüllen.
Der einzige wirkliche Unterschied besteht darin, zu lernen, wie die funktionalen E/A-Ports Ihres Moduls mit physischen Pins auf dem FPGA verbunden werden, und sicherzustellen, dass die FPGA-Pin-Treiber und -Empfänger richtig konfiguriert sind, um den elektrischen Eigenschaften der externen Chips zu entsprechen. Dies ist eine der Funktionen der "Constraints-Datei" (wie auch immer die Lattice-Toolchain sie nennt) in Ihrem Projekt, und es wird einen Abschnitt im Handbuch geben, der diese Aspekte des FPGA-Designs behandelt.
Passant
pjc50
Chris Stratton
Kohlschmied