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/] [timer_all.v] - Blame information for rev 7

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 7 maheshpalv
module timer (clk, en, reset, type, preset, DN, TT, ACC);
7
 
8
        input clk, en, reset;
9
        input [`tcTypeLen-1:0] type;
10
        input [`tcPresetLen-1:0] preset;
11
 
12
        output DN, TT;
13
        output [`tcAccLen-1:0] ACC;
14
 
15
        reg DN = 0, TT = 0;
16
        reg [`tcAccLen-1:0] ACC = 0;
17
 
18
        reg [`tcTypeLen-1:0]     TimerType;
19
        reg [`tcTypeLen-1:0]     typeNext;
20
 
21
 
22
 
23
        parameter       OnDelayTimer                    = `tcTypeLen'b0;
24
        parameter       OffDelayTimer                   = `tcTypeLen'b1;
25
        parameter       RetOnDelayTimer         = `tcTypeLen'b10;
26
        parameter       defaultType                             = `tcTypeLen'b11;
27
 
28
        always @ (type)
29
        begin
30
                case (type)
31
 
32
                `timerType1             :       begin
33
                                                                typeNext = OnDelayTimer;
34
                                                                end
35
 
36
                `timerType2             :       begin
37
                                                                typeNext = OffDelayTimer;
38
                                                                end
39
 
40
                `timerType3             :       begin
41
                                                                typeNext = RetOnDelayTimer;
42
                                                                end
43
 
44
                default                 :       begin
45
 
46
                                                                $display("      Timer is defined for unknown type.\n Valid types: On-delay, Off-delay, retentive-on-delay");
47
                                                                end
48
 
49
                endcase
50
        end
51
 
52
 
53
        always @ (posedge clk or posedge reset)
54
        begin
55
                if (reset)
56
                begin
57
                        $write ("       timer module is reset   ");
58
                        TimerType = defaultType;
59
                end
60
                else
61
                begin
62
                        TimerType = typeNext;
63
                end
64
        end
65
 
66
 
67
        always @ (posedge clk)
68
        begin
69
 
70
 
71
                case (TimerType)
72
 
73
                OnDelayTimer    :       begin
74
                                                                                if (reset)
75
                                                                                begin
76
                                                                                        ACC = `tcAccLen'b0;
77
                                                                                        DN = 1'b0;
78
                                                                                        TT = 1'b0;
79
                                                                                end
80
                                                                                else
81
                                                                                begin
82
                                                                                        if (en)
83
                                                                                        begin
84
                                                                                                if (ACC < preset)
85
                                                                                                begin
86
                                                                                                        ACC = ACC + 1'b1;
87
                                                                                                        DN = 1'b0;
88
                                                                                                        TT = 1'b1;
89
                                                                                                end
90
                                                                                                else if (ACC >= preset)
91
                                                                                                begin
92
                                                                                                        ACC = ACC;
93
 
94
                                                                                                        DN = 1'b1;
95
                                                                                                        TT = 1'b0;
96
                                                                                                end
97
                                                                                        end
98
                                                                                        else
99
                                                                                        begin
100
                                                                                                ACC = `tcAccLen'b0;     // if not enabled
101
                                                                                                DN = 1'b0;
102
                                                                                                TT = 1'b0;
103
                                                                                        end
104
                                                                                end
105
                                                                        end     // end this case
106
 
107
                OffDelayTimer   :       begin                                                   // not correct implementation!
108
                                                                                if (reset)
109
                                                                                begin
110
                                                                                        ACC = `tcAccLen'b0;
111
                                                                                        DN = 1'b0;
112
                                                                                        TT = 1'b0;
113
                                                                                end
114
                                                                                else
115
                                                                                begin
116
                                                                                        if (!en)
117
                                                                                        begin
118
                                                                                                if (ACC < preset)
119
                                                                                                begin
120
                                                                                                        ACC = ACC + 1'b1;
121
                                                                                                        DN = 1'b0;
122
                                                                                                        TT = 1'b1;
123
                                                                                                end
124
                                                                                                else if (ACC >= preset)
125
                                                                                                begin
126
                                                                                                        ACC = ACC;
127
                                                                                                        DN = 1'b1;
128
                                                                                                        TT = 1'b0;
129
                                                                                                end
130
                                                                                        end
131
                                                                                        else
132
                                                                                        begin
133
                                                                                                ACC = `tcAccLen'b0;     // if not enabled
134
                                                                                                DN = 1'b0;
135
                                                                                                TT = 1'b0;
136
                                                                                        end
137
                                                                                end
138
                                                                        end     // end this case
139
 
140
                RetOnDelayTimer :       begin
141
 
142
                                                                                if (reset)
143
                                                                                begin
144
                                                                                        ACC = `tcAccLen'b0;
145
                                                                                        DN = 1'b0;
146
                                                                                        TT = 1'b0;
147
                                                                                end
148
                                                                                else
149
                                                                                begin
150
                                                                                        if (en)
151
                                                                                        begin
152
                                                                                                if (ACC < preset)
153
                                                                                                begin
154
                                                                                                        ACC = ACC + 1'b1;
155
                                                                                                        DN = 1'b0;
156
                                                                                                        TT = 1'b1;
157
                                                                                                end
158
                                                                                                else if (ACC >= preset)
159
                                                                                                begin
160
                                                                                                        ACC = ACC;
161
                                                                                                        DN = 1'b1;
162
 
163
 
164
 
165
 
166
                                                                                                        TT = 1'b0;
167
                                                                                                end
168
                                                                                        end
169
                                                                                        else
170
                                                                                        begin
171
                                                                                                ACC = ACC;      // retain ACC
172
                                                                                                DN = 1'b0;
173
                                                                                                TT = 1'b0;
174
                                                                                        end
175
                                                                                end
176
                                                                        end     // end this case
177
 
178
 
179
                                default         :       begin
180
                                                                        if (!reset)
181
                                                                        $display("      Error in timer type     ");
182
                                                                        end
183
 
184
                                endcase
185
 
186
        end
187
 
188
 
189
endmodule

powered by: WebSVN 2.1.0

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