Forum: FPGA, VHDL & Co. TTD auf dem Zynq von Xilinx


von StoneA (Gast)


Lesenswert?

Hallo,

wie der Name des Betrags erahnend lässt, würde ich gerne mein Projekt 
mithilfe des TTD-Verfahren entwickeln. Im Embedded-Bereich ist diese 
jedoch nicht immer ganz einfach, deswegen habe ich einige Fragen zu dem 
Thema sowie auch zur Toolchain.

Anstoß dazu gab folgendes Buch: Test Driven Development for Embedded C

Meine Umgebung sieht wie folgt aus:
Basis ist das zc706 Eval Board von Xilinx.
Als OS soll das im SDK 2016.2 mitgelieferte freeRTOS verwendet werden.
So viel zur Basis:

In dem Buch und im Netz habe ich Unity bzw. Ceedling als Test-Framework 
gefunden, welches den Anforderungen entsprechen sollte.
Wie sind da die Erfahrungen?

Ist Unity mit dem Vivado/SDK kompatibel?
Wie wäre hier der Ablauf? Muss der JTAG-Debugger mit dem Device 
verbunden sein, um die Tests auf dem Board zu durchlaufen, um dann die 
Resultate des Testruns zu bekommen.
Mir würde als erster Schritt ausreichen die Testresultate im 
Konsolenfenster (über das Serial-Interface) zu sehen.


Wo liegen die Grenzen des Testens mit diesem Framework? Einzelne 
Methoden lassen sich sicher wie in anderen Frameworks (z. B. JUnit im 
Java Bereich oder BOOST) mit Resultat und Erwartungswert abgleichen. 
Aber wie sieht es aus, wenn Betriebssystem Funktionalitäten ins Spiel 
kommen (Deadlocks, Race-Conditions, usw.).
Ist es im allgemeinen mögliche Interrupt-Verhalten strukturiert zu 
testen?


Danke im Voraus für die Anregungen.
Andre

von Foren-Polizei (Gast)


Lesenswert?

StoneA schrieb:
> TTD-Verfahren

TTD?

von StoneA (Gast)


Lesenswert?

Foren-Polizei schrieb:
> StoneA schrieb:
>> TTD-Verfahren
>
> TTD?

Sorry: Das sollte: TDD - "Test Driven Development" heißen.

von Christoph (Gast)


Lesenswert?

Leider kann ich dir keine selber erlebten Erfahrungen weitergeben, würde 
aber gerne bei der Arbeit TDD mit dem Zynq machen. Bin also froh, wenn 
sich dem jemand annimmt :-)

StoneA schrieb:
> Wie wäre hier der Ablauf? Muss der JTAG-Debugger mit dem Device
> verbunden sein, um die Tests auf dem Board zu durchlaufen, um dann die
> Resultate des Testruns zu bekommen.

Idealerweise bist du in der Lage, deine kompletten Unit Tests ohne reale 
Hardware durchlaufen zu lassen. Dann brauchst du weder Board oder 
JTAG-Debugger.

Der Vorteil ist, dass die ganze Testerei, so wie üblich, auf einem 
separaten automatisierten Buildserver laufen kann.

Damit das so weit kommen kann, braucht es mehrere Elemente.
Zum einen musst du deine Zynq Software ausführen können, das geht mit 
einem Emulator wie QEMU. Eine kurze Suche brachte dazu sogar ein kurzes 
Tutorial von Xilinx zu Tage: 
http://www.wiki.xilinx.com/Testing+FreeRTOS+on+Zynq+QEMU

QEMU emuliert aber nur den CPU Kern und nur die wenigste Peripherie 
(Kenne den Stand nicht, was dabei ist und was nicht). Also muss 
sichergestellt sein, dass der zu testende Code so abstrahiert ist, dass 
keine (simulierte) Peripherie benötigt wird für den Test. Wenn das nicht 
geht muss für die benötigte Peripherie ein Simulationsmodel erstellt 
werden und in QEMU eingebunden werden.

