forked from nishant3101/Basys3_Seven_Segment
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSevenSegmentDisplayController.sv
executable file
·129 lines (119 loc) · 6.17 KB
/
SevenSegmentDisplayController.sv
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
`timescale 1ns / 1ps
module SevenSegmentDisplayController(
input logic clk,
[3:0]num3, [3:0]num2, [3:0]num1, [3:0]num0, [3:0]dpSelector,
output logic [3:0]anode, [6:0]cathode, dp
);
logic [6:0]cathodeTemp;
logic [3:0]anodeTemp;
logic dpTemp;
logic [20:0]counter;
always_ff @(posedge clk)
begin
counter <= counter + 1;
end
always @(*)
begin
case(counter[20:19])
2'b00:
begin
case(num0)
4'b0000 : cathodeTemp = 7'b1000000; //to display 0
4'b0001 : cathodeTemp = 7'b1111001; //to display 1
4'b0010 : cathodeTemp = 7'b0100100; //to display 2
4'b0011 : cathodeTemp = 7'b0110000; //to display 3
4'b0100 : cathodeTemp = 7'b0011001; //to display 4
4'b0101 : cathodeTemp = 7'b0010010; //to display 5
4'b0110 : cathodeTemp = 7'b0000010; //to display 6
4'b0111 : cathodeTemp = 7'b1111000; //to display 7
4'b1000 : cathodeTemp = 7'b0000000; //to display 8
4'b1001 : cathodeTemp = 7'b0010000; //to display 9
4'b1010 : cathodeTemp = 7'b0001000; //to display A
4'b1011 : cathodeTemp = 7'b0000011; //to display B
4'b1100 : cathodeTemp = 7'b1000110; //to display C
4'b1101 : cathodeTemp = 7'b0100001; //to display D
4'b1110 : cathodeTemp = 7'b0000110; //to display E
4'b1111 : cathodeTemp = 7'b0001110; //to display F
//default : cathodeTemp = 7'b0111111; //dash (in case of future modifications)
endcase
anodeTemp <= 4'b1110;
dpTemp <= ~dpSelector[0];
end
2'b01:
begin
case(num1)
4'b0000 : cathodeTemp = 7'b1000000; //to display 0
4'b0001 : cathodeTemp = 7'b1111001; //to display 1
4'b0010 : cathodeTemp = 7'b0100100; //to display 2
4'b0011 : cathodeTemp = 7'b0110000; //to display 3
4'b0100 : cathodeTemp = 7'b0011001; //to display 4
4'b0101 : cathodeTemp = 7'b0010010; //to display 5
4'b0110 : cathodeTemp = 7'b0000010; //to display 6
4'b0111 : cathodeTemp = 7'b1111000; //to display 7
4'b1000 : cathodeTemp = 7'b0000000; //to display 8
4'b1001 : cathodeTemp = 7'b0010000; //to display 9
4'b1010 : cathodeTemp = 7'b0001000; //to display A
4'b1011 : cathodeTemp = 7'b0000011; //to display B
4'b1100 : cathodeTemp = 7'b1000110; //to display C
4'b1101 : cathodeTemp = 7'b0100001; //to display D
4'b1110 : cathodeTemp = 7'b0000110; //to display E
4'b1111 : cathodeTemp = 7'b0001110; //to display F
//default : cathodeTemp = 7'b0111111; //dash (in case of future modifications)
endcase
anodeTemp <= 4'b1101;
dpTemp <= ~dpSelector[1];
end
2'b10:
begin
case(num2)
4'b0000 : cathodeTemp = 7'b1000000; //to display 0
4'b0001 : cathodeTemp = 7'b1111001; //to display 1
4'b0010 : cathodeTemp = 7'b0100100; //to display 2
4'b0011 : cathodeTemp = 7'b0110000; //to display 3
4'b0100 : cathodeTemp = 7'b0011001; //to display 4
4'b0101 : cathodeTemp = 7'b0010010; //to display 5
4'b0110 : cathodeTemp = 7'b0000010; //to display 6
4'b0111 : cathodeTemp = 7'b1111000; //to display 7
4'b1000 : cathodeTemp = 7'b0000000; //to display 8
4'b1001 : cathodeTemp = 7'b0010000; //to display 9
4'b1010 : cathodeTemp = 7'b0001000; //to display A
4'b1011 : cathodeTemp = 7'b0000011; //to display B
4'b1100 : cathodeTemp = 7'b1000110; //to display C
4'b1101 : cathodeTemp = 7'b0100001; //to display D
4'b1110 : cathodeTemp = 7'b0000110; //to display E
4'b1111 : cathodeTemp = 7'b0001110; //to display F
//default : cathodeTemp = 7'b0111111; //dash (in case of future modifications)
endcase
anodeTemp <= 4'b1011;
dpTemp <= ~dpSelector[2];
end
2'b11:
begin
case(num3)
4'b0000 : cathodeTemp = 7'b1000000; //to display 0
4'b0001 : cathodeTemp = 7'b1111001; //to display 1
4'b0010 : cathodeTemp = 7'b0100100; //to display 2
4'b0011 : cathodeTemp = 7'b0110000; //to display 3
4'b0100 : cathodeTemp = 7'b0011001; //to display 4
4'b0101 : cathodeTemp = 7'b0010010; //to display 5
4'b0110 : cathodeTemp = 7'b0000010; //to display 6
4'b0111 : cathodeTemp = 7'b1111000; //to display 7
4'b1000 : cathodeTemp = 7'b0000000; //to display 8
4'b1001 : cathodeTemp = 7'b0010000; //to display 9
4'b1010 : cathodeTemp = 7'b0001000; //to display A
4'b1011 : cathodeTemp = 7'b0000011; //to display B
4'b1100 : cathodeTemp = 7'b1000110; //to display C
4'b1101 : cathodeTemp = 7'b0100001; //to display D
4'b1110 : cathodeTemp = 7'b0000110; //to display E
4'b1111 : cathodeTemp = 7'b0001110; //to display F
//default : cathodeTemp = 7'b0111111; //dash (in case of future modifications)
endcase
anodeTemp <= 4'b0111;
dpTemp <= ~dpSelector[3];
end
endcase
end
assign anode = anodeTemp;
assign cathode = cathodeTemp;
assign dp = dpTemp;
endmodule