Initial commit :

Last change made - Inserted Flask API section
This commit is contained in:
Nikola
2026-07-11 19:33:44 +02:00
commit 9bc7ba9166
63 changed files with 18740 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
- [x] VL1: Einführung, Logik
- [x] VL2: Beweise
- [ ] Übungsblatt 1
- [x] VL3: Mengen
- [x] Übungsblatt 2
- [ ] Übungsblatt 3
- [ ] VL4
- [ ]
+30
View File
@@ -0,0 +1,30 @@
## Struktur von Program
Programme sind hierarchisch aus Komponenten aufgebaut. Für jede
Komponente geben wir Regeln an, wie sie aus anderen
Komponenten zusammengesetzt sein können.
program = decl* stmt*
decl = type name ( , name)*
type = int
#### Statements
stmt ::= ; | { stmt* } |
name = expr; | name = read(); | write( expr ); |
if ( cond ) stmt |
if ( cond ) stmt else stmt |
while ( cond ) stmt
- Ein Statement ist entweder leer (d.h. gleich ;) oder eine
geklammerte Folge von Statements;
- Oder eine Zuweisung, eine Lese- oder Schreib-Operation;
- Eine (einseitige oder zweiseitige) bedingte Verzweigung;
- Oder eine Schleife.
#### Expressions
expr ::= number | name | ( expr ) |
unop expr | expr binop expr
unop ::= -
binop ::= - | + | * | / | %
- Ein Ausdruck ist eine Konstante, eine Variable oder ein geklammerter Ausdruck
- Oder ein unärer Operator (unop), angewandt auf einen Ausdruck,
- Oder ein binärer Operator(binop), angewandt auf zwei Argument-Ausdrücke.
- Einziger unärer Operator ist (bisher) die Negation.
- Mögliche binäre Operatoren sind Addition, Subtraktion, Multiplikation, (ganz-zahlige) Division und Modulo.
+10
View File
@@ -0,0 +1,10 @@
- [x] Folien: Einführung und Objektbasiertes Programmieren
- [x] Folien: Testen
- [x] Folien: Kontrollstrukturen und Felder
- [x] Folien: Abstrakte Datentypen
- [x] Folien: Objektorientierung
- [x] Folien: Rekursion
- [x] Folien: Fortgeschrittene Programmierkonstrukte
- [x] Folien: Nebenläufigkeit
- [x] Folien: GUIs
- [x] Folien: Rekursion Revisited
+49
View File
@@ -0,0 +1,49 @@
- [x] Vorlesung 1: Einführung und Datendarstellungen
- [x] Zentralübung 1: Zahlensysteme
- [x] Übungsblatt 1: Zahlensysteme
- [x] Vorlesung 2/3: Assemblersprachen
- [x] Zentralübung 2: Einführung in RISC-V Assembly
- [x] Übungsblatt 2: RISC-V Assembly
- [x] Vorlesung 4/5: Assembler Beispiel und von Neumann Architektur
- [x] Zentralübung 3: RISC-V Deep Dive
- [x] Übungsblatt 3: RISC-V Teil 2 - Sprünge und Pointer
- [x] Vorlesung 6: Andere ISAs zum Vergleich
- [x] Vorlesung 7: Systemarchitektur
- [x] Zentralübung 4: RISC-V Calling Convention and Rekursion
- [x] Übungsblatt 4: RISC-V Teil 3 - Rekursion und Calling Convention
- [x] Vorlesung 8/9: Speicherverwaltung und Caches
- [x] Zentralübung 5: Caches
- [x] Übungsblatt 5: Caches
- [ ] Vorlesung 10: Boolesche Algebra
- [x] Vorlesung 11: Addierer/Subtrahierer
- [x] Zentralübung 6: Boolesche Algebra
- [x] Übungsblatt 6: Kombinatorische Schaltungen
- [ ] Vorlesung 12: Multiplizierer
- [x] Vorlesung 13: Speicher
- [x] Zentralübung 7: Sequenzielle Schaltungen
- [x] Übungsblatt 7: Multiplizierer und Sequenzielle Logik
- [x] Vorlesung 14/15: Single-Cycle Prozessor
- [x] Zentralübung 8: Single-Cycle Prozessor
- [ ] Übungsblatt 8: Single-Cycle Prozessor
- [ ] Vorlesung 16: Endliche Automaten
- [ ] Vorlesung 17: Multi-Cycle Prozessor
- [ ] Zentralübung 9: Multi-Cycle Prozessor
- [ ] Übungsblatt 9: Multi-Cycle Prozessor
- [ ] Vorlesung 18/19: Moderne Systeme und Parallität
- [ ] Zentralübung 10: Caches & Parallelität
- [ ] Übungsblatt 10: Altklausur
- [ ] Vorlesung 20: Das E/A Werk
- [ ] Vorlesung 21: Implementierung auf das Physikalischen Schicht
- [ ] Zentralübung 11: Modern RISC-V
- [ ] Übungsblatt 11: Parallelisierung und Caches
- [ ] Vorlesung 22/23: Pipelined Prozessor
- [ ] Zentralübung 12: Pipelining
- [ ] Übungsblatt 12: Pipelining
- [x] Vorlesung 24: K-Maps
- [x] Vorlesung 25: BDDs
- [ ] Zentralübung 13: K-Maps und BDDs
- [ ] Übungsblatt 13: K-Maps und BDDs
- [ ] Vorlesung 26: SATs
- [ ] Vorlesung 27: Physical Design
- [ ] Zentralübung 14: SAT und Physical Design
- [ ] Übungsblatt 14: SAT und Physical Design
@@ -0,0 +1,37 @@
# Datendarstellung
#### Rechner arbeiten meistens im Binarsystem:
- Beschreiben durch 0/1
- "Strom an" / "Strom aus"
#### Darstellung von Daten:
- Reihen von "0" und "1"
- Representierung von allen "Daten"
- Eingaben/Ausgaben
- Code
# Zahlensysteme
### Dezimalsystem:
- $2019 = 2 * 10^3 + 0 * 10^2 + 1 * 10^1 + 9 * 10^0$
- **10 Zahlensymbole:** 0,1, 2, 3, 4, 5, 6, 7 ,8 ,9, 0
- Basis: 10
### Andere Kulturen haben andere Basen
- **Beispiel**: Maya - Basis: 20
- **Konsequenz**: 20 Zahlensymbole
## Systemen für Rechner
### Binärsystem:
- $1101\ 1001_2 = 1 * 2^7 + 1 * 2^6 + 0 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^0 + 0 * 2^2 + 0 * 2^1 + 1*2^0$
- **Zahlensymbole**: 0, 1
- Basis: 2
**Beispiel**: 2019 = 111 1110 0011<sub>b</sub>
### Hexadezimalsystem(Basis 16)
- 217 = D9<sub>h</sub> = 13\*16<sup>1</sup> + 9\*16<sup>0</sup> =1101 1001<sub>b</sub>
- **Zahlensymbole**: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
- **!!! Vorteil**: 1 Hex-Symbol = 4 Binär-Symbole **!!!**
## Binär- und Hexadezimal-Arithmetik
### Addition:
- Ähnlich zu Arithmetik im Dezimalsystem
- Überlauf wird an die nächste Stelle weitergereicht
- Beispiel:
- System mit max. 5 Ziffern.
- a = 01001<sub>2</sub> = 1 · 810 + 0 · 410 + 0 · 210 + 1 · 110 = 910
- b = 00111<sub>2</sub> = 0 · 810 + 1 · 410 + 1 · 210 + 1 · 110 = 710
- Ergebnis: 1610
![[Pasted image 20260126042053.png]]
+58
View File
@@ -0,0 +1,58 @@
## Logiksynthese und -minimierung
- #### **Deduzierte Schaltungen lassen sich nicht effizient "von Hand entwickeln"**
-> Wir brauchen Methodik für Schaltkreissynthese
- #### **Logiksynthese und -minimierung: Versuch, Logik der Schaltung:**
- zu generieren bzw.
- zu minimieren
- #### **Unterscheidung zwischen:**
- **kombinatorischer Synthese** (Realisierung einer Booleschen Funktion)
- **sequentieller Synthese** (Realisierung eines endlichen **Automaten**; kann als Boolesche Funktion repräsentiert werden)
- #### Ausgangspunkt: Funktionsbeschreibung (Wahrheitstabelle, Boolescher Ausdruck, ... )
## Wdhlg. : Synthese (simpel)
- #### Realisierung beliebiger Wahrheitstabellen durch **<font color="#00b0f0">Grundgatter</font> möglich
- #### Vorgehen:
- Für jede Zeile mit Ausgabewert 1:
Und-Gatter mit passender Eingangsbeschaltung
- Oder-Verknüpfung aller Und-Gatter
- ### Funktioniert für alle Tabellen, aber
- <font color="#c00000">teuer</font>
- <font color="#c00000">nicht skalierbar</font>
![[20260119_kmaps_260129_183719.jpg]]
## Weitere Grundlagen
- #### Die Booleschen Ausdrücke <font color="#ff0000">x<sub>i</sub></font> und <font color="#ff0000">x<sub>i</sub>' </font>heißen <font color="#00b0f0">Literale</font>
- x<sub>i</sub> ist <font color="#00b0f0">positives Literal</font>
- x<sub>i</sub>' ist <font color="#00b0f0">negatives Literal</font>
- #### Eine Konjunktion von Literalen heißt <font color="#00b0f0">Monom</font>, wenn:
- jedes Literal kommt höchstens einmal vor
- es kommt nicht sowohl das <font color="#00b0f0">positive</font> als auch das <font color="#00b0f0">negative</font> <font color="#00b0f0">Literal</font> einer Variable vor
- Monome: **x<sub>1</sub>x<sub>2</sub>x<sub>3</sub>, x<sub>1</sub>x<sub>2</sub>x<sub>3</sub>'
- #### Ein Monom heißt <font color="#00b0f0">vollständig</font> oder <font color="#00b0f0">Minterm</font>, wenn <font color="#ff0000">jede Variable</font> entweder als <font color="#00b0f0">positives</font> oder als <font color="#00b0f0">negatives</font> <font color="#00b0f0">Literal</font> vorkommt
- #### Eine Disjunktion von paarweise verschiedenen Monomen heißt <font color="#00b0f0">Polynom</font>. Sind alle <font color="#00b0f0">Monome</font> des <font color="#00b0f0">Polynoms</font> <font color="#00b0f0">vollständig</font>, so heißt das Polynom <font color="#00b0f0">vollständig</font>
- #### Eine Boolesche <font color="#00b0f0">Funktion</font> ist von ihrer Darstellung als Formel zu unterschieden
- Die <font color="#00b0f0">Interpretationsfunktion</font> $\psi$ weist einer Formel die entsprechende Funktion zu
- $f = (a+b) * c$ und $g = a * c + b * c$ sind unterschiedliche Formeln aber $\psi(f) = \psi(g)$
## Logiktoptimierung
- #### Gegeben: Eine Boolesche Funktion $f$
- #### Ziel: Darstellung von $f$ als <font color="#00b0f0">Minimalpolynom</font> $p$, das heißt ein Polynom sodass gilt:
- $\psi(p) = f$
- Die Anzahl an <font color="#00b0f0">Monomen</font> in $p$ ist **minimal**
- Die Anzahl der <font color="#00b0f0">Literale</font> in $p$ ist **minimal**
- #### Idee: $x_1x_2x_3 + x_1x_2\bar{x_3} = x_1x_2$
- Die Belegung von $x_3$ hate keinen Einfluss auf den Wahrheitswert des Polynoms
- $x_1x_2$ ist ein sogenannter <font color="#00b0f0">Implikant</font> von $x_1x_2x_3 + x_1x_2\bar{x_3}$
- #### Allgemein: Ein Monom(!) $q$ ist ein Implikant der Funktion $f$ falls $\psi(q) \leq f$
Das bedeutet das der Implikant kleiner oder optimierter als der Funktion ist
- #### <font color="#00b0f0">Ein Primimplikant von f</font> ist ein maximaler Implikant $q$ von $f$, d.h. es gibt keinen Implikanten $s(s \neq q)$
-