Improve UART resource usage

Status
Not open for further replies.

promach

Advanced Member level 4
Joined
Feb 22, 2016
Messages
1,199
Helped
2
Reputation
4
Reaction score
5
Trophy points
1,318
Activity points
11,636
Could anyone think of ways to further reduce the resource usage compared to the original coding approach ?


Code VHDL - [expand]
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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity tiny_rs232_tx is
    Port ( clk         : in  STD_LOGIC;
       bit_tick    : in  STD_LOGIC;
       data        : in  STD_LOGIC_VECTOR(7 downto 0);
       data_enable : in  STD_LOGIC;
       tx          : out STD_LOGIC := '1';
       busy        : out STD_LOGIC );
end tiny_rs232_tx;
 
architecture Behavioral of tiny_rs232_tx is
signal shift_reg  : std_logic_vector(9 downto 0) := (others => '1');
signal i_busy     : std_logic;
 
begin
    busy <= i_busy;
    with shift_reg select i_busy <= '0' when "0000000000", '1' when others;
 
clk_proc: process(clk)
begin
    if rising_edge(clk) then
        if i_busy = '0' and data_enable = '1' then
            shift_reg <= '1' & data & '0';
        end if;             
 
        if bit_tick = '1' then
            if i_busy = '1' then
                tx <= shift_reg(0);
                shift_reg <= '0' & shift_reg(9 downto 1);
            end if;
        end if;
    end if;
end process;
end Behavioral;



Reference:
Reference link from StackExchange
**broken link removed**
 

That's pretty sparse as is. About the only thing I see is that TX is a register. If you take TX out of the clocked process, you could eliminate one register.
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…