Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| statnice:bakalar:b0b35apo [2025/06/09 18:28] – [Hiearchie] zapleka3 | statnice:bakalar:b0b35apo [2025/06/09 21:41] (current) – zapleka3 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ==== Architektura počítače; | + | ====== Architektura počítače; |
| [[https:// | [[https:// | ||
| Line 422: | Line 422: | ||
| * Binární reprezentace má své specifické chování, včetně přetečení, | * Binární reprezentace má své specifické chování, včetně přetečení, | ||
| * Na rovnost dvou desetinných čísel nelze spoléhat — i malá aritmetická chyba způsobí rozdíl. | * Na rovnost dvou desetinných čísel nelze spoléhat — i malá aritmetická chyba způsobí rozdíl. | ||
| - | |||
| - | ===== 2. CPU ===== | ||
| - | RISC/CISC architektura, | ||
| - | |||
| - | ** RISC/CISC ** | ||
| - | |||
| - | Reduced Instruction Set Computing vs. Complex Instruction Set Computing referuje o přístupu k návrhu procesorů. Jak název napovídá první z přístupů disponuje tzv. redukovanou instrukční sadou a druhý komplexní instrukční sadou. V redukované sadě mají standardně všechny instrukce stejnou délku a jejich sada není příliš početná. V komplexní nemusí mít instrukce konstantní délku, a jejich množství je větší. Redukovaná sada představuje většinou více práce pro programátora, | ||
| - | |||
| - | ** Registry ** | ||
| - | |||
| - | |Registr | Popis| | ||
| - | |PC | Program counter - dresa právě prováděné (nebo následující) instrukce| | ||
| - | |IR | Instruction register - obsahje kód prováděné instrukce načtený zpaměti | | ||
| - | |GPR | General purpose registers – obecné uživatelské registry, mohou se dělit na data a adresy do paměti, nebo být univerzální| | ||
| - | |SP | Stack Pointer - kazuje na vrchol zásobníku, | ||
| - | |PSW | Program Status Word – definuje v jakém stavu je procesor | | ||
| - | |IM | Interrupt Mask – kontrola přerušení | | ||
| - | |FPR | Floating point registers – rozšíření procesoru pro práci s reálnými čísly, případně i vektorové/ | ||
| - | |||
| - | ** Formát RISC CPU instrukcí ** | ||
| - | |||
| - | Obecně – instrukce mají 32bit, kde bity 0-7 (LSb, little endian -> " | ||
| - | |||
| - | ** Porovnání jednocyklového procesoru a zřetězeného zpracování instrukcí ** | ||
| - | |||
| - | Jednocyklový procesor funguje asi takto | ||
| - | |||
| - | - Počáteční nastavení – inicializace PC a PSW | ||
| - | - Načtení instrukce z paněti z adresy PC (nastav PC -> Přečti obsah do IR -> uprav PC dle délky instrukce) | ||
| - | - Dekóduj instrukci | ||
| - | - Proveď instrukci | ||
| - | - Kontrola přerušení nebo výjimky | ||
| - | - Opakuj od kroku 2 | ||
| - | |||
| - | |||
| - | Zřetězení přináší rozdělení vykonání jednotlivých úkonů instrukce. Tj. mezitím co dochází k faktickému vykonání instrukce, již se připravuje vykonání další, či dalších několika. | ||
| - | Tomuto procesu se také jinak říká pipelining. | ||
| - | |||
| - | {{: | ||
| - | |||
| - | | ||
| - | - Instruction Fetch - přivedení PC na adreosvý vstup paměti, načtení instrukce | ||
| - | - Instruction Decode - dokódování opcode (bity 0-7), přímého operandu a načtení registrů | ||
| - | - EXecution - provedení požadované operace v ALU | ||
| - | - MEMory - zápis/ | ||
| - | - Write Back - zpětný zápis výsledků do pole registrů pro meziregistrové instrukce a paměti | ||
| - | |||
| - | ** Jaké problémy přináší zřetězené zpracování instrukcí a jak je lze řešit – stall/ | ||
| - | |||
| - | Za předpokladu, | ||
| - | |||
| - | Další možné hazardy, které mohou vzniknout, jsou tzv. " | ||
| Line 689: | Line 637: | ||
| Statická predikce je jednoduchá a nezatěžuje hardware, ale neposkytuje dostatečnou flexibilitu při složitějším chování programů. | Statická predikce je jednoduchá a nezatěžuje hardware, ale neposkytuje dostatečnou flexibilitu při složitějším chování programů. | ||
| - | ===== Dynamické prediktory | + | ==== Dynamické prediktory ==== |
| Dynamické prediktory se snaží zjistit, zda se skoková instrukce provede, a to na základě jejího předchozího chování. Jinými slovy, sledují minulost konkrétní skokové instrukce a podle toho se snaží odhadnout, zda se tentokrát skočí nebo ne. | Dynamické prediktory se snaží zjistit, zda se skoková instrukce provede, a to na základě jejího předchozího chování. Jinými slovy, sledují minulost konkrétní skokové instrukce a podle toho se snaží odhadnout, zda se tentokrát skočí nebo ne. | ||
| Line 1054: | Line 1002: | ||
| periferie mapované do paměti, sériový port, sběrnice – sériová/ | periferie mapované do paměti, sériový port, sběrnice – sériová/ | ||
| - | RISC-V nemá speciální instrukce pro komunikaci s periferiemi, místo | + | ==== Periferie mapované do paměti ==== |
| + | * RISC-V nemá speciální instrukce pro komunikaci s periferiemi. | ||
| + | * Místo | ||
| + | * Periferie při inicializaci získají svůj vlastní **paměťový rozsah**, přes který komunikují s CPU. | ||
| + | * **Address Decoder** rozhoduje, ke které periferii daný paměťový přístup patří. | ||
| + | * **Asynchroní sběrnice**: | ||
| + | * **Synchroní sběrnice**: | ||
| + | * Tento způsob je jednoduchý na implementaci, přehledný a často používaný v embedded systémech. | ||
| + | * Komunikace přes paměťovou mapu je vhodná pro zařízení, | ||
| - | velmi jednoduchá konfigurace - periferie | + | ==== Sériová vs paralelní sběrnice ==== |
| + | * **Paralelní sběrnice** | ||
| + | * Vyšší propustnost, | ||
| + | * **Sériová sběrnice** | ||
| + | * Nižší náklady | ||
| + | * Paralelní sběrnice se používaly u starších zařízení (např. ATA), sériové dnes dominují (např. USB, PCIe). | ||
| - | Adress Decoder rozhoduje kam se data přesměrují | + | === Sériový port (UART) === |
| + | * Jeden z nejstarších a nejjednodušších způsobů komunikace. | ||
| + | * **Asynchronní přenos** bez hodin – vysílač a přijímač musejí být nastaveny na stejnou přenosovou rychlost (**baud rate**). | ||
| + | * Např. 9600 Bd, 115200 Bd, nově až 921600 Bd (Bd = 1 bit/s). | ||
| + | * **UART (Universal Asynchronous Receiver/ | ||
| + | * Využívá dvě linky: **TX** (transmit) a **RX** (receive). | ||
| + | |||
| + | * **Paměťově mapované registry UARTu**: | ||
| + | * **RX_ST** – stav přijímání dat | ||
| + | * bit 0: **ready** – byla přijata data | ||
| + | * **RX_DATA** – čtení přijatých dat | ||
| + | * čtením z této adresy | ||
| + | * **TX_ST** – stav vysílání | ||
| + | * bit 0: **ready** – UART je připraven k odeslání | ||
| + | * **TX_DATA** – zápis dat k odeslání | ||
| + | * zápis do registru rovnou spouští odeslání po TX | ||
| - | **Asynchroní sběrnice** | + | === Half-duplex vs Full-duplex === |
| - | * USB | + | |
| - | * SATA | + | * Např. klasický PCI – nelze současně odesílat i přijímat. |
| + | * **Full-duplex** – data mohou proudit **oběma směry současně**. | ||
| + | * Např. PCIe – vyšší efektivita přenosu. | ||
| - | **Synchroní | + | === Asynchronní |
| - | * PCI | + | * Data nejsou přenášena podle společného hodinového signálu. |
| - | * PCIe | + | * Používají se tam, kde nelze garantovat přesnou synchronizaci nebo to není potřeba. |
| + | * **USB** – univerzální rozhraní pro připojení periferií. | ||
| + | * **SATA** – rozhraní pro připojení disků. | ||
| - | === Sériová vs paralelní | + | === Synchronní |
| - | Sériová sběrnice přenáší data po jedné datové lince, paralelní sběrnice přenáší data po více datových linkách současně | + | * Přenos je řízen společným hodinovým signálem, všechna zařízení |
| - | + | * **PCI** | |
| - | Sériová linka | + | * **PCIe** |
| - | + | ||
| - | jeden z nejstarších způsobů komunikace, asynchronní přenos bez hodin | + | |
| - | obě strany jsou nastaveny na stejnou rychlost která definuje délku vysílání jednoho bitu (baud rate, dříve např 9600 - 115200 Bd, nově až 921600 Bd, Bd = 1bit/s) | + | |
| - | + | ||
| - | === UART === | + | |
| - | Universal Asychronous Receiver Transmitter | + | |
| - | + | ||
| - | speciální | + | |
| - | + | ||
| - | RX_ST - stav přijímání dat | + | |
| - | | + | |
| - | RX_DATA - přijatá data | + | |
| - | | + | |
| - | TX_ST - stav odesílání dat | + | |
| - | | + | |
| - | TX_DATA - data k odeslání | + | |
| - | | + | |
| === PCI === | === PCI === | ||
| - | sběrnice | + | * **Paralelní synchronní |
| - | + | | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | - pokud je cílová periferie | + | |
| - | | + | |
| - | | + | |
| - | | + | * **Nevýhody: |
| - | + | * Half-duplex | |
| - | PCI je half-duplex, nelze současně posílat data oběma směry. | + | * Sdílená |
| - | + | * Omezená přenosová rychlost – 33 nebo 66 MHz: | |
| - | Více zařízení na sběrnici - pomalá | + | * 32bit: 132 MB/s nebo 264 MB/ |
| - | + | * 64bit: 264 MB/s nebo 528 MB/s | |
| - | PCI sběrnice umožňuje pouze hodiny s 33 MHz, nebo 66 MHz. | + | |
| - | * To odpovídá 132MB/s nebo 264 MB/s pro 32 bitovou variantu | + | |
| - | * To odpovídá 264MB/s nebo 528 MB/s pro 64 bitovou variantu | + | |
| === PCIe === | === PCIe === | ||
| - | i malé nepřesnosti v délce vodičů, kvalitě spojů vedou k rozdílným rychlostem šíření signálů | + | * **Sériová sběrnice**, point-to-point (peer-to-peer). |
| - | to je problém pro vysoké frekvence přenosů | + | * **Full-duplex** – data mohou proudit současně v obou směrech. |
| - | + | * Každé spojení je realizováno jako samostatný link – nedochází ke sdílení přenosového pásma. | |
| - | PCIe te peer-to-peer | + | * Velmi vysoké rychlosti, ale vyžaduje kvalitní spoje – i drobné rozdíly v délce vodičů nebo kvalitě mohou narušit komunikaci. |
| + | * Nahrazuje klasické PCI u moderních | ||
| - | je full-duplex, | ||