Zum Inhalt springen
hanse-computing.de
  • Moin
  • Über uns
  • Leistungen
  • Projekte
  • Neuigkeiten
  • Wissen
    • Netzwerktechniken
    • Systemadministration
    • Hardware-Spezifikationen
    • KI & Automatisierung
    • Glossar
      • Fachbegriffe
      • Programmiersprachen-Befehle
    • Datenbanken
    • IT-Grundlagen
    • Python: Grundlagen
    • Python: Datenstrukturen
    • Python: Dateien & IO
    • Python: Web & Frameworks
    • Python: Fehler & Debugging
    • Webentwicklung
    • Linux & Betriebssysteme
    • IT-Sicherheit
    • Cloud & Container
    • Tools & Software
    • Netzwerk: TCP/IP
    • Netzwerk: DNS & Dienste
    • Netzwerk: Sicherheit
    • Netzwerk: Tools
    • KI: Grundlagen
    • KI: Praxis
    • KI: LLM & Agenten
    • Hardware: Server
    • Hardware: Netzwerkgeräte
    • Hardware: Peripherie
    • Wiki-Startseite
    • Letzte Änderungen
    • Kategorie-Browser
    • Zufallsartikel
  • Infrastruktur
  • AI Easy Start
  • Test-Drive
  • Kontakt
  • Impressum
  • Datenschutz

Sprache auswählen

  • Deutsch (Deutschland)
  • English (United Kingdom)
  1. Aktuelle Seite:  
  2. Startseite
  3. Wissen
  4. Glossar
  5. Programmiersprachen-Befehle

Coq-Befehle: Übersicht und erste Schritte

Coq (seit 2024 auch unter dem Namen Rocq weiterentwickelt) ist ein interaktiver Beweisassistent auf Basis des Calculus of Inductive Constructions. Er entstand 1984 am INRIA in Rocquencourt aus einer Implementierung des Calculus of Constructions von Thierry Coquand und Gérard Huet; 1991 erweiterte Christine Paulin den Kalkül um induktive Konstruktionen. Coq wird für mathematische Beweise (z.B. Vier-Farben-Satz) und für formale Verifikation von Software (z.B. der Compiler CompCert) eingesetzt.

Erste Schritte

coqc Datei.v               # Datei kompilieren und prüfen (Verification)
coqtop                     # Interaktive REPL
coqide                     # Grafische IDE (Proof General/VS Code: VsCoq)
coq_makefile -f _CoqProject  # Makefile für Projekte erzeugen
Require Import Arith.      # Standard-Bibliothek laden
Check plus.                # Typ einer Definition anzeigen

Kernkonzepte

  • Gallina: Die eingebaute funktionale Sprache, in der Definitionen und Theoreme formuliert werden. Aus Gallina können per Extraction ausführbare Programme in OCaml, Haskell oder Scheme erzeugt werden.
  • Taktiken: Beweise werden mit kleinen Schritten geführt — intros, apply, destruct, induction, rewrite, auto und viele mehr.
  • Induktive Typen: Datentypen wie nat oder list definieren zugleich die zugehörigen Induktionsprinzipien.
  • Program Extraction: Aus konstruktiven Beweisen lassen sich lauffähige Algorithmen extrahieren — die Verbindung von Beweis und Programm.

Praxis-Tipps

  • Theorem t : forall n : nat, n + 0 = n. startet einen Beweis; Proof. intros n. simpl. reflexivity. Qed. schließt ihn ab.
  • Die SSReflect-Erweiterung (aus dem Mathematical Components-Projekt) beschleunigt große Beweise.
  • CompCert, ein formal verifizierter C-Compiler, wurde vollständig in Coq entwickelt und per Extraction nach OCaml übersetzt.
  • Für die Automatisierung stehen lia (Lineare Arithmetik) und omega-Nachfolger bereit.

Verwandte Grundlagen: Idris-Befehle, Agda-Befehle, Haskell-Befehle (alle drei Sprachen teilen die Curry-Howard-Idee).

SpinalHDL-Befehle: Hardware-Beschreibung in Scala

SpinalHDL ist eine quelloffene, in Scala eingebettete Hardwarebeschreibungssprache von Charles Papon (Projektstart um 2015). Anders als die ereignisgetriebenen Klassiker VHDL und Verilog fokussiert SpinalHDL auf effiziente Hardware-Beschreibung: Konstrukte wie Clock Domains, Streams und State Machines sind fest eingebaut. Die Designs werden in synthetisierbares Verilog oder VHDL übersetzt und sind damit kompatibel zu gängigen EDA-Tools.

Grundlagen

