-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcoin_sensor_B.v
More file actions
89 lines (84 loc) · 2.03 KB
/
coin_sensor_B.v
File metadata and controls
89 lines (84 loc) · 2.03 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
module coin_sensor_B(clk , reset, serialIn, write, penny, nickel, dime, quarter, diameter, state);
input clk , reset, serialIn, write;
output reg penny , nickel, dime, quarter;
output reg [1:0] state;
output reg [9:0] diameter;
reg flag;
reg [1:0] next_state;
always @(posedge clk)
begin
state <= next_state;
if (state == 2'b10)
begin
next_state <= 2'b00;
if (diameter >= 10'b1011111010 & diameter <= 10'b1100000101)
begin
penny <= 1'b1;
flag <= 1'b1;
end
else if (diameter >= 10'b1101010001 & diameter <= 10'b1101011100)
begin
nickel <= 1'b1;
flag <= 1'b1;
end
else if (diameter >= 10'b1011001100 & diameter <= 10'b1011010111)
begin
dime <= 1'b1;
flag <= 1'b1;
end
else if (diameter >= 10'b1111001100 & diameter <= 10'b1111010111)
quarter <= 1'b1;
flag <= 1'b1;
end
if (next_state == 2'b00)
begin
diameter <= 10'b0000000000;
penny <= 1'b0;
nickel <= 1'b0;
dime <= 1'b0;
quarter <= 1'b0;
end
if (state == 2'b01 & next_state != 2'b10)
begin
diameter <= {diameter[8:0], serialIn};
end
end
always @(reset or write)
begin
if(~reset)
begin
diameter <= 10'b0000000000;
penny <= 1'b0;
nickel <= 1'b0;
dime <= 1'b0;
quarter <= 1'b0;
next_state <= 2'b00;
end
else if (reset)
case(state)
2'b00 :
begin
if (write)
begin
next_state <= 2'b01;
end
end
2'b01 :
begin
if (~write)
begin
next_state <= 2'b10;
end
end
default :
begin
next_state <= 2'b00;
diameter <= 10'b0000000000;
penny <= 1'b0;
nickel <= 1'b0;
dime <= 1'b0;
quarter <= 1'b0;
end
endcase
end
endmodule