104 lines
2.5 KiB
VHDL
104 lines
2.5 KiB
VHDL
|
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;
|