Typsichere Interfaces für heterogene Embedded-Systeme.
Ein YAML. Vier Sprachen. Generierter Code für FPGA, C, C++ und Python — inklusive Glue-Code über alle Grenzen hinweg.
embgen ersetzt nicht euren Codegenerator — es ist die fehlende Schicht, die eure Hardware- und Software-Interfaces konsistent hält.
Das Problem
Manuelle Interface-Synchronisation
FPGA-Ingenieur ändert ein Register — Firmware-Entwickler und Test-Team müssen manuell nachziehen. Jede Änderung ein Risiko.
Fehleranfällige Glue-Schichten
FPGA-to-C, C-to-C++, C++-to-Python Übergänge sind handgeschrieben. Typ-Mismatches und Alignment-Fehler kosten Tage im Debugging.
Keine Single Source of Truth
Register-Docs in Excel, C-Header manuell gepflegt, Python-Wrapper veraltet. Drei Wahrheiten — keine davon aktuell.
Features
Eine YAML-Datei. Vier Sprachen. Vollständig typsicher.
Code-Generierung
Aus einer YAML-Definition typsicheren Code für VHDL, C, C++ und Python generieren. Konsistent und reproduzierbar.
- VHDL: AXI-Lite Entities, Config-Packages, AXI-Stream FIFO
- C: volatile structs, Bitfield-Makros, HAL-Funktionen, DMA Ring-Buffer
- C++: RAII-Wrapper, virtual Interfaces, std::function Observer, Template Ring-Buffer
- Python: ctypes-Deskriptoren, cffi/pybind11, dataclasses
embgen generate system.yml --targets vhdl,c,cpp,python
Automatischer Glue-Code
Jede Sprachgrenze wird automatisch überbrückt — typsicher und ohne Boilerplate.
- FPGA → C: Platform-HAL (Linux/bare-metal), mmap, DMA, IRQ-Handler
- C → C++: extern "C" Wrapper, RAII-Bridge, std::function Event-Bridge
- C++ → Python: pybind11-Module oder ctypes-Fallback
- CMakeLists.txt + pyproject.toml mit --build-system Flag
embgen generate system.yml --build-system
Inkrementelle Generierung
Content-Hash-Vergleich statt Timestamp — nur geänderte Dateien werden geschrieben.
- SHA256-basierter Content-Hash ohne Timestamp-Zeile
- --force Flag: Alles neu schreiben, --clean: Waisen löschen
- Manifest-basiertes Cleanup: entfernte Interfaces = entfernte Dateien
- Status: "65 file(s) (3 written, 62 unchanged)"
embgen generate system.yml --clean
Compliance & Traceability
CycloneDX SBOM, Compliance-Reports und nahtlose embtrace-Integration für EU CRA.
- CycloneDX 1.5 SBOM-Export aus interfaces.yaml
- Interface-Compliance-Reports: Orphans, SHA256-Integrität, Coverage
- interfaces.yaml als Integrations-Artefakt zu embtrace
- PlantUML-Diagramme und Manifest-Diff
embgen sbom interfaces.yaml --format json
5 Interface-Typen
Jeder Typ erzeugt sprachspezifische Artefakte — von VHDL-Entities bis Python-Deskriptoren.
register
Memory-mapped Read/Write Register mit Bitfeld-Definitionen und automatischer Address-Berechnung.
function
Synchroner Call/Return. Für HAL-Abstraktionen und Treiber-APIs.
event
Asynchrone Benachrichtigungen. IRQs, Callbacks und Observer-Pattern.
stream
Kontinuierliche Datenströme. Für High-Throughput Sensor-Daten und Signalverarbeitung.
config
Statische Parameter. Compile-Time-Konstanten über alle Sprachen hinweg konsistent.
4x4 Boundary-Matrix
Jede Provider/Consumer-Kombination erzeugt passenden Glue-Code. Automatisch aufgelöst.
Import / Export
Bestehende Modelle importieren, in Industrie-Standards exportieren.
Enterprise Architect / XMI
ImportXMI 2.1 Export aus Enterprise Architect direkt in ein embgen system.yml konvertieren. Stereotyp-basiertes Mapping.
embgen import xmi diagram.xmi --output system.yml
SystemRDL
ImportSystemRDL-Register-Definitionen (.rdl) direkt importieren. Access-Mapping, Reset-Values, Feld-Beschreibungen.
embgen import systemrdl registers.rdl -o system.yml
IP-XACT (IEEE 1685)
Import ExportIP-XACT XML importieren und exportieren. Dual-Namespace-Support (2014 + 2009) für FPGA-Vendor-Tools.
embgen import ip-xact component.xml -o system.yml embgen export ip-xact system.yml -o component.xml
SysML v2
ImportSysML v2 JSON oder REST-API (SysON) importieren. Heuristische Typ-/Kind-Inferenz aus PartDefinitions und Ports.
embgen import sysml --json-file model.json -o system.yml embgen import sysml --base-url URL --project-id ID
Ein YAML, vier Sprachen
Eine deklarative Systemdefinition erzeugt konsistenten Code über alle Sprachgrenzen.
system.yml (Eingabe)
system: name: sensor_platform version: "1.0.0" components: - id: adc_frontend type: fpga provides: - id: adc_ctrl kind: register fields: - name: enable bits: "0" access: rw - name: sample_rate bits: "15:8" access: rw - id: adc_data kind: stream data_type: int16 - id: signal_proc type: cpp consumes: [adc_frontend.adc_ctrl, adc_frontend.adc_data] - id: test_gui type: python consumes: [signal_proc.processed]
Generierter Output
embgen generate system.yml --targets vhdl,c,cpp,python gen/ vhdl/ adc_frontend_adc_ctrl_pkg.vhd adc_frontend_adc_ctrl_axi.vhd adc_frontend_adc_data_axis.vhd c/ adc_frontend_adc_ctrl.h adc_frontend_adc_data_stream.h cpp/ adc_frontend_adc_ctrl_wrapper.hpp adc_frontend_adc_data_buffer.hpp python/ adc_frontend_adc_ctrl.py glue/ fpga_to_c_adc_ctrl_hal.c fpga_to_c_adc_data_dma.c c_to_cpp_adc_ctrl_bridge.cpp cpp_to_python_pybind.cpp interfaces.yaml 15 file(s) generated (15 written, 0 unchanged)
Lizenz-Modell
Open-Core: Kostenloser Einstieg, professionelle Features bei Bedarf.
Community
Kostenlos
Für Evaluation und kleine Projekte
- Register-Interface-Typ
- 1 Target-Sprache (VHDL oder C)
- embgen validate + generate
- embgen info + schema
- Kein Glue-Code
- Kein Import/Export
Professional
Auf Anfrage
Für produktive Embedded-Teams
- Alle 5 Interface-Typen
- Alle 4 Targets (VHDL, C, C++, Python)
- Automatischer Glue-Code
- Manifest, Diagram, Diff, SBOM
- Compliance-Reports
- EA/XMI Import, Template-Overrides
Enterprise
Auf Anfrage
Für Grossunternehmen und OEMs
- Alles aus Professional
- SystemRDL Import
- IP-XACT Import + Export (IEEE 1685)
- SysML v2 Import (JSON + REST API)
- Unbegrenzte Komponenten
- Prioritäts-Support
embgen + embtrace
Zwei Tools, ein durchgängiger Workflow für CRA-konforme Embedded-Systeme.
Nahtlose Integration
-
embgen generiert typsichere Interfaces und erzeugt
interfaces.yamlals Manifest -
embtrace nutzt
interfaces.yamlals Input für Interface-SBOM und Compliance-Tracking - CycloneDX SBOM aus embgen fliesst direkt in embtrace SBOM-Merge ein
- Compliance-Reports von embgen werden Teil des embtrace Evidence-Package
Architektur
embgen embtrace ┌──────────────┐ ┌──────────────────┐ │ system.yml │ │ Yocto/Buildroot │ └──────┬───────┘ └────────┬─────────┘ │ │ embgen generate embtrace sbom import │ │ ┌──────┴───────┐ ┌────────┴─────────┐ │ VHDL, C, C++ │ │ Product SBOM │ │ Python, Glue │ │ (CycloneDX 1.5) │ └──────┬───────┘ └────────┬─────────┘ │ │ ┌──────┴───────┐ │ │ interfaces │──────────────────►│ │ .yaml │ Interface-SBOM │ └──────────────┘ │ │ ┌────────┴─────────┐ │ CRA Evidence │ │ Package │ └──────────────────┘
Entwickelt von Innomatica GmbH — basierend auf über 10 Jahren Erfahrung in Embedded-Software-Entwicklung für heterogene SoC-Plattformen.
embgen entstand aus der täglichen Arbeit mit dem TC4-Testsystem — 23 Zynq-Module mit FPGA, Cortex-A53, Cortex-R5F und Python-Testumgebung. Reales Dogfooding statt theoretischer Feature-Listen.
Bereit für konsistente Interfaces?
Wir helfen Embedded-Teams, ihre Interface-Schichten zu automatisieren — von der YAML-Definition bis zum generierten Code.