aboutsummaryrefslogtreecommitdiff
path: root/src/uart_rx_bitcnt.vhd
blob: 78e8a1ce0dee4e718e21024f29afbd467b261481 (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
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity uart_rx_bitcnt is
  port (
    clk        : in std_ulogic;
    rst_n      : in std_ulogic;
    edge_i     : in std_ulogic;
    en_h_i     : in std_ulogic;
    en_f_i     : in std_ulogic;
    rx_baudcnt_res_o : out std_ulogic;
    rx_shift_o : out std_ulogic;
    dv_o       : out std_ulogic);
end entity;

architecture rtl of uart_rx_bitcnt is
  signal cnt, ncnt : unsigned(3 downto 0);
begin
  cnt <= "0000" when rst_n = '0' else ncnt when rising_edge(clk);
  ncnt <= "0001" when edge_i = '1' and cnt = 0 else
    cnt + 1 when en_f_i = '1' and cnt > 0 and cnt < 10 else
    "0000" when en_h_i = '1' and cnt = 10 else cnt;

  rx_shift_o <= '1' when cnt >= 2 and cnt <= 9 and en_h_i = '1' else '0';
  dv_o <= '1' when cnt = 9 and en_f_i = '1' else '0';
  rx_baudcnt_res_o <= '1' when cnt = 0 else '0';
end architecture rtl;