Hallo, wir haben uns entschlossen, ein intern benutztes Tool frei zur Verfügung zu stellen. Wir haben das Tool "ChISL" genannt, zu finden auf http://chisl.io (die Webseite ist noch 'alpha', aber hoffentlich kommt die Grundidee rüber). Worum geht es? Beim Programmieren von komplexen Chips, vor allem RF und Sensoren, via z.B. SPI oder I2C benutzen wir eine Meta-Beschreibung der digitalen Schnittstelle. Dazu gehören Register Adressen, Bits, Modi (lesen, schreiben, etc.), Defaults, usw. Der ChISL Parser erzeugt daraus dann C oder C++ source code (oder ein bisschen exotischer: Python), auf dem wir dann aufbauen. Beispiel: TC77 von Microchip, ein Temperatur Sensor mit einem einfachen SPI Interface. http://chisl.io/v/TC77 Der Chip hat drei Register, CONFIG, TEMP, und M_ID. Aus der Metabeschreibung wird das Headerfile erzeugt, dass die Addressen und Bitmasken usw. enthält. Beim TC77 ist das eine triviale Sache. Bei komplizierten Chips, z.B. bei den RF Chips von Semtech, z.B. http://chisl.io/v/SX1276_7_8_9?r=lora, ist es überhaupt nicht mehr trivial. Der ChISL source code ist generisch gehalten und ruft zum Datenaustausch mit dem Chip Funktionen auf, die dann die Details zum jeweiligen Microcontroller implementieren. Der Vorteil ist, dass die Code-Qualität garantiert ist, weil der Source Code direkt von der Dokumentation stammt. Dank der Metabeschreibung ist es auch möglich, diverse Tests laufen zu lassen. Ausserdem ist der Source Code standardisiert, es gibt keine Namenskonflikte, und wir können C++ einsetzen. (Die meisten Bibliotheken der Hersteller sind noch C89 - der kleinste gemeinsame Nenner.) Dann ist die Dokumentation in der Header Datei integriert, was in IDEs sehr nützlich ist. Apropos Dokumentation: Mit Hilfe der Metabeschreibung können wir eine Web-basierte Doku machen, die einfacher zu handhaben ist, als diverse Pdfs mit datasheet, User-manual, Errata, Application-notes, etc. Mich würde sehr interessieren, was die Mitglieder des Forums von ChISL.io halten. Wie gesagt, es ist ein internes Tool, und er erfordert noch ein bisschen Arbeit, bevor es wirklich präsentabel ist. Und bevor wir mehr Zeit investieren, würden wir gerne Feedback sammeln, hier im Forum, oder hier: http://chisl.io/questionnaire Besten Dank! Markus
:
Bearbeitet durch User
"Der ChISL Parser erzeugt daraus dann C oder C++ source code" ... source code für was? Ich vermute eine Schnittstellen-API? Aber die hängt doch nicht nur vom Chip selbst ab, sondern auch vom verwendeten Host-Controller, oder? Klingt aber interessant, ich werde mir die Beispiele einmal anschauen.
> source code für was?
Ich habe zwei Paragraphen eingefügt, der das hoffentlich klarer macht.
Danke für den Hinweis.
:
Bearbeitet durch User
Ok, verstanden, also ein Headerfile mit den Adressdefinitionen. Wir haben ein ähnliches Problem mit unseren FPGA-Designs. Die haben meistens ein Businterface, an dem hunderte, machmal tausend oder noch mehr Register hängen. Während der Entwicklung ändern die sich ständig, es kommen neue hinzu oder alte fallen weg. Dabei muss man die Header und die VHDL-Packages immer konsistent halten, damit FPGA und Software zusammenpassen. Könnte man Euer Tool auch dafür erweitern? Also man schreibt eine abstrakte Registerstruktur des FPGA und erzeugt daraus die C-header und ein VHDL-Package mit Registerdefinitionen?
Wir haben das schon ein mal mit Verilog gemacht :-) Das läuft noch auf einer Uraltversion, geschrieben in Python. Aber wenn das interessiert, dann können wir das mal auf neusten Stand bringen. (VHDL dann gleich mit.)
:
Bearbeitet durch User
Excellent :-) Verilog würde sogar aktuell besser passen. Werden die numerischen Registeradressen manuell vergeben, oder automatisch erzeugt, bzw. gibt es einen Check, ob keine Adressen mehrfach belegt sind?
Die Registeradressen muss man im Moment manuell vergeben. Wir haben das durchnummerieren damals einfach in das Python Skript hineingehackt. Um das sauber zu machen, könnte man eine kleine Erweiterung einführen und "REG AUTO = REGISTER_NAME: ...." schreiben. Das Schlüsselwort "AUTO" lässt den Parser dann schlicht durchnummerieren. Das Parsen hat zwei Schritte: 1. Syntax (z.Zt. auf der Webseite implementiert) 2. Konsistenz-Check (dazu gehört Fehlermeldung bei Addresskonflikten) D.h. ja, es wird alles kleinlich auf Fehler geprüft.
Ich kann den Sinn dahinter noch nicht ganz so erkennen. Registerdefinitionen sind ja nur ein ganz kleiner Teil des ganzen. Mir fehlen da Sachen wie Constraints, Tests (auch Dissectors) und einen Ansatz für Taxonomie.
Ja, stimmt. Die Registerdefinitionen sind nur der Anfang. Mit "Mode" und "Default" sind schon erste Schritte in Richtung Constraints gemacht, und es ist nicht schwer, die Sprache zu erweitern. Die Contstraints, die mich bisher interessiert haben waren, nicht über OTW (one-time-writeable) Regionen der register map zu schreiben. Geht das in die richtige Richtung? Mit Dissector ist gemeint, dass die Kommunikation (SPI, I2C, or whatever...) 'dekodiert' wird, für Debugging Zwecke? Da bin ich ganz dabei, sehr gute Idee. Es würde beim entwickeln extrem helfen, nicht Bits dekodieren zu müssen. Das mit der Taxonomie verstehe ich nicht ganz. Die Suchfunktion (auf der Webseite nicht aktiviert) braucht eine gute Indexierung - ist das gemeint?
Sicher eine gute Idee solch ein Tool. Was mich wundert ist das man sich nicht für ein JSON oder XML Format entschieden hat um die Definitionen einzugeben. Damit wäre es dann leichter weitere Tools zu implementieren, die auf der gleichen Beschreibung aufsetzten.
Die Entscheidung für dieses yaml-ähnliche Format kam so: Die Leute, die das Datenblatt in eine chisl Datei übersetzen, sind mit XML und JSON überhaupt nicht glücklich gewesen. => Anfordung: Leicht tippbar, falls nötig, und leicht zu lesen.
Ist der Sourcecode verfügbar oder wird immer auf der Seite geparst? Wäre ja blöd, wenn das mal wegbricht. Ich habe mir das jetzt nur per Handy angeschaut und nicht gesehen, wo ich meinen Code eingebe. In den Beispielen kann man etwas ansehen, aber mit generieren hat es noch nicht geklappt. Prinzipiell finde ich eine Portierung von C zu vhdl, verilog und umgekehrt nicht verkehrt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.