Also je weiter weg der zu testende Code von der Hardware ist, je 
einfacher geht das. Benutzerinterfaces, Software Protokolle zu anderen 
Systemen, Datenaustausch und Libraries dazu können so entwickelt und 
getestet werden ohne Board.
Bootloader und low-level Treiber gehen so gut wie nicht.


Richtig cool wird es dann, wenn das selbe Testsystem nicht nur mit 
Emulation läuft, sondern wahlweise auch per JTAG-Debugger und serieller 
Schnittstelle mit einem realen Board.
Die SW Entwickler/Build Server arbeiten dann oft ohne Board bzw. 
entwickeln schon Monate bevor überhaubt ein Board gebaut wurde. Sobald 
dann Boards da sind können dann die Hardware Entwickler und Tester 
verifizieren ob beide Welten zusammenpassen.

> Mir würde als erster Schritt ausreichen die Testresultate im
> Konsolenfenster (über das Serial-Interface) zu sehen.

Das ist bei Embedded Systemen üblich das Serial-Interface für solche 
Ausgaben zu nutzen. Es ist in jeder HW vorhanden und oft frei von 
Datentransfer der eigentlichen Applikation.

Serial-Interface ist auch in der Emulation oft drin.

> Wo liegen die Grenzen des Testens mit diesem Framework? Einzelne
> Methoden lassen sich sicher wie in anderen Frameworks (z. B. JUnit im
> Java Bereich oder BOOST) mit Resultat und Erwartungswert abgleichen.
> Aber wie sieht es aus, wenn Betriebssystem Funktionalitäten ins Spiel
> kommen (Deadlocks, Race-Conditions, usw.).

Im Prinzip möglich, dass du solche Probleme siehst, da das OS ja 
unverändert läuft.

Deadlocks etc. treten aber oft in Zusammenhang mit Peripherie oder 
externer Hardware auf, da ist die Methode limitiert auf die genutzten 
Simulationsmodelle und deren Fähigkeiten.

Vorteil ist natürlich, dass bestimmte Extrem- oder Fehlerzustände in der 
Simulation einfacher herbeigeführt werden können als mit realer 
Peripherie.



Wenn meine Hinweise gerade kompliziert oder nach viel Aufwand tönen, 
nicht abschrecken lassen. Ausprobieren wie weit du kommst.

Der initiale Aufwand kann schon recht hoch sein aber die Idee ist ja, 
dass alle zukünftigen Projekte auch nach dieser Methode entickelt 
werden, sich der Aufwand also mit jedem neuen Projekt zurückzahlt.

Es ist auch normal, dass nicht beim ersten Projekt alle Aspekte und 
Wünsche eingebaut werden. Dazu bekommt kaum jemand das nötige Budget. 
Diese Sachen wachsen mit der Zeit, den Ansprüchen und dem was man auf 
dem Weg dahin gelernt hat.

von Projektmanager (Gast)


Lesenswert?

Christoph schrieb:
> sich der Aufwand also mit jedem neuen Projekt zurückzahlt.

Soweit die Theorie. Die Praxis ist leider, dass es so viele Änderungen 
von Projekt zu Projekt gibt, dass das Rückzahlen lange dauern kann.

Ferner ist es so, dass sich das absolut nicht in jedem Projekt lohnt. 
Daher scheuen viele den overhead und entwickeln dasso knapp, dass es 
noch ins Budget passt.

Wenn so ein Invest was werden soll, dann muss eine Firma dafür ein 
Budget aufmachen und Leute abstellen, die die Entwickler gezielt 
dahingehend beraten und unterstützen. Sie müssen geschult werden, 
Vorgehendweisen müssen standardisiert und "genormt" werden. Sie müssen 
gepflegt und kommuniziert werden. Das wird eine Selbstläufer, der Kosten 
aufwirft.

Nicht jeder Projektleiter ist geneigt, das zu akzeptieren und dafür Geld 
auszugeben, nur dafür dass nachher ein anderer PL mit seinen Projekten 
sehr schnell durchkommt und sich die Prämien holt.

