Facebook
From Tacky Bee, 9 Years ago, written in VHDL.
Embed
Download Paste or View Raw
Hits: 609
  1. ----------------------------------------------------------------------------------
  2. -- Dane wejściowe: Paweł Soja
  3. --
  4. -- Zakodowana tabela przejść / wyjść automatu A1:
  5. -- |-----+-----+-----+-----|
  6. -- |  q  | x=0 | x=1 |  y  |
  7. -- |-----+-----+-----+-----|
  8. -- | 000 | 100 | 010 |  1  |
  9. -- | 001 | 100 | 011 |  1  |
  10. -- | 010 | 011 | 010 |  1  |
  11. -- | 011 | 000 | 001 |  0  |
  12. -- | 100 | 000 | 001 |  0  |
  13. -- |-----+-----+-----+-----|
  14. ----------------------------------------------------------------------------------
  15. library IEEE;
  16. use IEEE.STD_LOGIC_1164.all;
  17.  
  18. ----------------------------------------------------------------------
  19. entity cw10z1 is
  20.         port (clr, clk, x : in std_logic;
  21.                         y : out std_logic;
  22.                         q : inout std_logic_vector(1 to 3));
  23. end cw10z1;
  24.  
  25. ----------------------------------------------------------------------
  26. -- architektura beh1 (behawioralna)
  27. -- opis za pomocą tablicy (tabela przejść/wyjść automatu A1)
  28. -- z wykorzystaniem instrukcji "case"
  29.  
  30. architecture beh1 of cw10z1 is
  31.         signal d : std_logic_vector(1 to 3);
  32.        
  33. begin
  34.         -------------------------------------------------------------------
  35.         uk1: process(q, x)                                                                              -- funkcja przejść: p
  36.         begin
  37.                 case q is
  38.                         when "000" =>  if x='0' then d <= "100";        -- p(000,0) = 100
  39.                                                                 else d <= "010";                -- p(000,1) = 010
  40.                                                                 end if;
  41.                         when "001" =>  if x='0' then d <= "100";        -- p(001,0) = 100
  42.                                                                 else d <= "011";                -- p(001,1) = 011
  43.                                                                 end if;
  44.                         when "010" =>  if x='0' then d <= "011";        -- p(010,0) = 011
  45.                                                                 else d <= "010";                -- p(010,1) = 010
  46.                                                                 end if;
  47.                         when "011" =>  if x='0' then d <= "000";        -- p(011,0) = 000
  48.                                                                 else d <= "001";                -- p(011,1) = 001
  49.                                                                 end if;
  50.                         when "100" =>  if x='0' then d <= "000";        -- p(100,0) = 000
  51.                                                                 else d <= "001";                -- p(100,1) = 001
  52.                                                                 end if;
  53.                         when others => d <= "XXX";
  54.                 end case;
  55.         end process uk1;
  56.         -------------------------------------------------------------------
  57.         uk2: process(q)                                                         -- funkcja wyjść: w
  58.         begin
  59.                 case q is
  60.                         when "000" =>  y <= '1';                        -- w(000) = 1
  61.                         when "001" =>  y <= '1';                        -- w(001) = 1
  62.                         when "010" =>  y <= '1';                        -- w(010) = 1
  63.                         when "011" =>  y <= '0';                        -- w(011) = 0
  64.                         when "100" =>  y <= '0';                        -- w(100) = 0                  
  65.                         when others => y <= 'X';
  66.                 end case;
  67.         end process uk2;
  68.         -------------------------------------------------------------------
  69.         rej: process(clk, clr)                          -- rejestr równoległy (3 przerzutniki D)
  70.         begin
  71.                 if clr = '1' then                                       -- zerowanie asynchroniczne
  72.                         q <= "000";
  73.                 elsif rising_edge(clk) then     -- na narastającym zboczu sygnału clk
  74.                         q <= d;                                                 -- zmiana stanu zgodnie z funkcją przejść
  75.                 end if;
  76.         end process rej;
  77.         -------------------------------------------------------------------
  78.  
  79. end beh1;
  80. ----------------------------------------------------------------------------------
  81.