Advertisement
Vedro

RSM

Jun 16th, 2019
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.43 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.numeric_std.all;
  4.  
  5. entity RSmodul is
  6.     Port ( clk_i : in  STD_LOGIC;
  7.            rst_i : in  STD_LOGIC;
  8.            RXD_i : in  STD_LOGIC;
  9.            TXD_o : out  STD_LOGIC);
  10. end RSmodul;
  11.  
  12. architecture Behavioral of RSmodul is
  13.  
  14.    constant dodajnik : std_logic_vector (9 downto 0) := "0001000000";
  15.     signal start : std_logic := '0';
  16.     signal bufor : std_logic_vector (9 downto 0) := "1111111111";
  17.     signal dane : std_logic_vector (9 downto 0) := "1111111110";
  18.     signal wazne : boolean := false;
  19.     signal mozesz_wysylac : boolean := false;
  20.     signal i : integer range 0 to 2500;                                                     -- licznik "wykrywający" połowę trwania bitu
  21.     signal j : integer range 0 to 5208;                                                     -- licznik który trwa tyle ile bit
  22.     signal indeks : integer range 0 to 10;      -- indeksy wektora do którego zapisywane będą bity
  23.  
  24. begin
  25.     process(clk_i, rst_i) is
  26.     begin
  27.         if (rst_i = '1') then
  28.             i <= 0;
  29.             j <= 0;
  30.             BUFOR <= "1111111111";
  31.             DANE <= "1111111110";
  32.         elsif (rising_edge(clk_i)) then
  33.             if (wazne = false) then
  34.                 if (RXD_i = '0') then
  35.                     wazne <= true;                          -- mówi czy zaczęło wysyłać istotne dane
  36.                     start <= '1';                               -- włącza pierwszy licznik (do 2500, tzn i_pocz)
  37.                 end if;
  38.             else
  39.                 if (start = '1') then                       -- zliczanie do połowy pierwszego bitu
  40.                     if (i = 2500) then
  41.                         start <= '0';
  42.                         BUFOR(0) <= RXD_i;
  43.                     else
  44.                         i <= i + 1;
  45.                     end if;
  46.                 end if;            
  47.                 if (start = '0' and i = 2500) then  -- zliczanie kolejnych bitów, których zapisywanie do bufora będzie mniej więcej w środku ich trwania
  48.                     if (indeks = 10) then
  49.                         DANE <= std_logic_vector(unsigned(BUFOR) + unsigned(dodajnik));
  50.                         i <= 0;
  51.                         j <= 0;
  52.                         indeks <= 0;
  53.                         wazne <= false;
  54.                         mozesz_wysylac <= true;
  55.                     else
  56.                         if (j = 5207) then
  57.                             indeks <= indeks + 1;
  58.                         end if;
  59.                         if (j = 5208) then
  60.                             BUFOR(indeks) <= RXD_i;
  61.                             j <= 0;
  62.                         else
  63.                             j <= j + 1;
  64.                         end if;
  65.                     end if;
  66.                 end if;
  67.             end if;                    
  68.        
  69.             if (mozesz_wysylac = true) then
  70.                 if (indeks = 10) then
  71.                     mozesz_wysylac <= false;
  72.                     indeks <= 0;
  73.                     j <= 0;
  74.                 else
  75.                     if (j = 0) then
  76.                         TXD_o <= DANE(indeks);
  77.                     end if;
  78.                     if (j = 5208) then
  79.                         indeks <= indeks + 1;
  80.                         j <= 0;
  81.                     else
  82.                         j <= j + 1;
  83.                     end if;
  84.                 end if;
  85.             end if;
  86.         end if;
  87.     end process;
  88. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement