-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathrotor.v
48 lines (42 loc) · 1.14 KB
/
rotor.v
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
module rotor (
input clock,
output reg [4:0] rotor1,
output reg [4:0] rotor2,
output reg [4:0] rotor3,
input reset,
input rotate,
input [2:0] rotor_type_2,
input [2:0] rotor_type_3,
input [4:0] rotor_start_1,
input [4:0] rotor_start_2,
input [4:0] rotor_start_3
);
wire knock1;
wire knock2;
reg prev_rotate = 1'b0;
reg prev_knock1 = 1'b0;
reg prev_knock2 = 1'b0;
checkKnockpoints checker3(.position(rotor3), .knockpoint(knock1), .rotor_type(rotor_type_3));
checkKnockpoints checker2(.position(rotor2), .knockpoint(knock2), .rotor_type(rotor_type_2));
always @(posedge clock)
begin
if (reset)
begin
rotor1 <= rotor_start_1;
rotor2 <= rotor_start_2;
rotor3 <= rotor_start_3;
prev_rotate <= 0;
prev_knock1 <= 0;
prev_knock2 <= 0;
end
else
begin
if ((prev_rotate==0) && (rotate==1)) rotor3 <= (rotor3 == 25) ? 0 : rotor3 + 1;
if ((prev_knock1==0) && (knock1==1)) rotor2 <= (rotor2 == 25) ? 0 : rotor2 + 1;
if ((prev_knock2==0) && (knock2==1)) rotor1 <= (rotor1 == 25) ? 0 : rotor1 + 1;
prev_rotate <= rotate;
prev_knock1 <= knock1;
prev_knock2 <= knock2;
end
end
endmodule