Ein Design besteht aus einer Klasse, die von Component erbt. Mit SpinalVerilog wird daraus Verilog erzeugt:

import spinal.core._

case class Zaehler(max: Int) extends Component {
  val io = new Bundle {
    val enable = in Bool()
    val wert   = out UInt(8 bits)
  }

  val reg = Reg(UInt(8 bits)) init (0)
  when(io.enable) {
    reg := reg + 1
    when(reg === max) { reg := 0 }
  }
  io.wert := reg
}

object Main extends App {
  SpinalVerilog(Zaehler(255))
}

Wichtige Konstrukte

  • Component, Bundle, in/out – Modul- und Portdefinition
  • Reg, RegNext, RegInit – Register mit Initialwert und Taktverzögerung
  • ClockDomain – getrennte Takt-/Reset-Domänen; when/switch – Bedingungen und Zustandsautomaten
  • Stream, Flow – Handshake-basierte Verbindungen (valid/ready) für Pipelines und Busse
  • SpinalVerilog, SpinalVhdl – Codegeneratoren

Einsatz

Das bekannteste SpinalHDL-Projekt ist VexRiscv, ein parametrisierbarer 32-Bit-RISC-V-Prozessor. Weil die Beschreibungssprache auf Scala aufbaut, lassen sich Busse (z. B. AXI) als wiederverwendbare Abstraktionen definieren und in einer Zeile instanziieren. Damit steht SpinalHDL in direkter Konkurrenz zu Chisel, der zweiten großen Scala-basierten Hardware-Konstruktionssprache.

Verwandte Grundlagen: Scala-Befehle, Verilog-Befehle, Chisel-Befehle, SystemC-Befehle (System-Level-Modellierung).

SystemC-Befehle: Hardware-Modellierung mit C++ (IEEE 1666)

SystemC ist keine eigene Programmiersprache, sondern eine C++-Klassenbibliothek und Simulationsumgebung für die Modellierung von Hardware und eingebetteten Systemen. Sie ist als IEEE-Standard 1666 genormt (2005, 2011, 2023) und wird von der Accellera Systems Initiative gepflegt. Mit SystemC beschreiben Entwickler Prozessoren, Speicher, Busse und ganze System-on-Chip-Designs auf einer höheren Abstraktionsebene als mit klassischen Hardwarebeschreibungssprachen wie VHDL oder Verilog.

Grundlagen

Ein SystemC-Modell besteht aus Modulen (SC_MODULE), die über Ports und Signale miteinander verbunden werden. Der Einstiegspunkt ist die Funktion sc_main, die Simulation startet man mit sc_start():

#include "systemc.h"

SC_MODULE(Zaehler) {
  sc_in<bool> clk;
  sc_out<unsigned> wert;
  sc_uint<8> reg;

  void tick() { reg = reg + 1; wert.write(reg); }

  SC_CTOR(Zaehler) {
    SC_METHOD(tick);
    sensitive << clk.pos();
  }
};

int sc_main(int argc, char* argv[]) {
  sc_clock clk("clk", 10, SC_NS);
  sc_signal<unsigned> w;
  Zaehler z("z");
  z.clk(clk); z.wert(w);
  sc_start(100, SC_NS);
  return 0;
}

Wichtige Konstrukte

  • SC_METHOD – ereignisgesteuerter Prozess ohne eigenen Stack (schnell, aber zustandslos)
  • SC_THREAD / SC_CTHREAD – Thread-Prozesse mit eigenem Stack; CTHREAD für taktsynchrone Abläufe
  • sc_signal, sc_in, sc_out, sc_inout – Verbindungselemente und Ports
  • sc_clock, sc_time – Takt- und Zeitmodellierung
  • sc_uint, sc_bv – Bitvektoren und Ganzzahltypen fester Breite

Transaction Level Modeling (TLM)

Der TLM-2.0-Standard ergänzt SystemC um eine abstrakte Transaktionsmodellierung: Kommunikationspartner tauschen Transaktionen (Generic Payload) über Sockets aus, ohne Signale im Detail zu modellieren. Dadurch laufen Simulationen von virtuellen Prototypen um Größenordnungen schneller als RTL-Simulationen.

Verwandte Grundlagen: C/C++-Befehle, VHDL-Befehle, Chisel-Befehle (Hardware-Konstruktionssprache), SpinalHDL-Befehle.

Chisel-Befehle: Hardware-Konstruktion in Scala

