Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.numeric_std.all;
- entity RSmodul is
- Port ( clk_i : in STD_LOGIC;
- rst_i : in STD_LOGIC;
- RXD_i : in STD_LOGIC;
- TXD_o : out STD_LOGIC);
- end RSmodul;
- architecture Behavioral of RSmodul is
- constant dodajnik : std_logic_vector (9 downto 0) := "0001000000";
- signal start : std_logic := '0';
- signal bufor : std_logic_vector (9 downto 0) := "1111111111";
- signal dane : std_logic_vector (9 downto 0) := "1111111110";
- signal wazne : boolean := false;
- signal mozesz_wysylac : boolean := false;
- signal i : integer range 0 to 2500; -- licznik "wykrywający" połowę trwania bitu
- signal j : integer range 0 to 5208; -- licznik który trwa tyle ile bit
- signal indeks : integer range 0 to 10; -- indeksy wektora do którego zapisywane będą bity
- begin
- process(clk_i, rst_i) is
- begin
- if (rst_i = '1') then
- i <= 0;
- j <= 0;
- BUFOR <= "1111111111";
- DANE <= "1111111110";
- elsif (rising_edge(clk_i)) then
- if (wazne = false) then
- if (RXD_i = '0') then
- wazne <= true; -- mówi czy zaczęło wysyłać istotne dane
- start <= '1'; -- włącza pierwszy licznik (do 2500, tzn i_pocz)
- end if;
- else
- if (start = '1') then -- zliczanie do połowy pierwszego bitu
- if (i = 2500) then
- start <= '0';
- BUFOR(0) <= RXD_i;
- else
- i <= i + 1;
- end if;
- end if;
- 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
- if (indeks = 10) then
- DANE <= std_logic_vector(unsigned(BUFOR) + unsigned(dodajnik));
- i <= 0;
- j <= 0;
- indeks <= 0;
- wazne <= false;
- mozesz_wysylac <= true;
- else
- if (j = 5207) then
- indeks <= indeks + 1;
- end if;
- if (j = 5208) then
- BUFOR(indeks) <= RXD_i;
- j <= 0;
- else
- j <= j + 1;
- end if;
- end if;
- end if;
- end if;
- if (mozesz_wysylac = true) then
- if (indeks = 10) then
- mozesz_wysylac <= false;
- indeks <= 0;
- j <= 0;
- else
- if (j = 0) then
- TXD_o <= DANE(indeks);
- end if;
- if (j = 5208) then
- indeks <= indeks + 1;
- j <= 0;
- else
- j <= j + 1;
- end if;
- end if;
- end if;
- end if;
- end process;
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement