Inhaltsverzeichnis:

Machen Sie einen beliebigen Sensor aus einem FPGA - Gunook
Machen Sie einen beliebigen Sensor aus einem FPGA - Gunook

Video: Machen Sie einen beliebigen Sensor aus einem FPGA - Gunook

Video: Machen Sie einen beliebigen Sensor aus einem FPGA - Gunook
Video: GPN18 - Seitenkanal-Angriffe innerhalb FPGA-Chips 2024, November
Anonim
Image
Image
Das FPGA
Das FPGA

Die meisten Hersteller haben mindestens einmal in ihrem Leben versucht, ein Thermometer zu bauen, vielleicht ist das, das sie zu Hause haben, nicht schlau genug, oder vielleicht denken sie, dass sie das nächste NEST bauen können. Trotzdem hatten sie irgendwann einen Mikrocontroller mit seiner hochmodernen Software an einen Temperatursensor (und vielleicht noch andere Sensoren: Druck, Licht) angeschlossen. Bis jetzt alles perfekt, die Software läuft und der Sensor tastet. Lass es uns testen!

Hmmmm… vielleicht sollte er den Sensor mit einem Fön aufheizen und mit Eis abkühlen, es funktioniert eine Zeit lang. Aber es wirkt nicht professionell, der Sensor ändert die Werte zu schnell, wenn man ihn aufheizt, er erwärmt sich nicht mehr als ein paar Grad. Das Projekt ist eine Pleite! Aber der Algorithmus ist neu, berücksichtigt viele Faktoren, schade, dass er an dieser blöden Kleinigkeit hängen geblieben ist.

Meine Lösung ist folgende: Lassen Sie ein FPGA als Sensor mit Werten fungieren, die von einem PC gestreamt (oder im Speicher gespeichert oder ad-hoc im FPGA erstellt werden). Für Ihre kostbare MCU sieht das FPGA also wie ein Sensor aus, aber nicht wie ein Sensor: welcher Sensor Sie auch immer mögen. Vielleicht entscheiden Sie, dass Sie mehr Auflösung oder schnellere Reaktionszeit als erwartet benötigen, Sie müssen den Sensor wechseln. Bestellen Sie es online, es wird in ein paar Tagen oder ein paar Monaten ankommen, wer weiß. Respinieren Sie Ihre Leiterplatte oder bestellen Sie ein Modul mit dem neuen Sensor. Oder … ein paar Klicks und der FPGA ist als Ihr brandneuer Sensor konfiguriert und kann die genaue interne Konfiguration emulieren.

Zum Zeitpunkt des Schreibens könnte das FPGA als LM75 mit im BRAM (auf dem FPGA) gespeicherten Temperaturdaten fungieren.

Schritt 1: Die MCU

Meine bevorzugte MCU ist ein LPC4337 auf einem LPCXpresso. Oben drauf habe ich ein Shield (LPC General Purpose Shield) mit Display und einem echten LM75 Sensor. LPC4337 ist ein ARM Cortex M4 mit 200 MHz und ein kleinerer Cortex M0 (hier nicht verwendet). Der reale Sensor wird an I2C1-Peripherie angeschlossen und unser virtueller wird an I2C0 angeschlossen. Die Quelle ist auf meinem GitHub verfügbar.

Wie baut man es? Laden Sie die LPCXpresso IDE zusammen mit der LPCOpen-Bibliothek herunter. Importieren Sie diese Bibliothek in die IDE und öffnen Sie das Projekt auch von GitHub. Alles sollte konfiguriert sein und Sie können in der unteren linken Ecke auf "Debug" klicken.

Das gesamte Projekt basiert auf einem der NXP-Beispiele (um zu zeigen, dass mein Projekt einen echten Sensor simuliert und keinen speziellen Code auf der MCU-Seite benötigt). In der Hauptdatei (namens iox_sensor.cpp) liegt dieser Code:

#define SENSORS_ON_SHIELD

#if definiert(SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif definiert(SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Durch Ändern von SENSOR_ON_SHIELD und SENSOR_OR_FPGA kann der Benutzer zur Kompilierzeit wechseln, welcher Sensor kommuniziert, der echte oder der virtuelle, da sie sich auf verschiedenen I2C-Pins befinden.

Schritt 2: Das FPGA

Mein FPGA-Board der Wahl ist ein Artix 7 von Digilent mit einem Xilinx Arty 7. Zwei der PMod-Anschlüsse werden verwendet, einer für das Debuggen und einer für die eigentliche Nutzlast, die Verbindung mit dem MCU-Board.

