Forum: Mikrocontroller und Digitale Elektronik Sicherheitskritische Hardwareepfehlung Protoyp µC vs. FPGA


von Subcentos (Gast)


Lesenswert?

Hallo zusammen,

im Rahmen eines prototypen Projektes muss ich etwa 15 digitale und 5 
analoge Signale erfassen und per Ethernet (vermutlich UDP) an einen Host 
PC zur Verarbeitung schicken. Zusätzlich sollen gleich viele digitale 
Signale, die auch über Ethernet kommen als Ausgänge geschrieben werden.

Auf der gesuchten Hardware soll neben der reinen IO-Ethernet Umsetzung 
auch ein wenig sicherheitskritische Software laufen:

- Fällt die Ethernetverbindung aus, soll das Ausgangssignal den 
Eingangsignale entsprechen
- Ein speizieller DI Wert soll kontinuierlich im Betrieb untersucht 
werden, weicht dieser von Wert xy ab so sollen ebenfalls die 
Eingangssignale an die Ausgangsisgnale gesendet werden.

Also im Prinzip wird hier eine bestehende Signalleitung aufgetrennt mit 
der Möglichkeit auf diese zurückzufallen sollte ein manueller Override 
oder Netzwerkausfall auftreten - wie gesagt alles im Rahmen eines 
Prototypens. Daher muss auch ich (und nicht ein Experte), mit meinen 
Grundkenntnisse, das ganze im Rahmen einer Machbarkeitsstudie 
untersuchen. Finanzielle Mittel sind wie immer knapp (akademisches 
Projekt).

Im Brainstorming hab ich mir folgenden Möglichkeiten überlegt:

FPGA (mit µC):
-Kann nicht "hängen bleiben"
-Nutzung meiner Erfahrung in LabVIEW
-Vergleichsweise sehr teuer
-Nutzenes des FPGAs für die Programme aber auch in LabVIEW aufwendiger


Mikrokontroller
-Vergleichsweise preiswert
-Wie stellt man sicher, dass er nicht "hängen bleibt"?
-Kann man sowas mit eigenem Scheduler und Interrupts lösen oder lieber 
gleich ein RTOS!?

Ich würde gerne eure Meinung und Rat hören. Beides hat seine Vor- und 
Nachteile. Vielleicht hat jemand sogar einen Rat zu einem geeigenet 
Evaluation Board (~ 30DIOs und Ethernet Port).

Vielen Dank schonmal!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Subcentos schrieb:
> FPGA (mit µC):
> -Kann nicht "hängen bleiben"

Interessante These. Was macht den µC hier besser als einen, der ohne 
FPGA genutzt wird?

von C. A. Rotwang (Gast)


Lesenswert?

Subcentos schrieb:

> Mikrokontroller

> -Wie stellt man sicher, dass er nicht "hängen bleibt"?
WDT
> -Kann man sowas mit eigenem Scheduler und Interrupts lösen oder lieber

Dazu gabst hier mal ne längere Verbalprügelei:
Beitrag "Der Watchdog – oder wie strande ich nicht im Weltall?"

von Flo (Gast)


Lesenswert?

Zunächst sollte man die kritikalität des Ausfalls bewerten. Erst dann 
kann man die zu realisierende Struktur festlegen.
Für Safety gibts z.b. die ISO26262

von Georg G. (df2au)


Lesenswert?

FPGA oder Mikroprotz bleiben in den seltensten Fällen hängen, weil die 
Hardware streikt. Ursache ist fast immer das Programm. Und da kann man 
sowohl in einem uC als auc hin einem FPGA hinreichend Unsinn machen.

Womit hast du die meiste Erfahrung? RTOS klingt toll. Aber wenn du damit 
dein erstes Projekt machst, kalkuliere xx Wochen Einarbeitung ein. KISS 
ist angesagt.

von Subcentos (Gast)


Lesenswert?

Vielen Dank schonmal für die vielen Antworten!

Rufus Τ. F. schrieb:
> Interessante These. Was macht den µC hier besser als einen, der ohne
> FPGA genutzt wird?

Der µC kann immernoch hängen bleiben ganz klar. Der FPGA kann dann aber 
(so wie ich das bisher verstanden habe) für den sicherheitskritschen 
Programmteil verantwortlich sich. Den µC brauch ich bei einem FPGA nur 
für Ethernet (mit UDP oder TCP Support) oder sehe ich das falsch?