Der Projektleiter der so ein System erstmals einführt, der legt nälich 
schwer drauf, weil die ganze Truppe erstmal in seinem Projekt die ganzen 
Anfängerfehler machen muss. Ich persönlich hätte dazu keine Lust.

von Christoph (Gast)


Lesenswert?

Projektmanager schrieb:
> Wenn so ein Invest was werden soll, dann muss eine Firma dafür ein
> Budget aufmachen und Leute abstellen, die die Entwickler gezielt
> dahingehend beraten und unterstützen.

Das passiert noch am ehesten in sog. regulierten Märkten wie der 
Medizintechnik oder der Avionik. Je nach Risiken sind da 100% 
Testcoverage von den Normen gefordert.

Projektmanager schrieb:
> Nicht jeder Projektleiter ist geneigt, das zu akzeptieren und dafür Geld
> auszugeben, nur dafür dass nachher ein anderer PL mit seinen Projekten
> sehr schnell durchkommt und sich die Prämien holt.

Danke für deinen Input aus der Praxis, der sich durchaus deckt mit dem 
was ich erlebe und von Kollegen höre.

Unser Weg als Ingenieure in solchen Situationen ist, dass wir in jedem 
Projekt neben bei etwas an unserer Vorgehensweise und unseren Tools 
rumwerkeln. Führt dazu, dass wir zwar nach vielen Jahren dann dort sind, 
wo wir (also mindestens ich und der Projektmanager) hin wollen aber 
dazwischen gibt es zig Projekte die alle ihre Eigenheiten haben in den 
Tools und der Vorgehensweise, weil eben genau nichts standardisiert und 
"genormt" ist.

von von Leid und Frameworks geprüfter (Gast)


Lesenswert?

Wieder mal ein Versuch den "unwissenden FPGA-Ingenieuren" irgendein 
Softwerker-Korsett zum Testen überzustülpen, weil ja FPGA auch nur 
Software ist.

Beitrag "embedded Unit-Tests"
Beitrag "Wie schreibt man eine richtige Testbench"
Beitrag "Vorgehen zum Hardware entwurf"
https://embdev.net/topic/338144
Beitrag "Verifikationsumbegung"

Ich bin skeptisch, ob diesmal mehr als das x+1. akademische Konzept 
rauskommt, dessen praktische Bedeutung nach 0 konvergiert.

von FPGA-Ingenieur (Gast)


Lesenswert?

von Leid und Frameworks geprüfter schrieb:
> Wieder mal ein Versuch den "unwissenden FPGA-Ingenieuren" irgendein
> Softwerker-Korsett zum Testen überzustülpen, weil ja FPGA auch nur
> Software ist.

Das macht in begrenztem Umfang aber durchaus Sinn, weil zwar nicht FPGAs 
- aber der Entwicklungsvorgang des FPGAs - eine 
Softwareentwicklungstätigkeit ist. Alle für die Softwareentwicklung 
verfügbaren Methoden, Tests und Funktionalitäten lassen da anwenden.

Das ändert natürlich nichts an dem Umstand, dass FPGA-Entwicklung 
bestimmtes Wissen benötigt, welches sich gänzlich von dem der Windows- 
oder embedded-Entwicklung unterscheidet.

von S. R. (svenska)


Lesenswert?

Ich frage mich immer, wo man eine gute Grenze zwischen Verifikation und 
Implementation zieht. Insbesondere bei Ansätzen wie TDD klingt das nach 
"wir schreiben ab sofort nur noch Testbenches".

Bestehen übliche Projekte aus 85% Testbench und 15% Implementation, oder 
welche Verhältnisse sind allgemein üblich (und gut)?

von C. A. Rotwang (Gast)


Lesenswert?

S. R. schrieb:

> Bestehen übliche Projekte aus 85% Testbench und 15% Implementation, oder
> welche Verhältnisse sind allgemein üblich (und gut)?

