44-- MODULE: UART TOP MODULE
55-- AUTHORS: Jakub Cabal <jakubcabal@gmail.com>
66-- LICENSE: The MIT License (MIT), please read LICENSE file
7- -- WEBSITE: https://github.com/jakubcabal/uart_for_fpga
7+ -- WEBSITE: https://github.com/jakubcabal/uart-for-fpga
88--------------------------------------------------------------------------------
99
1010library IEEE;
@@ -29,20 +29,20 @@ entity UART is
2929 UART_TXD : out std_logic ; -- serial transmit data
3030 UART_RXD : in std_logic ; -- serial receive data
3131 -- USER DATA INPUT INTERFACE
32- DATA_IN : in std_logic_vector (7 downto 0 ); -- input data
33- DATA_SEND : in std_logic ; -- when DATA_SEND = 1, input data are valid and will be transmit
34- BUSY : out std_logic ; -- when BUSY = 1, transmitter is busy and you must not set DATA_SEND to 1
32+ DIN : in std_logic_vector (7 downto 0 ); -- data to be transmitted over UART
33+ DIN_VLD : in std_logic ; -- when DIN_VLD = 1, DIN is valid and will be accepted for transmiting
34+ BUSY : out std_logic ; -- when BUSY = 1, transmitter is busy and DIN can not be accepted
3535 -- USER DATA OUTPUT INTERFACE
36- DATA_OUT : out std_logic_vector (7 downto 0 ); -- output data
37- DATA_VLD : out std_logic ; -- when DATA_VLD = 1, output data are valid
38- FRAME_ERROR : out std_logic -- when FRAME_ERROR = 1, stop bit was invalid
36+ DOUT : out std_logic_vector (7 downto 0 ); -- data received via UART
37+ DOUT_VLD : out std_logic ; -- when DOUT_VLD = 1, DOUT is valid (is assert only for one clock cycle)
38+ FRAME_ERROR : out std_logic -- when FRAME_ERROR = 1, stop bit was invalid (is assert only for one clock cycle)
3939 );
4040end UART;
4141
4242architecture FULL of UART is
4343
44- constant DIVIDER_VALUE : integer := CLK_FREQ/ (16 * BAUD_RATE);
45- constant CLK_CNT_WIDTH : integer := integer (ceil (log2 (real (DIVIDER_VALUE))));
44+ constant DIVIDER_VALUE : integer := CLK_FREQ/ (16 * BAUD_RATE);
45+ constant CLK_CNT_WIDTH : integer := integer (ceil (log2 (real (DIVIDER_VALUE))));
4646 constant CLK_CNT_MAX : unsigned := to_unsigned (DIVIDER_VALUE- 1 , CLK_CNT_WIDTH);
4747
4848 signal uart_clk_cnt : unsigned (CLK_CNT_WIDTH- 1 downto 0 );
@@ -53,7 +53,7 @@ architecture FULL of UART is
5353begin
5454
5555 -- -------------------------------------------------------------------------
56- -- UART CLOCK COUNTER AND CLOCK ENABLE FLAG
56+ -- UART CLOCK COUNTER AND CLOCK ENABLE FLAG
5757 -- -------------------------------------------------------------------------
5858
5959 uart_clk_cnt_p : process (CLK)
6262 if (RST = '1' ) then
6363 uart_clk_cnt <= (others => '0' );
6464 else
65- if (uart_clk_cnt = CLK_CNT_MAX ) then
65+ if (uart_clk_en = '1' ) then
6666 uart_clk_cnt <= (others => '0' );
6767 else
6868 uart_clk_cnt <= uart_clk_cnt + 1 ;
@@ -71,21 +71,10 @@ begin
7171 end if ;
7272 end process ;
7373
74- uart_clk_en_reg_p : process (CLK)
75- begin
76- if (rising_edge (CLK)) then
77- if (RST = '1' ) then
78- uart_clk_en <= '0' ;
79- elsif (uart_clk_cnt = CLK_CNT_MAX) then
80- uart_clk_en <= '1' ;
81- else
82- uart_clk_en <= '0' ;
83- end if ;
84- end if ;
85- end process ;
74+ uart_clk_en <= '1' when (uart_clk_cnt = CLK_CNT_MAX) else '0' ;
8675
8776 -- -------------------------------------------------------------------------
88- -- UART RXD SHIFT REGISTER AND DEBAUNCER
77+ -- UART RXD SHIFT REGISTER AND DEBAUNCER
8978 -- -------------------------------------------------------------------------
9079
9180 use_debouncer_g : if (USE_DEBOUNCER = True ) generate
10695 if (RST = '1' ) then
10796 uart_rxd_debounced <= '1' ;
10897 else
109- uart_rxd_debounced <= uart_rxd_shreg(0 ) OR
110- uart_rxd_shreg(1 ) OR
111- uart_rxd_shreg(2 ) OR
98+ uart_rxd_debounced <= uart_rxd_shreg(0 ) or
99+ uart_rxd_shreg(1 ) or
100+ uart_rxd_shreg(2 ) or
112101 uart_rxd_shreg(3 );
113102 end if ;
114103 end if ;
@@ -120,7 +109,7 @@ begin
120109 end generate ;
121110
122111 -- -------------------------------------------------------------------------
123- -- UART TRANSMITTER
112+ -- UART TRANSMITTER
124113 -- -------------------------------------------------------------------------
125114
126115 uart_tx_i: entity work.UART_TX
@@ -134,13 +123,13 @@ begin
134123 UART_CLK_EN => uart_clk_en,
135124 UART_TXD => UART_TXD,
136125 -- USER DATA INPUT INTERFACE
137- DATA_IN => DATA_IN ,
138- DATA_SEND => DATA_SEND ,
126+ DATA_IN => DIN ,
127+ DATA_SEND => DIN_VLD ,
139128 BUSY => BUSY
140129 );
141130
142131 -- -------------------------------------------------------------------------
143- -- UART RECEIVER
132+ -- UART RECEIVER
144133 -- -------------------------------------------------------------------------
145134
146135 uart_rx_i: entity work.UART_RX
@@ -154,8 +143,8 @@ begin
154143 UART_CLK_EN => uart_clk_en,
155144 UART_RXD => uart_rxd_debounced,
156145 -- USER DATA OUTPUT INTERFACE
157- DATA_OUT => DATA_OUT ,
158- DATA_VLD => DATA_VLD ,
146+ DATA_OUT => DOUT ,
147+ DATA_VLD => DOUT_VLD ,
159148 FRAME_ERROR => FRAME_ERROR
160149 );
161150
0 commit comments