-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtimer.v
More file actions
155 lines (144 loc) · 3.65 KB
/
Copy pathtimer.v
File metadata and controls
155 lines (144 loc) · 3.65 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 00:07:42 09/09/2016
// Design Name:
// Module Name: timer
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module timer(
//input wire i_clk,
input wire i_clk_segs,
input wire i_run,
input wire [1:0] i_choose,
input wire BU,
input wire BD,
output wire [3:0] o_mins0,
output wire [3:0] o_mins1,
output wire [3:0] o_segs0,
output wire [3:0] o_segs1
);
//las sentencias comentadas en este documento eran para que este modulo se encargara de contar segundos, ahora tiene una entrada en segundos
//reg [25:0] q=26'd0;// variable que sirve de contador para dividir la frcuencia y aumentar el periodo
//wire segs;
reg [3:0] reg_mins1 = 4'd0;
reg [3:0] reg_mins0 = 4'd0;
reg [3:0] reg_segs1 = 4'd9;
reg [3:0] reg_segs0 = 4'd0;
reg flagU =1'd0;
reg flagD =1'd0;
reg flag_need_add=1'd0;
reg flag_need_sub=1'd0;
always@(*)begin
if(i_run==1'd0) begin
if(BU) begin
flagU<=1'b1;
end else if (flag_need_add==1'd0) begin
flagU<=1'd0;
end
end
end
always@(*)begin
if(i_run==1'd0) begin
if(BD) begin
flagD<=1'b1;
end else if (flag_need_sub==1'd0) begin
flagD<=1'd0;
end
end
end
always@(posedge i_clk_segs) begin
//always@(posedge i_clk_segs or posedge BU or posedge BD) begin
//if(i_clk_segs) begin
if(i_run) begin
if(reg_segs0==4'd0) begin
if(reg_segs1==4'd0)begin
if(reg_mins0==4'd0) begin
if(reg_mins1==4'b0)begin
//pass
end else begin
reg_mins1<=reg_mins1-4'b1;
reg_mins0<=4'd9;
reg_segs1<=4'd5;
reg_segs0<=4'd9;
end
end else begin
reg_segs0<=4'd5;
reg_segs1<=4'd9;
reg_mins0<=reg_mins0-4'd1;
end
end else begin
reg_segs0<=4'd9;
reg_segs1<=reg_segs1-4'd1;
end
end else begin
reg_segs0<=reg_segs0-4'd1;
end
end else if (i_run==1'd0 && flagU==1'd1) begin
flag_need_add<=0;
if(i_choose==2'b00) begin
reg_segs0<=reg_segs0+4'd1;
end else if (i_choose==2'b01) begin
reg_segs1<=reg_segs1+4'd1;
end else if (i_choose==2'b10) begin
reg_mins0<=reg_mins0+4'd1;
end else begin
reg_mins1<=reg_mins1+4'd1;
end
end else if (i_run==1'd0 && flagD==1'd1) begin
flag_need_sub<=0;
if(i_choose==2'b00)begin
reg_segs0<=reg_segs0-4'd1;
end else if (i_choose==2'b01) begin
reg_segs1<=reg_segs0-4'd1;
end else if (i_choose==2'b10) begin
reg_mins0<=reg_mins0-4'd1;
end else begin //(i_choose==2'b11)
reg_mins1<=reg_mins1-4'd1;
end
end
/* end else if (BU && i_run==1'd0) begin
reg_segs0<=reg_segs0;
reg_segs1<=reg_segs1;
reg_mins0<=reg_mins0;
reg_mins1<=reg_mins1;
if (i_choose == 2'b00) begin
reg_segs0 <= reg_segs0 + 1'b1;
end else if (i_choose==2'b01) begin
reg_segs1 <= reg_segs1 + 1'b1;
end else if (i_choose==2'b10) begin
reg_mins0 <= reg_mins0 + 1'b1;
end else begin //(i_choose==2'b11)
reg_mins1 <= reg_mins1 + 1'b1;
end
end*/
/* end else if (BD && i_run==1'd0) begin
if (i_choose == 2'b00) begin
reg_segs0 <= reg_segs0 - 1'b1;
end else if (i_choose==2'b01) begin
reg_segs1 <= reg_segs1 - 1'b1;
end else if (i_choose==2'b10) begin
reg_mins0 <= reg_mins0 - 1'b1;
end else begin //(i_choose==2'b11)
reg_mins1 <= reg_mins1 - 1'b1;
end
end
*/
end
assign o_segs0 = reg_segs0;
assign o_segs1 = reg_segs1;
assign o_mins0 = reg_mins0;
assign o_mins1 = reg_mins1;
endmodule