Bei der FPGA-Entwucklung gibt viel mehr 
Nicht-Implementations-Tätigkeiten als Testbench-Erstellung.
Manche Entwickler arbeiten nur mit Debug-Equipment am Target und 
schreiben keine einzige Zeile Testbench. Das konkrete Verhältniss 
zwiachen Implementierung und "Ans Laufen bringen" ist stark von der 
Erfahrungstiefe des Entwicklers abhängig.
Mancher Quereinsteiger schafft garnix, weil er nur vorm Monitorsitzt und 
nicht in der Lage ist reale Umstände durch Messung/Testläufe zu 
erfassen, alte Hasen haben ihr designan Vorgängerprojekten  soweit 
entfehlert, das neue Revisionen quasi auf Anhieb laufen.

PS:
Mglw. hat keiner der Programmierer-Quereinsteiger je eine VHDL-Testbench 
gesehen und meint jetzt das wäre das gleiche wie in der 
Softwareentwicklung.

von Blechbieger (Gast)


Lesenswert?

Ich habe den Threadersteller so verstanden das er TDD für die Software 
auf dem ARM-Teil des Zync verwenden will. Vor dem gleichen Problem auf 
der Alteraseite stehe ich gerade.

von Christoph (Gast)


Lesenswert?

von Leid und Frameworks geprüfter schrieb:
> Wieder mal ein Versuch den "unwissenden FPGA-Ingenieuren" irgendein
> Softwerker-Korsett zum Testen überzustülpen, weil ja FPGA auch nur
> Software ist.

Nur nebenbei: Der TO fragte nach Unittesting von FreeRTOS auf dem 
embedded ARM Core im Zynq. Das ist Softwareentwicklung...

Aber zur eigentlichen Bemerkung:
Ich bin selber ein FPGA-Ingenieur und möchte mir selber einen 
automatisierten Build- und Testflow auf einem Buildserver überstülpen, 
damit ich jeden morgen ein E-Mail habe wenn etwas nach dem letzten 
Commit nicht mehr geht.

Derzeit sieht es aber so aus, als wäre die grösste Hürde dahin, die 
verfügbaren Lizenzen von Modelsim...

Es geht natürlich nicht, dass irgendwelche, ich nenne sie mal so, 
Software-Manager da irgenwas einführen möchten, dass nur aus Buzzwords 
besteht.

Wir Entwickler müssen da schon selber unser Wissen und unsere 
Bedürfnisse einbringen, sonst wird es in der Praxis nicht genutzt und 
ist wie geschrieben für die Tonne.

von Leid und Frameworks geprüfter schrieb:
> Ich bin skeptisch, ob diesmal mehr als das x+1. akademische Konzept
> rauskommt, dessen praktische Bedeutung nach 0 konvergiert.

In erster Linie bin ich in solchen Sachen faul und gucke mir gerne an, 
was bei anderen täglich gut funktioniert und ich nur noch ein bisschen 
für mich adaptieren muss. Da ist ein Blick über den Tellerrand nicht 
verkehrt (den gibt es auf beide Seiten, zu den Softwareentwicklern aber 
auch zu den ASIC Entwicklern).

von Blechbieger (Gast)


Lesenswert?

Blechbieger schrieb:
> Vor dem gleichen Problem auf der Alteraseite stehe ich gerade.

Ergänzung: für Linuxanwendungen auf dem ARM-Teil verwende ich 
erfolgreich CPPUTEST mit Ausführung der Tests sowohl auf dem Host als 
auch auf dem Target. Wo ich noch etwas kämpfe ist NIOS 
Baremetal-Anwendungen. Und ich schätze Entwicklung am Linuxkernel bzw. 
Linuxtreiber ist für Unittesting nicht zugänglich.

von von Leid und Frameworks geprüfte (Gast)


Lesenswert?

Christoph schrieb:
> von Leid und Frameworks geprüfter schrieb:
>> Wieder mal ein Versuch den "unwissenden FPGA-Ingenieuren" irgendein
>> Softwerker-Korsett zum Testen überzustülpen, weil ja FPGA auch nur
>> Software ist.
>
> Nur nebenbei: Der TO fragte nach Unittesting von FreeRTOS auf dem
> embedded ARM Core im Zynq. Das ist Softwareentwicklung...

