====== Logické systémy a procesory ====== ==== Realizace operací s daty pomocí kombinačních a sekvenčních logických obvodů s vyloučením hazardů a metastability. Obvodová struktura konečných automatů a řadičů procesorů. Popisy obvodů pomocí HDL jazyků a funkční testování obvodů. ==== [[https://dcenet.fel.cvut.cz/edu/fpga/doc/LogickeObvodyNaFPGA.pdf|Šustovo skripta]][[https://dcenet.fel.cvut.cz/edu/fpga/doc/UvodDoVHDL1_concurrent_V20.pdf|VHDL I.]][[https://dcenet.fel.cvut.cz/edu/fpga/doc/UvodDoVHDL2_sequential_Vbeta0.51.pdf|VHDL II.]][[https://dcenet.fel.cvut.cz/edu/fpga/navody.aspx|Šustovo stránky předmětu]] * Logická CMOS hradla a jejich vlastnosti. Typy AND, NAND, OR, NOR a XOR. * Minimalizace log. funkcí v Karnaughových mapách, teoretické zázemí, logická krychle, grayovy kódy, skupinová minimalizace. Hazardy v kombinačních obvodech. * Uplatnění De Morganova teorému. Užití Shannonovy expanze a její aplikace ke konstrukci BDD (Binary Decision Diagram), výhody, omezení * Základní logické obvody: dekodér 1 z N, demultiplexer, multiplexory a jejich kaskády, sčitačka +1 a -1 a úplná sčítačka. Převodníky mezi binárním a zrcadlový grayovým kódem. * Úrovňové klopné obvody RS (RS-Latch) z hradel NAND a NOR, jejich chování a za jakých podmínek u nich mluvíme o zakázaných stavech. * Synchronní klopné obvody DFF (Data Flip-Flop) architektury Primary-Replica (zastarale Master-Slave). Jejich vlastnosti a podmínky činnosti. Metastabilita DFF. Vysvětlení příčin, jak a kdy lze odstranit. * Čítače a typy jejich spojování do ripple-kaskád a se synchronními přenosy. * Příkaz process ve VHDL, rozdíl mezi chování blocking := a non-blocking příkazů <=. Popis obvodů DFF ve VHDL procesu. VHDL funkce a procedury. * Konečné automaty typu Moore a Mealy. Jejich definice, popisy pomocí grafu přechodů, tabulky přechodů a stavové tabulky přechodů (jiný název matice přechodů). Minimalizace automatu Moore na Moore a Moore na Mealy. Kdy lze? Návrh automatu a jeho popis ve VHDL. * Řadiče a mikroprogrové řadiče. Vlastnosti a architektura. * Posuvné registry a posuvné registry s lineární zpětnou vazbou (LFSR), pouze hlavní principy jejich teoretického zázemí a vlastnosti. * Násobení frekvencí fázovými závěsy (Phase-Locked Loop) * Správné ošetření vstupů, plovoucí vstupy, pomalé náběžné hrany, odstranění zákmitů tlačítek (debouncing). Chránění výstupů s indukčních zátěží a výkonovou zátěží. Chování logického signálu na vodiči. * Používané FPGA technologie a jejich vlastnosti. Struktura SRAM paměti, paměti s jednoportovou a dvou portovou výběrovou logikou. ======Logická CMOS hradla a jejich vlastnosti. Typy AND, NAND, OR, NOR a XOR.====== {{ :statnice:bakalar:cmos-05-30_20-07-17.png?400 |Struktura NMOS PMOS}} Většina logických hradel dnes používá CMOS (Complementary Metal–Oxide–Semiconductor) transistory. * CMOS kombinuje NMOS (N-kanálové) a PMOS (P-kanálové) tranzistory, což zajišťuje nízkou statickou spotřebu. * Alternativně se používají i TTL (bipolární tranzistory), ale v integrovaných obvodech převládají CMOS. * Polovodič typu N (Si dopovaný pětivalentní příměsí) – nosiči jsou volné elektrony. * Polovodič typu P (Si dopovaný třívalenční příměsí) – nosiči jsou díry. * NMOS (substrát P-typu): při kladném napětí na gate > ⁣Vth>Vth​ vzniká kanál z minoritních nosičů (elektronů) ⇒ tranzistor vodí. * PMOS (substrát N-typu): při záporném napětí na gate < ⁣−Vth<−Vth​ vzniká kanál z děr ⇒ vodivost; kladné napětí „1“ na gate tranzistor uzavírá. * Elektrody: Source (zdroj nosičů), Drain (sběrač), Gate (řídicí elektroda), Body (substrát, u IC je vnitřně spojen s S). === CMOS Invertor === {{:statnice:bakalar:screenshot-2023-04-14-at-2.27.30-pm-768x869.png?600|}} === CMOS NAND === * PMOS paralelne nahore * NMOS serie dole {{:statnice:bakalar:screenshot-2023-04-14-at-4.02.16-pm-768x471.png?600|}} === CMOS NOR === * PMOS seriove nahore * NMOS pralelne dole {{:statnice:bakalar:screenshot-2023-04-14-at-4.25.13-pm-768x494.png?600|}} === CMOS AND === {{:statnice:bakalar:screenshot-2023-04-14-at-6.53.45-pm-768x593.png?600|}} === CMOS OR === {{:statnice:bakalar:screenshot-2023-04-14-at-6.44.01-pm-768x567.png?600|}} === CMOS XOR === {{:statnice:bakalar:screenshot-2023-04-14-at-7.09.58-pm-927x1024.png?600|}} ====== Minimalizace log. funkcí v Karnaughových mapách, teoretické zázemí, logická krychle, grayovy kódy, skupinová minimalizace. Hazardy v kombinačních obvodech. ====== === Minimalizace logických funkcí v Karnaughových mapách === * * SoP (Sum-of-Products): hledáme AND-implikanty („krychle“) pokrývající co nejvíc „1“. Každý implikant odpovídá skupině 2ᵏ sousedních polí (k=0…n) a vyjádří se jako součin proměnných bez změny hodnoty v těchto polích. Primární implikanty (nelze rozšířit) se ORují do výsledku. Priklad (A and B) or (C and D) * PoS (Product-of-Sums): analogicky pokrýváme „0“ OR-implikanty a spojujeme je AND, dodefinujeme don't-care na 0. Priklad (A or B) and (C or D) * Don't-care (X): v mapě u výstupů značí nezáleží-na; lze je zahrnout do implikantů (pro SoP jako „1“, pro PoS jako „0“) a dodatečně je přiřadit ke zvýhodnění pokrytí ==== Logická krychle ==== * K³ při n=3 proměnných, n⁴ při n=4 – každý vrchol krychle ↔ kombinace vstupů. KM pro n=4 je rozvinutá krychle 4×4 * Pokrytí rohů, hran i vnitřních bloků v mapě odpovídá hledání souvislých oblastí (=krychlí) v n-dimenzionálním hyper-krychli. ==== Gray Code ==== * Binary-reflected Gray Code: standardní pořadí os čtyř proměnných v KM: {00,01,11,10} * Vždy tak, aby se měnila pouze jedna hodnota ==== Hazardy ==== //GPT podle skript// * Hazardy vznikají kvůli rozdílným zpožděním v různých cestách kombinační logiky a projevují se jako krátké glitch pulsy (static-0, static-1, dynamické). * V běžných FPGA nelze hazardy zcela odstranit pouze změnou booleovského zápisu – nástroje je sice mohou potlačit, ale kvůli teplotním či výrobním variacím, různým délkám cest a LUT implementaci je riziko vždy přítomné. * Pro plně spolehlivou synchronní logiku je klíčové: vzorkovat výstup kombinační s dostatečným časovým posunem (t_wp), minimalizovat rozdíly v zpoždění (fan-out, buffery), a používat pouze edge-triggered D-FF (nikoli latch). ====== Uplatnění De Morganova teorému. Užití Shannonovy expanze a její aplikace ke konstrukci BDD (Binary Decision Diagram), výhody, omezení ====== {{:statnice:bakalar:demorgan-05-30_20-50-11.png?400|}} ==== Shannon ==== * při více než 4 proměnných - jednu zvolíme za 0 a uděláme KM, tu samou pak zvolíme za 1 a uděláme KM, výsledek pak dáme dohromady * Příklad: f(a,b,c,d,e) - 5 vstupů, velká mapa, * Rozdělíme Shannonem tak, že e prohlásíme 0 = f1(a,b,c,d,0) a vyčíslíme mapu. * druhá část e = 1 - f2(a,b,c,d,1) a vyčíslíme KM * Výsledek dohromady dáme (not E and f1) or (E and F2) {{:statnice:bakalar:shannon-05-30_21-09-13.png?400|}} * Citlivost na výběr proměnné – záleží, podle které proměnné se rozkládáme; nevhodně zvolená proměnná může vést ke složitějším kofaktorům a žádnému zjednodušení, někdy dokonce k růstu komplexity * Heuristiky nejsou zaručené – i když se snažíme volit proměnnou tak, aby redukovala co nejvíce členů, nemusíme dosáhnout zmenšení výsledné funkce ani u jednoduchých aritmetických bloků (např. násobičky, sčítačky) * Exponenciální růst pro některé funkce – bez vhodného uspořádání proměnných může velikost BDD i složitost rozkladu exponenciálně stoupat, což omezuje použití u velkých kombinací. ==== BDD?? ==== * to jsem v životě neslyšel v LSP * ani to nemá popsané ve svých skriptech * __GPT__ po schroustání skript: * Z Shannonovy expanze se konstruují BDD (Binary Decision Diagrams), struktury ve tvaru acyklického grafu, kde každý uzel testuje jednu proměnnou a větví na podgrafy odpovídající kofaktorům xi=0xi​=0 a xi=1xi​=1 * Výhody BDD: * Kanonická reprezentace (pro dané uspořádání proměnných je BDD jednoznačné) * Efektivní operace jako sjednocení, průnik nebo negace funkcí přímo na grafech * Umožňují rychlou verifikaci a manipulaci s velkými logickými výrazy * Omezení BDD: * Citlivost na pořadí proměnných: nevhodné uspořádání může způsobit exponenciální růst velikosti grafu * Některé funkce (např. multiplikátory, sčítačky) nemají kompaktní BDD bez speciálních heuristik ====== Základní logické obvody: dekodér 1 z N, demultiplexer, multiplexory a jejich kaskády, sčitačka +1 a -1 a úplná sčítačka. Převodníky mezi binárním a zrcadlový grayovým kódem ====== ==== Dekodér 1 z N ==== * M vstupů, N výstupů * N = 2^M * One Hot - log 1 pouze pro jedinou hodnotu vstupů, jinak 0 * One Cold - lon 0 pouze pro jedinou hodnotu vstupů, jinak 1 * převání unsigned číslo na kódování 1 z N * využití v konečných automatech k očíslování stavů {{:statnice:bakalar:1z4-05-31_10-36-04.png?400|Pravdivostní tabulka 1 z 4}} {{:statnice:bakalar:znackz-05-31_10-37-00.png?400|KM a schema}} ==== Demultiplexor ==== * Stejné jako dekodér 1 z N + Data * Při x1 a x0 určujících výstup ještě záleží zda Datový bit je 1 nebo 0. * Hodnota Data se propíše na určený výstup {{:statnice:bakalar:demux-05-31_10-47-20.png?400|Schema demultiplexoru}} ==== Multiplexor ==== * opak Demultiplexoru * má 2^M datových vstupů - M je počet bitů vstupní adresy * lze chápat jako přepínač N:1 * adresní bity x0, x1 zvolí jednu ze 4 poloh "přepínače" a přivede na výstup uřitý vstup - 4:1 {{:statnice:bakalar:41-05-31_11-02-37.png?400|Multiplexor 4:1}} {{:statnice:bakalar:kaskada-05-31_11-03-29.png?400|Kaskáda 5x Mux 4:1 = 16:1}} ==== Úplná sčítačka ==== {{:statnice:bakalar:screenshot_from_2025-05-31_11-45-47.png?600|Úplná sčítačka}} * je ze dvou Half Adderů * má 3 vstupy * x, y a Cin (Carry) * HA spočte x+y * HB sečte výsledek HA + Cin * první poloviční spočte část součtu bez přenosu, druhá k tomu přičte vstupní přenos ==== Sčítačka +1 ==== * do n-bitového čísla přičítáme +1 * první bit x0 sčítáme +1 (full adder s y0 =1 a Cin =0) * ostatní bity xi (i<0) se sčítají s yi =0 a Cin předchozího řádu * pokud nejnižší bit x0 byl 0, přičte se 1 a není carry, přenos se zastaví na první pozici * pokud x0 = 1, pak +1 způsobí přetečení a carry se posouvá do vyšších bitů * pokud xi = 0, tak se tam utopí to Carry a přenos skončí, další přetečení není * pokud xi = 1, při +1 dojde k přetečení a Carry pokračuje na x(i+1) bit * pokud dojdeme až na nejvyšší bit a přeteče to i tam, přeteklo nám celé n-binární číslo ==== Sčítačka -1 ==== * Do n-bitového čísla odčítáme 1 * Na nejnižší bit x0 aplikujeme „odečti 1“ (borrow bit) * Je-li x0=1, výsledkem S0=0 a borrow = 0 → odečítání končí hned. * Je-li x0=0, výsledkem S0=1 a borrow = 1 → další bit – odečítáme dál. * Na každý vyšší bit xi (pro i≥1) se díváme, zda k němu přišel borrow z nižšího * Pokud žádný borrow (borrow i−1=0), pak Si=xi​ a borrow dál = 0. * Pokud borrow (borrow i−1=1) → odečteme od xi: * Když xi=1: Si=0, borrow další = 0 (odečítání se zastaví). * Když xi=0: Si=1, borrow další = 1 (odečítání pokračuje). * Pokud i na nejvyšším bitu vyjde borrow=1, nastalo „podtečení“ * To znamená, že původní číslo bylo 0, a výsledek 0−1 v n-bitech je 2^n−1. ====== Úrovňové klopné obvody RS (RS-Latch) z hradel NAND a NOR, jejich chování a za jakých podmínek u nich mluvíme o zakázaných stavech. ====== === Klopné obvody RS === {{:statnice:bakalar:screenshot_from_2025-05-31_13-16-32.png?400|Klopení RS}} * Hradla nemají zakázané stavy * Díky nim se obvody můžou klopit * Zakázaný stav je pouze Q=NQ, ale to je jen dokud se obvod nepřeklopí za čas 2*Tpřeklopení {{:statnice:bakalar:screenshot_from_2025-05-31_13-19-43.png?400|Pravdivostní tabulka RS}} ====== Synchronní klopné obvody DFF (Data Flip-Flop) architektury Primary-Replica (zastarale Master-Slave). Jejich vlastnosti a podmínky činnosti. Metastabilita DFF. Vysvětlení příčin, jak a kdy lze odstranit ====== {{:statnice:bakalar:screenshot_from_2025-05-31_15-00-08.png?400|Ukázka DFF a D-Latch}} * DFF může měnit stav jen při Rising edge, D-latch při enable vždy přepisuje stav ze vstupu na výstup * DFF jsou dva D-latch za sebou {{:statnice:bakalar:screenshot_from_2025-05-31_15-03-53.png?400|Princip DFF}} === Princip DFF === * DFF ovzorkuje vstup D právě na hraně hodinového signálu CLK (např. na náběžné hráně 0→1) * Interně se klasický DFF skládá ze dvou D‐latchů (Primary a Replica), jejichž enable vstupy jsou řízeny signálem CLK a jeho invertovanou verzí: * **Primary** D‐latch („Master“) má ENA = ¬CLK (invertované hodiny). * 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). * **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). * 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. === Podmínky činnosti === * Aby Primary D‐latch „správně“ zachytil vstup D bez rizika metastability, musí být D ustálené po dostatečnou dobu před náběžnou hranou CLK (tzv. **setup time**) a nesmí se měnit hned po hraně (tzv. **hold time**). * Pokud tyto časy nejsou dodrženy, Primary D‐latch přejde (s určitým pravděpodobnostním rizikem) do metastabilního stavu – tj. vnitřní invertory se nedokážou jednoznačně rozhodnout na „0“ nebo „1“ a mohou se někdy dlouho chaoticky „kmitat“, než se rozhodnou. * Pokles CLK (sestupná hrana) naopak nevyžaduje žádné striktní setup/hold pro Replica === Metastabilita === * Vzniká, pokud D mění hodnotu příliš blízko aktivní hrany CLK (nedodržení setup/hold). * Projevuje se jako nestabilní, váhavý stav vnitřních invertorů Primary D‐latchu, který se může rozkládat na čisté 0/1 s nedefinovaným zpožděním. * Je třeba ji zmírnit: * Dodržet setup/hold: zajistit, že D je stabilní před a po hraně. * Synchronizační řetězce: zvláště při přenosech signálů mezi různými hodinovými doménami dát signál nejdřív do prvního DFF, pak až do druhého – aby se případná metastabilita rozpadla. * Nelze ji naprosto vyloučit, jen zredukovat pravděpodobnost na zanedbatelné minimum. ====== Čítače a typy jejich spojování do ripple-kaskád a se synchronními přenosy ====== === Registr === * Paralelní sada D‐flip‐flopů (DFF), která na náběžnou hranu CLK „uzamkne“ všechny bity současně * Může mít volitelné synchronní „nulování“ (RESET nebo SCLR), případně asynchronní CLEAR „na všech DFF“. {{:statnice:bakalar:screenshot_from_2025-05-31_15-33-13.png?400|4bit registr}} === Čítač === * Vezmeme n‐bitový registr (s n DFF). * Na jeho paralelní výstup Q připojíme kaskádově jednobitovou sčítačku +1 (Full Adder chain), která spočte „Q + 1“. * Výsledek (n bitů) vedeme zpět na vstupy registru D. * Při každé náběžné hraně CLK se registr „přepíše“ hodnotou (Q_old + 1). Tím vzniká n‐bitový čítač, který se „odráždí“ v posloupnosti 0,1,2,3,… modulo 2^n. {{:statnice:bakalar:screenshot_from_2025-05-31_15-36-23.png?400|Dekadický čítač od 0 do 9}} * 4bit čítač, mohl by čítat od 0 do 15, ale komparátorem je nastaveno Reset při čítání do 9, pči aktivaci Reset nebo <9 se přepne multiplexor a do obvodu se nahraje 0 - čítáme znovu od 0 == Spojování do ripple kaskád? == * se skládají z řetězu jedno‐bitových adderů + DFF * výhodné pro malé n, mají jednoduchou konstrukci, ale frekvence omezuje délka řetězce. == Spojování se synchonními přenosy == * Synchronní čítače (paralelní sčítačka + mux) dovedou dosáhnout vyšší frekvence u větších n, ale vyžadují větší plošnou logiku (adder, komparátor, mux). * Třeba příklad s počítáním do 9 a automatický reset na 0 (počítání je ripple carry a nulování je synchronní podle GPT) ====== Příkaz process ve VHDL, rozdíl mezi chování blocking := a non-blocking příkazů ⇐. Popis obvodů DFF ve VHDL procesu. VHDL funkce a procedury ====== === Příkaz process ve VHDL === * Process je základní sekvenční blok VHDL, v němž popisujete chování „po jednotlivých cyklech“ nebo „po změnách vstupů“.¨ * Proměnné je nutné resetovat uvnitř procesu každým průchodem, jinak vznikne smyčka/hazard. * Přesná syntaxe příkazu vypadá takto, kde části v [ ] lze vynechat: [optional_label:] process [(optional sensitivity list)] [is] [sequential_declarations] begin sequential statements end process [optional_label]; * Sensitivity list (nebo wait on) určuje, kdy se tělo procesu provede znovu. * Deklarace uvnitř (proměnné, funkce, procedury) slouží pro lokální výpočty; nelze tam dát signal ani component. * Proces se syntetizuje na kombinatorní nebo sekvenční obvody podle přítomnosti či absence detekce hrany (if rising_edge(CLK) apod.) a podle sensitivity listu. === Rozdíl mezi := (blocking) a <= (non-blocking) === == := (blocking) == * sekvenční přiřazení * Pouze uvnitř procesů, procedur nebo funkcí (sequential statements). * Přiřazení v := expr; okamžitě změní hodnotu proměnné v v té samé „iteraci“ procesu. * Následující řádek kódu už čte tuto novou hodnotu v (tj. v se chová jako běžná proměnná v imperativním jazyce). == <= (non-blocking) == * Přiřazení sig <= expr; není provedeno okamžitě, ale jejím výsledkem je vložení „nové hodnoty” do fronty aktualizací (delta‐cykly). * V průběhu jednoho simulovaného času se nejprve vyhodnotí všechny výrazy napravo od <=, potom se současně (ve stejném čase) přiřadí výsledné hodnoty na výstupy signálů. * Když uvnitř procesu (sensitivity list) přiřadíte sig <= expr;, stávající hodnota sig zůstává na výstupu až do skončení procesu, pak teprve (v nadcházejícím delta‐kroku) se přepne. * Ve skutečném hardware by to znamenalo, že signál se změní „po krátké, ale nenulové” době – odpovídá to latenci hradla či registru. === Popis obvodů DFF ve VHDL procesu === -- Importujeme standardní IEEE knihovny pro práci se signály std_logic library ieee; use ieee.std_logic_1164.all; -- Deklarace entity, tedy rozhraní D‐flip‐flopu entity DataFlipFlop is port ( Data : in std_logic; -- Vstup D: data, která chceme ovzorkovat CLOCK : in std_logic; -- Hodinový signál (CLK), na jehož hranu reagujeme ENABLE : in std_logic; -- Povolení zápisu: když ENABLE='1', povolíme přepsat Q ACLRN : in std_logic; -- Asynchronní clear (active‐low): když ACLRN='0', Q se ihned vynuluje SCLEAR : in std_logic; -- Synchronní clear (active‐high): po náběžné hraně CLK, pokud SCLEAR='1', Q se vynuluje Q : out std_logic -- Výstup Q: zde se objeví poslední uložená hodnota D ); end entity DataFlipFlop; -- Architekturální popis: popisujeme vnitřní chování entity architecture rtl_final of DataFlipFlop is begin -- Proces, který definuje chování DFF -- Sensitivity list: proces "vidí" změny signálů CLOCK i ACLRN process (CLOCK, ACLRN) begin -- 1) Ošetření asynchronního clear (ACLRN = '0' → okamžitě nastav Q na '0') if ACLRN = '0' then Q <= '0'; -- Jakmile ACLRN přejde na '0', obvod se okamžitě vynuluje, nezávisle na stavu hodiny -- 2) Pokud není aktivní asynchronní clear, čekáme na náběžnou hranu CLOCK elsif rising_edge(CLOCK) then -- 2a) Synchronní clear (pokud SCLEAR = '1' na hranu CLK, pak Q ≤ '0') if SCLEAR = '1' then Q <= '0'; -- Priorita synchronního clear má přednost před povolením ENABLE a před čtením Data -- 2b) Pokud žádný clear není aktivní, řešíme ENABLE elsif ENABLE = '1' then Q <= Data; -- Jestliže ENABLE = '1', na hranu CLK se do Q zapíše aktuální hodnota na vstupu Data -- 2c) Když ani synchronní clear, ani ENABLE není aktivní, zachovává se předešlá hodnota Q -- (nepíšeme žádné další přiřazení; Q zůstane takové, jaké bylo) end if; -- 3) Konec detekce hrany: v jiných případech (kdy ACLRN='1' a žádná hrana CLK) se nic neděje end if; end process; end architecture rtl_final; === VHDL funkce a procedury === == Funkce == * Funkce („function“) – vytvářejí jednu hodnotu na základě vstupních parametrů; v obvodu se vždy „rozbalí“ (in‐line) na kombinatorní síť. * [pure | impure ] function function_name (parameter_list) return type_name is [sequential_declarations] begin sequential statements end [function] [function_name] * pure (výchozí) * Funkce nemá žádné vedlejší efekty a pro stejné vstupy vždy vrátí stejnou návratovou hodnotu. * Simulátor ani syntetizér ji může „vyhodnocovat“ kdykoli, protože nezávisí na žádném vnějším stavu. * Funkce (function) od GPT * Musí mít pouze parametry módu in. * Vrací jednu hodnotu přes return. * Lze zvolit volatile (impure) nebo pure (čehož se držíme, pokud funkce nemá vedlejší efekty). * Volá se jak v concurrent, tak v sequential doméně. * Kód se „rozbalí inline“ při syntéze do kombinatorní sítě (kaskády bran) či logiky. == Procedura == * Procedury („procedure“) – mohou „vracet“ více hodnot (pomocí out/inout parametrů) a slouží pro popis podřízených bloků logiky, které mohou současně ovlivnit několik signálů nebo proměnných. * procedure identifier [ (formal_parameter_list) ] is [sequential_declarations] begin sequential statement(s) end [procedure] [identifier] * Procedura (procedure) od GPT * Formální parametry mohou být módu in, out, inout. * Nemá návratovou hodnotu return (nebo jen return; bez hodnoty pro ukončení). * Může „vrátit“ více výsledků (např. signal Y : out ..., variable W : out ...). * Volá se pouze uvnitř sequential domény (procesů, jiných procedur, funkcí), protože variable přiřazení := vyžaduje sekvenční context. * Inline rozbalení do vnitřku procesu vytváří blok kódu, který může zároveň aktualizovat několik výstupních signálů či proměnných. ====== Konečné automaty typu Moore a Mealy. Jejich definice, popisy pomocí grafu přechodů, tabulky přechodů a stavové tabulky přechodů (jiný název matice přechodů). Minimalizace automatu Moore na Moore a Moore na Mealy. Kdy lze? Návrh automatu a jeho popis ve VHDL ====== ==== Definice FSM ==== {{:statnice:bakalar:screenshot_from_2025-05-31_19-08-57.png?400|Definice FSM}} {{:statnice:bakalar:screenshot_from_2025-05-31_19-28-26.png?400|Mealy a Moore ilustrace}} ==== Popis FSM (graf, tabulka přechodů, stavová tabulka přechodů - matice přechodů) ==== * Moore - Výstupy nezávisí na vstupech, tj. výstupy se efektivně generují ze stavu, v němž se právě nachází automat. * 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. * Používá se častěji v programech – ty berou vstupy z hodnot v proměnných, které jsou bez hazardů. * K jakémukoli Mooreovu automatu existuje ekvivalentní Mealyho automat se stejným nebo menším počtem stavů. * Naopak ke každému Mealyho automatu, který má N stavů a rozpoznává X možných kombinací vstupů, existuje ekvivalentní Mooreův automat mající N*X stavů. * Matice přechodů: * Má formát čtvercové matice sousednosti (eng. adjacency matrix)používané k popisu grafů. Zůstává přehledná i při značném počtu stavů. Je-li p počet všech stavů, pak má rozměr p x p * řádky - výchozí stav s1 až sp * sloupce - příští stav s1 až sp * průsečík - podmínky x přechodu ze stavu sk do sj {{:statnice:bakalar:screenshot_from_2025-05-31_19-26-15.png?400|Matice přechodů}} * Tabulka přechodů: * 2 části - příští stav ( d ) + výstupy ( w ) * sloupce - všechny možné vstupy xi * řádky - všechny možné vnitřní stavy sj + výstup zm * průsečík řádku a sloupce - následný stav sk * tabulka výstupů – výstup generovaný ve stavu {{:statnice:bakalar:screenshot_from_2025-05-31_19-27-31.png?400|Tabulka přechodů}} {{:statnice:bakalar:screenshot_from_2025-05-31_19-45-11.png?400|Graf přechodů Start-Stop}} ==== Minimalizace Moore na Moore a Moore na Mealy ==== * NIKDE NENí, nenašel jsem ==== FSM ve VHDL ==== * Úloha Start-Stop architecture rtlFSM of StartStopFSM is begin ifsm: process(CLK) type state_t is (ROFF, RON); -- enumerated types are reserved only for FSMs variable state: state_t:=ROFF; begin iRedge : if rising_edge(CLK) then iClrn: if CLRN='0' then state:=ROFF; -- always clear else case state is when ROFF => if START='1' and STOP='0' then state:=RON; end if; when RON => if STOP='1' then state:=ROFF; end if; end case; end if iClrn; end if iRedge; if state=RON then RUN<='1'; else RUN<='0'; end if; end process; end architecture; ====== Řadiče a mikroprogrové řadiče. Vlastnosti a architektura ====== * Vůbec nechápu z přednášek * Pravděpodobně: * Máme předem určenou posloupnost stavů, do kterých se po splnění podmínky posouváme * when S0 => if start then state := S1; end if; * when S1 => if full then state := S2; end if; * when S2 => if boiling then state := S3; end if; * when S3 => if Chef then state := S0; end if; {{:statnice:bakalar:screenshot_from_2025-05-31_19-57-14.png?400|Grafické zobrazení Řadiče kotle}} ====== Posuvné registry a posuvné registry s lineární zpětnou vazbou (LFSR), pouze hlavní principy jejich teoretického zázemí a vlastnosti ====== === Posuvné registry === {{:statnice:bakalar:screenshot_from_2025-06-01_09-56-06.png?400|SISO}} * Série D‐flip‐flopů (DFF) propojených do řetězce: výstup jednoho DFF → vstup následujícího. * Na každý takt hodin (třeba při náběžné hraně CLK) se vloží nový bit na vstup SI („serial-in“) a zároveň se na výstup SO („serial-out“) vyhodí nejstarší bit. *SISO (Serial-In Serial-Out) *V každém taktu vstupní bit posune všechny bity o jednu pozici doprava; poslední bit „vypadne“. *Lze použít jako jednoduchou zpožďovací linku (delay line): hodnota na SI se objeví na SO až po N taktech, kde N = počet DFF. *PISO (Parallel-In Serial-Out) *Má řídicí vstup Load. *Pokud Load = ’1’, do všech DFF simultánně (paralelně) načte N-bitové slovo. *Pokud Load = ’0’, pak z toho „načteného” slova posouvá bity sériově ven přes SO. *SIPO (Serial-In Parallel-Out) *Nahrazuje SO N současnými výstupy Q(N–1 downto 0). *V každém taktu se do nejnižšího bita vloží SI, starší bity se posunou; všechny N bitů lze číst naráz (paralelně). *PIPO (Parallel-In Parallel-Out) *Pouze „datový registr” (není čistý posuvník), vstupy i výstupy vždy řídí společný Load/CLK. {{:statnice:bakalar:screenshot_from_2025-06-01_09-57-41.png?400|PISO a SIPO}} === Posuvné registry s lineární zpětnou vazbou LFSR === * Základní princip LFSR * Posuvný registr (SISO) se na vstup SI (nejnižší bit) místo libovolného konstantního 0/1 napojuje XOR kombinace výstupních (!!) bitů z několika pozic v registru (tzv. „tap positions”). * Každý takt: * SI ≤ XOR( vybrané bitové „tap“ pozice ze stavu QN–1, QN–2, … ) * Všechny bity se posunou doprava (nebo doleva) o jednu pozici. * Nejvyšší bit se vymění za předchozí nejnižší výstup SO (nebo jedná zerezní zpětnovazební brána). * Použití LFSR * Generování pseudonáhodných čísel pro testování a skrabbling dat. * Rozptyl (scrambling) a descrambling v komunikacích (zajišťuje rovnoměrné rozprostření spektra bitů). * CRC (Cyclic Redundancy Check): zkrácená varianta LFSR bez anamnézy stavu (uložen je pouze registr, výstupem jsou paritní bity). * Dežifrátory (čítače) pro test operačních frekvencí („BIST” – Built-In Self-Test) v hardwaru. * Fázové generátory a děliče frekvence s vysokou kvalitou (rozložení spektra). ====== Násobení frekvencí fázovými závěsy (Phase-Locked Loop) ====== {{:statnice:bakalar:screenshot_from_2025-06-01_10-05-11.png?400|Blokové PLL schéma}} * PLL je uzavřená smyčka, jejímž úkolem je zachytit a udržet konstantní fázový a frekvenční vztah mezi referencí (fR/N) a odvozeným signálem (fL/M). * Hlavní bloky: * Phase/Frequency Detector (PFD) – porovnává fázi/frekvenci. * Charge Pump (CP) – generuje řídicí proudové impulsy. * Loop Filter (LPF) – integruje proudy → hladké napětí „V_tune“. * VCO – oscilátor řízený „V_tune“ (digitální kapacitní pole v FPGA). * Dividers N (u reference) a M (ve zpětné vazbě). * Uzavřená regulační smyčka, která „zamkne“ fázový posun výstupního oscilátoru (VCO) za fází referenčního signálu. * Umožňuje: * Vytvářet stabilní vysokofrekvenční hodiny (z nižší frekvence krystalu). * Dělit nebo násobit hodinovou frekvenci přesně zlomkem. * Recover hodinový signál z přenášených dat (clock recovery). * Demodulovat frekvenční modulace (FM) v analogové oblasti. ====== Správné ošetření vstupů, plovoucí vstupy, pomalé náběžné hrany, odstranění zákmitů tlačítek (debouncing). Chránění výstupů s indukčních zátěží a výkonovou zátěží. Chování logického signálu na vodiči. ====== * Všechny vstupy FPGA musí mít definovanou logickou úroveň (pull-up/pull-down), jinak plovoucí vstup vede k náhodnému rušení a vyššímu odběru * Pomalé hrany filtreujeme Schmittovými vstupy či buffrujeme, synchronizujeme do hodiny, aby se vyhnuli metastabilitě * Debouncing mechanických tlačítek: * Hardwarový: RC článek + Schmitt/invertor (τ ≈ 1 ms) potlačí zákmitové pulsy * Softwarový: ve FPGA čítačový filtr nebo FSM se vzorkováním po definované době. * Indukční zátěže (cívky, motory, relé): * Flyback dioda pro DC cívky; RC snubber nebo TVS dioda pro AC/rychlé spínání. * Výkonové zátěže (LED pásky, velké proudy): * Oddělit výstup FPGA dedikovaným driverem (MOSFET, buffer) s ochranným RC, * Řídit dI/dt (slew-rate), přidat teplotní/přetížení ochrany. * Fyzické (analogové) chování logického signálu na vodiči: * Inertial delay: potlačení krátkých impulsů, * Transport delay: čisté zpoždění na ideálním vodiči, * Odrazy/jitter: nutnost impedance‐match a krátké trasy. * Řídit fan-out buffery a minimalizovat kapacitní zatížení kvůli zpoždění * Do hodinových cest nevkládat další hradla, aby se vyhnuli clock skew ====== Používané FPGA technologie a jejich vlastnosti. Struktura SRAM paměti, paměti s jednoportovou a dvou portovou výběrovou logikou. ====== //Celé GPT// === FPGA Technologie === * SRAM-based FPGA * 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 * Výhody: * Rychlá a neomezeně opakovatelná rekonfigurace. * Velké množství LUT/CLB a embedovaných SRAM bloků (např. Cyclone IV: 3981312 bitů ve 432 blocích M9K, vs. Cyclone II: 483840 bitů ve 105 blocích M4K) . * Digitální PLL pro násobení frekvencí, DSP bloky, rychlé carry-chainy aj. * Relativně nízká cena (např. Cyclone II od ~$20, Cyclone IV od ~$65, rok 2022) * Nevýhody: * Citlivost na radiaci (ztráta konfigurace) → pro kosmické aplikace se vyrábějí verze “radiation-hardened” (umožňují vzdálené dožití softwaru). * Po ztrátě napájení je nutná opětovná konfigurace (boot time). * Flash-based FPGA * 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í. * Výhody: * Po zapnutí ihned naloží konfiguraci (bez externí Flash GOP). * Nízká klidová spotřeba (Flash je nevolatilní). * Méně citlivé na radiaci než čistě SRAM FPGA. * Nevýhody: * Pomalejší rekonfigurace než SRAM, ale rychlejší než antifuse. * O něco vyšší náklady než čisté SRAM verze. * Antifuse-based FPGA * 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: * Velmi odolné vůči radiaci (vhodné pro satelity, kosmické sondy). * Jednou naprogramované, již nelze změnit (vyšší stabilita). * Nevýhody: * Nepřekonatelně pomalá a navždy jednosměrná konfigurace – desítky minut pro programování. * Nelze rekonfigurovat v cílovém systému (vyžaduje speciální napěťové pulzy, nutné předem otestovat). == Struktura SRAM pamětí v FPGA == * Paměťové bloky (M4K / M9K) * Každý blok je krokovatelný na různé šířky a hloubky: * Cyclone II: M4K bloky (4 kbit + 512 paritních) → lze použít například jako 4 kb × 1, 2 kb × 2, 512 B × 8, apod. . * 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ů; při změně adresy se data objeví na výstupu s typickým zpožděním ~1–2 cyklů T CLK, proto se doporučuje přidat i výstupní registr (pipeline) pro zajištění správného časování čtení . * 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. * Operace: * Čtení: Adresa se na chvíli drží konstantní (v registru), po ~1–2 CLK se na datovou sběrnici objeví obsah. * Zápis: Při aktivním WE se během jednoho cyklu do vybrané buňky zapíše data. * Výhoda: Jednoduše se postaví, má nižší spotřebu a menší plochu. * Nevýhoda: Nelze současně číst a zapisovat; pokud se během jednoho taktu provádí zápis, čtení je buď blokováno, nebo vrací předchozí data. * 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. * Operace: * 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, který port má prioritu (typicky „write first“ nebo „read first“). * Výhoda: Velká flexibilita – může sloužit pro dvoukanálové (FIFO) bufferování mezi dvěma hodinovými doménami. * Nevýhoda: Dvojnásobná logika k řízení přístupu, větší spotřeba a plocha. * Víceportové (Multi-Port) SRAM * Některé FPGA umožňují 4portové či 8portové bloky (především uvnitř vestavěných procesorů). Každý port samostatně může číst či zapisovat. Softwarově se konfiguruje, zda bude port jako čtecí či zapisovací.