Entwicklung von Hardware in FPGA mit LED-Treiberchip

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).

Geben Sie hier die Bildbeschreibung ein

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.

Abstraktion. Schreiben Sie Code für den TLC5944, der funktionieren sollte, wobei alle Aufrufe an die Hardware mit Funktionen abstrahiert werden. Teilen Sie es mit dem Ziel der Portabilität in Abschnitte auf. Die Animation ist Teil 1, der TLC-Code ist Teil 2, der Spi-Code (FPGA Direct Output Parts) ist Teil 3. Auf diese Weise müssen Sie den Chip noch nicht zum Testen verwenden. (Warum bestellen Sie nicht auch ein Muster bei Texas Instruments, Sie können es in ein paar Tagen kostenlos erhalten)
Sie werden wahrscheinlich ein einfaches Modell des TLC5944 selbst bauen wollen, damit Sie Ihr Design in Software testen können.
Es ist nicht sehr offensichtlich, warum ein FPGA für diese Aufgabe einem Mikrocontroller vorgezogen wurde, der im Allgemeinen die bevorzugte Lösung für Dinge ist, die kein extrem enges Timing oder hohe Parallelität erfordern.
Ihr Schaltplan braucht ein bisschen Arbeit. Ich bin mir ziemlich sicher, dass Sie nicht beabsichtigen, die Leitungen SCLK, DCSEL, XLAT, BLANK und GSCLK miteinander zu verbinden. Vielleicht wollten Sie ein Bus-Schaltplansymbol verwenden?

Antworten (2)

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:

Beispiel verbinden

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.