Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 4.64 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. USE ieee.std_logic_arith.all;
  4. entity koder is
  5. port(
  6.       clk : in STD_LOGIC;
  7.       dintabl : in integer := 0;
  8.       din : in std_logic);
  9. end koder;
  10.  
  11. architecture Behavioral of koder is
  12.  
  13. TYPE STATE_TYPE IS (s0,s1,s2,s3);
  14. SIGNAL current_state : STATE_TYPE;
  15. SIGNAL next_state : STATE_TYPE;
  16.  
  17. component peremezh is
  18.     Port (clk : in std_logic;
  19.           din : in std_logic;
  20.           dintabl : in integer := 0;
  21.           dout : out std_logic_vector(999 downto 0));
  22. end component;          
  23.  
  24. signal address : integer := 0;
  25. signal glavniyschetchik : integer := 0;
  26. signal check1 : integer := 0;
  27. signal peremezhdin : std_logic_vector(999 downto 0):=(others => '0');
  28. signal rst : std_logic := '0';
  29. signal findout: std_logic:='0';
  30. signal findoutvspom: std_logic := '0';
  31.  
  32. type rom is array (0 to 2) of std_logic;
  33. signal soderzhimoe2sost : rom := (others=> '0');
  34. signal soderzhimoe3sost : rom := (others=> '0');
  35. ----------------------------------------------------------------------------
  36. begin  
  37.  
  38. clocked_proc : PROCESS (clk) BEGIN
  39.     IF rising_edge(clk) THEN
  40.         iF (rst = '1') THEN
  41.             current_state <= s0;
  42.         ELSE
  43.             current_state <= next_state;
  44.         END IF;
  45.     END IF;
  46.  END PROCESS clocked_proc;
  47.  --------------------------------------------------------------------------
  48.  nextstate_proc : PROCESS (clk,check1, glavniyschetchik, current_state) BEGIN
  49.     CASE current_state IS
  50.         WHEN s0 =>
  51.                 IF (check1=1) THEN
  52.                 next_state <= s1;
  53.             END IF;
  54.         WHEN s1 =>
  55.             IF (check1=2) THEN
  56.                 next_state <= s2;
  57.             END IF;
  58.         WHEN s2 =>
  59.             IF (check1=3) THEN
  60.                 next_state <= s3;
  61.             end if;
  62.         WHEN s3 =>
  63.             IF (check1=4) THEN
  64.                 next_state <= s0;
  65.             end if;
  66.     END CASE;
  67.   END PROCESS nextstate_proc;
  68.  --------------------------------------------------------------
  69.  output_proc : PROCESS (clk, current_state) BEGIN
  70.  
  71.   CASE current_state IS
  72.   WHEN s0 =>
  73.        
  74.   WHEN s1 =>
  75.         if rising_edge(clk) then
  76.              findout <= din;
  77.         end if;
  78.   WHEN s2 =>
  79.         if rising_edge(clk) then
  80.               soderzhimoe2sost(1) <= soderzhimoe2sost(0);
  81.               soderzhimoe2sost(0) <= din xor (soderzhimoe2sost(1) xor soderzhimoe2sost(2));
  82.               soderzhimoe2sost(2) <= soderzhimoe2sost(1);
  83.               findout <= soderzhimoe2sost(0) xor soderzhimoe2sost(2);
  84.              
  85.               soderzhimoe3sost(1) <= soderzhimoe3sost(0);
  86.               soderzhimoe3sost(0) <= peremezhdin(address) xor (soderzhimoe3sost(1) xor soderzhimoe3sost(2));
  87.               soderzhimoe3sost(2) <= soderzhimoe3sost(1);
  88.               findoutvspom <= soderzhimoe3sost(0) xor soderzhimoe3sost(2);
  89.       end if;
  90.   WHEN s3 =>  
  91.         if rising_edge(clk) then
  92.               soderzhimoe3sost(1) <= soderzhimoe3sost(0);
  93.               soderzhimoe3sost(0) <= peremezhdin(address) xor (soderzhimoe3sost(1) xor soderzhimoe3sost(2));
  94.               soderzhimoe3sost(2) <= soderzhimoe3sost(1);
  95.               findout <= soderzhimoe3sost(0) xor soderzhimoe3sost(2);
  96.         end if;
  97.   END CASE;
  98.   END PROCESS output_proc;
  99.  
  100. -----------------------------------------------------------------
  101. schet_a: process(clk) begin
  102.     if rising_edge(clk) then
  103.         if address = 999 then
  104.             address <= 0;
  105.         else
  106.             address <= address + 1;
  107.         end if;
  108.     end if;
  109. end process;
  110.  
  111. schet_b: process(clk) begin
  112.     if rising_edge(clk) then
  113.         if glavniyschetchik = 5000 then
  114.             glavniyschetchik <= 0;
  115.         elsif glavniyschetchik = 999 then                       -- нулевое сост
  116.             check1 <= check1 + 1;                                  
  117.             glavniyschetchik <= glavniyschetchik + 1;
  118.         elsif glavniyschetchik = 1998 then                      -- первое сост
  119.             check1 <= check1 + 1;
  120.             glavniyschetchik <= glavniyschetchik + 1;
  121.         elsif glavniyschetchik = 2997 then                      -- второе сост
  122.             check1 <= check1 + 1;
  123.             glavniyschetchik <= glavniyschetchik + 1;
  124.         elsif glavniyschetchik = 3996 then                      -- третье сост
  125.             check1 <= check1 + 1;
  126.             glavniyschetchik <= glavniyschetchik + 1;            
  127.         else
  128.             glavniyschetchik <= glavniyschetchik + 1;
  129.         end if;
  130.     end if;
  131. end process;
  132.  
  133. komp: peremezh
  134. port map(
  135.     clk => clk,
  136.     din => din,
  137.     dintabl => dintabl,
  138.     dout => peremezhdin);      
  139.      
  140. end behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement