Forum: Compiler & IDEs "ChISL" - Chip Interface Specification Language


von Markus M. (Firma: Mayer Analytics) (mcmayer)


Lesenswert?

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
von Vancouver (Gast)


Lesenswert?

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

von Markus M. (Firma: Mayer Analytics) (mcmayer)


Lesenswert?

> source code für was?
Ich habe zwei Paragraphen eingefügt, der das hoffentlich klarer macht. 
Danke für den Hinweis.

: Bearbeitet durch User
von Vancouver (Gast)


Lesenswert?

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?

von Markus M. (Firma: Mayer Analytics) (mcmayer)


Lesenswert?

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
von Vancouver (Gast)


Lesenswert?

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?

von Markus M. (Firma: Mayer Analytics) (mcmayer)


Lesenswert?

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.

von Onkel Honko (Gast)


Lesenswert?

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.

von Markus M. (Firma: Mayer Analytics) (mcmayer)


Lesenswert?

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?

von D. F. (Firma: EDF) (derdan)


Lesenswert?

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.

von Markus M. (Firma: Mayer Analytics) (mcmayer)


Lesenswert?

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.

von Klakx (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.