Návrh ovládání zdroje ATX
Zapínání a vypínání PC zdroj ATX se zapíná spojením řídicího signálu \PS_ON se zemí zapnutí PC stiskem tlačítka POWER vypnutí PC (hardwarové) stiskem tlačítka POWER a jeho podržením určitou dobu reakci je možné nastavit v BIOSU, např. nutnou dobu stisku, uspání počítače při krátkém stisku atd.
na zdroji Napájecí konektor ATX pinč. 6 (zelený vodič) - \PS_ON
Super IO čip speciální obvod na základní desce např. ite IT872F, Winbond W83977TF obsahuje vstupně/výstupní zařízení např. sériová rozhraní RS-232, rozhraní klávesnice, paralelní port řídí otáčky ventilátoru procesoru podle snímané teploty ovládá zdroj ATX
IT872-F
Winbond W83977TF
POWER Super I/O čip Zdroj ATX
Zahrajeme si na návrháře čipové sady PC navrhneme část Super IO čipu, který ovládá zapínání a vypínání zdroje ATX podle stisku tlačítka obvod oproti originálu zjednodušíme: nebudeme uspávat počítač při krátkém stisku doba podržení tlačítka nutná pro vypnutí zdroje bude konstantní
Vcc tlačítko OSCILÁTOR clk Řídicí obvod Zdroj ATX
Popis chování po stisku tlačítka dojde k zapnutí zdroje (výstup obvodu log. ), při uvolnění tlačítka je zdroj stále zapnut další stisk tlačítka signalizuje vypnutí zdroje: je-li tlačítko drženo alespoň 4 sekundy, zdroj je vypnut, pokud je tlačítko uvolněno dříve, zdroj zůstává zapnut
Návrh chovánířídicího obvodu popíšeme konečným automatem čas 4 sekundy po stisku tlačítka bude měřen čítačem frekvenci hodinového signálu na přípravku nastavíme na khz čítač bude 2 bitový, tj. čítá v rozsahu až 495 po dobu 4,95s čítač má vstupní signál povol je-li povol =, čítaččítá, je-li povol =, čítač je zastaven a vynulován
Návrh čítač má výstupní signál vrchol vrchol má hodnotu, dosáhl-li čítač vrcholové hodnoty 495, tj. binárně samé řídicí automat má 2 vstupní signály x - stav tlačítka (=stisknuto) vrchol - výstupní signál čítače a 2 výstupní signály povol - ovládání čítače o - ovládání spínacího tranzistoru zdroje (=zapnuto)
Návrh Čítač Vcc povol vrchol x Konečný automat o
Automatový popis úmluva v označení vstupů a výstupů v grafu přechodů / x vrchol povol o
Mooreův automat x Q / x Q / x x x Q 2 / x x Q 4 / Q 3 / x
Mealyho automat x/ x/ Q Q x/ x/ x/ / Q 3 Q 2 / x/ / /
Realizace problém metastability předstih (setup time) doba, po kterou musí být signál na vstupu klopného obvodu typu D ustálen před příchodem hrany synchronizačního (hodinového) pulzu v naší aplikaci neexistuje časový vztah mezi stiskem tlačítka a zdrojem hodinového signálu (oscilátorem) může se stát, že při stisku tlačítka nebude na vstupu klopných obvodů dodržen předstih nebo se změna vstupu dokonce "trefí" do okamžiku hrany hodinového signálu
v takovém případě hrozí metastabilita klopného obvodu výstup klopného obvodu se nepřeklopí do nebo, ale bude v zakázaném pásmu, event. může i zakmitat do ustáleného stavu se dostane až při příchodu další hrany hodinového signálu
Řešení metastability vstupnímu signálu, který nemáčasovou vazbu na hodinový signál, "vložíme" do cesty 2 klopné obvody
Realizace z diskrétních součástek (bez čítače) Tabulka přechodů a výstupů Q Q Q Q Q Q Q 2 Q 2 Q Q Q 2 Q 2 Q Q 2 Q 3 Q 3 Q Q Q 3 Q 3
Zakódování vnitřních stavů zvolíme binární kód q q Q Q Q 2 Q 3
Realizace s diskrétních součástek Zakódovaná tabulka přechodů a výstupů xv q q
Mapy pro budící funkce klopných obvodů q ': q q q ': q q x v x v q ' = xq + xq + xv q + ' = xq + xqq vq q
Mapy pro výstupní funkce o: q q povol: q q x v x v o = xq + + qq vq q povol = xvq q
Schéma obvodu (bez čítače) A6A A3B O x v A4A A4B A2A A2B A2C AA vcc UA clk d q A5A A4C povol A2D vcc A3A AB UB d clk q AC clock 2n ns RESET
Realizace na CPLD automat popíšeme ve VHDL popis bude symbolický, kódování vnitřních stavů a tvorbu budicích funkcí ponecháme na software, který provádí syntézu
Blok řídicího automatu entity ovladani is Port ( x : in std_logic; clk : in std_logic; reset : in std_logic; o : out std_logic); end ovladani;
popíšeme symbolické stavy: type Stavy is (Q,Q,Q2,Q3); zavedeme vnitřní signály: signal stav,novy_stav: Stavy; signal citac: std_logic_vector( downto ); -- dva signály xk a xl ve funkci klopných obvodů pro řešení metastability signal xk: std_logic; signal xl: std_logic; signal povol: std_logic; signal vrchol: std_logic; -- sdruzeny vstup automatu a vrchol signal vstup: std_logic_vector( downto );
popíšeme čítač: process(clk, reset, citac) is begin if (reset='') then citac <= (others => ''); elsif (clk'event and clk = '') then case povol is when '' => citac <= (others => ''); when '' => citac <= citac + ; when others => citac <= (others => ''); end case; end if; end process;
čítač dosáhl vrcholu: vrchol <= citac() and citac() atd.; logický součin je možné zapsat ve VHDL i pomocí cyklu for a zavedením proměnné p: process (vrchol,citac) variable p: std_logic; begin p := ''; for i in to loop p := p and citac(i); end loop; vrchol <= p; end process;
popíšeme zapojení klopných obvodů pro řešení metastability: process (xk,xl,clk,reset) begin if (reset='') then xk <= ''; xl <= ''; elsif (clk'event and clk = '') then xk <= x; xl <= xk; end if; end process;
popíšeme klopné obvody pro uložení vnitřních stavů process(reset,clk,stav,novy_stav) begin if (reset='') then stav <= Q; elsif (clk'event and clk = '') then stav <= novy_stav; else stav <= stav; end if; end process;
sdružíme vstupy: vstup <= (xl,vrchol); popíšeme tabulku přechodů process (stav,novy_stav,vstup) begin case stav is when Q => case vstup is when "" => novy_stav <= Q; when "" => novy_stav <= Q; when "" => novy_stav <= Q; when "" => novy_stav <= Q; when others => novy_stav <= Q; end case; when Q => case vstup is when "" => novy_stav <= Q2; atd.
popíšeme tabulku výstupů process (stav,vstup) begin case stav is when Q => case vstup is when "" => o <= ''; povol <= ''; when "" => o <= ''; povol <= ''; when "" => o <= ''; povol <= ''; when "" => o <= ''; povol <= ''; when others => o <= ''; povol <= ''; end case; when Q => o <= ''; povol <= ''; when Q2 => case vstup is when "" => o <= ''; povol <= ''; atd.