From 8aa2684ce44a14eaf23d6c6887a23fb551bde179 Mon Sep 17 00:00:00 2001 From: Friedrich Beckmann Date: Sat, 28 Jun 2025 18:02:26 +0200 Subject: =?UTF-8?q?erstes=20=C3=9Cbungsblatt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 8 + cpu/cpuabus64.tex | 8 + cpu/cpuabuswidth.tex | 28 +++ cpu/cpudbus64.tex | 42 ++++ cpu/cpumemanbi.tex | 33 +++ cpu/cpumulti.tex | 91 +++++++ dff.tex | 560 +++++++++++++++++++++++++++++++++++++++++ setup.tex | 114 +++++++++ ti-uebungsblatt-1-beck-lsg.pdf | Bin 0 -> 173868 bytes ti-uebungsblatt-1-beck.pdf | Bin 0 -> 69508 bytes ti-uebungsblatt-1.tex | 38 +++ 11 files changed, 922 insertions(+) create mode 100644 .gitignore create mode 100644 cpu/cpuabus64.tex create mode 100644 cpu/cpuabuswidth.tex create mode 100644 cpu/cpudbus64.tex create mode 100644 cpu/cpumemanbi.tex create mode 100644 cpu/cpumulti.tex create mode 100644 dff.tex create mode 100644 setup.tex create mode 100644 ti-uebungsblatt-1-beck-lsg.pdf create mode 100644 ti-uebungsblatt-1-beck.pdf create mode 100644 ti-uebungsblatt-1.tex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..138642b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.dvi +*.aux +*.log +*.out +*.synctex.gz +*.bbl +*.blg +.DS_Store diff --git a/cpu/cpuabus64.tex b/cpu/cpuabus64.tex new file mode 100644 index 0000000..9b06ae5 --- /dev/null +++ b/cpu/cpuabus64.tex @@ -0,0 +1,8 @@ +\Aufgabe{CPU 64 Bit Adressbus} + +Aktuelle CPU Architekturen wie AMD64 oder ARMv8 arbeiten mit 64 Bit für Daten und Adressen. Erläutern sie warum bei aktuellen CPUs nur 48 bis 52 Bit des Adressbusses als physikalischer Adressbus nach außen geführt werden. + +\loesungsbox{12cm}{ +Mit einem 64 Bit großen Adressbus kann man $2^{64}$ = 16 Exabyte also ungefähr 16 Millionen Terabyte Speicher adressieren. Systeme mit diesen physikalischen Speichergrößen werden derzeit nicht eingesetzt. Mit 48 Bit Adressbusgröße lassen sich 256 TiB Speicher adressieren. Server können heute (2025) beispielsweise mit bis zu 16 TiB RAM ausgestattet werden, beispielsweise ein Dell PowerEdge 960 Server. +} + diff --git a/cpu/cpuabuswidth.tex b/cpu/cpuabuswidth.tex new file mode 100644 index 0000000..26280eb --- /dev/null +++ b/cpu/cpuabuswidth.tex @@ -0,0 +1,28 @@ +\Aufgabe{CPU - Adressbus des Systems vergrößern} + +Eine CPU ist über einen Adress-, Daten- und Steuerbus an ein Speichersystem angeschlossen. Die Breite des physikalischen Adressbusses wird jetzt von 32 auf 48 Bit verändert. Beschreiben sie die Konsequenzen für das Gesamtsystem. Nehmen sie an, dass die CPU auch den Adressbus mit der geänderten Breite unterstützt und nicht verändert wird. Erläutern sie die Konsequenzen mit einem plausiblen Zahlenbeispiel. + +\loesungsbox{17cm}{ +Die Breite des Adressbusses begrenzt die Größe des Speichers (RAM, ROM, Peripherie) im System. Wenn das aktuelle System eine Adressbusbreite von 32 Bit hat, dann kann man damit $2^{32} = 4294967296$ Byte adressieren. Das entspricht einer Speichergröße von 4 GiByte. Wenn die Breite des Adressbusses von 32 auf 48 Bit erhöht wird, dann können $2^{48}$ Byte adressiert werden. Das entspricht einer Größe von etwa 256 Terabyte. Es kann also mehr Speicher adressiert und im Rechnersystem eingebaut und genutzt werden. Aktuelle CPUs für Rechner haben eine 64 Bit Architektur und können damit auch $2^{64}$ Byte adressieren. Der physikalische Adressbus ist allerdings auf 48 bis 52 Bit begrenzt, da es heute keine Systeme gibt, die mehr als 256 Terabyte an physikalischem Speicher nutzen. + +Der Großteil des Speicherbereichs wird für RAM eingesetzt. Aktuell (2025) werden Rechner für Privatanwender üblicherweise mit RAM mit einer Größe von maximal ca. 128 GB verkauft. Server können auch mit größerem RAM Speicher bis in den Terabytebereich ausgestattet werden. Auf dem RP2040 Chip, der auf dem Raspberry Pi Pico Board benutzt wird und ein Beispiel für einen kleinen Mikrocontroller ist, ist eine ARM Cortex M0+ CPU mit 32 Bit Adressbus. Von dem 4 GiByte großen addressierbaren Speicherbereich werden jedoch nur kleine Bereiche genutzt. In der folgenden Tabelle ist die Memory Map des RP2040 dargestellt: +\vspace{5mm} + +\begin{tabular}{lllp{7cm}} +\textbf{Startadresse} & \textbf{Endadresse} & \textbf{Größe} & \textbf{Beschreibung} \\ +\hline +0x0000\,0000 & 0x0000\,3FFF & 16 KiB & \textbf{Boot ROM} (Fest, Nur-Lesen) \\ +0x1000\,0000 & 0x10FF\,FFFF & 16 MiB (max) & \textbf{QSPI Flash} (Externer Code/Daten, Execute-in-Place) \\ +0x2000\,0000 & 0x2004\,1FFF & 264 KiB & \textbf{SRAM} (Internes RAM für Daten/Stack/Heap) \\ +0x4000\,0000 & 0x4006\,C003 & ca. 432 KiB & \textbf{Peripherie-Register} (UART, SPI, I2C, PWM, Timer e.t.c.) \\ +0x5000\,0000 & 0x5030\,0143 & ca. 3 MiB & \textbf{Peripherie-Register} (USB, DMA, e.t.c.) \\ +0xD000\,0000 & 0xD000\,017F & 384 Byte & \textbf{Single-Cycle IO (SIO)} (Schneller GPIO-Zugriff) \\ +0xE000\,E010 & 0xE000\,EDA3 & 3476 Byte & \textbf{Cortex M0 intern} (Interrupt, Debug)\\ +\end{tabular} + +\vspace{5mm} + +Innerhalb der Adressbereiche für die Peripherieregister sind auch große Adressbereiche nicht genutzt. Insgesamt werden von dem 4096 MiB großen addressierbaren Adressbereich auf dem RP2040 also nur ca. 17 MiB tatsächlich genutzt. Auf der Pi Pico Platine sind tatsächlich auch nur 2 MiB Flash, d.h. dort werden also tatsächlich weniger als 3 MiB genutzt. +} + + diff --git a/cpu/cpudbus64.tex b/cpu/cpudbus64.tex new file mode 100644 index 0000000..064b320 --- /dev/null +++ b/cpu/cpudbus64.tex @@ -0,0 +1,42 @@ +\Aufgabe{CPU Datenbus} + +Aktuelle CPU Architekturen wie AMD64 oder ARMv8 arbeiten mit 64 Bit für Daten und Adressen. Was ist der wesentliche Unterschied zwischen einem Datenbus, der 64 Bit breit ist, und einem Datenbus, der 32 Bit breit ist, für das System? + +\loesungsbox{20cm}{ +\section*{Unterschied zwischen einem 32-Bit und einem 64-Bit Datenbus} +Der wesentliche Unterschied zwischen einem Datenbus, der 64 Bit breit ist, und einem Datenbus, der 32 Bit breit ist, liegt in der \textbf{Menge der Daten, die pro Zeiteinheit (pro Taktzyklus) gleichzeitig übertragen werden können}. + +\subsection*{Was ist ein Datenbus?} +Der \textbf{Datenbus} ist eine elektrische Leitung (oder eine Gruppe von Leitungen) innerhalb eines Computersystems, die für den Transport der \textbf{tatsächlichen Daten} zwischen verschiedenen Komponenten zuständig ist. Dazu gehören die CPU, der Arbeitsspeicher (RAM) und Peripheriegeräte (z.B. Festplatten, Grafikkarten). Der Datenbus ist in der Regel \textbf{bidirektional}, d.h., Daten können in beide Richtungen übertragen werden (Lesen aus dem Speicher oder Schreiben in den Speicher). + +\subsection*{Der Kernunterschied: Parallele Datenübertragung} +\begin{itemize} + \item \textbf{32-Bit-Datenbus:} Kann in einem einzigen Taktzyklus \textbf{32 Bit (4 Byte)} an Daten parallel übertragen. + \item \textbf{64-Bit-Datenbus:} Kann in einem einzigen Taktzyklus \textbf{64 Bit (8 Byte)} an Daten parallel übertragen. +\end{itemize} +Dies ist vergleichbar mit einer Straße: Eine 32-Bit-Straße hat 32 Spuren, auf denen gleichzeitig Datenpakete transportiert werden können, während eine 64-Bit-Straße 64 Spuren hat. + +\subsection*{Konsequenzen für das Gesamtsystem} + +\begin{enumerate} + \item \textbf{Durchsatz (Bandbreite):} + Ein 64-Bit-Datenbus kann bei gleicher Taktfrequenz die \textbf{doppelte Menge an Daten pro Taktzyklus} übertragen wie ein 32-Bit-Datenbus. Dies führt zu einem erheblich höheren Datendurchsatz oder einer höheren Bandbreite. + \\[0.5em] + \textit{Beispiel:} Wenn ein Bus mit 100 MHz getaktet ist: + \begin{itemize} + \item 32-Bit-Bus: $32 \, \text{Bit} \times 100 \, \text{MHz} = 3.200 \, \text{Mbit/s} = 400 \, \text{MB/s}$ + \item 64-Bit-Bus: $64 \, \text{Bit} \times 100 \, \text{MHz} = 6.400 \, \text{Mbit/s} = 800 \, \text{MB/s}$ + \end{itemize} + + \item \textbf{Leistung und Effizienz:} + Die CPU muss weniger Zyklen warten, um große Datenblöcke aus dem Speicher zu laden oder dorthin zu schreiben. Programme, die mit großen Datenmengen arbeiten (z.B. Videobearbeitung, 3D-Rendering, wissenschaftliche Simulationen, große Datenbanken), profitieren erheblich davon. Die CPU kann ihre Rechenkerne effizienter nutzen, da die Daten, die sie benötigt, schneller bereitgestellt werden. + + \item \textbf{Hardware-Komplexität und Kosten:} + Ein breiterer Datenbus bedeutet \textbf{mehr physikalische Leitungen} (Kabel, Leiterbahnen auf der Platine). Dies erhöht die Komplexität des Motherboard-Designs, die Anzahl der Pins an der CPU und den Speichercontrollern. Folglich können die \textbf{Herstellungs- und Entwicklungskosten} für Systeme mit breiteren Datenbussen höher sein. +\end{enumerate} + +\vspace{5mm} +\tiny{Antwort KI generiert mit Gemini 2.5 Flash am 28.6.2025} + +} + diff --git a/cpu/cpumemanbi.tex b/cpu/cpumemanbi.tex new file mode 100644 index 0000000..56a26c0 --- /dev/null +++ b/cpu/cpumemanbi.tex @@ -0,0 +1,33 @@ +\Aufgabe{CPU Anbindung Speicher} + +Der Speicher und die CPU sind über den Speicherbus miteinander verbunden. Benennen sie die Elemente des Speicherbusses und erläutern sie die Funktion der Elemente. + +\loesungsbox{17cm}{ +\subsection*{1. Adressbus (Address Bus)} +\begin{itemize} + \item \textbf{Aufbau:} Eine Reihe paralleler, unidirektionaler Leitungen. + \item \textbf{Funktion:} Die CPU verwendet den Adressbus, um die \textbf{spezifische Speicheradresse} zu übermitteln, auf die sie zugreifen möchte (Lesen oder Schreiben). Jede Speicherzelle oder jedes Speicherregister hat eine eindeutige Adresse, die die CPU auf diesen Bus legt, um den genauen Speicherort zu identifizieren. Die Anzahl der Leitungen des Adressbusses bestimmt die maximale Größe des adressierbaren Speichers ($2^{\text{Anzahl der Leitungen}}$). +\end{itemize} + +\subsection*{2. Datenbus (Data Bus)} +\begin{itemize} + \item \textbf{Aufbau:} Eine Reihe paralleler, bidirektionaler Leitungen. + \item \textbf{Funktion:} Über den Datenbus werden die \textbf{tatsächlichen Daten} zwischen der CPU und dem Speicher ausgetauscht. Wenn die CPU Daten vom Speicher liest, werden diese über den Datenbus gesendet. Wenn die CPU Daten in den Speicher schreibt, werden die Daten von der CPU über den Datenbus an den Speicher gesendet. Die Breite des Datenbusses (z.B. 32 Bit, 64 Bit) bestimmt, wie viele Datenbits pro Übertragungszyklus gleichzeitig übertragen werden können, was direkt die Übertragungsgeschwindigkeit (Bandbreite) beeinflusst. +\end{itemize} + +\subsection*{3. Steuerbus (Control Bus)} +\begin{itemize} + \item \textbf{Aufbau:} Eine Sammlung von einzelnen Steuerleitungen. + \item \textbf{Funktion:} Der Steuerbus ist für die \textbf{Koordination und Steuerung} aller Operationen zwischen CPU und Speicher verantwortlich. Er überträgt verschiedene Steuersignale, die den Typ des aktuellen Zugriffs und den Zeitpunkt der Operationen festlegen. Beispiele für Signale auf dem Steuerbus sind: + \begin{itemize} + \item \textbf{Read/Write (R/W):} Signalisiert, ob die CPU Daten vom Speicher lesen oder in den Speicher schreiben möchte. + \item \textbf{Memory Request (MREQ):} Zeigt an, dass ein Speicherzugriff angefordert wird. + \item \textbf{Clock (CLK):} Ein Taktsignal, das alle Operationen im System synchronisiert und den Takt vorgibt. + \item \textbf{Ready:} Ein Signal vom Speicher an die CPU, das anzeigt, dass der Speicher bereit für den Datenaustausch ist. + \item \textbf{Bus Grant/Request:} Signale für die Busarbitrierung, falls mehrere Geräte (wie die CPU und ein DMA-Controller) gleichzeitig auf den Speicherbus zugreifen wollen. + \end{itemize} +\end{itemize} + +\textbf{Antwort KI generiert mit Gemini 2.5 Flash, 28.6.2025} +} + diff --git a/cpu/cpumulti.tex b/cpu/cpumulti.tex new file mode 100644 index 0000000..dbaf5dc --- /dev/null +++ b/cpu/cpumulti.tex @@ -0,0 +1,91 @@ +\Aufgabe{CPU Kompakt} + +\begin{enumerate} + \item Welche drei Hauptkomponenten bilden typischerweise die Zentraleinheit (CPU) eines Computers? + + \begin{itemize} + \item[] A) Arithmetisch-Logische Einheit (ALU), Steuerwerk, Register + \item[] B) Hauptspeicher (RAM), Festplatte (HDD/SSD), Grafikkarte + \item[] C) Ein-/Ausgabewerk (I/O), Cache-Speicher, Systembus + \item[] D) Prozessor, Motherboard, Netzteil + \end{itemize} + + \item Was ist die primäre Funktion des Programmzählers (Program Counter, PC) in der CPU? + \begin{itemize} + \item[] A) Er speichert die Adresse des nächsten auszuführenden Befehls. + \item[] B) Er führt arithmetische und logische Operationen aus. + \item[] C) Er speichert die Ergebnisse von Berechnungen. + \item[] D) Er verwaltet den Datentransfer zwischen CPU und Peripheriegeräten. + \end{itemize} + + + \item Welche Aufgabe hat der Adressbus in der Kommunikation zwischen CPU und Speichersystem? + \begin{itemize} + \item[] A) Er überträgt die eigentlichen Daten zwischen CPU und Speicher. + \item[] B) Er überträgt die Speicheradresse, auf die die CPU zugreifen möchte. + \item[] C) Er steuert den Fluss der Daten und Befehle. + \item[] D) Er synchronisiert die Operationen der CPU mit dem Speicher. + \end{itemize} + + \item Warum wird Cache-Speicher (L1, L2, L3) in der CPU-Architektur eingesetzt? + \begin{itemize} + \item[] A) Um die Zugriffszeit auf häufig genutzte Daten und Befehle zu reduzieren und die Leistung zu verbessern. + \item[] B) Um dauerhaft Daten zu speichern, auch wenn der Computer ausgeschaltet ist. + \item[] C) Um die Stromversorgung der CPU zu stabilisieren. + \item[] D) Um die CPU vor Überhitzung zu schützen. + \end{itemize} + + \item Welche der folgenden Stufen gehört nicht zum grundlegenden Befehlszyklus der Bearbeitung eines Befehls in einer CPU? + \begin{itemize} + \item[] A) Execute (Befehl ausführen) + \item[] B) Fetch (Befehl holen) + \item[] C) Decode (Befehl dekodieren) + \item[] D) Kompilieren + \end{itemize} + + \item Was ist der Hauptzweck von mehreren CPU-Kernen (Multi-Core) in einem Prozessor? + \begin{itemize} + \item[] A) Um die Taktfrequenz des Prozessors zu erhöhen. + \item[] B) Um mehrere Befehle gleichzeitig ausführen zu können und damit die Parallelverarbeitung zu ermöglichen. + \item[] C) Um mehr Cache-Speicher zu integrieren. + \item[] D) Um die CPU vor Überhitzung zu schützen. + \end{itemize} + +\newpage + + \item Welche Aufgabe hat der Steuerbus in der Kommunikation zwischen CPU und anderen Systemkomponenten? + \begin{itemize} + \item[] A) Er übermittelt Steuersignale und koordiniert den Datenfluss. + \item[] B) Er sendet die physischen Adressen der Speicherorte. + \item[] C) Er überträgt die eigentlichen Nutzdaten. + \item[] D) Er speichert temporär Befehle für die schnelle Ausführung. + \end{itemize} + + \item Ordnen Sie die folgenden Speichertypen nach ihrer typischen Zugriffsgeschwindigkeit (von schnell nach langsam): Register, L1 Cache, RAM (Hauptspeicher), SSD. + \begin{itemize} + \item[] A) SSD $\rightarrow$ RAM $\rightarrow$ L1 Cache $\rightarrow$ Register + \item[] B) Register $\rightarrow$ L1 Cache $\rightarrow$ RAM $\rightarrow$ SSD + \item[] C) L1 Cache $\rightarrow$ Register $\rightarrow$ RAM $\rightarrow$ SSD + \item[] D) RAM $\rightarrow$ SSD $\rightarrow$ Register $\rightarrow$ L1 Cache + \end{itemize} + +\end{enumerate} + +\loesungsbox{14cm}{ + + +\begin{enumerate} + \item \textbf{Korrekte Antwort mit Rationale:} A) Arithmetisch-Logische Einheit (ALU), Steuerwerk, Register. Die ALU führt Berechnungen durch, das Steuerwerk koordiniert alle Operationen und die Register speichern Daten und Adressen temporär. Dies sind die Kernkomponenten der CPU. + \item \textbf{Korrekte Antwort mit Rationale:} A) Er speichert die Adresse des nächsten auszuführenden Befehls. Der Programmzähler (PC) ist ein spezielles Register, das die Speicheradresse des nächsten Befehls enthält, der aus dem Hauptspeicher geholt werden soll. + \item \textbf{Korrekte Antwort mit Rationale:} B) Er überträgt die Speicheradresse, auf die die CPU zugreifen möchte. Der Adressbus ist dafür zuständig, die spezifische Adresse im Speicher zu identifizieren, von der gelesen oder in die geschrieben werden soll. + \item \textbf{Korrekte Antwort mit Rationale:} A) Um die Zugriffszeit auf häufig genutzte Daten und Befehle zu reduzieren und die Leistung zu verbessern. Cache-Speicher ist ein sehr schneller, aber kleiner Speicher, der als Puffer zwischen der CPU und dem langsameren Hauptspeicher dient, um die Zugriffszeiten zu verkürzen. +\item \textbf{Korrekte Antwort mit Rationale:} D) Kompilieren. Kompilieren ist ein Software-Entwicklungsprozess, bei dem Quellcode in Maschinencode übersetzt wird, bevor das Programm auf der CPU ausgeführt wird. Es ist keine Stufe des CPU-Befehlszyklus selbst. + \item \textbf{Korrekte Antwort mit Rationale:} B) Um mehrere Befehle gleichzeitig ausführen zu können und damit die Parallelverarbeitung zu ermöglichen. Jeder Kern ist eine weitgehend unabhängige Recheneinheit. Mehrere Kerne ermöglichen es einem Prozessor, mehrere Aufgaben oder Teile einer Aufgabe gleichzeitig zu bearbeiten (Parallelität), was die Gesamtleistung erhöht. + \item \textbf{Korrekte Antwort mit Rationale:} A) Er übermittelt Steuersignale und koordiniert den Datenfluss. Der Steuerbus trägt Signale wie Read/Write, Interrupt-Anfragen und Taktsignale, um die Operationen aller an den Bus angeschlossenen Komponenten zu synchronisieren und zu steuern. + \item \textbf{Korrekte Antwort mit Rationale:} B) Register $\rightarrow$ L1 Cache $\rightarrow$ RAM $\rightarrow$ SSD. Register sind die schnellsten und kleinsten Speicher innerhalb der CPU. L1 Cache ist der schnellste Cache, gefolgt von L2/L3. RAM ist deutlich langsamer als Cache, und SSDs (Massenspeicher) sind wesentlich langsamer als RAM. +\end{enumerate} + +\vspace{1cm} +\tiny{KI generiert mit Gemini 2.5 Flash am 28.6.2025} +} + diff --git a/dff.tex b/dff.tex new file mode 100644 index 0000000..e8e633f --- /dev/null +++ b/dff.tex @@ -0,0 +1,560 @@ +% DFF aus einem Beispiel von Texamples + +\makeatletter +% D Flipflop mit allen Anschlüssen +\pgfdeclareshape{ff}{ + % The 'minimum width' and 'minimum height' keys, not the content, determine + % the size + \savedanchor\northeast{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=0.5\pgf@x + \pgf@y=0.5\pgf@y + } + % This is redundant, but makes some things easier: + \savedanchor\southwest{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=-0.5\pgf@x + \pgf@y=-0.5\pgf@y + } + % Inherit from rectangle + \inheritanchorborder[from=rectangle] + + % Define same anchor a normal rectangle has + \anchor{center}{\pgfpointorigin} + \anchor{north}{\northeast \pgf@x=0pt} + \anchor{east}{\northeast \pgf@y=0pt} + \anchor{south}{\southwest \pgf@x=0pt} + \anchor{west}{\southwest \pgf@y=0pt} + \anchor{north east}{\northeast} + \anchor{north west}{\northeast \pgf@x=-\pgf@x} + \anchor{south west}{\southwest} + \anchor{south east}{\southwest \pgf@x=-\pgf@x} + \anchor{text}{ + \pgfpointorigin + \advance\pgf@x by -.5\wd\pgfnodeparttextbox% + \advance\pgf@y by -.5\ht\pgfnodeparttextbox% + \advance\pgf@y by +.5\dp\pgfnodeparttextbox% + } + + % Define anchors for signal ports + \anchor{D}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=.5\pgf@y% + } + \anchor{CLK}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=-.5\pgf@y% + } +% \anchor{CE}{ +% \pgf@process{\northeast}% +% \pgf@x=-1\pgf@x% +% \pgf@y=-0.33333\pgf@y% +% } + \anchor{Q}{ + \pgf@process{\northeast}% + \pgf@y=.5\pgf@y% + } + \anchor{Qn}{ + \pgf@process{\northeast}% + \pgf@y=-.5\pgf@y% + } + \anchor{S}{ + \pgf@process{\northeast}% + \pgf@x=0pt% + } + \anchor{R}{ + \pgf@process{\northeast}% + \pgf@x=0pt% + \pgf@y=-\pgf@y% + \advance\pgf@y by -2mm% + } + % Draw the rectangle box and the port labels + \backgroundpath{ + % Rectangle box + \pgfpathrectanglecorners{\southwest}{\northeast} + % Angle (>) for clock input + \pgf@anchor@dff@CLK + \pgf@xa=\pgf@x \pgf@ya=\pgf@y + \pgf@xb=\pgf@x \pgf@yb=\pgf@y + \pgf@xc=\pgf@x \pgf@yc=\pgf@y + \pgfmathsetlength\pgf@x{1ex} % size depends on font size + \pgfmathsetlength\pgf@y{0.5ex} + \advance\pgf@ya by \pgf@y + \advance\pgf@xb by \pgf@x + \advance\pgf@yc by -\pgf@y + \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} + \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} + \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}} + \pgfclosepath + + % Draw Reset Circle + \pgf@anchor@ff@R + \pgfcircle{\pgfrelative{\pgfpoint{\pgf@x}{\pgf@y}}{\pgfpoint{0}{+1mm}}}{1mm} + + % Draw port labels + \begingroup + \tikzset{flip flop/port labels} % Use font from this style + \tikz@textfont + + \pgf@anchor@ff@D + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{D}} + +% \pgf@anchor@dff@CE + % \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{CE}} + + \pgf@anchor@ff@Q + \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{Q}} + + \pgf@anchor@ff@Qn + \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{$\overline{\mbox{Q}}$}} + + \pgf@anchor@ff@R + \pgftext[bottom,at={\pgfrelative{\pgfpoint{\pgf@x}{\pgf@y}}{\pgfpoint{0}{+2mm}}},y=\pgfshapeinnerysep]{R} + +% \pgf@anchor@ff@S +% \pgftext[top,at={\pgfpoint{\pgf@x}{\pgf@y}},y=-\pgfshapeinnerysep]{S} + \endgroup + } +} + + + +% Data Flip Flip (DFF) shape +% Ist ein FF ohne S,R,Qn +\pgfdeclareshape{dff}{ + % The 'minimum width' and 'minimum height' keys, not the content, determine + % the size + \savedanchor\northeast{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=0.5\pgf@x + \pgf@y=0.5\pgf@y + } + % This is redundant, but makes some things easier: + \savedanchor\southwest{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=-0.5\pgf@x + \pgf@y=-0.5\pgf@y + } + % Inherit from rectangle + \inheritanchorborder[from=rectangle] + + % Define same anchor a normal rectangle has + \anchor{center}{\pgfpointorigin} + \anchor{north}{\northeast \pgf@x=0pt} + \anchor{east}{\northeast \pgf@y=0pt} + \anchor{south}{\southwest \pgf@x=0pt} + \anchor{west}{\southwest \pgf@y=0pt} + \anchor{north east}{\northeast} + \anchor{north west}{\northeast \pgf@x=-\pgf@x} + \anchor{south west}{\southwest} + \anchor{south east}{\southwest \pgf@x=-\pgf@x} + \anchor{text}{ + \pgfpointorigin + \advance\pgf@x by -.5\wd\pgfnodeparttextbox% + \advance\pgf@y by -.5\ht\pgfnodeparttextbox% + \advance\pgf@y by +.5\dp\pgfnodeparttextbox% + } + + % Define anchors for signal ports + \anchor{D}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=.5\pgf@y% + } + \anchor{CLK}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=-.5\pgf@y% + } +% \anchor{CE}{ +% \pgf@process{\northeast}% +% \pgf@x=-1\pgf@x% +% \pgf@y=-0.33333\pgf@y% +% } + \anchor{Q}{ + \pgf@process{\northeast}% + \pgf@y=.5\pgf@y% + } +% \anchor{Qn}{ +% \pgf@process{\northeast}% +% \pgf@y=-.5\pgf@y% +% } +% \anchor{R}{ +% \pgf@process{\northeast}% +% \pgf@x=0pt% +% } +% \anchor{S}{ +% \pgf@process{\northeast}% +% \pgf@x=0pt% +% \pgf@y=-\pgf@y% +% } + % Draw the rectangle box and the port labels + \backgroundpath{ + % Rectangle box + \pgfpathrectanglecorners{\southwest}{\northeast} + % Angle (>) for clock input + \pgf@anchor@dff@CLK + \pgf@xa=\pgf@x \pgf@ya=\pgf@y + \pgf@xb=\pgf@x \pgf@yb=\pgf@y + \pgf@xc=\pgf@x \pgf@yc=\pgf@y + \pgfmathsetlength\pgf@x{1ex} % size depends on font size + \pgfmathsetlength\pgf@y{0.5ex} + \advance\pgf@ya by \pgf@y + \advance\pgf@xb by \pgf@x + \advance\pgf@yc by -\pgf@y + \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} + \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} + \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}} + \pgfclosepath + + % Draw port labels + \begingroup + \tikzset{flip flop/port labels} % Use font from this style + \tikz@textfont + + \pgf@anchor@dff@D + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{D}} + +% \pgf@anchor@dff@CE + % \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{CE}} + + \pgf@anchor@dff@Q + \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{Q}} + +% \pgf@anchor@dff@Qn +% \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{$\overline{\mbox{Q}}$}} + +% \pgf@anchor@dff@R +% \pgftext[top,at={\pgfpoint{\pgf@x}{\pgf@y}},y=-\pgfshapeinnerysep]{R} + +% \pgf@anchor@dff@S +% \pgftext[bottom,at={\pgfpoint{\pgf@x}{\pgf@y}},y=\pgfshapeinnerysep]{S} + \endgroup + } +} + +% latch shape +% Ist ein FF ohne S,R und Clock anders dargestellt +\pgfdeclareshape{latch}{ + % The 'minimum width' and 'minimum height' keys, not the content, determine + % the size + \savedanchor\northeast{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=0.5\pgf@x + \pgf@y=0.5\pgf@y + } + % This is redundant, but makes some things easier: + \savedanchor\southwest{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=-0.5\pgf@x + \pgf@y=-0.5\pgf@y + } + % Inherit from rectangle + \inheritanchorborder[from=rectangle] + + % Define same anchor a normal rectangle has + \anchor{center}{\pgfpointorigin} + \anchor{north}{\northeast \pgf@x=0pt} + \anchor{east}{\northeast \pgf@y=0pt} + \anchor{south}{\southwest \pgf@x=0pt} + \anchor{west}{\southwest \pgf@y=0pt} + \anchor{north east}{\northeast} + \anchor{north west}{\northeast \pgf@x=-\pgf@x} + \anchor{south west}{\southwest} + \anchor{south east}{\southwest \pgf@x=-\pgf@x} + \anchor{text}{ + \pgfpointorigin + \advance\pgf@x by -.5\wd\pgfnodeparttextbox% + \advance\pgf@y by -.5\ht\pgfnodeparttextbox% + \advance\pgf@y by +.5\dp\pgfnodeparttextbox% + } + + % Define anchors for signal ports + \anchor{D}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=.5\pgf@y% + } + \anchor{CLK}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=-.5\pgf@y% + } + \anchor{Q}{ + \pgf@process{\northeast}% + \pgf@y=.5\pgf@y% + } + \anchor{Qn}{ + \pgf@process{\northeast}% + \pgf@y=-.5\pgf@y% + } + % Draw the rectangle box and the port labels + \backgroundpath{ + % Rectangle box + \pgfpathrectanglecorners{\southwest}{\northeast} + + % Draw port labels + \begingroup + \tikzset{flip flop/port labels} % Use font from this style + \tikz@textfont + + \pgf@anchor@latch@D + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{D}} + + \pgf@anchor@latch@CLK + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{C}} + + \pgf@anchor@latch@Q + \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{Q}} + + \pgf@anchor@latch@Qn + \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{$\overline{\mbox{Q}}$}} + + \endgroup + } +} + +% Register mit Enable +\pgfdeclareshape{reg}{ + % The 'minimum width' and 'minimum height' keys, not the content, determine + % the size + \savedanchor\northeast{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=0.5\pgf@x + \pgf@y=0.5\pgf@y + } + % This is redundant, but makes some things easier: + \savedanchor\southwest{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=-0.5\pgf@x + \pgf@y=-0.5\pgf@y + } + % Inherit from rectangle + \inheritanchorborder[from=rectangle] + + % Define same anchor a normal rectangle has + \anchor{center}{\pgfpointorigin} + \anchor{north}{\northeast \pgf@x=0pt} + \anchor{east}{\northeast \pgf@y=0pt} + \anchor{south}{\southwest \pgf@x=0pt} + \anchor{west}{\southwest \pgf@y=0pt} + \anchor{north east}{\northeast} + \anchor{north west}{\northeast \pgf@x=-\pgf@x} + \anchor{south west}{\southwest} + \anchor{south east}{\southwest \pgf@x=-\pgf@x} + \anchor{text}{ + \pgfpointorigin + \advance\pgf@x by -.5\wd\pgfnodeparttextbox% + \advance\pgf@y by -.5\ht\pgfnodeparttextbox% + \advance\pgf@y by +.5\dp\pgfnodeparttextbox% + } + + % Define anchors for signal ports + \anchor{D}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=.5\pgf@y% + } + \anchor{CLK}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=-.5\pgf@y% + } + \anchor{EN}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=-0.0\pgf@y% + } + \anchor{Q}{ + \pgf@process{\northeast}% + \pgf@y=.5\pgf@y% + } +% \anchor{Qn}{ +% \pgf@process{\northeast}% +% \pgf@y=-.5\pgf@y% +% } +% \anchor{R}{ +% \pgf@process{\northeast}% +% \pgf@x=0pt% +% } +% \anchor{S}{ +% \pgf@process{\northeast}% +% \pgf@x=0pt% +% \pgf@y=-\pgf@y% +% } + % Draw the rectangle box and the port labels + \backgroundpath{ + % Rectangle box + \pgfpathrectanglecorners{\southwest}{\northeast} + % Angle (>) for clock input + \pgf@anchor@reg@CLK + \pgf@xa=\pgf@x \pgf@ya=\pgf@y + \pgf@xb=\pgf@x \pgf@yb=\pgf@y + \pgf@xc=\pgf@x \pgf@yc=\pgf@y + \pgfmathsetlength\pgf@x{1ex} % size depends on font size + \pgfmathsetlength\pgf@y{0.5ex} + \advance\pgf@ya by \pgf@y + \advance\pgf@xb by \pgf@x + \advance\pgf@yc by -\pgf@y + \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} + \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} + \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}} + \pgfclosepath + + % Draw port labels + \begingroup + \tikzset{flip flop/port labels} % Use font from this style + \tikz@textfont + + \pgf@anchor@reg@D + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{D}} + + \pgf@anchor@reg@EN + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{EN}} + + \pgf@anchor@reg@Q + \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{Q}} + +% \pgf@anchor@reg@Qn +% \pgftext[right,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=-\pgfshapeinnerxsep]{\raisebox{-.75ex}{$\overline{\mbox{Q}}$}} + +% \pgf@anchor@reg@R + % \pgftext[top,at={\pgfpoint{\pgf@x}{\pgf@y}},y=-\pgfshapeinnerysep]{R} + +% \pgf@anchor@reg@S +% \pgftext[bottom,at={\pgfpoint{\pgf@x}{\pgf@y}},y=\pgfshapeinnerysep]{S} + \endgroup + } +} + +% Multiplexer +\pgfdeclareshape{mux}{ + % The 'minimum width' and 'minimum height' keys, not the content, determine + % the size + \savedanchor\northeast{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=0.5\pgf@x + \pgf@y=0.5\pgf@y + } + % This is redundant, but makes some things easier: + \savedanchor\southwest{% + \pgfmathsetlength\pgf@x{\pgfshapeminwidth}% + \pgfmathsetlength\pgf@y{\pgfshapeminheight}% + \pgf@x=-0.5\pgf@x + \pgf@y=-0.5\pgf@y + } + % Inherit from rectangle + \inheritanchorborder[from=rectangle] + + % Define same anchor a normal rectangle has + \anchor{center}{\pgfpointorigin} + \anchor{north}{\northeast \pgf@x=0pt} + \anchor{east}{\northeast \pgf@y=0pt} + \anchor{south}{\southwest \pgf@x=0pt} + \anchor{west}{\southwest \pgf@y=0pt} + \anchor{north east}{\northeast} + \anchor{north west}{\northeast \pgf@x=-\pgf@x} + \anchor{south west}{\southwest} + \anchor{south east}{\southwest \pgf@x=-\pgf@x} + \anchor{text}{ + \pgfpointorigin + \advance\pgf@x by -.5\wd\pgfnodeparttextbox% + \advance\pgf@y by -.5\ht\pgfnodeparttextbox% + \advance\pgf@y by +.5\dp\pgfnodeparttextbox% + } + + % Define anchors for signal ports + \anchor{izero}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=.5\pgf@y% + } + \anchor{ione}{ + \pgf@process{\northeast}% + \pgf@x=-1\pgf@x% + \pgf@y=-.5\pgf@y% + } + \anchor{sel}{ + \pgf@process{\northeast}% + \pgf@x=0pt% + \pgf@y=-.75\pgf@y% + } +% \anchor{CE}{ +% \pgf@process{\northeast}% +% \pgf@x=-1\pgf@x% +% \pgf@y=-0.33333\pgf@y% +% } + \anchor{output}{ + \pgf@process{\northeast}% + \pgf@y=0pt% + } + % Draw the rectangle box and the port labels + \backgroundpath{ + % Rectangle box + %\pgfpathrectanglecorners{\southwest}{\northeast} + %Draw the mux + \southwest + \pgf@xa=\pgf@x \pgf@ya=-\pgf@y + \pgf@xb=-\pgf@x \pgf@yb=-.5\pgf@y + \pgf@xc=-\pgf@x \pgf@yc=.5\pgf@y + + \pgfmoveto{\southwest} + \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@ya}} + \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} + \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}} + \pgfclosepath + + % Draw port labels + \begingroup + \tikzset{flip flop/port labels} % Use font from this style + \tikz@textfont + + \pgf@anchor@mux@izero + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{0}} + + \pgf@anchor@mux@ione + \pgftext[left,base,at={\pgfpoint{\pgf@x}{\pgf@y}},x=\pgfshapeinnerxsep]{\raisebox{-0.75ex}{1}} + + + + \endgroup + } +} + + + +% Key to add font macros to the current font +\tikzset{add font/.code={\expandafter\def\expandafter\tikz@textfont\expandafter{\tikz@textfont#1}}} + +% Define default style for this node +%\tikzset{flip flop/port labels/.style={font=\sffamily\tiny}} +\tikzset{flip flop/port labels/.style={font=\tiny}} +\tikzset{every dff node/.style={draw,minimum width=8mm,minimum +height=10mm,thin,inner sep=0.5mm,outer sep=0pt,cap=round}}%,add font=\sffamily}} + +\tikzset{every ff node/.style={draw,minimum width=8mm,minimum +height=10mm,thin,inner sep=0.5mm,outer sep=0pt,cap=round}}%,add font=\sffamily}} + + +\tikzset{every latch node/.style={draw,minimum width=8mm,minimum +height=10mm,thin,inner sep=0.5mm,outer sep=0pt,cap=round}}%,add font=\sffamily}} + +\tikzset{every mux node/.style={draw,minimum width=5mm,minimum +height=10mm,thin,inner sep=0.5mm,outer sep=0pt,cap=round}}%,add font=\sffamily}} + + +\tikzset{every reg node/.style={draw,minimum width=12mm,minimum +height=10mm,thin,inner sep=0.5mm,outer sep=0pt,cap=round}}%,add font=\sffamily}} + +\makeatother diff --git a/setup.tex b/setup.tex new file mode 100644 index 0000000..2e68883 --- /dev/null +++ b/setup.tex @@ -0,0 +1,114 @@ +%% ========================================= +\documentclass[11pt,a4paper]{report} + +%% ========== ifs ============== +%% Bedingtes Einfügen von Text +\newif\ifloesung +\loesungtrue %% Aufgaben mit Lösungen +%\loesungfalse %% Aufgaben ohne Lösungen + +% ========== Packages ============== +\usepackage[utf8]{inputenc} +\usepackage{longtable} +\usepackage{lmodern} +\usepackage{ngerman} % deutsche Spracheigenschaften, neue deutsche Silbentrennung +\usepackage[a4paper,bottom=20mm,top=10mm,head=2mm,hmargin=2cm,left=3cm] {geometry} +\usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty line rather than an indent +\usepackage{fancyhdr} % Kopf- und Fußzeilen +%\usepackage{lastpage} +\usepackage{hyperref} % für Hyperlinks +\usepackage{multirow} % multicolumn in Tabellen +\usepackage{multicol,float} % fuer mehrspaltigen Text +\usepackage{tikz} % fuer Tikz Pictures +\usetikzlibrary{shapes.geometric} +\usetikzlibrary{positioning,shapes,shadows,arrows} +\usetikzlibrary{patterns} +\usepackage{colortbl} % Einfaerben von Tabellenzelllen +\usetikzlibrary{circuits.logic.IEC,circuits.ee.IEC} % Graphikpaket für die Schaltungen +\usetikzlibrary{automata} % Zustandsautomaten +\usepackage{tikz-timing} % Timingdiagramm +\usepackage{circuitikz} +\usepackage{subfig} %für mehrere Bilder nebeneinander +\input{dff.tex} +\tikzstyle{branch}=[fill, shape=circle, minimum size=3pt, inner sep=0pt] +\usepackage{amsmath} +\usepackage{listings} +\lstset{language=VHDL, + basicstyle=\ttfamily\small, + showstringspaces=false, + numbers=none, %left + numberstyle=\tiny, + float=htbp, + tabsize=2, + frame=single, + columns=fixed, + captionpos=b, + framesep=4pt + } +\renewcommand*{\familydefault}{\sfdefault} + +% Den aktuellen Dateinamen +\usepackage{currfile} +%% ========== Kommandos ============== +\definecolor{orange}{RGB}{255,127,0} +\definecolor{light-gray}{gray}{0.75} + +\newcommand{\loesungsbox}[2]{\ifloesung +\fbox{ +\begin{minipage}[t][#1][t]{\linewidth} +#2 +\end{minipage} +} +\else +\begin{minipage}[t][#1][t]{\linewidth} +\begin{tikzpicture} +\draw[step=0.5cm,light-gray,very thin] (0,0) grid (\linewidth,#1); +\end{tikzpicture} +\end{minipage} +\fi +} + +% Aufgabennummerierung +\newcounter{aufgabe} +\newcounter{unteraufgabe} +\setcounter{aufgabe}{0} +\renewcommand{\chaptername}{Thema} +\newcommand{\Thema}[1]{\setcounter{aufgabe}{0} +\chapter*{#1\markboth{#1}{}} +\setcounter{page}{1} +} +\newcommand{\Aufgabe}[1]{\setcounter{unteraufgabe}{0}\stepcounter{aufgabe} +\ifloesung +\section*{Aufgabe \arabic{aufgabe}: #1 \hfill {\tiny \currfilename}} +\else +\section*{Aufgabe \arabic{aufgabe}: #1} +\fi%loesung +} +\newcommand{\Teilaufgabe}{\stepcounter{unteraufgabe}\alph{unteraufgabe}) } + +% Aufzählungen als Buchstaben a) b)... +\renewcommand{\labelenumi}{\alph{enumi})} + +%% ========== Kopf-/Fusszeile ============== +% z.B. Hochschule Augsburg, Fakultät für Elektrotechnik, \textbf{Informatik 2, SS 2015} +\newcommand{\setHeaderFooter}[1]{ +\fancypagestyle{plain} % Kopf- und Fußzeile fuer Kapitelseiten +{ + \fancyhf{} + \fancyfoot[L]{#1} + \fancyfoot[R]{\thepage} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0.6pt} +} +\pagestyle{fancy} % Kopf- und Fußzeilen fuer normale Seiten +\fancyhead{} +\fancyfoot{} +\setlength{\headheight}{15mm} +\renewcommand{\headrulewidth}{0.6pt} +\renewcommand{\footrulewidth}{0pt} +\fancyhead[C]{\nouppercase{\leftmark}} +\fancyhead[L]{#1} +\fancyhead[R]{\thepage} +\fancyfoot[L]{} +\fancyfoot[R]{} +} diff --git a/ti-uebungsblatt-1-beck-lsg.pdf b/ti-uebungsblatt-1-beck-lsg.pdf new file mode 100644 index 0000000..a738cbc Binary files /dev/null and b/ti-uebungsblatt-1-beck-lsg.pdf differ diff --git a/ti-uebungsblatt-1-beck.pdf b/ti-uebungsblatt-1-beck.pdf new file mode 100644 index 0000000..ce2db75 Binary files /dev/null and b/ti-uebungsblatt-1-beck.pdf differ diff --git a/ti-uebungsblatt-1.tex b/ti-uebungsblatt-1.tex new file mode 100644 index 0000000..ebcee79 --- /dev/null +++ b/ti-uebungsblatt-1.tex @@ -0,0 +1,38 @@ +%% ========================================= +\input{setup.tex} + +\newcommand{\uetitel}{Technische Informatik Übung 1} +\newcommand{\sem}{SS2025} + + +%\loesungtrue %% Aufgaben mit Lösungen +\loesungfalse %% Aufgaben ohne Lösungen + +%% ========================================= +\ifloesung +\title{\uetitel \textit{Lösungen}} +\else +\title{\uetitel} +\fi +\date{\sem} +\author{Prof. Dr.-Ing. Friedrich Beckmann} + +%% ========================================= +\begin{document} +\ifloesung +\setHeaderFooter{\uetitel \, - Lösungen, \sem} +\else +\setHeaderFooter{\uetitel, \sem} +\fi%loesung +%\maketitle + +\input{cpu/cpumemanbi.tex} +\newpage\input{cpu/cpuabuswidth.tex} +\newpage\input{cpu/cpuabus64.tex} +\newpage\input{cpu/cpudbus64.tex} +\newpage\input{cpu/cpumulti.tex} +%\newpage\input{vhdl/edgevhdl} +%\newpage\input{vhdl/vhdlholdcnt} +%\newpage\input{vhdl/vhdlunsigned} + +\end{document} \ No newline at end of file -- cgit v1.2.3