Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| statnice:bakalar:b0b35lsp [2026/06/01 14:25] – [Hazardy] mates1n | statnice:bakalar:b0b35lsp [2026/06/02 08:46] (current) – [Popis FSM] mates1n | ||
|---|---|---|---|
| Line 72: | Line 72: | ||
| ==== Hazardy ==== | ==== Hazardy ==== | ||
| - | Hazardy (přechodové děje) v logických obvodech jsou způsobeny **zpožděním logických hradel**. Vznikají při **existenci více cest** uvnitř logického obvodu (tj. tehdy, když existují cesty, které mají různé propagační zpoždění). Projevují se jako krátké glitch pulsy, buď **statické** (krátké invertování aktuálního ustáleného stavu - z 0 do 1 nebo z 1 do 0), nebo **dynamické** (série přechodových pulsů). | + | Hazardy (přechodové děje) v logických obvodech jsou způsobeny **zpožděním logických hradel** |
| Při návrhu je potřeba s hazardy vždy počítat, protože jednotlivá zpoždění se mění například s teplotou zařízení a na běžných FPGA je tak nelze zcela odstranit změnou booleovského zápisu (nástroje je však mohou do určité míry potlačit). | Při návrhu je potřeba s hazardy vždy počítat, protože jednotlivá zpoždění se mění například s teplotou zařízení a na běžných FPGA je tak nelze zcela odstranit změnou booleovského zápisu (nástroje je však mohou do určité míry potlačit). | ||
| Line 175: | Line 175: | ||
| === Princip DFF (Primary-Replica) === | === Princip DFF (Primary-Replica) === | ||
| - | Data Flip-Flop (DFF) je základní synchronní paměťový obvod, který je tvořený dvěma D-latch (RS-latch s "enable" | + | Data Flip-Flop (DFF) je základní |
| {{ : | {{ : | ||
| - | Dva D-latche, které tvoří DFF se nazývají **Primary** a **Replica**, | + | Dva D-latche, které tvoří DFF se nazývají **Primary** a **Replica**, |
| - | * **Primary** D‐latch („Master“) má ENA = ¬CLK (invertované hodiny). | + | * **Primary** D‐latch („Master“) má ENA = $\neg$CLK |
| - | * Dokud je CLK = 1, ENA_Primary = 0 ⇒ Primary je v paměťovém režimu a drží si poslední uložené D. | + | * Dokud je CLK = 1, ENA_Primary = 0 -> Primary je v paměťovém režimu a drží si poslední uložené D. |
| - | * Když CLK = 0, ENA_Primary = 1 ⇒ Primary je transparentní a přebírá na svůj vstup hodnotu D (ale zatím nic nepropustí ven). | + | * Když CLK = 0, ENA_Primary = 1 -> Primary je transparentní a přebírá na svůj vstup hodnotu D (ale zatím nic nepropustí ven). |
| * **Replica** D‐latch („Slave“) má ENA = CLK. | * **Replica** D‐latch („Slave“) má ENA = CLK. | ||
| - | * Dokud je CLK = 1, ENA_Replica = 1 ⇒ Replica je transparentní a na výstup Q pouští signál z Primary (přes jediný inverter, aby se vyrovnala polarita). | + | * Dokud je CLK = 1, ENA_Replica = 1 -> Replica je transparentní a na výstup Q pouští signál z Primary (přes jediný inverter, aby se vyrovnala polarita). |
| - | * Když CLK = 0, ENA_Replica = 0 ⇒ Replica se „uzavře“ do paměti, a Q drží tu hodnotu, kterou obdržela v okamžiku, kdy CLK právě překročil hranici 1→0. | + | * Když CLK = 0, ENA_Replica = 0 -> Replica se „uzavře“ do paměti, a Q drží tu hodnotu, kterou obdržela v okamžiku, kdy CLK právě překročil hranici 1->0. |
| Díky propojení právě těchto dvou latchů (Primary + Replica) výsledek Q reaguje pouze na konkrétní hranu (například vzestupnou). Během fáze mezi dvěma po sobě jdoucími hranami se Q nemění, i kdyby D dramaticky kolísalo. Proto se říká, že DFF je edge‐triggered. | Díky propojení právě těchto dvou latchů (Primary + Replica) výsledek Q reaguje pouze na konkrétní hranu (například vzestupnou). Během fáze mezi dvěma po sobě jdoucími hranami se Q nemění, i kdyby D dramaticky kolísalo. Proto se říká, že DFF je edge‐triggered. | ||
| Line 198: | Line 198: | ||
| === Metastabilita === | === Metastabilita === | ||
| - | Stav, kdy se vnitřní invertory se nedokážou jednoznačně rozhodnout na „0“ nebo „1“ a mohou se někdy dlouho chaoticky „kmitat“, | + | Stav, kdy se vnitřní invertory se nedokážou jednoznačně rozhodnout na „0“ nebo „1“ a mohou se někdy dlouho chaoticky „kmitat“, |
| Je možné ji zmírnit: | Je možné ji zmírnit: | ||
| Line 204: | Line 204: | ||
| * **Synchronizační řetězce**: | * **Synchronizační řetězce**: | ||
| - | Nelze ji naprosto vyloučit, jen zredukovat pravděpodobnost na zanedbatelné minimum. | + | **Nelze ji naprosto vyloučit**, jen zredukovat pravděpodobnost na zanedbatelné minimum. |
| Line 406: | Line 406: | ||
| {{: | {{: | ||
| === Popis FSM === | === Popis FSM === | ||
| - | Používají se všude, kde systém závisí na sekvenci událostí v čase, ne jen na aktuálním vstupu. | + | Používají se všude, kde systém závisí na sekvenci událostí v čase, ne jen na aktuálním vstupu. |
| == Moore == | == Moore == | ||
| - | **Výstupy | + | **Výstupy** se generují ze **stavu**, v němž se právě nachází automat. Výstup se změní, pokud se změní stav. Má více stavů a stabilní výstup, je pomalejší. |
| == Mealy == | == Mealy == | ||
| - | **Výstupy** se generují **ze současného stavu a okamžitého vstupu**, tj. **výstupy** se tvoří v době přípravy automatu na **přechod** z jednoho stavu do druhého. Má méně stavů, je rychlejší, | + | **Výstupy** se generují **ze současného stavu a okamžitého vstupu**, tj. **výstupy** se tvoří v době přípravy automatu na **přechod** z jednoho stavu do druhého |
| Line 482: | Line 482: | ||
| ====== | ====== | ||
| - | Řadiče (control unit) jsou část číslicového systému nebo procesoru, která řídí vykonávání operací v datapathu. Jejich nejpravděpodobnější akcí je přejití do | + | Řadiče (control unit) jsou část číslicového systému nebo procesoru, která řídí vykonávání operací v datapathu. Jejich nejpravděpodobnější akcí je **přejití do |
| - | následujícího stavu po splnění dané podmínky. Generují řídicí signály pro registry, ALU, paměti, sběrnice a další části obvodu. | + | následujícího stavu po splnění dané podmínky**. **Generují řídicí signály** pro registry, ALU, paměti, sběrnice a další části obvodu. |
| - | Jedná v podstatě o složitější čítač s tím rozdílem, že pro přechod do dalšího stavu (i.e. přičtení čísla), musí být splněna nějaká podmínka. | + | Jedná v podstatě o **složitější čítač** s tím rozdílem, že **pro přechod** do dalšího stavu (i.e. přičtení čísla), musí být **splněna nějaká podmínka**. |
| Máme předem určenou posloupnost stavů, do kterých se po splnění podmínky posouváme: | Máme předem určenou posloupnost stavů, do kterých se po splnění podmínky posouváme: | ||
| Line 524: | Line 524: | ||
| === Posuvné registry s lineární zpětnou vazbou LFSR === | === Posuvné registry s lineární zpětnou vazbou LFSR === | ||
| - | LFSR (Linear Feedback Shift Register) je posuvný registr se zpětnou vazbou, kde se nový vstupní bit generuje jako XOR vybraných bitů registru (tzv. '' | + | LFSR (Linear Feedback Shift Register) je posuvný registr se zpětnou vazbou, kde se **nový vstupní bit** generuje jako **XOR vybraných bitů** registru (tzv. '' |
| ==Takt registru== | ==Takt registru== | ||
| Line 549: | Line 549: | ||
| * **Phase/ | * **Phase/ | ||
| * **Charge Pump (CP)** – generuje řídicí proudové impulsy. | * **Charge Pump (CP)** – generuje řídicí proudové impulsy. | ||
| - | * **Loop Filter (LPF)** – integruje proudy → hladké napětí ($V_{tune}$). | + | * **Low Pass Filter (LPF)** – integruje proudy → hladké napětí ($V_{tune}$). |
| * **VCO (Voltage-Controlled Oscillator)** – oscilátor řízený buď napětím ($V_{tune}$), | * **VCO (Voltage-Controlled Oscillator)** – oscilátor řízený buď napětím ($V_{tune}$), | ||
| * **Dividers** $N$ (u reference) a $M$ (ve zpětné vazbě). | * **Dividers** $N$ (u reference) a $M$ (ve zpětné vazbě). | ||
| Line 564: | Line 564: | ||
| {{: | {{: | ||
| + | {{: | ||
| Line 569: | Line 570: | ||
| === Ochrana vstupů === | === Ochrana vstupů === | ||
| - | Všechny vstupy FPGA musí mít definovanou logickou úroveň (pull-up/ | + | Všechny vstupy FPGA musí mít **definovanou logickou úroveň** (pull-up/ |
| - | Nepoužívané vstupy se proto nesmí nechávat nezapojené. | + | |
| + | Plovoucí vstup (floating input) vede k náhodnému rušení a vyššímu odběru proudu | ||
| === Práce s pomalými náběžnými hranami === | === Práce s pomalými náběžnými hranami === | ||
| - | Pomalé změny signálu mohou způsobit opakované překročení logického prahu, vznik metastability, | + | **Pomalé změny signálu** mohou způsobit opakované |
| + | |||
| + | Filtrujeme je buď **Schmittovými vstupy** či **bufferujeme**, | ||
| - | Filtrujeme je buď Schmittovými vstupy či bufferujeme, | ||
| + | Schmittův vstup - vstup s hysterezí - má dva napěťové prahy, mezi nimi " | ||
| === Debouncing === | === Debouncing === | ||
| Line 581: | Line 585: | ||
| Dají se ošetřit dvěma způsoby: | Dají se ošetřit dvěma způsoby: | ||
| - | * Hardwarově: | + | |
| - | * Softwarově: | + | |
| ===Chránění výstupů se zátěží === | ===Chránění výstupů se zátěží === | ||
| Line 600: | Line 604: | ||
| == Důležité jevy == | == Důležité jevy == | ||
| - | * Propagation delay – konečné zpoždění šíření signálu, | + | |
| - | * Inertial delay – krátké impulsy se nemusí přenést, | + | |
| - | * Transport delay – ideální čisté zpoždění, | + | |
| - | * Odrazy (reflections) – vznikají při nepřizpůsobené impedanci | + | |
| - | * Jitter – časové kolísání hran signálu, | + | |
| - | * Crosstalk – rušení mezi sousedními vodiči - nutnost impedance‐match a krátké trasy. | + | |
| == Pravidla návrhu == | == Pravidla návrhu == | ||
| * Řídit fan-out buffery a minimalizovat kapacitní zatížení kvůli zpoždění | * Řídit fan-out buffery a minimalizovat kapacitní zatížení kvůli zpoždění | ||
| Line 614: | Line 619: | ||
| === FPGA Technologie === | === FPGA Technologie === | ||
| - | == SRAM-based FPGA== | + | == SRAM-based FPGA - Volatile== |
| - | * Princip: Konfigurační buňky tvoří klasické CMOS SRAM buňky (8–12 tranzistorů na buňku). Po programování (napájecím pulzu) drží hodnotu, dokud je FPGA zapnuté, ale po vypnutí se vymažou. Řešení: externí Flash–EEPROM čip, který po zapnutí automaticky nahraje bitstream do SRAM buněk | + | * Princip: Konfigurační buňky tvoří klasické |
| + | * Řešení: externí Flash–EEPROM čip, který po zapnutí automaticky nahraje bitstream do SRAM buněk | ||
| ^Výhody^Nevýhody^ | ^Výhody^Nevýhody^ | ||
| Line 624: | Line 630: | ||
| - | == Flash-based FPGA== | + | == Flash-based FPGA - Non-volatile== |
| - | Princip: Konfigurační buňky jsou vnitřní Flash buňky (nesmí se zaměnit s typy pro SSD). Obsah si pamatují i po vypnutí napájení. | + | Princip: Konfigurační buňky jsou vnitřní |
| + | |||
| + | * NOR flash - přístup k jednotlivým bytům/ | ||
| + | * NAND flash - přístup k blokům/ | ||
| ^Výhody^Nevýhody^ | ^Výhody^Nevýhody^ | ||
| Line 633: | Line 642: | ||
| | Vyšší odolnost proti částečné radiaci než SRAM FPGA. | Omezený počet přepisovacích cyklů Flash buněk. | | | Vyšší odolnost proti částečné radiaci než SRAM FPGA. | Omezený počet přepisovacích cyklů Flash buněk. | | ||
| - | == Antifuse-based FPGA== | + | == Antifuse-based FPGA - ROM== |
| - | Princip: Konfigurační prvek je antifuse prvek (připomíná pojistku, ve výchozím stavu otevřený, programovacím pulzem se neprůstřelně „přepálí” a vytvoří pevný vodivý spoj) | + | Princip: Konfigurační prvek je **antifuse** prvek (připomíná pojistku, ve výchozím stavu otevřený, programovacím pulzem se neprůstřelně „přepálí” a vytvoří pevný vodivý spoj) |
| ^Výhody^Nevýhody^ | ^Výhody^Nevýhody^ | ||
| Line 648: | Line 657: | ||
| * Paměťové bloky (M4K / M9K) | * Paměťové bloky (M4K / M9K) | ||
| * Každý blok je krokovatelný na různé šířky a hloubky: | * Každý blok je krokovatelný na různé šířky a hloubky: | ||
| - | | + | |
| - | * Cyclone IV: M9K bloky (8 kbit + 1024 paritních) → větší kapacita a širší vnitřní sběrnice. | + | * Cyclone IV: M9K bloky (8 kbit + 1024 paritních) → větší kapacita a širší vnitřní sběrnice. |
| - | * Uvnitř: statická CMOS SRAM matice, každý bit uložen v buketě CMOS tranzistorů; | + | * Uvnitř: statická CMOS SRAM matice, každý bit uložen v buketě CMOS tranzistorů; |
| + | * Používá DFF | ||
| ==Jednoportová (Single-Port) SRAM== | ==Jednoportová (Single-Port) SRAM== | ||
| - | Má jednu adresní sběrnici, jedno data‐in a jedno data‐out, a jeden řídicí vstup např. „Write Enable (WE)“ + hodinový vstup. | + | Má **jednu adresní sběrnici**, jedno data‐in a jedno data‐out, a jeden řídicí vstup např. „Write Enable (WE)“ + hodinový vstup. |
| Operace: | Operace: | ||
| Line 666: | Line 676: | ||
| ==Dvouportová (Dual-Port) SRAM== | ==Dvouportová (Dual-Port) SRAM== | ||
| - | Obsahuje dvě nezávislé adresní sběrnice (adresy A, B), každou se samostatným datovým vstupem, výstupem a hodinou. | + | Obsahuje |
| Operace: | Operace: | ||
| * Obě strany (porty) mohou libovolně číst či psát současně. | * Obě strany (porty) mohou libovolně číst či psát současně. | ||
| - | * Pokud se snaží oba porty přistoupit k téže buňce zároveň, je definováno, | + | * Pokud se snaží oba porty přistoupit k téže buňce zároveň, je definováno, |
| ^Výhody^Nevýhody^ | ^Výhody^Nevýhody^ | ||