OpenCores
URL https://opencores.org/ocsvn/uart_block/uart_block/trunk

Subversion Repositories uart_block

[/] [uart_block/] [trunk/] [hdl/] [iseProject/] [serial_transmitter.vhd] - Blame information for rev 37

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 37 leonardoar
--! @file
2
--! @brief Serial transmitter http://www.fpga4fun.com/SerialInterface.html
3 2 leonardoar
library IEEE;
4
use IEEE.STD_LOGIC_1164.ALL;
5
 
6
--! Use CPU Definitions package
7
use work.pkgDefinitions.all;
8
 
9
entity serial_transmitter is
10 37 leonardoar
    Port ( rst : in  STD_LOGIC;                                                                                         --! Reset input
11
           baudClk : in  STD_LOGIC;                                                                                     --! Baud rate clock input
12
           data_byte : in  STD_LOGIC_VECTOR ((nBits-1) downto 0);        --! Byte to be sent
13
                          data_sent : out STD_LOGIC;                                                                            --! Indicate that byte has been sent
14
           serial_out : out  STD_LOGIC);                                                                        --! Uart serial output
15 2 leonardoar
end serial_transmitter;
16
 
17 37 leonardoar
--! @brief Serial transmitter http://www.fpga4fun.com/SerialInterface.html
18
--! @details Implement block that serialize the "data_byte" signal on a stream of bits clocked out by "baudClk"
19 2 leonardoar
architecture Behavioral of serial_transmitter is
20
signal current_s,next_s: txStates;
21
begin
22
 
23
        -- Next state process
24
        process (rst, baudClk)
25
        begin
26
                if rst = '1' then
27
                        current_s <= tx_idle;
28
                elsif rising_edge(baudClk) then
29
                        current_s <= next_s;
30
                end if;
31
        end process;
32
 
33
        process (current_s, data_byte)
34
        begin
35
                case current_s is
36
                        when tx_idle =>
37
                                serial_out <= '1';
38
                                data_sent <= '0';
39
                                next_s <= tx_start;
40
 
41
                        -- Start bit
42
                        when tx_start =>
43
                                serial_out <= '0';
44
                                data_sent <= '0';
45
                                next_s <= bit0;
46
 
47
                        when bit0 =>    -- Send the least significat bit
48
                                serial_out <= data_byte(0);
49
                                data_sent <= '0';
50
                                next_s <= bit1;
51
 
52
                        when bit1 =>
53
                                serial_out <= data_byte(1);
54
                                data_sent <= '0';
55
                                next_s <= bit2;
56
 
57
                        when bit2 =>
58
                                serial_out <= data_byte(2);
59
                                data_sent <= '0';
60
                                next_s <= bit3;
61
 
62
                        when bit3 =>
63
                                serial_out <= data_byte(3);
64
                                data_sent <= '0';
65
                                next_s <= bit4;
66
 
67
                        when bit4 =>
68
                                serial_out <= data_byte(4);
69
                                data_sent <= '0';
70
                                next_s <= bit5;
71
 
72
                        when bit5 =>
73
                                serial_out <= data_byte(5);
74
                                data_sent <= '0';
75
                                next_s <= bit6;
76
 
77
                        when bit6 =>
78
                                serial_out <= data_byte(6);
79
                                data_sent <= '0';
80
                                next_s <= bit7;
81
 
82
                        when bit7 =>    -- Send the most significat bit
83
                                serial_out <= data_byte(7);
84
                                data_sent <= '0';
85
                                next_s <= tx_stop1;
86
 
87
 
88
                        when tx_stop1 =>
89
                                serial_out <= '1';
90
                                data_sent <= '1';
91
                                next_s <= tx_stop2;
92
 
93
                        when tx_stop2 =>        -- Stop here and wait for other reset
94
                                serial_out <= '1';
95
                                data_sent <= '1';
96
                                next_s <= tx_stop2;
97
 
98
                end case;
99
        end process;
100
 
101
end Behavioral;
102
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.