Flo schrieb:
> ISO26262

Die Serienanwendung dürfte sicherlich ASIL C oder D sein ohne das ganze 
mit FTA oder sonstiges geprüft zu haben. Der Prototyp mit eingewiesenem 
Personal im gesonderten Testbetrieb sicherlich darunter.

C. A. Rotwang schrieb:
> WDT
Richtig, aber kann ich damit auch die Ausführung der 
sicherheitskritischen Abfragen genauso gut "garantieren" wie bei einem 
FPGA. Beim Watchdog fängt das Programm effektiv immer wieder von vorne 
an oder? Beim FPGA kann ich Sicherheitsabfragen parallel machen. Gerne 
lasse ich mir aufklären (um dann mit dem µC Geld zu spaaren ;) )

Georg G. schrieb:
> Womit hast du die meiste Erfahrung?

Mit µCs einige Bastelein (Inverse Pendel etc.) mit dem Arduino, mit 
FPGAs mit dem myRIO von NI ebenfalls viele Bastelein.

von C. A. Rotwang (Gast)


Lesenswert?

Subcentos schrieb:

>> WDT
> Richtig, aber kann ich damit auch die Ausführung der
> sicherheitskritischen Abfragen genauso gut "garantieren" wie bei einem
> FPGA. Beim Watchdog fängt das Programm effektiv immer wieder von vorne
> an oder?
Ja, oder gilt. manche µC können erkennen warum sie grad neustarten 
(PowerUp oder WDT_reset) und dementsprechend unterschiedlich aufstarten.

>Beim FPGA kann ich Sicherheitsabfragen parallel machen.
Nimmste halt mehrere µC, dann geht da auch Parallel mit den Abfragen. 
Wobei?, meinst du parallel oder redundant? Es gibt auch µC mit 
eingebauter redundanz, check mal Infineon Aurix.

von c-hater (Gast)


Lesenswert?

Subcentos schrieb:

> Im Brainstorming hab ich mir folgenden Möglichkeiten überlegt:
[...]
Das Wichtigste in diesem Zusammenhang, womit jeder wissenschaftlich auch 
nur halbwegs Gebildete mit seinen Überlegungen anfangen würde, das hast 
du dir nicht überlegt: die Anforderungen bezüglich Durchsatz und 
Latenzen.

Sprich: Es hat damit anzufangen, die zu erwartende Datenmenge und die 
nötigen Antwortzeiten zu spezifizieren.
Weil: wenn da schon rauskommt, dass das ein generischer µC nicht oder 
nur mit sehr großer Mühe schaffen kann, wird die Wahl schon von ganz 
alleine ziemlich eng und du brauchst kein weiteres Hirnschmalz in diese 
Entscheidung investieren, die Fakten haben sie für dich gefällt.

Alles andere ist schwachsinniges Gelaber ohne faktische Grundlagen. 
Sollte eines Wissenschaftlers/Technikers unwürdig sein, selbst eines 
(hoffentlich) noch Werdenden...

von Daniel -. (root)


Lesenswert?

FPGA und Mikrocontroller sind beides komplexe Bauteile im Sinne 61508.
Du kannst keine Fehler ausschliesen. Punkt. Baue redundant, wenn es geht 
diversitär.

von Schreiber (Gast)


Lesenswert?

Möglichkeit 3:
Die Rückfallebene mit diskreter Logik aufbauen.
Die Plausibilitätskontrolle ebenfalls.

von Hmm (Gast)


Lesenswert?

Wenn du es in µC lösen kannst, ist das das Mittel der Wahl. FPGA ist 
immer aufwändiger, und hat keinen Sicherheitsvorteil. Es ist aber 
aufwändiger bei der Abnahme. Mit Labview braucht ihr dem TÜV vermutlich 
nicht anzurücken.

Was µC angeht:
Im Normalfall baut man das System zweikanalig auf, z.B. mit µC die beide 
die Funktion warhnehmen und sich gegenseitig prüfen. Absichern muss man 
das gegen Fehler mit gemeinsamer Ursache - z.B. eine Überspannung, die 
beide µC tötet oder so.
Hängt aber von den konkreten Anforderungen ab, wie Norm, SIL oder 
Performance- Level und so  weiter.

