🖥️ BI-SAP – Struktura a architektura počítačů

Státnicové poznámky · Bakalářské státní zkoušky · FIT ČVUT

Okruh 21-28: Kombinační & sekvenční obvody Okruh 21-29: Architektura počítače & paměti Okruh 21-30: Kódy čísel & aritmetika Hana Kubátová · ČVUT FIT · 2026
Okruh 1 · BI-SPOL.21-28

Kombinační a sekvenční logické obvody

Popis a implementace kombinačních obvodů na úrovni hradel. Sekvenční automaty Mealy a Moore – principy, grafy přechodů, tabulky, klopné obvody. Minimalizace logických funkcí pomocí Karnaughových map.

🔢 Logická funkce a Booleova algebra

Logická funkce: Zobrazení f: Bn → B, kde B = {0, 1}. Každému vrcholu n-rozměrné Booleovské krychle Bn přiřazuje hodnotu 0 nebo 1.

Logickou funkci lze vyjádřit více různými způsoby (tabulka, algebraický výraz, mapa, krychle). Hledáme takové vyjádření, které vede k nejlepší implementaci v dané technologii – proto hovoříme o minimalizaci popisu, nikoli o minimalizaci funkce samotné.

  • Literál: proměnná nebo její negace (x, x̄, a, b̄, …)
  • Minterm: součin všech n literálů – popisuje jeden vrchol krychle
  • Implikant: krychle (podkrychle) f, jejíž všechny vrcholy jsou jedničkové (jsou v onsetu f)
  • Onset f: množina {x | f(x)=1}
  • Offset f: množina {x | f(x)=0}
Klíčové zákony Booleovy algebry
  • Komutativita: a + b = b + a; a · b = b · a
  • Asociativita: (a+b)+c = a+(b+c)
  • Distributivita: a·(b+c) = ab + ac
  • De Morganovy zákony: a̅+b̅ = (a·b)̄ a a̅·b̅ = (a+b)̄
  • Dvojí negace: (a̅)̄ = a
  • Absorpce: a + ab = a; a·(a+b) = a
  • Absorpce negace: a + a̅b = a + b
  • Princip duality: zákon platí i po záměně + ↔ · a 0 ↔ 1

📋 Formy popisu logické funkce a kanonické reprezentace

Stejná funkce může být zapsána nekonečně mnoha formulemi. Kanonická reprezentace zaručuje, že dvě ekvivalentní funkce mají totožný popis.

  • Pravdivostní tabulka: Kanonická – jedinečně určuje funkci. Pro n proměnných má 2n řádků.
  • Úplná DNF (ÚNDF / SOP – Sum of Products): Součet všech mintermů onsetu. Kanonická, ale obecně ne minimální.
  • Minimální DNF (MNDF): Minimální součet součinů – nejmenší počet co největších implikantů pokrývající všechny jedničkové vrcholy.
  • Úplná KNF (ÚNKF / POS – Product of Sums): Duální tvar – součin součtů pokrývající nulové vrcholy.
  • Karnaughova mapa: 2D přepis n-rozměrné krychle, sousední políčka se liší jedním bitem (Grayův kód). Umožňuje vizuální minimalizaci.
  • Stavový index (σ-zápis): q = σ(3, 5, 6, 7) – výčet indexů jedničkových mintermů
⚠️ Pozor na konzistenci pořadí proměnných!

Funkce f(x₁,x₂,x₃) a f(x₃,x₂,x₁) jsou obecně různé, i když mají stejnou tabulku zapsanou v tomto pořadí. Nejvyšší váhu má proměnná nejvíce vlevo.

🗺️ Minimalizace v Karnaughově mapě (K-mapa)

K-mapa je grafická metoda hledání minimální normální disjunktivní formy (MNDF). Cílem je najít minimální počet co největších implikantů (smyček), které pokryjí všechny jedničkové vrcholy (onset).