Schob aber die Anfrage ins FPGA-Forum, wohl weil der ZYNQ als FPGA gilt, 
wäre aber, da er ausschließlich auf den µC Anteil fokussiert, m.E. mit 
dem µC-Unterforum besser bedient.

Und dann kommt einer mit:
"Das macht in begrenztem Umfang aber durchaus Sinn, weil zwar nicht 
FPGAs
- aber der Entwicklungsvorgang des FPGAs - eine
Softwareentwicklungstätigkeit ist. Alle für die Softwareentwicklung
verfügbaren Methoden, Tests und Funktionalitäten lassen da anwenden."

Und bei den typischen FPGA-Designs (alles ausser Zybo/Aria 10) kann man 
die angedeudeten Methoden wie JUnit, BOOST, Ceedling, Unity eher nicht 
anwenden. testen/Verifikation auf dem FPGA nutz eben einen erweiterten 
Satz an Soft- und Hardwaretools die einem Embedded Softwareentwickler 
eben nicht zur Verfügung steht.

von Christoph (Gast)


Lesenswert?

S. R. schrieb:
> Bestehen übliche Projekte aus 85% Testbench und 15% Implementation, oder
> welche Verhältnisse sind allgemein üblich (und gut)?

Gut ist, was dich effizient zu einem zuverlässigen System bringt.

Eine Simulation ist gut, weil du den Zustand deines Systems ganz präzise 
herstellen kannst, jedesmal. Gut ist sie auch, weil du jedes einzelne 
Signal, egal wie tief vergraben im Design, analysieren kannst.
Effizient ist sie, wenn es nur kurze (simulierte) Zeit geht um einen 
bestimmten Zustand zu erreichen (System initialisieren, eine 
Funktionalität testen, verifizieren).

Testen auf der echten Hardware ist gut, weil du Probleme erkennst, die 
erst durch reales Timing entstehen (liegt dann meistens an 
fehlenden/falschen Constraints) und ob deine Annahmen über die Umgebung 
(andere Chips, Prokokolle etc.) stimmen.
Effizient ist es, weil es möglich ist in sehr kurzer Zeit (verglichen 
mit der Simulation) sehr viele repetitive Tests zu machen (Simulation 
ist oft nur der Test ob es ein/zwei mal tut, in HW geht auch das Testen 
ob es 100'000 mal  oder 24h funktioniert).

Ein Trick hierbei kann sein, wenn die FPGA Implementation während der 
Entwicklung zusätzliche Hardware beinhaltet, um Daten auf Korrektheit zu 
prüfen. So zu sagen einen Teil der Testbench (der Checker) zu 
synthetisieren. Im Endprodukt lässt man diesen Overhead dann wieder weg.

In HW erkannte Fehler sind meistens einfacher zu analysieren und zu 
beheben, wenn die Simulation so erweitert werden kann, dass genau dieser 
Fehler nach kurzer Simulationszeit auftritt. (Das ist dann das nächste 
Buzzword DDT – Defect Driven Testing :-) )

Also nachdenken und schlau das beste von beidem kombinieren.

von Christoph (Gast)


Lesenswert?

S. R. schrieb:
> Bestehen übliche Projekte aus 85% Testbench und 15% Implementation, oder
> welche Verhältnisse sind allgemein üblich (und gut)?

Vergessen zu erwähnen: Kommt auch darauf an, wie hoch das Risiko ist die 
reale Hardware zu zerstören (und was es dann kostet). Hat hier jemand 
Leistungselektronik gesagt? :-) (obwohl es kein Witz ist, explodierende 
Leistungselektronik kann dauerhafte Hörschäden verursachen...)

von S. R. (svenska)


Lesenswert?

C. A. Rotwang schrieb:
> Bei der FPGA-Entwucklung gibt viel mehr
> Nicht-Implementations-Tätigkeiten als Testbench-Erstellung.
> Manche Entwickler arbeiten nur mit Debug-Equipment am Target und
> schreiben keine einzige Zeile Testbench.