Was das Aufhängen angeht : Das hat man damit zuverlässig abgefangen. Die 
µC prüfen sich gegenseitig, per zyklischer Kommunikation. Ist die 
inkonsistent, lösen sie beide unabhängig voneinander den sicheren 
Zustand aus.

Wir haben mit derartigen Systemen SIL2 erreicht.

Achja:
Bitte beachten, dass man bei einem Safety Projekt nicht "frei von der 
Leber weg" loslegen darsf. Da gibt es Prozesse einzuhalten und das auch 
nachzuweisen.
Ich rate hier zu einer frühzeitigen Beratung (aus eigener, bitterer 
Erfahrung).
Eine Konzeptprüfung ist auch sinnvoll, das kann sehr viel Geld sparen.

Safety macht keinen Spass, soviel steht fest ;-)

von Frank K. (fchk)


Lesenswert?

Subcentos schrieb:

> FPGA (mit µC):
> -Kann nicht "hängen bleiben"

Klar kann der hängen bleiben. Wenn Du z.B. eine State Machine falsch 
implementierst, kann er in einem undefinierten Zustand hängen bleiben. 
Es können auch Glitches oder Timing Violations auftreten.

> -Nutzung meiner Erfahrung in LabVIEW
Also hast Du überhaupt keine Erfahrung in der richtigen Programmierung 
mit VHDL oder Verilog. Das ist schon mal ganz schlecht.

> -Vergleichsweise sehr teuer
Das kommt darauf an, was Du darin implementieren willst. Kleine FPGAs 
gibts ab 2.50€. Nach oben sind die Grenzen natürlich offen.

> -Wie stellt man sicher, dass er nicht "hängen bleibt"?
Watchdog.

> -Kann man sowas mit eigenem Scheduler und Interrupts lösen oder lieber
> gleich ein RTOS!?

Wenn Du genug Know-How hast, kannst Du das alles selber machen. Wenn 
nicht, überlasse das den Profis.

> > Womit hast du die meiste Erfahrung?
> Mit µCs einige Bastelein (Inverse Pendel etc.) mit dem Arduino, mit
> FPGAs mit dem myRIO von NI ebenfalls viele Bastelein.

Also immer nur "betreutes Programmieren" und keinerlei richtige 
Erfahrung aus der Realität.

> Ich würde gerne eure Meinung und Rat hören. Beides hat seine Vor- und
> Nachteile. Vielleicht hat jemand sogar einen Rat zu einem geeigenet
> Evaluation Board (~ 30DIOs und Ethernet Port).

http://www.ti.com/tool/msp-exp432e401y

Kostet bei TI 20$. Prozessor ist ein 120 MHz ARM M4F mit integriertem 
MAC und PHY, 1M Flash, 256k RAM. IDE, Compiler, RTOS, Netzwerkstack und 
Driverlib gibts von TI. Debugger ist auf dem Board mit drauf.

> - Fällt die Ethernetverbindung aus, soll das Ausgangssignal den
> Eingangsignale entsprechen
> - Ein speizieller DI Wert soll kontinuierlich im Betrieb untersucht
> werden, weicht dieser von Wert xy ab so sollen ebenfalls die
> Eingangssignale an die Ausgangsisgnale gesendet werden.

Diese beiden Funktionalitäten kannst Du sicher in einem kleinen 3€-FPGA 
ohne Labview nur zu Fuß einfach implementieren. Das wäre ein n-fach 
Multiplexer, der entweder die Signale vom Prozessor ausgibt oder auf 
Bypass schaltet, und ein digitaler Komparator. Beides sind 
Anfängeraufgaben.

Als Umschaltkriterium kannst Du z.B. die Ethernet Link LEDs auf Port F 
auswerten und ggf. irgend einen Prozessorpin, der in der 
Interruptroutine des Ethernet MAC gepulst wird. Der Puls setzt einen 
Abwärtszähler auf einen Startwert zurück, und wenn der lange genug 
ausgeblieben ist, dann läuft der Zähler im FPGA ab und setzt dann ein 
Flag (==0), was dann auch zum Schalten auf Bypass führt. Auch das ist 
relativ einfach in VHDL zu implementieren.
Als drittes kannst Du einen bestimmten Prozessorpin definieren, mit dem 
der Prozessor sich in die Verbindung einklinkt.

Diese Dinge kannst Du natürlich auch in diskreter Logik implementieren, 
aber ein kleines FPGA ist hier oft die bessere Lösung.

