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

Subversion Repositories instruction_list_pipelined_processor_with_peripherals

[/] [instruction_list_pipelined_processor_with_peripherals/] [trunk/] [hdl/] [uartRec.v] - Blame information for rev 3

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 maheshpalv
 
2
`include "timescale.v"
3
`include "defines.v"
4
 
5
 
6
module uartRec(clk, reset, sTick, rx, rxDoneTick, dOut);
7
 
8
                parameter dataBits = `dataBits;
9
                parameter sbTick = `sbTick;
10
 
11
                input clk, reset, sTick, rx;
12
                output rxDoneTick;
13
                output [dataBits-1:0] dOut;
14
 
15
                reg rxDoneTick;
16
                // states:
17
 
18
        localparam idle = 2'b00, start = 2'b01, data = 2'b10, stop = 2'b11;
19
 
20
                reg [1:0] stateReg, stateNext;   // current and next states
21
                reg [3:0] sReg, sNext;           //      counter
22
                reg [2:0] nReg, nNext;           // counter
23
                reg [7:0] bReg, bNext;           // data recieved in this..
24
 
25
 
26
                always @ (posedge clk or posedge reset)
27
                begin
28
                        if (reset)
29
                        begin
30
                                stateReg <= idle;
31
                                sReg <= 1'b0;
32
                                bReg <= 1'b0;
33
                                nReg <= 1'b0;
34
                        end     // end if
35
 
36
                        else
37
                        begin
38
                                stateReg <= stateNext;
39
                                sReg <= sNext;
40
                                bReg <= bNext;
41
                                nReg <= nNext;
42
                        end     // end else
43
 
44
                end     // end always
45
 
46
 
47
 
48
                // FSM next state logic:
49
 
50
                always @ *
51
                begin
52
 
53
                                stateNext = stateReg;
54
                                sNext = sReg;
55
                                bNext = bReg;
56
                                nNext = nReg;
57
                                rxDoneTick = 1'b0;
58
 
59
                        case (stateReg)
60
 
61
                        idle    :       if (~rx)
62
                                                begin
63
                                                        stateNext = start;      // start when rx is activated
64
                                                        sNext = 0;       // initialize sampling counter
65
                                                end     // end if rx
66
 
67
                        start   :       if (sTick)
68
                                                        if (sReg == 7)
69
                                                        begin
70
                                                                stateNext = data;               // at middle of oversampled start
71
                                                                                                        // bit, go to data state
72
                                                                sNext = 0;
73
                                                                nNext = 0;
74
                                                        end     // end if sReg==7
75
 
76
                                                        else
77
                                                                sNext = sReg + 1;       // otherwise keep increment sReg upto 7
78
 
79
                        data    :       if (sTick)
80
                                                        if (sReg == 15) // if reached middle of next bit
81
                                                        begin
82
                                                                sNext = 0;       // reset counter
83
                                                                bNext = {rx, bReg[7:1]};        // LSB first, and the
84
                                                                                                                //data recieved in bReg
85
                                                                if (nReg == (dataBits-1))       // if all data recvd,
86
                                                                        stateNext = stop;       // go to stop bit(s) state
87
                                                                else
88
                                                                        nNext = nReg + 1;
89
                                                        end     // end if sReg==15
90
 
91
                                                        else
92
                                                                sNext = sReg + 1;       // otherwise keep increment sReg upto 15
93
 
94
                        stop    :       if (sTick)
95
                                                        if (sReg == (sbTick-1))
96
                                                        begin
97
                                                                stateNext = idle;               // done reception, go to idle state
98
                                                                rxDoneTick = 1'b1;      // raise done tick!
99
                                                        end     // end if sReg==sbTick-1
100
 
101
                                                        else
102
                                                                sNext = sReg + 1;               // otherwise keep increment sReg 
103
                                                                                                                        //upto (sbTick-1)
104
                        endcase
105
 
106
                end     // end always combinatorial
107
 
108
 
109
                // recvd data output
110
 
111
                assign dOut = bReg;
112
 
113
 
114
endmodule

powered by: WebSVN 2.1.0

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