Pravidla pro K-mapu
  • Velikost smyčky musí být mocnina 2 (1, 2, 4, 8, 16, …)
  • Smyčky mohou přesahovat přes okraje mapy (toroidální topologie)
  • Smyčka nesmí pokrýt žádný nulový vrchol (offset)
  • Neurčené stavy (don't care, X) mohou být buď zahrnuty nebo ignorovány – využíváme je pro zvětšení smyček
  • Hledáme nejmenší počet co největších (primárních) implikantů

Terminologie dvouúrovňové minimalizace:

  • Přímý implikant (PI – Prime Implicant): Implikant, z jehož popisu nelze vypustit žádný literál, aniž by pokryl i nulový vrchol. Tedy největší možná „smyčka".
  • Podstatný implikant (EPI – Essential Prime Implicant): Přímý implikant, který jako jediný pokrývá aspoň jeden jedničkový vrchol. Musí být v řešení.
  • Neredundantní krychle: Pokrývá aspoň jeden vrchol, který žádná jiná krychle v pokrytí nepokrývá.
  • Pokrytí (cover): Množina implikantů reprezentující funkci.

Algoritmus minimalizace (MNDF):

  1. Najdi všechny přímé implikanty (PI)
  2. Urči podstatné implikanty (EPI) – jsou povinné
  3. Pokud EPI pokrývají všechny jedničky – hotovo
  4. Jinak doplň minimální počet dalších PI pro pokrytí zbývajících jedniček
Algoritmus Quine–McCluskey

Pro více než 5–6 proměnných je K-mapa nepraktická. Quine-McCluskey algoritmus systematicky (hrubou silou) nalezne všechny PI: 1. Seřadí mintermy podle počtu jedniček; 2. Páruje sousední skupiny lišící se jedním bitem; 3. Opakuje dokud nelze dále slučovat; 4. Pomocí tabulky pokrytí najde minimální MNDF.

Realizace z hradel NAND / NOR: MNDF (SOP) se přirozeně realizuje z hradel NAND. MNKF (POS) z hradel NOR. Jak NAND, tak NOR tvoří úplný soubor logických funkcí – libovolnou funkci lze realizovat pouze z jednoho typu hradla.

🔌 Kombinační obvody – typické prvky v počítači

Kombinační obvod: Výstupní hodnoty jsou v každém okamžiku určeny pouze aktuálními vstupními hodnotami. Neexistuje zpětná vazba ani paměť.

Základní hradla: AND, OR, NOT, NAND, NOR, XOR. Přičemž NAND i NOR jsou funkčně úplné samy o sobě (4 tranzistory CMOS).

Důležité kombinační bloky:

  • Dekodér (1 z N): Binární kód na adresových vstupech aktivuje právě jeden z 2n výstupů. Realizace: každý výstup je minterm vstupních proměnných. Příklad: 2-vstupový dekodér → 4 výstupy y₀=x̄₁x̄₀, y₁=x̄₁x₀, y₂=x₁x̄₀, y₃=x₁x₀.
  • Multiplexor (MUX): Vybírá jeden z datových vstupů na výstup podle selektoru. 4-1 MUX: y = s̄₁s̄₀d₀ + s̄₁s₀d₁ + s₁s̄₀d₂ + s₁s₀d₃. V CMOS realizace přenosovými hradly (6 tranzistorů pro 2-1 MUX).
  • Demultiplexor (DEMUX): Inverzní k MUX – jeden vstup přepojuje na jeden z výstupů.
  • Půlsčítačka (Half Adder): S = a XOR b; Přenos q = a · b. Bez vstupního přenosu.
  • Úplná sčítačka (Full Adder): s = a ⊕ b ⊕ p; q = ab + p(a ⊕ b). Se vstupním přenosem p.
  • Paralelní sčítačka (Ripple Carry Adder): Kaskáda full adderů. Přenos se šíří sériově – pomalé pro velké šířky.
  • Sčítačka s předvídáním přenosu (Carry Look-Ahead): Predikuje přenosy paralelně. G=ab (generuje), P=a⊕b (šíří). q' = G' + P'·p'; Přenosy vyšších řádů se počítají přímo ze vstupů.
  • Majoritní funkce M3: M3(c,b,a) = ab + ac + bc – výstup 1 když alespoň 2 ze 3 vstupů jsou 1.
  • XOR: Výstup 1 pro lichý počet jedničkových vstupů. Realizace: 4× NAND = 16 tranzistorů; CMOS přenosová hradla = jen 6 tranzistorů.
  • Barrel shifter: Kombinační obvod pro posuv o proměnný počet míst – kombinuje obvody pro různé posuvy a multiplexory. Rychlé, ale zabírá více plochy.

🔄 Sekvenční obvody – principy a model

Sekvenční obvod: Výstup závisí nejen na aktuálních vstupech, ale i na historii vstupů (sekvenci). „Paměť" je realizována zpětnou vazbou.

Matematický model sekvenčního obvodu je konečný automat (FSM – Finite State Machine):

  • X – množina vstupů
  • Y – množina výstupů
  • Q – množina vnitřních stavů
  • Q₀ – počáteční stav (pro iniciální automat)
  • δ: X × Q → Q – přechodová funkce (určuje příští stav)
  • λ – výstupní funkce (Mealy nebo Moore)

V BI-SAP se omezujeme na synchronní sekvenční obvody – zpětné vazby jsou přerušovány klopnými obvody (FF) řízenými hodinovým signálem CLK.

D klopný obvod (D Flip-Flop)

Q(next) = D – co je na vstupu D, to se po aktivní hraně CLK objeví na výstupu Q a zůstane do dalšího taktu. Základní stavební blok sekvenčních obvodů v synchronním návrhu. Délka periody hodin musí být větší než propagační zpoždění kombinační části + setup time FF.

🎭 Automaty Mealy a Moore – rozdíly a konverze

Oba typy jsou ekvivalentní v síle (každý Moore lze převést na Mealy a naopak), liší se v definičním oboru výstupní funkce λ:

Vlastnost Moore Mealy
Výstupní funkce λ: Q → Y (závisí jen na stavu) λ: X × Q → Y (závisí na vstupu i stavu)
Graf přechodů Výstup přiřazen uzlu (stavu) Výstup přiřazen hraně (přechodu)
Reakce na vstup Opožděná (viditelná až v dalším stavu) Okamžitá (ihned)
Přímá vazba vstup→výstup Ne (odstraněna) Ano (existuje)
Počet stavů Obecně více Obecně méně
Realizace v HW Výstup z Q (výstupu FF) Výstup ze vstupu D FF (kombinační logika)

Konverze Moore → Mealy: Z tabulky přechodů přiřadíme výstup hraně podle cílového stavu (výstup reaguje na vstup o takt dříve).

Konverze Mealy → Moore: Uzly s různými vstupními výstupy rozdělíme – každý uzel, do nějž vstupují hrany s různými výstupy, nahradíme tolika uzly, kolik různých výstupů do něj vstupuje. Výstup bude opožděný o takt.

Proč to učitelé zkouší?

Je důležité pochopit, ne jen definici: Moore je „stabilnější" – výstup se nemění okamžitě se vstupem, čímž se eliminují glitche. Mealy je kompaktnější (méně stavů), ale výstup závisí kombinačně na vstupu, což může způsobit hazardy a je citlivé na vstupní rušení.

🛠️ Postup návrhu synchronního sekvenčního obvodu

  1. Slovní popis / specifikace – porozumění zadání, identifikace chování
  2. Graf přechodů (STG) – uzly = stavy, hrany = přechody ohodnocené vstup/výstup (Mealy) nebo jen vstup (Moore)
  3. Tabulka přechodů a výstupů – symbolická forma (stavy jako A, B, C…)
  4. Kódování: zakódování vstupů, výstupů a vnitřních stavů do binárních hodnot
  5. Zakódovaná tabulka – přechodové a výstupní funkce v binárních hodnotách
  6. Minimalizace budících funkcí D-FF pomocí K-map
  7. Minimalizace výstupních funkcí
  8. Schéma zapojení z hradel a D-FF
  9. Výpočet maximální hodinové frekvence: fmax = 1 / max(Wf-f) kde Wf-f = Clock-to-Q + zpoždění kombinační logiky + Setup time
Klíčové časové parametry D-FF
  • Setup time: Vstup D musí být stabilní PŘED aktivní hranou CLK
  • Hold time: Vstup D musí zůstat stabilní PO aktivní hraně CLK
  • Clock-to-Q: Zpoždění od aktivní hrany CLK po ustálení výstupu Q

Maximální perioda CLK musí být delší než nejdelší kritická cesta: Wf-f = CLK-to-QFF1 + tkombinační logika + SetupFF2

📦 Registry a čítače

Registr: n D-FF řízených společným hodinovým signálem. Uchovává n-bitové slovo dokud není přepsáno. Varianty:

  • Paralelní registr: Všechny bity se zapisují/čtou současně
  • Registr s řízením zápisu (Load): Při Load=0 si registr pamatuje stav; při Load=1 načítá nová data
  • Posuvný registr (Shift register): Při Shift=1 se data posouvají o jeden bit doleva nebo doprava. Umožňuje sériový přenos dat.
  • Vícefunkční registr: Kombinace paralelního načítání a posuvů

Čítač: Speciální registr zahrnující funkci inkrementu (dekrementu). Typy:

  • Binární čítač M2n: Čítá v binárním kódu. Modulo = 2n
  • Neúplný čítač (Mn): Čítá do n < 2k. Nevyužité stavy jsou don't care
  • Grayův kód: Při každém přechodu se mění jen 1 bit – eliminuje hazardy při čtení stavu
  • Čítač s povolením (Enable E): Čítá jen když E=1
  • Vratný čítač: Čítá nahoru nebo dolů podle řídicího vstupu

Shrnutí okruhu 1

  • Kombinační obvod: výstup závisí jen na aktuálních vstupech → popis logickou funkcí → minimalizace K-mapou → realizace z hradel NAND/NOR
  • Sekvenční obvod: výstup závisí na historii vstupů → model konečným automatem → synchronizace D-FF a hodinovým signálem
  • Moore: výstup z uzlu (opožděný, stabilní); Mealy: výstup z hrany (okamžitý, kompaktnější)
  • Minimalizace: hledáme PI → EPI → minimální pokrytí; neurčené stavy (X) využíváme pro zvětšení smyček
  • Kritická cesta a maximální frekvence: f = 1/Wf-f; Wf-f = CLK-to-Q + tlog + tsetup
🎓 Kontrolní otázky (státnice)
  1. Co je kombinační obvod a čím se liší od sekvenčního? – Kombinační: výstup = funkce pouze aktuálních vstupů. Sekvenční: výstup závisí i na historii (stavu) – realizováno zpětnou vazbou a klopnými obvody.
  2. Co je Karnaughova mapa a jak se v ní minimalizuje? – 2D přepis krychle se sousedními políčky lišícími se v jednom bitu. Hledáme největší smyčky (mocniny 2) pokrývající všechny jedničky bez nul. Největší smyčky = přímé implikanty. Podstatné implikanty musí být v řešení.
  3. Vysvětlete rozdíl Moore a Mealy automatu. – Moore: výstup závisí jen na stavu (přiřazen uzlu), přechod je opožděný. Mealy: výstup závisí na vstupu i stavu (přiřazen hraně), reakce je okamžitá.
  4. Co je přímý a co je podstatný implikant? – PI: největší implikant (nelze rozšířit). EPI: PI, který jako jediný pokrývá aspoň jeden jedničkový vrchol – musí být v minimálním pokrytí.
  5. Jak se navrhuje sekvenční obvod od specifikace po realizaci? – Slovní popis → graf přechodů → tabulka (symbolická) → kódování → zakódovaná tabulka → K-mapy → minimalizované funkce → schéma s D-FF a hradly → výpočet frekvence.
  6. Co je D klopný obvod a jaká jsou jeho časová omezení? – Q(next) = D, přepis po aktivní hraně CLK. Musí být splněn setup time (vstup musí být stabilní před hranou) a hold time (vstup musí být stabilní po hraně).
  7. Proč se NAND a NOR označují jako úplné soubory logických funkcí? – Z hradel NAND (resp. NOR) lze realizovat libovolnou logickou funkci, protože pomocí nich lze postavit AND, OR i NOT. V CMOS je NAND/NOR nejefektivnější (4 tranzistory).
Okruh 2 · BI-SPOL.21-29

Architektura počítače, instrukční cyklus, ISA a paměťová hierarchie

Von Neumannova a Harvardská architektura. Instrukční cyklus a jeho fáze. Základní třídy ISA (střadačová, zásobníková, GPR). Paměťová hierarchie, lokality přístupu, virtualizace, skrytá paměť (cache).

🏗️ Základní architektura číslicového počítače

Číslicový počítač zpracovává instrukce uložené v paměti. Základní principy byly formulovány Johnem von Neumannem kolem roku 1945.

Vlastnost Von Neumannova architektura Harvardská architektura
Paměť Společná pro instrukce i data Oddělené paměti pro instrukce a data
Sběrnice Jedna (nebo sdílená) Dvě samostatné
Rychlost Omezena sdílením paměti Vyšší (paralelní přístup)
Příklad Klasické PC, x86 AVR mikrokontroléry, DSP

Základní součásti procesoru (CPU):

  • ALU (Aritmeticko-logická jednotka): Provádí operace s daty (sčítání, odčítání, logické operace, posuvy)
  • Řadič (Control Unit): Řídí všechny jednotky – generuje řídící signály podle instrukčního kódu v IR
  • Pracovní registry: Rychlá vnitřní paměť pro dočasné uchování dat a adres
  • PC (Program Counter): Obsahuje adresu následující instrukce
  • IR (Instruction Register): Obsahuje kód právě prováděné instrukce
  • SP (Stack Pointer): Ukazatel na vrchol zásobníku
  • SREG (Status Register): Registr příznaků – C (Carry), Z (Zero), N (Negative), V (Overflow), S, H, T, I

Sběrnice (BUS): Soubor vodičů a pravidel pro propojení jednotek. Složen z:

  • AB (Address Bus): Přenos adres (jednosměrný)
  • DB (Data Bus): Přenos dat (obousměrný)
  • CB (Control Bus): Řídící a stavové signály

🔁 Instrukční cyklus (Fetch–Decode–Execute)

Instrukční cyklus: Nekonečně se opakující sekvence kroků, jimiž procesor zpracovává instrukce programu. Je implicitní součástí ISA.

Základní fáze instrukčního cyklu:

  1. IF (Instruction Fetch – čtení instrukce): PC → AB; paměť vystaví instrukci na DB; DB → IR; PC se inkrementuje na adresu další instrukce
  2. ID (Instruction Decode – dekódování): Řadič dekóduje instrukční kód z IR, určí typ operace a operandy
  3. OF (Operand Fetch – čtení operandů): Operandy se načtou z registrů nebo paměti
  4. IE (Instruction Execute – vykonání): ALU provede operaci
  5. WB (Write Back – zapsání výsledku): Výsledek se uloží do cílového registru nebo paměti
  6. Interrupt? – přerušení: Testuje se, zda není aktivní žádost o přerušení
Pipelining – zřetězené zpracování

Jednotlivé fáze instrukčního cyklu zpracovávají různé instrukce souběžně (jako výrobní pás). V ideálním případě se každý takt dokončí jedna instrukce. Konflikty (hazardy): datové (data ještě nejsou k dispozici) a skokové (adresa skoku není ještě známa). Řešení: vložení „bublin" (čekání), predikce skoků, dopředné předávání dat.

📜 ISA – Architektura souboru instrukcí

ISA (Instruction Set Architecture) je rozhraní mezi software a hardware. Definuje: typy instrukcí, formáty, kódování, datové typy, způsoby adresace, registry a způsob zpracování přerušení.

Základní třídy ISA (podle umístění operandů):

  • Střadačově orientovaná (Accumulator): Jeden implicitní operand = střadač (ACC). Instrukce: LOAD A, ADD A, STORE A. Historicky první, jednoduchý HW, ale časté přístupy do paměti. Příklady: Intel 4004, 8080, 8051.
  • Zásobníkově orientovaná (Stack): Operandy na hardwarovém zásobníku. Instrukce: PUSH, POP, ADD (bere ze zásobníku). Krátké instrukce, ale sekvenční přístup. Příklady: Burroughs B5000, Java Virtual Machine.
  • GPR (General Purpose Registers): Více registrů pro obecné použití. Dnes dominuje. 2 nebo 3 adresové instrukce. Registry rychlejší než cache! Příklady: RISC (MIPS, ARM, AVR), x86.

Způsoby adresace operandů:

  • Implicitní: Operand je určen operačním kódem (např. ACC)
  • Bezprostřední (Immediate): Operand je konstanta přímo v instrukci (LDI r16, 5)
  • Přímá (Direct): V instrukci je adresa paměti nebo číslo registru
  • Nepřímá (Indirect): V instrukci je adresa adresy (pointer)
  • Relativní: Adresa = obsah registru (typicky PC) + offset z instrukce
  • Indexová: Adresa = báze + index (z dvou registrů) – vhodné pro matice
  • Autoinkrementace/dekrementace: Registr se automaticky inkrementuje/dekrementuje při přístupu (SP u zásobníku)
RISC vs CISC
  • RISC (Reduced Instruction Set Computer): Jednoduché instrukce, prováděné v 1 taktu, pipelining, obvodový řadič, malý počet formátů a způsobů adresace, velký počet registrů (>32), komunikace s pamětí jen přes Load/Store. Příklady: MIPS, ARM, SPARC, RISC-V, AVR.
  • CISC (Complex Instruction Set Computer): Složité instrukce různé délky, mikroprogramový řadič, bohaté adresování, instrukce mohou přímo přistupovat k paměti. Příklady: x86, Motorola 68000.
  • Dnešní x86 procesory interně překládají CISC instrukce na RISC-like mikrooperace.

🎛️ Řadič procesoru

Řadič je sekvenční obvod (FSM), který řídí všechny jednotky počítače podle instrukčního kódu v IR a stavových signálů z ALU a periferií. Generuje řídící signály pro ALU, registry, paměť a V/V.

Dvě základní realizace:

  • Obvodový řadič (Hardwired): Klasický sekvenční obvod navržený přímo z hradel a klopných obvodů. Typicky v kódu 1 z n (každý stav = jeden FF). Rychlý, ale obtížně modifikovatelný. Používán v RISC.
  • Mikroprogramový řadič: Kombinační část nahrazena řídící pamětí (ROM). Každá položka paměti = mikroinstrukce (sada řídících signálů pro daný takt). Soubor mikroinstrukcí = mikroprogram. Soubor mikroprogramů = firmware. Flexibilní (lze přeprogramovat), ale pomalejší. Používán v CISC.

Přerušení (Interrupt):

  • Vnější (od periferií): maskovatelné (lze zakázat příznakem I v SREG instrukcí CLI/SEI) nebo nemaskovatelné (NMI)
  • Vnitřní (chyby, instrukce INT n)
  • Postup: (1) Uloží SREG a PC na zásobník; (2) Zakáže přerušení; (3) Skočí na adresu obsluhy (vektor přerušení); (4) Provede obsluhu; (5) Obnoví PC a SREG, návrat

💾 Typy pamětí a základní pojmy

Paměti se dělí podle různých kritérií:

  • Podle způsobu výběru: Adresovatelné (RAM – Random Access Memory), asociativní (CAM – Content Addressable Memory – klíčem je část dat), sériové (LIFO zásobník, FIFO fronta)
  • Podle možnosti změny:
    • ROM (Read Only Memory) – obsah určen při výrobě
    • PROM – jednorázově programovatelná
    • EPROM, EEPROM, Flash – mazatelné a přepisovatelné
    • SRAM (Static RAM) – bistabilní KO, rychlá, dražší, malá kapacita (cache)
    • DRAM (Dynamic RAM) – kondenzátor, nutné obnovovanie, levnější, větší kapacita (hlavní paměť)
  • Volatile vs. non-volatile: SRAM, DRAM – energeticky závislé (data zmizí po vypnutí). ROM, Flash – energeticky nezávislé.

Základní pojmy adresovatelné paměti:

  • Paměťová buňka: Základní prvek – uchovává 1 bit
  • Paměťové místo: Skupina buněk čtených/zapisovaných najednou (šířka slova)
  • Adresa: Číselné označení paměťového místa
  • Kapacita: Počet paměťových míst
  • Řídící signály: OE (Output Enable), WE (Write Enable), CS (Chip Select)
  • Big-endian vs. Little-endian: Pořadí slabik víceslabikového čísla v paměti – big-endian: nejdůležitější byte na nejnižší adrese; little-endian: nejméně důležitý byte na nejnižší adrese (Intel x86)

📐 Paměťová hierarchie a princip lokality

Paměťová hierarchie: Víceúrovňové uspořádání pamětí různých typů s cílem dosáhnout optimálního poměru výkon × cena. Vyšší vrstvy: rychlé, malé, drahé. Nižší vrstvy: pomalé, velké, levné.

Motivace: Latence DRAM (~16 ns) je 50–100× větší než cyklus procesoru (~0.33 ns). Přístupy do paměti jsou bottleneck.

Princip lokality (základ fungování hierarchie):

  • Časová (temporal) lokalita: K nedávno použitým datům bude s velkou pravděpodobností brzy přistupováno znovu (cykly, funkce). → Ukládáme nedávno použitá data do rychlé cache.
  • Prostorová (spatial) lokalita: S velkou pravděpodobností se bude přistupovat k datům v okolí těch, se kterými se právě pracuje (pole, sekvenční instrukce). → Přenášíme data po blocích (cache lines).
Úroveň Typ Kapacita Latence Umístění
M0RegistryB<1 nsV CPU
M1L1 Cache~10 kB~1 nsV CPU
M2L2 Cache~100 kB – 10 MB1–5 nsV CPU
M3L3 Cache1–10 MB~10 nsV pouzdře
M4Hlavní paměť (DRAM)~10 GB~10 ns (burst), 16 ns latenceNa desce
M5SSD, HDDTB70 μs – 10 msExt. úložiště
M6Záloha (páska, cloud)PBsec – minVzdálené

Analogie s knihovnou: Registry = knihy na stole; Cache = domácí polička; Hlavní paměť = městská knihovna; Záložní paměť = meziknihovní výpůjčka.

🌐 Virtualizace paměti a stránkování

Virtualizace umožňuje, aby programy pracovaly s logickým adresovým prostorem větším, než je fyzická hlavní paměť. Ve skutečnosti jsou data uložena na disku a do RAM se přenáší jen to, co je právě potřeba.

Stránkování:

  • Logický prostor dělen na stránky (pages) pevné velikosti (4 KB–8 KB)
  • Fyzický prostor dělen na stránkové rámce (page frames) stejné velikosti
  • Tabulka stránek mapuje logické stránky na fyzické rámce. Je uložena v hlavní paměti.
  • Položka tabulky stránek obsahuje: číslo rámce, příznak přítomnosti, Dirty bit (byla stránka modifikována?), přístupová práva
  • TLB (Translation Lookaside Buffer): Rychlá asociativní cache pro překlad virtuálních adres na fyzické – urychluje stránkování
  • Page fault: Stránka není v RAM → přerušení → OS načte stránku z disku (miss penalty obrovský!)
Příklad výpočtu tabulky stránek

Virtuální paměť 4 GB (32b adresa), hlavní paměť 4 MB (22b adresa), stránka 4 KB (12b offset). Počet stránek: 220. Položka tabulky stránek: 10b (číslo rámce) + overhead → ≈2 B. Velikost tabulky: 220 × 2 B = 2 MB = polovina hlavní paměti! → Nutné víceúrovňové tabulky stránek nebo inverted page table.

Skrytá paměť (Cache)

Cache: Rychlá SRAM paměť zařazená mezi procesor a hlavní paměť. Obsahuje kopie nejčastěji používaných položek. Pro uživatele „průhledná" – transparentní.

Princip čtení: Přístup se zahájí současně do cache i do HP. Pokud je položka v cache nalezena (cache hit), čtení z HP se přeruší.

  • Cache Hit: Data nalezena v cache
  • Cache Miss: Data v cache nejsou – nutno načíst z HP (miss penalty)
  • Hit rate: Podíl přístupů s nalezením v cache. Typicky >95%.
  • Miss rate: 1 – Hit rate
  • Miss penalty: Čas pro načtení bloku z HP do cache při výpadku

Organizace cache – stupeň asociativity:

  • Plně asociativní: Blok lze uložit na libovolné místo v cache. Adresář prohledáván parallelně (CAM). Nejflexibilnější, ale nejnákladnější na HW.
  • Přímo mapovaná (stupeň 1): Každý blok HP může být jen na jednom místě v cache (určeno bitovým polem adresy). Levné, ale konflikty.
  • N-cestně asociativní: Každý blok může být na N místech. Kompromis. Typická cache: 4-cestná nebo 8-cestná.

Struktura adresy při přístupu do cache:

  • TAG: Horní bity adresy – uloženy v adresáři, slouží k ověření shody
  • Index (adresní výběr): Určuje řádek (sadu) v cache
  • Offset: Vybírá konkrétní byte v bloku (cache line)

Strategie zápisu:

  • Write-through (průběžný zápis): Nová hodnota se zapíše zároveň do cache i do HP. Jednodušší konzistence, ale více zápisů do HP.
  • Write-back (odložený zápis): Zapíše se jen do cache; do HP až při vyhazování bloku (pokud Dirty bit = 1). Méně zápisů do HP, ale složitější konzistence.

Strategie výměny (eviction policy):

  • LRU (Least Recently Used): Vyhazuje nejdéle nepoužívaný blok. Nejúčinnější, ale vyžaduje udržování pořadí.
  • Náhodný výběr (Random): Jednodušší HW, podobný výkon jako LRU
  • FIFO: Vyhazuje nejdéle v cache přítomný blok
Proč cache funguje?

Funguje díky principu lokality. Programy většinou přistupují k malé části dat opakovaně (temporal) a sekvenčně (spatial). Cache toho využívá: uchovává nedávno použitá data v blocích, takže při přístupu k sousedním datům jsou již v cache.

Organizace paměťového subsystému: Varianty přístupu HP→cache: (1) Jednoduché – zachování šířky slova, velká latence. (2) Paměť se širokým slovem – přenos N slov najednou, snižuje latenci. (3) Prokládaná paměť (interleaved) – nezávislé moduly, zřetězené přístupy.

Shrnutí okruhu 2

  • Von Neumann: společná paměť pro instrukce a data; Harvard: oddělené paměti – rychlejší přístup
  • Instrukční cyklus: IF → ID → OF → IE → WB → přerušení? – opakuje se stále dokola
  • ISA třídy: střadačová (1 registr), zásobníková (LIFO HW), GPR (mnoho registrů) – dnes dominuje GPR
  • RISC: jednoduché instrukce, 1 takt, pipelining, obvodový řadič; CISC: složité instrukce, mikroprogramový řadič
  • Paměťová hierarchie: registry → L1 → L2 → L3 → DRAM → disk; čím blíže CPU, tím rychlejší a dražší
  • Lokalita: temporal (znovu použití) + spatial (blízkost) → základ efektivity cache
  • Cache: hit/miss, hit rate, miss penalty; associativita: přímo mapovaná, N-cestná, plně asociativní
  • Stránkování: logická → fyzická adresa přes tabulku stránek; TLB urychluje překlad
🎓 Kontrolní otázky (státnice)
  1. Jaké jsou rozdíly Von Neumannovy a Harvardské architektury? – VN: společná paměť pro instrukce a data, jednodušší ale pomalejší (bus bottleneck). Harvard: oddělené paměti a sběrnice, rychlejší přístup (lze číst instrukci a data současně), typický pro DSP a mikrokontroléry.
  2. Popište instrukční cyklus a jeho fáze. – IF: načti instrukci z adresy v PC do IR, PC++. ID: dekóduj instrukci v IR. OF: načti operandy z registrů/paměti. IE: proveď operaci v ALU. WB: ulož výsledek. Přerušení?: ověř žádosti o přerušení.
  3. Jaké jsou základní třídy ISA a jejich výhody/nevýhody? – Střadačová: jednoduchý HW, ale časté přístupy do paměti. Zásobníková: krátké instrukce, ale sekvenční přístup. GPR: registry rychlé, podpora paralelismu, ale omezený počet registrů a složitější překladač.
  4. Co je princip lokality a proč je důležitý pro cache? – Temporal: znovu přistupujeme k nedávno použitým datům. Spatial: přistupujeme k datům blízkým těm, co jsme právě použili. Cache využívá obou: ukládá nedávno použitá data v blocích (cache lines).
  5. Co je cache hit a miss? Co ovlivňuje výkon cache? – Hit: data nalezena v cache (rychlé). Miss: data nenalezena – nutno načíst z HP (pomalé). Výkon = hit rate × hit time + miss rate × (hit time + miss penalty). Klíčové: hit rate (ideálně >95%) a miss penalty (latence HP).
  6. Vysvětlete přímo mapovanou vs. N-cestně asociativní cache. – Přímo mapovaná: každý blok HP má přesně 1 místo v cache. Konflikty (thrashing) při práci se sadou dat mapovanou na stejné místo. N-cestná: N možných míst → menší pravděpodobnost konfliktu, ale složitější HW pro výběr při eviction (LRU).
  7. Jak funguje stránkování a co je TLB? – Logický adresový prostor dělen na stránky; fyzický na rámce stejné velikosti. Tabulka stránek (v HP) mapuje logické stránky na fyzické rámce. TLB = malá asociativní cache pro překlad virtuální→fyzická adresa, aby se nechodilo do tabulky stránek při každém přístupu.
Okruh 3 · BI-SPOL.21-30

Kódy pro čísla se znaménkem, aritmetické operace a pohyblivá řádová čárka

Přímý, aditivní a doplňkový kód. Sčítačky, odčítačky, detekce přeplnění. Aritmetické posuvy, dekodér, multiplexor, čítač. Representace čísel v pohyblivé řádové čárce (IEEE 754).

🔢 Poziční číselné soustavy a řádová mřížka

Řádová mřížka: Definuje formát zobrazitelných čísel – určuje nejvyšší řád n a nejnižší řád -m. Délka l = n + m + 1, jednotka e = z-m, modul M = zn+1.

Důležité soustavy: dvojková (z=2), šestnáctková (z=16 = 24 → 1 hex cifra = 4 bity).

Převody:

  • Desetinná → dvojková (celá část): Opakované dělení 2, zbytky odpisu od konce
  • Desetinná → dvojková (zlomková část): Opakované násobení 2, celé části odpisu od začátku
  • Dvojková ↔ Šestnáctková: Přímá záměna po skupinách 4 bitů (od řádové čárky)
⚠️ Ne každé číslo je přesně zobrazitelné!

Například 0.110 = 0.000 1100 1100 1100…2 – nekonečný periodický rozvoj. Tedy při konečné řádové mřížce dochází k chybě zaokrouhlení. To je zásadní pro floating point aritmetiku!

Aritmetické operace ve dvojkové soustavě:

  • Sčítání: Bit po bitu od nejnižšího řádu, přenos do vyššího řádu
  • Odčítání: A - B = A + (-B). Odčítání je přičtení opačného čísla modulo M → musí vyjít přenos pro správný výsledek
  • Násobení: Postupné posuvy a sčítání (jako v desítkové soustavě)

±️ Kódy pro zobrazení čísel se znaménkem

Standardní polyadické soustavy zobrazují jen nezáporná čísla. Pro záporná čísla existují tři hlavní kódy:

Vlastnost Přímý kód (Sign-Magnitude) Doplňkový kód (2's Complement) Aditivní kód (Biased/Excess)
Definice Znaménko (MSB) + absolutní hodnota D(X) = X pro X≥0; M+X pro X<0 A(X) = X + K (typicky K = M/2)
Rozsah (l=n bitů) −(2n-1−1) až +(2n-1−1) −2n-1 až +(2n-1−1) −K až M−1−K
Nula Dvě (kladná +0 a záporná -0) Jedna Jedna
Aritmetika Složitá (zvlášť znaménko a abs. hodnota) Jednoduchá (sčítáme obrazy, ignorujeme přenos) Středně složitá
Použití Mantisa u some FP formátů Celá čísla v CPU (dominantní) Exponent v IEEE 754
Doplňkový kód – klíčové vlastnosti
  • Rozsah pro 4 bity: -8 až +7 (celkem 16 čísel, nula jen jednou)
  • MSB = znaménkový bit (1 = záporné), ale je organickou součástí obrazu
  • Negace čísla: Invertuj všechny bity + přičti 1. Nebo: zprava opisuj 0 až do první 1, tu opiš, zbytek invertuj
  • Sčítání: Sečteme obrazy D(A) + D(B), přenos ignorujeme → správný výsledek
  • Rozšíření řádové mřížky (sign extension): Doplňujeme MSB (znaménkový bit) – pro kladné nuly, pro záporné jedničky

💥 Přeplnění (Overflow) a jeho detekce

Přeplnění (Overflow): Výsledek aritmetické operace se nevejde do řádové mřížky. Není totéž co přenos (Carry)!

Kdy nastane přeplnění v doplňkovém kódu?

  • Součet dvou kladných čísel dá záporný výsledek
  • Součet dvou záporných čísel dá kladný výsledek
  • Při sčítání čísel různých znamének přeplnění nikdy nenastane

Detekce přeplnění:

  • Podle přenosů do/z MSB: overflow = p ⊕ q, kde p = přenos do MSB-bloku, q = přenos z MSB-bloku
  • Podle znamének: overflow = a̅b̅s + abs̄ (kde a, b jsou MSB sčítanců, s je MSB výsledku)
  • Jinými slovy: Pokud vstupní bity znaménka jsou oba 0 a výsledný znaménkový bit je 1 → overflow; nebo oba 1 a výsledek 0 → overflow
⚠️ Carry vs Overflow – zásadní rozdíl!

Carry: Přenos z nejvyššího řádu sčítačky. Signalizuje nesprávný výsledek pro nezáporná (unsigned) čísla.

Overflow: Výsledek mimo rozsah pro čísla se znaménkem (signed) v doplňkovém kódu. Carry může být 1 a přesto výsledek správný (pro signed), nebo Carry = 0 a přesto overflow.

ALU nastaví oba příznaky; software interpretuje výsledek podle datového typu proměnné.

Paralelní sčítačka/odčítačka – realizace

Úplná sčítačka (Full Adder, FA):

  • Vstupy: a, b (sčítance), p (vstupní přenos)
  • Výstupy: s = a ⊕ b ⊕ p (součet), q = ab + p(a⊕b) (výstupní přenos)
  • Lze sestavit ze dvou půlsčítaček: s = (a⊕b)⊕p; q = a·b + p·(a⊕b)
  • Realizace: NOT-AND-OR nebo NAND-NAND-NAND

Ripple Carry Adder (sčítačka s šíreným přenosem): Kaskáda FA – přenos se šíří postupně od nejnižšího po nejvyšší řád. Jednoduchá, ale pomalá (zpoždění roste lineárně s počtem bitů).

Carry Look-Ahead Adder (CLA, sčítačka s předvídáním přenosu):

  • G = ab (Generate – přenos se generuje bez ohledu na vstupní přenos)
  • P = a ⊕ b (Propagate – přenos se šíří z nižšího řádu)
  • q' = G' + P'·p'; q'' = G'' + P''·(G' + P'·p'); … Přenosy se počítají paralelně ze vstupů
  • Rychlejší (log zpoždění), ale více logiky

Sčítačka-odčítačka v doplňkovém kódu: Odčítání = přičtení opačného čísla. D(-B) = D(B) + 1. Implementace: XOR brána na každém bitu B řízená signálem „Odčítej" + přiveď na vstupní přenos „Odčítej" (horká jednička). Tentýž HW pro ADD i SUB!

V procesoru (příkazy ADD, ADC, SUB, SBB):

  • ADD: m=0, p*=0 (vstupní přenos 0)
  • ADC (Add with Carry): m=0, p*=Carry (vstupní přenos = příznak C)
  • SUB: m=1, p*=1 (negace B + vstupní přenos 1)
  • SBB (Sub with Borrow): m=1, p*=Carry

↔️ Aritmetické posuvy a jejich realizace

Posuv doleva o k míst = násobení 2k. Posuv doprava o k míst = dělení 2k.

Typ posuvu Doplňování bitu Použití
Logický (LS) Doplňují se 0 Čísla bez znaménka
Aritmetický vlevo Doplňuje 0 zprava, MSB vypadává → detekce overflow Násobení 2k (signed)
Aritmetický vpravo Doplňuje kopií MSB (znaménkové rozšíření) → detekce ztráty přesnosti Dělení 2k (signed)
Cyklický (rotace) Bit vypadávající z jednoho konce vstupuje z druhého Kryptografie, bit manipulation
Rotace přes Carry (RC) Příznak C vstupuje/vystupuje jako součást posuvu Vícebitové operace

Overflow při posuvu vlevo v doplňkovém kódu: Pokud vypadávají bity různé od MSB (mění se znaménko) → přeplnění.

Ztráta přesnosti při posuvu vpravo: Pokud vypadají nenulové bity → ztráta přesnosti (ZP).

Kombinace posuvů v HW: Dva řídící bity (arit, cykl) určují typ posuvu. Kombinovány multiplexory.

🔧 Dekodér, multiplexor a čítač – role v počítači

Tyto kombinační a sekvenční bloky jsou základními stavebními kameny procesoru a ALU:

  • Dekodér: Adresový dekodér v paměti vybírá konkrétní paměťové místo. Dekódování instrukčního kódu (opcode) v řadiči → výběr operace.
  • Multiplexor: Výběr vstupů ALU (operandy z různých registrů nebo paměti), výběr operace sčítačky/odčítačky, barrel shifter (výběr posuvné funkce), výběr dat na sběrnici (jen jeden zdroj smí vysílat).
  • Čítač (jako speciální SSO): PC (Program Counter) je čítač – inkrementuje se při každém IF cyklu. Čítač taktů v časovacích obvodech. Stavový automat řadiče.
ALU jako celek

ALU kombinuje sčítačku/odčítačku a logickou jednotku (AND, OR, XOR, NOT) se sdílenými operandy. Výběr operace řídí řadič prostřednictvím multiplexoru. Barrel shifter je kombinační obvod pro posuvy o proměnný počet míst – rychlý, ale plocha-nákladný. Výsledek operace nastavuje příznaky C, Z, N, V (Overflow) ve stavovém registru SREG.

🌊 Pohyblivá řádová čárka (Floating-Point)

Číslo v pohyblivé řádové čárce: X · ze, kde X je mantisa a e je exponent. Umožňuje velmi velký rozsah hodnot za cenu omezeného počtu platných číslic.

Proč pohyblivá řádová čárka? Čísla s pevnou řádovou čárkou mají omezený rozsah: pro 32 bitů max. celé číslo < 5·109, min. zlomek > 2·10-9. FP umožňuje reprezentovat čísla od ~10-38 do ~1038.

Struktura FP čísla:

  • Mantisa (m): Informace o hodnotě čísla
  • Exponent (e): Poloha řádové čárky
  • Obě části používají kódy pro čísla se znaménkem

Normalizovaný tvar: Mantisa posunuta co nejvíce doleva (nejvyšší řád je 1 pro z=2). Umožňuje maximální přesnost mantisy a jednoznačnost reprezentace.

Skrytá jednička: V normalizovaném binárním FP (z=2) je MSB mantisy vždy 1 → lze ji vynechat ze zápisu a ušetřit 1 bit přesnosti. Výjimka: speciální hodnota 0 (subnormální čísla).

Standard IEEE 754 (nejrozšířenější formát)
Parametr32-bit (float)64-bit (double)
Znaménko1 bit1 bit
Exponent8 bitů11 bitů
Mantisa (frakce)23 bitů (+1 skrytá)52 bitů (+1 skrytá)
Kód exponentuAditivní, K=127Aditivní, K=1023
Rozsah exp.A(e) = e+127; e ∈ (1..254)A(e) = e+1023

Speciální hodnoty:

  • A(e) = 0, m = 0: číslo ±0
  • A(e) = 0, m ≠ 0: subnormální číslo (±m × 2-126) – skrytá jednička se NEPOUŽÍVÁ!
  • A(e) = 255, m = 0: ±∞
  • A(e) = 255, m ≠ 0: NaN (Not a Number)
  • Normální číslo: hodnota = (−1)s × (1 + mantisa) × 2A(e)−127

Příklad: Číslo −5810 = −1110102 = −1.11010 × 25

  • Znaménko: 1
  • Exponent: 5 + 127 = 132 = 100001002
  • Mantisa (frakce bez skryté 1): 11010 000...0
  • Výsledek: 1 10000100 11010000000000000000000 = C268000016

Uložení v paměti (Endianness): Little-endian (Intel): nejméně důležitý byte na nejnižší adrese. Big-endian (Motorola): nejdůležitější byte na nejnižší adrese.

Aritmetika FP:

  • Sčítání/odčítání: Srovnat exponenty (posunout mantisu menšího), pak sečíst/odečíst mantisy, normalizovat
  • Násobení: Sečíst exponenty, vynásobit mantisy, normalizovat
  • Dělení: Odečíst exponenty, vydělit mantisy, normalizovat
  • Po každé operaci nutno normalizovat výsledek!

🔟 BCD kódy a zaokrouhlení

BCD (Binary Coded Decimal): Každá desítková číslice zakódována do 4 bitů. Kód 8421 je nejběžnější. Umožňuje přesné zobrazení desetinných čísel bez chyby zaokrouhlení pro desítkové výpočty (bankovnictví, kalkulačky).

Korekce BCD sčítačky: Pokud součet > 9 nebo vznikl binární přenos (výsledek > 15), přičteme +6 (korekce −10 = −16 + 6 v binárním kódu). Přenosová podmínka: q10 = q + y₈(y₄ + y₂).

Zaokrouhlení při zkrácení řádové mřížky:

  • Oříznutí (dolů): Jednoduché odstranění přebývajících bitů
  • Zaokrouhlení nahoru: Přičtení 1 na místo za posledním uchovaným bitem, pak oříznutí
  • Round to nearest even: Preferuje sudou poslední cifru pro odstranění systematické chyby

Shrnutí okruhu 3

  • Přímý kód: znaménko + absolutní hodnota, dvě nuly, složitá aritmetika
  • Doplňkový kód: D(X) = X pro X≥0, M+X pro X<0. Jediná nula, sčítání = jen sečti obrazy a ignoruj přenos. Dominantní v CPU.
  • Aditivní kód: A(X) = X + K. Používán pro exponent v FP (IEEE 754: K=127 pro 32b).
  • Overflow ≠ Carry! Overflow = výsledek mimo rozsah signed. Detekce: p⊕q nebo z kombinace znamének operandů a výsledku.
  • Sčítačka: FA kaskáda (Ripple) nebo CLA (paralelní předvídání přenosů). Odčítání = negace B + 1 (hot one) + sečtení.
  • Aritmetický posuv vpravo: doplňuje MSB (sign extension). Vlevo: doplňuje 0, detekce overflow.
  • IEEE 754: 1b znaménko + 8b exponent (bias 127) + 23b mantisa (skrytá 1). Speciální hodnoty: 0, ∞, NaN, subnormální.
  • FP aritmetika: srovnej exponenty → proveď operaci → normalizuj výsledek.
🎓 Kontrolní otázky (státnice)
  1. Jak se reprezentují záporná čísla v doplňkovém kódu? – D(X) = X pro X≥0; D(X) = M + X = 2n + X pro X<0. Prakticky: invertuj všechny bity a přičti 1. Nebo: zprava opisuj 0 až do první 1, tu opiš, zbytek invertuj.
  2. Jak se provádí sčítání v doplňkovém kódu a jak se detekuje přeplnění? – Sečti binárně obrazy D(A) + D(B), přenos ignoruj. Přeplnění: výsledek znaménka musí sedět → overflow = p ⊕ q (přenosy do/z MSB) nebo: součet dvou kladných dá záporný, nebo dvou záporných dá kladný.
  3. Čím se liší přenos (Carry) od přeplnění (Overflow)? – Carry signalizuje nesprávný výsledek pro unsigned (nezáporná čísla). Overflow signalizuje nesprávný výsledek pro signed (čísla se znaménkem v doplňkovém kódu). ALU nastavuje oba; záleží na interpretaci programátora.
  4. Co je sčítačka s předvídáním přenosu (CLA) a proč je rychlejší? – Každý bit vypočítá G=ab (generuje přenos) a P=a⊕b (šíří přenos). Přenosy pro všechny řády se pak počítají paralelně přímo ze vstupů – bez čekání na šíření přenosu přes všechny bloky. Zpoždění roste logaritmicky místo lineárně.
  5. Popište aritmetický posuv vpravo a vlevo pro čísla v doplňkovém kódu. – Vpravo: Doplňuje kopii MSB (sign extension) – ekvivalent dělení 2k. Detekce ztráty přesnosti: vypadávají nenulové bity. Vlevo: Doplňuje 0 zprava – ekvivalent násobení 2k. Overflow pokud vypadávající bity nejsou shodné s MSB výsledku.
  6. Popište formát IEEE 754 pro 32bitová FP čísla. – 1 bit znaménko s; 8 bitů exponent g = e+127 (aditivní kód, bias=127); 23 bitů frakce f (mantisa bez skryté jedničky). Hodnota = (−1)s × 1.f × 2g−127. Speciální: g=0 → subnormální (0.f × 2−126); g=255,f=0 → ±∞; g=255,f≠0 → NaN.
  7. Jak probíhá sčítání dvou FP čísel? – Srovnání exponentů (menší exponent → posuv mantisy doprava), sčítání mantis, normalizace výsledku (posun mantisy + úprava exponentu), zaokrouhlení.
  8. Proč se pro exponent v IEEE 754 používá aditivní kód a ne doplňkový? – Aditivní kód umožňuje přímé porovnání FP čísel jako celých čísel (stačí porovnat bitové vzory, pokud jsou stejného znaménka). To zjednodušuje hardware pro porovnání a řazení FP čísel.