-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathselector.sv
119 lines (111 loc) · 3.23 KB
/
selector.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
module selector (clock, reset, next, GrnPixels, number);
input logic next, clock, reset;
output logic [15:0] [15:0] GrnPixels;
output logic [3:0] number;
// enum{zero, one, two, three, four, five, six, seven, eight} ns, ps;
logic [3:0] ps, ns;
parameter [3:0] zero=0, one=1,two=2, three=3, four=4, five=5, six=6, seven=7, eight=8;
always_comb
case (ps)
zero: if (next) ns = one;else ns = zero;
one: if (next) ns = two; else ns = one;
two: if (next)ns = three; else ns = two;
three: if (next)ns = four; else ns = three;
four: if (next)ns = five; else ns = four;
five: if (next)ns = six; else ns = five;
six: if (next)ns = seven; else ns = six;
seven: if (next)ns = eight; else ns = seven;
eight: if (next)ns = zero; else ns = eight;
default: ns = zero;
endcase
always_comb
case (ps)
zero: begin
GrnPixels[00] = 16'b0000000000000000;
GrnPixels[01] = 16'b0000010000100000;
GrnPixels[02] = 16'b0011010000100000;
GrnPixels[03] = 16'b0011010000100000;
GrnPixels[04] = 16'b0000010000100000;
GrnPixels[05] = 16'b0111111111111110;
GrnPixels[06] = 16'b0000010000100000;
GrnPixels[07] = 16'b0000010000100000;
GrnPixels[08] = 16'b0000010000100000;
GrnPixels[09] = 16'b0000010000100000;
GrnPixels[10] = 16'b0111111111111110;
GrnPixels[11] = 16'b0000010000100000;
GrnPixels[12] = 16'b0000010000100000;
GrnPixels[13] = 16'b0000010000100000;
GrnPixels[14] = 16'b0000010000100000;
GrnPixels[15] = 16'b0000000000000000;
end
one: begin
GrnPixels[02] = 16'b0000010110100000;
GrnPixels[03] = 16'b0000010110100000;
end
two: begin
GrnPixels[02] = 16'b0000010000101100;
GrnPixels[03] = 16'b0000010000101100;
end
three: begin
GrnPixels[02] = 16'b0000010000100000;
GrnPixels[03] = 16'b0000010000100000;
GrnPixels[07] = 16'b0011010000100000;
GrnPixels[08] = 16'b0011010000100000;
end
four: begin
GrnPixels[07] = 16'b0000010110100000;
GrnPixels[08] = 16'b0000010110100000;
end
five: begin
GrnPixels[07] = 16'b0000010000101100;
GrnPixels[08] = 16'b0000010000101100;
end
six: begin
GrnPixels[07] = 16'b0000010000100000;
GrnPixels[08] = 16'b0000010000100000;
GrnPixels[12] = 16'b0011010000100000;
GrnPixels[13] = 16'b0011010000100000;
end
seven: begin
GrnPixels[12] = 16'b0000010110100000;
GrnPixels[13] = 16'b0000010110100000;
end
eight: begin
GrnPixels[02] = 16'b0000010000100000;
GrnPixels[03] = 16'b0000010000100000;
GrnPixels[12] = 16'b0000010000101100;
GrnPixels[13] = 16'b0000010000101100;
end
default: begin
GrnPixels = '0;
end
endcase
assign number = ps;
always_ff @(posedge clock)
if (reset) begin
ps <= zero;
end
else
ps <=ns;
endmodule
module selector_testbench();
logic clock, reset, next;
logic [15:0][15:0] GrnPixels;
selector dut(clock, reset, next, GrnPixels);
// Set up the clock
parameter CLOCK_PERIOD=100;
initial begin
clock <= 0;
forever #(CLOCK_PERIOD/2) clock <= ~clock;
end
integer p;
initial begin
@(posedge clock); reset <= 1;
@(posedge clock); reset <= 0;
for (p = 0; p <9; p++) begin
@(posedge clock); next <=1;
@(posedge clock); next <=0;
end
$stop;
end
endmodule