aboutsummaryrefslogtreecommitdiffstats
path: root/icestick/uart/hdl/uart_top.vhd
blob: 889a3a054c61960dcea2c55a613fcbd4dfa9fd90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
library ieee;
  use ieee.std_logic_1164.all;

entity uart_top is
  generic (
    C_BITS : integer := 8
  );
  port (
    isl_clk    : in std_logic;
    isl_data_n : in std_logic;
    osl_data_n : out std_logic;
    osl_ready  : out std_logic
  );
end uart_top;

architecture behavioral of uart_top is
  constant C_QUARTZ_FREQ : integer := 12000000; -- Hz
  constant C_BAUDRATE : integer := 115200; -- words / s
  constant C_CYCLES_PER_BIT : integer := C_QUARTZ_FREQ / C_BAUDRATE;

  signal sl_valid_out_tx : std_logic := '0';
  signal slv_data_out_tx : std_logic_vector(C_BITS-1 downto 0) := (others => '0');

begin
  i_uart_rx: entity work.uart_rx
  generic map (
    C_BITS => C_BITS,
    C_CYCLES_PER_BIT => C_CYCLES_PER_BIT
  )
  port map (
    isl_clk => isl_clk,
    isl_data_n => isl_data_n,
    oslv_data => slv_data_out_tx,
    osl_valid => sl_valid_out_tx
  );

  i_uart_tx: entity work.uart_tx
  generic map (
    C_BITS => C_BITS,
    C_CYCLES_PER_BIT => C_CYCLES_PER_BIT
  )
  port map (
    isl_clk => isl_clk,
    isl_valid => sl_valid_out_tx,
    islv_data => slv_data_out_tx,
    osl_data_n => osl_data_n,
    osl_ready => osl_ready
  );
end behavioral;