-
Notifications
You must be signed in to change notification settings - Fork 0
/
SPI_testbench.v
216 lines (213 loc) · 11.9 KB
/
SPI_testbench.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
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
module SPI_tb;
reg [7:0] masterDataIN,slave0DataIN,slave1DataIN,slave2DataIN;
wire [7:0] masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT;
reg [1:0] slaveno;
reg enable,reset,cpha,cpol,clk;
SPI s (masterDataIN,slave0DataIN,slave1DataIN,slave2DataIN,masterDataOUT,slave0DataOUT,
slave1DataOUT,slave2DataOUT,slaveno,enable,reset,cpha,cpol,clk);
always #5 clk=~clk;
initial begin
$display("Testing case 1: sending 01101001 to slave 0 on mode 0 (cpol = 0 & cpha =0)");
enable= 1'b0;
reset= 1'b1;
slaveno = 2'b00;
cpha = 1'b0;
clk = 1'b0;
cpol = 1'b0;
masterDataIN = 8'b00000000;
slave0DataIN = 8'b00000000;
slave1DataIN = 8'b00000000;
slave2DataIN = 8'b00000000;
#5 reset = 1'b0;
masterDataIN = 8'b01101001;
slaveno = 2'b00;
#5 enable = 1'b1;
$display("masterDataOUT \t slave0DataOUT \t slave1DataOUT \t slave2DataOUT \t slaveno \t enable \t cpol \t cpha");
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 enable = 1'b0;
$display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
if (masterDataIN === slave0DataOUT) begin
$display("TEST CASE 1: TESTED OK");
end else begin
$display("TEST CASE 1: TEST FAILED");
end
$display("Testing case 2: receiving 11010110 from slave 1 on mode 1 (cpol = 0 & cpha = 1)");
slaveno = 2'b01;
cpha = 1'b1;
clk = 1'b0;
cpol = 1'b0;
#5 slave1DataIN = 8'b11010110;
#5 enable = 1'b1;
$display("masterDataOUT \t slave0DataOUT \t slave1DataOUT \t slave2DataOUT \t slaveno \t enable \t cpol \t cpha");
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 enable = 1'b0;
$display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
if (masterDataOUT === slave1DataIN) begin
$display("TEST CASE 2: TESTED OK");
end else begin
$display("TEST CASE 2: TEST FAILED");
end
$display("Testing case 3: sending 10000001 to slave 2 on mode 2 (cpol = 1 & cpha = 1)");
slaveno = 2'b10;
cpha = 1'b1;
clk = 1'b1;
cpol = 1'b1;
#5 masterDataIN = 8'b10000001;
#10 enable = 1'b1;
$display("masterDataOUT \t slave0DataOUT \t slave1DataOUT \t slave2DataOUT \t slaveno \t enable \t cpol \t cpha");
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 enable = 1'b0;
$display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
if (slave2DataOUT === masterDataIN) begin
$display("TEST CASE 3: TESTED OK");
end else begin
$display("TEST CASE 3: TEST FAILED");
end
$display("Testing case 4: receiving 11111101 from slave 0 on mode 3 (cpol = 1 & cpha = 0)");
slaveno = 2'b00;
cpha = 1'b0;
clk = 1'b1;
cpol = 1'b1;
#5 slave0DataIN = 8'b11111101;
#5 enable = 1'b1;
$display("masterDataOUT \t slave0DataOUT \t slave1DataOUT \t slave2DataOUT \t slaveno \t enable \t cpol \t cpha");
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 enable = 1'b0;
$display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
if (masterDataOUT === slave0DataIN) begin
$display("TEST CASE 4: TESTED OK");
end else begin
$display("TEST CASE 4: TEST FAILED");
end
$display("Testing case 5: sending 11100000 to slave 1 on mode 1 (cpol = 0 & cpha = 1)");
slaveno = 2'b01;
cpha = 1'b1;
clk = 1'b0;
cpol = 1'b0;
#5 masterDataIN = 8'b11100000;
#5 enable = 1'b1;
$display("masterDataOUT \t slave0DataOUT \t slave1DataOUT \t slave2DataOUT \t slaveno \t enable \t cpol \t cpha");
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 enable = 1'b0;
$display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
if (slave1DataOUT === masterDataIN) begin
$display("TEST CASE 5: TESTED OK");
end else begin
$display("TEST CASE 5: TEST FAILED");
end
$display("Testing case 6: receiving 00011000 from slave 2 on mode 0 (cpol = 0 & cpha = 0)");
slaveno = 2'b10;
cpha = 1'b0;
clk = 1'b0;
cpol = 1'b0;
#5 slave2DataIN = 8'b00011000;
#10 enable = 1'b1;
$display("masterDataOUT \t slave0DataOUT \t slave1DataOUT \t slave2DataOUT \t slaveno \t enable \t cpol \t cpha");
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10 $display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
#10
$display("%b \t %b \t %b \t %b \t %b \t %b \t %b \t %b ",
masterDataOUT,slave0DataOUT,slave1DataOUT,slave2DataOUT,slaveno,enable,cpol,cpha);
if (masterDataOUT === slave2DataIN) begin
$display("TEST CASE 6: TESTED OK");
end else begin
$display("TEST CASE 6: TEST FAILED");
end
#5 enable = 1'b0;
$finish;
end
endmodule