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 3

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

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

powered by: WebSVN 2.1.0

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