Auch hier ist der Quellcode für das FPGA auf meinem GitHub (fpgaSide-Ordner) verfügbar.

Wie baut man es? Laden Sie die Xilinx Vivado IDE herunter, kaufen oder öffnen Sie sie. Importieren Sie die Projektdateien von GitHub. Eine der Dateien (content.coe) sind die Temperaturdaten im Rohformat, die an den gefälschten Sensor gestreamt werden. Es gibt auch eine Excel-Datei mit demselben Namen, die bei der Konvertierung von menschenlesbaren Temperaturdaten in LM75-Rohdaten hilft. Ich plane, dies in einen automatisierten Prozess mit einer in Java geschriebenen Software umzuwandeln, aber bis dahin funktioniert diese Lösung. Synthese und Implementierung sollten eine Weile dauern, berücksichtigen Sie dies.

Schritt 3: Wie funktioniert es?

Wie funktioniert es?
Wie funktioniert es?
Wie funktioniert es?
Wie funktioniert es?

Wie gesagt, für die MCU sieht das FPGA wie ein Sensor aus, genauer gesagt ein I2C-Sensor. Der Ausgang des I2C-Peripheriegeräts wird mit dem Eingang des FPGAs verbunden. Innerhalb des FPGA gibt es 3 Hauptkomponenten: - I2C-Controller - I2C-Gerät - DatenDer I2C-Controller empfängt I2C-Daten von den Pins des FPGAs und sendet sie an den Rest des FPGAs und macht dasselbe in umgekehrter Reihenfolge. Es unterhält eine interne Zustandsmaschine für das I2C-Protokoll (hier ist übrigens die Dokumentation dazu). Was sendet diese Komponente an das I2C-Gerät? Das aktuell empfangene Byte, die Position dieses Bytes in der aktuellen Kommunikation und ob die MCU auf das FPGA schreibt oder davon liest. Das I2C Device empfängt die gesendeten Bytes und aktualisiert die simulierte interne Struktur des Sensors. Es kann nur den Registerzeiger aktualisieren oder neue Daten von der Datenquelle anfordern. Die Datenkomponente streamt neue Datenpunkte. Derzeit ist es nur ein ROM-Speicher, dessen Adresse (ungefähr) zweimal pro Sekunde inkrementiert wird.

Was ist mein Endziel? Es wird im zweiten Bild gezeigt. Das heißt: mehr I2C-Geräte (Sensoren und andere) gleichzeitig im FPGA simulieren. Die Daten am Backend des Sensors werden im FPGA zwischengespeichert und vom PC über USB oder Ethernet gestreamt. Unterstützt fortschrittlichere Sensoren und andere I2C-Geräte (Speicher, LED-Treiber usw.).

Schritt 4: Alles zusammenfügen

Alles zusammenfügen
Alles zusammenfügen
Alles zusammenfügen
Alles zusammenfügen

Jetzt ist es an der Zeit, alles miteinander zu verbinden. Theoretisch ist es einfach: Das mcu-Board hat einen PMod-Anschluss (I2C0 & SSP0 (kann wie SPI funktionieren)). Das Artix-Board verfügt über 4 PMod-Anschlüsse, die nach Belieben verwendet werden können. Ich wähle Anschluss D, um mit der MCU zu kommunizieren, und Anschluss B, um eine Verbindung zu meinem Logikanalysator herzustellen.

Warnung

Sie können die beiden Boards nicht einfach so miteinander verbinden. Wieso den? PMod wurde entwickelt, um den Anschluss eines Master/Host-Boards (das Strom liefert) an ein Slave-/Sensor-Board (das Strom erhält) zu erleichtern. Aber in diesem Projekt liefern beide Boards Strom und wenn Sie den 3,3-V-Ausgang von einem Board mit dem 3,3-V-Ausgang des anderen Boards verbinden, können schlimme Dinge passieren. Aber möglicherweise nicht und Sie können nur die Parameter der Stromschienen des FPGA ändern (sie sind sehr sorgfältig entworfen). Gehen Sie dieses Risiko also nicht ein und verschieben Sie den Stecker einen Pin nach links (und drehen Sie auch die FPGA-Platine um), wie in den obigen Bildern zu sehen. Hier ist die PMod-Spezifikation, Sie können sie studieren, was ich in kurzen Worten getan habe, ist, die VCCs der beiden Boards nicht zu verbinden.

Empfohlen: