Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Podstawy syntezy układów sekwencyjnych
Automaty – tradycyjne projektowanie Etapy tradycyjnej metodologii projektowania skończonych automatów stanu: Utworzenie grafu stanu Utworzenie tablicy stanów Określenie funkcji wzbudzeń Utworzenie tablicy wyjść Określenie funkcji wyjść Narysowanie schematu Otrzymany w powyższy sposób schemat automatu można zapisać w języku VHDL używając opisu strukturalnego. Ten sposób opisu automatu jest bardzo czasochłonny.
Automaty w VHDL Krok pierwszy: - na podstawie grafu stanów definiujemy wejścia i wyjścia automatu entity fsm is port (wejscia in bit; clk, reset in bit; wyjscia out bit); end fsm; Krok drugi: - zdefiniowanie w części deklaracyjnej architecture typu wyliczeniowego zawierającego stany automatów oraz sygnałów stan_obecny i stan_nastepny architecture fsm1 of fsm is type stan is (s0, s1, s2, s3, ...); signal stan_obecny, stan_nastepny: stan; ...
Automaty w VHDL Krok trzeci: - opis działania części sekwencyjnej automatu process (clk, reset) begin if reset = ’1’ then stan_obecny <= s0; -- jeśli uznamy, ze s0 jest stanem poczatkowym automatu elsif clk’event and clk = ’1’ then stan_obecny <= stan_nastepny; end if; end process;
Automaty w VHDL Krok czwarty: - opis działania części kombinacyjnej automatu process (wejscie, stan_obecny) begin case stan_obecny is when s0 => if wejscie = ... then wyjscie <= wartosc_wyjsciowa; stan_nastepny <= s1; else ... end if; when s1 => end case; end process;
Automat Moore’a
Przykład – automat Moore’a Krok pierwszy: wejścia: wyjścia: - clk - y - reset - x ... entity fsm is port (x in bit; clk, reset in bit; y out bit); end fsm;
Przykład – automat Moore’a Krok drugi: stany: - s0, s1, s2, s3 ... architecture moore of fsm is type stan is (s0, s1, s2, s3); signal stan_obecny, stan_nastepny: stan; begin
Przykład – automat Moore’a Krok trzeci: ... process (clk, reset) begin if reset = ’1’ then stan_obecny <= s0; elsif clk’event and clk = ’1’ then stan_obecny <= stan_nastepny; end if; end process;
Przykład – automat Moore’a Krok czwarty: process (x, stan_obecny) begin case stan_obecny is when s0 => y <= ’0’; if x = ’0’ then stan_nastepny <= s1; else stan_nastepny <= s2; end if; when s1 => stan_nastepny <= s0; ... ... when s2 => y <= ’0’; if x = ’0’ then stan_nastepny <= s1; else stan_nastepny <= s3; end if; when s3 => y <= ’1’; stan_nastepny <= s0; end case; end process;
Automat Mealy’ego
Przykład – automat Mealy’ego , Krok pierwszy: wejścia: wyjścia: - clk - y - reset - x ... entity fsm is port (x in bit_vector(1 downto 0); clk, reset in bit; y out bit); end fsm;
Przykład – automat Mealy’ego , Krok drugi: stany: - s0, s1, s2 ... architecture mealy of fsm is type stan is (s0, s1, s2); signal stan_obecny, stan_nastepny: stan; begin
Przykład – automat Mealy’ego , Krok trzeci: ... process (clk, reset) begin if reset = ’1’ then stan_obecny <= s0; elsif clk’event and clk = ’1’ then stan_obecny <= stan_nastepny; end if; end process;
Przykład – automat Mealy’ego Krok czwarty: process (x, stan_obecny) begin case stan_obecny is when s0 => if x = ”00” then y <= ’1’; stan_nastepny <= s1; elsif x = ”01” then elsif x = ”10” then y <= ’0’; else stan_nastepny <= s2; end if; ... ,
Przykład – automat Mealy’ego Krok czwarty: ... when s1 => if x = ”00” then y <= ’0’; stan_nastepny <= s0; elsif x = ”01” then stan_nastepny <= s2; elsif x = ”10” then y <= ’1’; stan_nastepny <= s1; else end if; ,
Przykład – automat Mealy’ego Krok czwarty: ... when s2 => if x = ”00” then y <= ’0’; stan_nastepny <= s0; elsif x = ”01” then y <= ’1’; stan_nastepny <= s1; elsif x = ”10” then else end if; end case; end process; ,