Chisel (Constructing Hardware In a Scala Embedded Language) ist eine Hardware-Konstruktionssprache, die als DSL in Scala eingebettet ist. Sie wurde ab 2012 an der UC Berkeley entwickelt (u. a. von Jonathan Bachrach) und wird heute von der Chips Alliance gepflegt. Chisel erzeugt aus Scala-Code synthesetaugliches Verilog – die Beschreibung bleibt parametrisierbar, weil sie die volle Ausdruckskraft von Scala nutzt.

Grundlagen

Ein Chisel-Modul ist eine Scala-Klasse, die von Module erbt. Ein- und Ausgänge werden mit IO und Bundle beschrieben, Register mit Reg, Kombinatorik mit Wire und Mux:

import chisel3._

class Zaehler(max: Int) extends Module {
  val io = IO(new Bundle {
    val enable = Input(Bool())
    val wert   = Output(UInt(8.W))
  })

  val reg = RegInit(0.U(8.W))
  when(io.enable) {
    reg := Mux(reg === max.U, 0.U, reg + 1.U)
  }
  io.wert := reg
}

Wichtige Konstrukte

  • Reg, RegInit, RegNext – Register mit optionalem Initialwert beziehungsweise Taktverzögerung
  • Wire – kombinatorische Verbindung; Mux(cond, a, b) – Auswahl
  • Bundle, Vec – strukturierte Bündel und Felder; when/elsewhen/otherwise – Bedingungen
  • Bool(), UInt, SInt, FixedPoint – Datentypen mit fester Bitbreite
  • Module, BlackBox – Modul- und Fremdsprachen-Anbindung

FIRRTL und Ökosystem

Chisel kompiliert zuerst nach FIRRTL (Flexible Intermediate Representation for RTL), einer Zwischenrepräsentation, die Optimierungen und die Verilog-Generierung ermöglicht. Das bekannteste Chisel-Projekt ist der Rocket Chip Generator, auf dem die RISC-V-Referenzprozessoren aufbauen. Auch SystemVerilog-Strukturen lassen sich über Chisel abstrahieren.

Verwandte Grundlagen: Scala-Befehle, Verilog-Befehle, SpinalHDL-Befehle (zweite Scala-basierte HDL), SystemC-Befehle (C++-basiertes System-Level-Modeling).

XSD-Befehle: XML-Schemata mit XML Schema Definition

XSD (XML Schema Definition) ist die vom W3C standardisierte Schemasprache, mit der Struktur und Datentypen von XML-Dokumenten beschrieben werden. Die Empfehlung erschien 2001 in Version 1.0, 2012 folgte XSD 1.1; eine kompakte Alternative ist die RELAX-NG-Schemasprache.

Grundstruktur eines Schemas

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="buch" type="xs:string"/>
</xs:schema>

Einfache und komplexe Typen

  • xs:simpleType — einfache Typen mit Restriktionen (xs:restriction), z.B. Muster, Längen, Wertebereiche
  • xs:complexType — Elemente mit Kindelementen und Attributen
  • xs:sequence — geordnete Kindelemente; xs:choice — Auswahl; xs:all — beliebige Reihenfolge
  • xs:attribute — Attribute mit Typ und use="required"
  • Eingebaute Datentypen: xs:string, xs:int, xs:decimal, xs:date, xs:boolean
<xs:complexType name="buchTyp">
  <xs:sequence>
    <xs:element name="titel" type="xs:string"/>
    <xs:element name="preis" type="xs:decimal"/>
  </xs:sequence>
  <xs:attribute name="id" type="xs:int" use="required"/>
</xs:complexType>

Validierung und Werkzeuge

Ein XML-Dokument wird gegen das Schema validiert — xmllint (libxml2) kann mit --schema prüfen, in Java ist der JAXP-Validator der Standardweg. XSD 1.1 brachte Assertions (xs:assert) und die Typalternative xs:alternative.

Verwandte Grundlagen: XPath-Befehle (Pfadabfragen auf validierten XML-Daten), XQuery-Befehle (typisierte Abfragen), XSLT/XSL-Befehle (Transformationen), XML.

  1. XPath-Befehle: XML-Pfadabfragen mit Location Paths und Achsen
  2. XQuery-Befehle: XML-Abfragen mit FLWOR-Ausdrücken
  3. Nushell-Befehle: Strukturierte Daten statt Text-Streams
  4. Expect-Befehle: Interaktive Programme automatisieren

Seite 34 von 46

  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
hanse-computing.de

hanse-computing.de – KI-gestützte Dienstleistungen aus Lübeck.

hanse-computing.de
IT-Dienstleistungen aus der Hansestadt
Über uns · Projekte · Neuigkeiten · Affiliate
Impressum · Datenschutz
© 2026 hanse-computing.de
© 2026 hanse-computing Impressum Datenschutz