Šustovo skriptaVHDL I.VHDL II.Šustovo stránky předmětu
Většina logických hradel dnes používá CMOS (Complementary Metal–Oxide–Semiconductor) transistory.
GPT podle skript
[optional_label:] process [(optional sensitivity list)] [is] [sequential_declarations] begin sequential statements end process [optional_label];
– 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;
[pure | impure ] function function_name (parameter_list) return type_name is [sequential_declarations] begin sequential statements end [function] [function_name]
procedure identifier [ (formal_parameter_list) ] is [sequential_declarations] begin sequential statement(s) end [procedure] [identifier]
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;
Celé GPT