Ja, das ist natürlich schon klar, dass Simulation alleine nicht 
ausreicht, die Verifikation also auch (oder größtenteils) am Gerät 
stattfinden muss.

Ich habe zwar bis zum letzten Jobwechsel mit FPGAs zu tun gehabt, aber 
als ziemlicher Anfänger alleine. Inzwischen habe ich damit (zum Glück) 
beruflich nichts mehr zu tun. Das bestand halt zu 90% aus Implementieren 
und "am Gerät testen" und hat mehr oder weniger schlecht funktioniert.

C. A. Rotwang schrieb:
> Mancher Quereinsteiger schafft garnix, weil er nur vorm Monitorsitzt und
> nicht in der Lage ist reale Umstände durch Messung/Testläufe zu
> erfassen, alte Hasen haben ihr designan Vorgängerprojekten  soweit
> entfehlert, das neue Revisionen quasi auf Anhieb laufen.

Das klingt, als ob bei euch eher wenig simuliert wird, sondern eher die 
Hardware in situ verifiziert wird. Oder lese ich da was falsches rein?

Christoph schrieb:
> Gut ist, was dich effizient zu einem zuverlässigen System bringt.
> [...]
> Also nachdenken und schlau das beste von beidem kombinieren.

Naja, ich wollte halt wissen, wie andere sowas lösen. Irgendwie kriege 
ich das auch alles hin, aber es fühlt sich weder effizient noch gut an, 
mit Halbwissen irgendwelchen Text zusammenzuprobieren und zu 
synthetisieren.

Christoph schrieb:
> Kommt auch darauf an, wie hoch das Risiko ist die
> reale Hardware zu zerstören (und was es dann kostet).

In Software habe ich für solche Fälle einen Failsafe direkt vor dem 
Ausgang (d.h. in der Funktion, die am Ende die Pins setzt), um definitiv 
verbotene Zustände zu verhindern und laut ins Log schreit (falls 
vorhanden).

Mit gefährlicher Hardware habe ich aber auch nichts zu tun. 
Schlimmstenfalls macht es leise "plopp" oder "tickticktick" und ich muss 
jemanden mit echt guten Lötfähigkeiten finden... und ein Ersatzmodul.

von Strubi (Gast)


Lesenswert?

StoneA schrieb:
> Wo liegen die Grenzen des Testens mit diesem Framework? Einzelne
> Methoden lassen sich sicher wie in anderen Frameworks (z. B. JUnit im
> Java Bereich oder BOOST) mit Resultat und Erwartungswert abgleichen.
> Aber wie sieht es aus, wenn Betriebssystem Funktionalitäten ins Spiel
> kommen (Deadlocks, Race-Conditions, usw.).
> Ist es im allgemeinen mögliche Interrupt-Verhalten strukturiert zu
> testen?