In vielen Fällen heißt es nicht "entweder oder", sondern "sowohl als 
auch".

fchk

von mIstA (Gast)


Lesenswert?

Subcentos schrieb:
> - Fällt die Ethernetverbindung aus, soll das Ausgangssignal den
> Eingangsignale entsprechen

Woran erkennst Du einen Ausfall der Ethernetverbindung?

Wie unterscheidest Du bösartig gefälschte Antwortpakete von korrekten?

von Martin S. (strubi)


Lesenswert?

Moin,

für solche Anwendungen habe ich mir letztes Jahr mal ne Plattform 
herangezüchtet, weil solche Anforderungen auch bei den 'Kleinen' (also 
nicht grade die mit Avionik-Geldbörse) immer mehr zum Thema werden.
Nennt sich 'netpp node' und ist als Eval-Kit bei mir auf Lager, bei 
Interesse gerne anpingen.

Die Frage ist immer, welche Art von Sicherheit du anpeilst.
Siehe auch Beitrag "Microcontroller-Sicherheit in MIL-Systemen durch FPGAs erhöhen"

Subcentos schrieb:
> FPGA (mit µC):
> -Kann nicht "hängen bleiben"

Kann es schon, wenn irgendwo ein fieser EMV-Spratz die Logik stört.

> -Nutzung meiner Erfahrung in LabVIEW
> -Vergleichsweise sehr teuer
> -Nutzenes des FPGAs für die Programme aber auch in LabVIEW aufwendiger

Das Problem (weswegen ich auch von LV strikt absehe): Die Geschichte ist 
nicht vernünftig verifizierbar, abgesehen von der Wartbarkeit. Ich weiss 
auch nicht, wie das ist, wenn man die von LV generierte (abgegriffene) 
HDL einem Dritten zur Verifikation schickt...so rein rechtlich gesehen.

>
> Mikrokontroller
> -Vergleichsweise preiswert
> -Wie stellt man sicher, dass er nicht "hängen bleibt"?

Das Thema Watchdog wird hier immer wieder durchgekaut, und man trifft 
auf eine Menge an Murks. Habe des öfteren sicherheitsrelevante SW unter 
der Lupe, wo sich bei den 'OS' der üblichen Verdächtigen eine nur noch 
die Haare sträuben. Das Problem ist immer dann, wenn Watchdogs auslösen, 
wenn sie eigentlich gar nicht sollten und bei gewissen Szenarien munter 
Endlos-Rebootschleifen auftreten.

> -Kann man sowas mit eigenem Scheduler und Interrupts lösen oder lieber
> gleich ein RTOS!?

Damit mal zum eigentlichen Thema: Die ganzen Richtlinien sind schön und 
gut, aber oft eine Farce, wenn der Code-Ersteller nicht beweisen kann, 
dass sein Programm korrekt abläuft.
Du kannst natürlich allen möglichen highlevel Tools (Rational, lint, 
usw) und Richtlinien wie MISRA vertrauen.
Meine Meinung: Wenn ich persönlich für was haften muss, reicht das nicht 
aus, und MISRA ist eigentlich Augenwischerei. Deswegen vertraue ich 
eigentlich nur noch dem HDL-Simulator.
Und wenn du dann das ganze RTOS mit-verifizieren musst, wird das richtig 
aufwendig.
Deswegen bin ich eher für den dualen Weg: die Sicherheitsschaltungen 
sind simpel und in primiver Logik realisiert, somit sind die 
Fehlerszenarien einfacher durchzusimulieren. Alles was irgendwie hart 
'realtime' ist kommt in autonome Logik.
Für den Rest packt man sich einen gut verifizierbaren uC ins FPGA und 
kann die main loop simpel halten. Der Gag an der ganzen Hybridlösung 
ist, dass das komplette System inkl. Software in die Simulation gesteckt 
werden kann. Ein uninitialisiertes HW-Register (was MISRA logischerweise 
durch die Lappen geht) springt da z.B. sofort ins Auge.

Weitergehende Doku dazu findest du auch unter 
https://section5.ch/index.php/dokumentation/masocist-soc/, da liegt auch 
n Link aufn Docker-Container, den du für die "akademischen Zwecke" frei 
missbrauchen kannst.

von Daniel -. (root)


Lesenswert?

>>Auf der gesuchten Hardware soll neben der reinen IO-Ethernet Umsetzung auch ein 
wenig sicherheitskritische Software laufen:

Ich würde empfehlen den sicherheitskritischen Teil nicht mit normaler 
Funktionalität
zu vermischen. Willst du später Funktionalität erweitern wollen, musst 
du nicht
nochmal zum TÜV.

von Subcentos (Gast)


Lesenswert?

C. A. Rotwang schrieb:
> meinst du parallel oder redundant?

Nein, ich meinte wirklich paralell. Wenn beispiielsweise die Routine zum 
Lesen/Senden der Ethernet Pakete (immer wieder) hängen bleibt, dann soll 
dennoch die Durschleifung der originales Signale gewähleistet sein. Der 
Watchdog setzt dann den µC zurück, dann müsste "nur" zu Beginn der Main 
Loop die Sicherheitsabfrage kommen.

c-hater schrieb:
> du dir nicht überlegt: die Anforderungen bezüglich Durchsatz und
> Latenzen.

Doch hab ich, aber ich hab vergessen sie hier zu Posten. Nach einer 
ersten Überlegung sollte der Sicherheitskritische Teil (also ob die 
Signale durchgeschliffen oder die vom Netzwerk an den DOs gesendet 
werden) auf jeden Fall < 50 ms garantiert sein! Für die Umsetzung der 
eigentlich Signale, egal ob die aus dem DI oder die über Ethernet gilt 
ähnliches, wobei hier wie immer schneller besser ist! Durchsatz kann ich 
derzeit leider wirklich nur Abschätzen. Da warte ich selbst noch auf 
neue Informationen. Wobei ich bei den DIs von etwa 100 Hz ausegehe. ABER 
wie gesagt das sind erste Abschätzungen, die genauen Werte stehe noch 
aus. Ich bin wie gesagt ganz am Anfang des Projektes und wollte mir im 
Vorfeld die richtigen Gedanken machen!

Hmm schrieb:
> Was das Aufhängen angeht : Das hat man damit zuverlässig abgefangen. Die
> µC prüfen sich gegenseitig, per zyklischer Kommunikation. Ist die
> inkonsistent, lösen sie beide unabhängig voneinander den sicheren
> Zustand aus.

Sehr intressante Idee, über die ich noch gar nicht nachgedacht habe. 
Danke für den Anreiz.

Martin S. schrieb:
> Das Problem ist immer dann, wenn Watchdogs auslösen,
> wenn sie eigentlich gar nicht sollten und bei gewissen Szenarien munter
> Endlos-Rebootschleifen auftreten.

Genau dabei hab ich ebenfalls die größten Bedenken. Wenn ich einfach gar 
nicht mehr zur Sicherheitsabfrage komme wäre schlecht. Jedoch wäre mein 
Code eventuell ganz einfach und man könnte das dann ausschließen.

Martin S. schrieb:
> Deswegen bin ich eher für den dualen Weg: die Sicherheitsschaltungen
> sind simpel und in primiver Logik realisiert, somit sind die
> Fehlerszenarien einfacher durchzusimulieren. Alles was irgendwie hart
> 'realtime' ist kommt in autonome Logik.
So ähnlich hatte ich mir das mit dem FPGA von Anfang an gedacht - nur 
dann eben mit LV, aber deine Begründung gegen LV kann ich gut 
nachvollziehen. Wird sehr schwer wenn man das extern prüfen lassen 
müsste (Ich weiß noch nicht ob das erforderlich ist, kläre ich derzeit).

Martin S. schrieb:
> Für den Rest packt man sich einen gut verifizierbaren uC ins FPGA und
Das wäre bei mir ja nur die Verteilung von und nach Ethernet UDP, selbst 
wenn die mal abstürzt/hängen bleibt wäre es dann nicht schlimm. Da die 
Sicherheitsabfrage ausgelagert auf dem FPGA läuft.

Martin S. schrieb:
> Weitergehende Doku dazu findest du auch unter
> https://section5.ch/index.php/dokumentation/masocist-soc/, da liegt auch
> n Link aufn Docker-Container, den du für die "akademischen Zwecke" frei
> missbrauchen kannst.

Eure ganze Webseite ist viel Lesestoff, ich werd mich mal durcharbeiten 
und kann mir gut vorstellen, dich nochmals direkt anzuschreiben. Vielen 
Dank schonmal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.