-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathled.sv
More file actions
153 lines (136 loc) · 3.81 KB
/
Copy pathled.sv
File metadata and controls
153 lines (136 loc) · 3.81 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
module led(
input logic clk_i,
input logic rst_i,
input logic [15:0] sw_i,
output logic LED16_B,
output logic LED16_G,
output logic LED16_R,
output logic [7:0] an_o,
output logic ca_o,
output logic cb_o,
output logic cc_o,
output logic cd_o,
output logic ce_o,
output logic cf_o,
output logic cg_o
);
logic [5:0] red;
logic [5:0] blue;
logic [5:0] green;
logic led_red_reg;
logic led_green_reg;
logic led_blue_reg;
logic [6:0] seg;
logic [6:0] seg_reg;
logic [7:0] an_reg;
logic [7:0] an_next;
logic [5:0] cnt_my_ff;
logic [9:0] clk_div_ff;
logic [2:0] scan_cnt_ff;
logic [3:0] dc_hex_data;
logic [7:0] red_8;
logic [7:0] green_8;
logic [7:0] blue_8;
logic [23:0] hex_RGB;
assign red = {sw_i[15:11], sw_i[11]};
assign green = sw_i[10:5];
assign blue = {sw_i[4:0], sw_i[0]};
assign red_8 = {red, red[5:4]};
assign green_8 = {green, green[5:4]};
assign blue_8 = {blue, blue[5:4]};
assign hex_RGB = {red_8, green_8, blue_8};
always_ff @( posedge clk_i or negedge rst_i ) begin
if ( !rst_i )
cnt_my_ff <= 6'd0;
else
cnt_my_ff <= cnt_my_ff + 1'b1;
end
always_ff @( posedge clk_i or negedge rst_i) begin
if ( !rst_i ) begin
led_red_reg <= 1'b0;
led_green_reg <= 1'b0;
led_blue_reg <= 1'b0;
end else begin
led_red_reg <= ( cnt_my_ff < red );
led_green_reg <= ( cnt_my_ff < green );
led_blue_reg <= ( cnt_my_ff < blue );
end
end
assign LED16_R = led_red_reg;
assign LED16_G = led_green_reg;
assign LED16_B = led_blue_reg;
always_ff @( posedge clk_i or negedge rst_i ) begin
if ( !rst_i )
clk_div_ff <= 10'd0;
else
clk_div_ff <= clk_div_ff + 1;
end
always_ff @( posedge clk_i or negedge rst_i ) begin
if ( !rst_i )
scan_cnt_ff <= 3'd0;
else if( clk_div_ff == 0)
scan_cnt_ff <= scan_cnt_ff + 1;
end
always_comb begin
case ( scan_cnt_ff )
3'b000: dc_hex_data = hex_RGB[3:0];
3'b001: dc_hex_data = hex_RGB[7:4];
3'b010: dc_hex_data = hex_RGB[11:8];
3'b011: dc_hex_data = hex_RGB[15:12];
3'b100: dc_hex_data = hex_RGB[19:16];
3'b101: dc_hex_data = hex_RGB[23:20];
endcase
end
always_comb begin
case( dc_hex_data )
4'h0: seg = 7'b1000000;
4'h1: seg = 7'b1111001;
4'h2: seg = 7'b0100100;
4'h3: seg = 7'b0110000;
4'h4: seg = 7'b0011001;
4'h5: seg = 7'b0010010;
4'h6: seg = 7'b0000010;
4'h7: seg = 7'b1111000;
4'h8: seg = 7'b0000000;
4'h9: seg = 7'b0010000;
4'ha: seg = 7'b0001000;
4'hb: seg = 7'b0000011;
4'hc: seg = 7'b1000110;
4'hd: seg = 7'b0100001;
4'he: seg = 7'b0000110;
4'hf: seg = 7'b0001110;
default: seg = 7'b1111111;
endcase
end
always_ff @(posedge clk_i or negedge rst_i) begin
if (!rst_i)
seg_reg <= 7'b1111111;
else
seg_reg <= seg;
end
always_comb begin
case ( scan_cnt_ff )
3'b000: an_next = 8'b11111110;
3'b001: an_next = 8'b11111101;
3'b010: an_next = 8'b11111011;
3'b011: an_next = 8'b11110111;
3'b100: an_next = 8'b11101111;
3'b101: an_next = 8'b11011111;
default: an_next = 8'b11111111;
endcase
end
always_ff @(posedge clk_i or negedge rst_i) begin
if (!rst_i)
an_reg <= 8'b11111111;
else
an_reg <= an_next;
end
assign an_o = an_reg;
assign ca_o = seg_reg[0];
assign cb_o = seg_reg[1];
assign cc_o = seg_reg[2];
assign cd_o = seg_reg[3];
assign ce_o = seg_reg[4];
assign cf_o = seg_reg[5];
assign cg_o = seg_reg[6];
endmodule