Das Stichwort dazu ist Co-Simulation. Da habe ich vor Jahren mal ein 
relativ teures Tool von Cadence (möglw. war's Incisive) zu Gesicht 
bekommen, wo insbesondere für den Zynq der ARM-Core im Emulator und die 
zugehörige HDL im Simulator zusammen simuliert wird, das lief in der 
Demonstration ganz ordentlich, insbesondere auch zyklengenaue 
Darstellung der Wellenformen bei IRQ-Events.
Da hatte ich mir zu dem Zeitpunkt aber schon was mit ghdl und 
C-Erweiterungen gestrickt.
Wenn du das von Hand machen willst, ist qemu schon mal ein guter 
Hinweis, wenn du die CPU nicht in der HDL simulieren willst, bzw. 
kannst, da für den Normal-Otto die ARM-HDL nicht einfach vom Laster 
fällt.
Ich habe schliesslich aus anderen Gründen die ganze CPU auch noch in der 
HDL in die Simulation gesteckt, um 'FailSafe' nachzuweisen. Das geht mit 
dem ARM aufgrund seiner Komplexität nur bedingt, bzw. je nach 
Implementierung gar nicht (Coverage), das würde jetzt aber zu weit 
führen.
Mit GHDL und einer einfachen Soft-CPU kannst du schon potentielle 
Dead-Locks, TaskSwitching-Verhalten usw. unter div. Testszenarien 
ausloten. Dauert halt einfach sehr lange.
Wenn deine HW irgendwie über einen GDB proxy kommunizieren kann, kannst 
du auch die funktionierende Referenz (qemu) und die reale HW miteinander 
vergleichen, d.h. dasselbe Programm läuft auf Emulation und HW, und wird 
durch dasselbe gdb-script im stop'n'go Betrieb mit Breakpoints auf den 
beiden Targets verglichen.
Damit erkennst du aber keine fehlerhaften Programme, wie 
uninitialisierte Register (sowas rutscht bei manchen Code-Check-Farcen 
gnadenlos durch die Lappen), o.ä. - dann kommst du nicht drumrum, 
zumindest den IRQ-Controller in HDL vorliegen zu haben.

von C. A. Rotwang (Gast)


Lesenswert?

S. R. schrieb:

> C. A. Rotwang schrieb:
>> Mancher Quereinsteiger schafft garnix, weil er nur vorm Monitorsitzt und
>> nicht in der Lage ist reale Umstände durch Messung/Testläufe zu
>> erfassen, alte Hasen haben ihr designan Vorgängerprojekten  soweit
>> entfehlert, das neue Revisionen quasi auf Anhieb laufen.
>
> Das klingt, als ob bei euch eher wenig simuliert wird, sondern eher die
> Hardware in situ verifiziert wird. Oder lese ich da was falsches rein?

Du liest eher wenig raus. OK es steht nicht explizit drin, das natürlich 
auch alle reports von Sythese mapping sta pinreport etc ganau 
durchgelesen, verstanden und analysiert worden, alle warnings 
abgearbeitet und beseitigt, kritische designteile (Taktübergange) 
identifiziert und im Code review paarweise abgecheckt worden, ein style 
guide eingehalten wurde und in situ mit jeder menge monitoring 
(signaltap, scope) und special test cases (µC basierte User-Emus) lief.
Ansimuliert wurde natürlich auch und für den fall einer brauchts steht 
eine funktionierende Simu-umgebung bereit.

von Christoph (Gast)


Lesenswert?

S. R. schrieb:
> Ich habe zwar bis zum letzten Jobwechsel mit FPGAs zu tun gehabt, aber
> als ziemlicher Anfänger alleine. Inzwischen habe ich damit (zum Glück)
> beruflich nichts mehr zu tun.

Habe das auch vier Jahre lang alleine gemacht mit ähnlicher Frustration. 
Das war für mich der Auslöser um mir eine Firma zu suchen wo wir mehrere 
FPGA Entwickler sind um Erfahrungen auszutauschen. Das hat geholfen.

Das Forum hier war auch einer der besten Anlaufstellen.

> Christoph schrieb:
>> Kommt auch darauf an, wie hoch das Risiko ist die
>> reale Hardware zu zerstören (und was es dann kostet).
>
> In Software habe ich für solche Fälle einen Failsafe direkt vor dem
> Ausgang (d.h. in der Funktion, die am Ende die Pins setzt), um definitiv
> verbotene Zustände zu verhindern und laut ins Log schreit (falls
> vorhanden).

Ja, sowas ist schlau.

Ich habe solche Failsafes im FPGA gebaut für Leistungselektronik mit 50 
kVA, damit die DSP Entwickler machen konnten was sie wollten. Diese 
Blöcke habe ich freiwillig über viele Wiederholungen mit randomisierten 
Stimuli simuliert :-)


Wenn du diese Failsafe Routine z. B. als Makro (heute besser als inline 
function) implementierst, ist das auch gleich ein guter Anker um die 
Pinzuweisung von der Hardware zu abstrahieren. Auf dem Target und in der 
Testumgebung musst du nur diese eine Routine wechseln (#ifdef...) um die 
Pins zu setzen oder ein Log zu schreiben und einen Checker zu füttern.

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.