library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity tx_top is generic(COUNTER_BIT: natural := 20); port( clk: in std_logic; sw: in std_logic_vector(7 downto 0); seg : out std_logic_vector(6 downto 0); an : out std_logic_vector(3 downto 0) := "1100"; dp : out std_logic; tx_out: out std_logic; btn: in std_logic_vector(3 downto 0); data_out : out std_logic_vector(15 downto 0) ); end tx_top; architecture top_arch of tx_top is -- component seven_segment_display -- generic( -- COUNTER_BITS: natural := 15 -- ); -- port( -- clk: in std_logic; -- data_in: in std_logic_vector(15 downto 0); -- dp_in: in std_logic_Vector(3 downto 0); -- blank: in std_logic_vector(3 downto 0); -- seg : out std_logic_vector(6 downto 0); -- dp : out std_logic; -- an : out std_logic_vector(3 downto 0) -- ); -- end component; component tx port( clk: in std_logic; rst: in std_logic; data_in: in std_logic_vector(7 downto 0); send_character: in std_logic; tx_out: out std_logic; tx_busy: out std_logic ); end component; signal reset: std_logic := '0'; signal dp_in: std_logic_vector(3 downto 0) := "0000"; signal blank4: std_logic_vector(3 downto 0) := (others=>'0'); signal data_in: std_logic_vector(7 downto 0) := (others=>'0'); signal send_character: std_logic; signal counter: unsigned(COUNTER_BIT downto 0) := (others=>'0'); signal debouncing: std_logic; signal data_in2: std_logic_vector(15 downto 0) := (others=>'0'); begin -- bottom_segment: seven_segment_display -- generic map(COUNTER_BITS=>15) -- port map(clk=>clk, an=>an, seg=>seg, dp=>dp, blank=>blank4, -- data_in=>data_in2, dp_in=>dp_in -- ); bottom_tx: tx port map(clk=>clk, rst=>reset, send_character=>send_character, tx_out=>tx_out, tx_busy=>open, data_in=>data_in ); data_out <= "00000000" & sw; data_in <= sw; data_in2 <= "00000000" & sw; -- debouncer process(clk) begin if(rising_edge(clk)) then if(counter = "111111111111111111111") then debouncing <= '1'; counter <= (others=>'0'); else debouncing <= '0'; counter <= counter+1; end if; end if; end process; -- button logic process(clk,btn) begin if(rising_edge(clk)) then if (btn(3)='1') then reset <= '1'; elsif (btn(0)='1') then if(debouncing='1') then send_character <= '1'; end if; else reset <= '0'; send_character <= '0'; end if; end if; end process; end top_arch;