@@ -9,7 +9,7 @@ architecture behavior of cache_tb is
9
9
10
10
component cache is
11
11
generic (
12
- ram_size : INTEGER := 32768 ;
12
+ ram_size : INTEGER := 32768
13
13
);
14
14
port (
15
15
clock : in std_logic ;
@@ -117,6 +117,159 @@ begin
117
117
118
118
-- put your tests here
119
119
120
+ -- 1. Invalid, dirty, read, hit (Invalid^hit==>impossible)
121
+ -- 2. Invalid, dirty, read, miss (Invalid^dirty==>impossible)
122
+ -- 3. Invalid, dirty, write, hit (Invalid^hit==>impossible)
123
+ -- 4. Invalid, dirty, write, miss(Invalid^dirty==>impossible)
124
+ -- 5. Invalid, clean, read, hit (Invalid^hit==>impossible)
125
+ -- 6. Invalid, clean, read, miss
126
+ -- s_addr <= "00000000000000000000000000000001";
127
+ -- s_read <= '1';
128
+ -- s_write <= '0';
129
+ -- wait until rising_edge(s_waitrequest);
130
+ -- s_read <= '0';
131
+ -- s_write <= '0';
132
+ -- wait for clk_period;
133
+
134
+ -- 7. Invalid, clean, write, hit (Invalid^hit==>impossible)
135
+ -- 8. Invalid, clean, write, miss
136
+ -- s_addr <= "00000000000000000000000000001000";
137
+ -- s_read <= '0';
138
+ -- s_write <= '1';
139
+ -- s_writedata <= x"000000BC";
140
+ -- wait until rising_edge(s_waitrequest);
141
+ -- s_read <= '0';
142
+ -- s_write <= '0';
143
+ -- wait for clk_period;
144
+
145
+ -- 9. Valid, clean, read, hit
146
+ -- s_addr <= "00000000000000000000111111111111";
147
+ -- s_write <= '1';
148
+ -- s_writedata <= x"000F000A";
149
+ -- wait until rising_edge(s_waitrequest);
150
+ -- s_read <= '1';
151
+ -- s_write <= '0';
152
+ -- wait until rising_edge(s_waitrequest);
153
+ -- s_read <= '0';
154
+ -- s_write <= '0';
155
+ -- wait for clk_period;
156
+
157
+ -- 10. Valid, clean, read, miss
158
+ -- s_addr <= "00000000000000000000000000001010";
159
+ -- s_read <= '0';
160
+ -- s_writedata <= x"000D000C";
161
+ -- s_write <= '1';
162
+ -- wait until rising_edge(s_waitrequest);
163
+ -- s_addr <= "00000000000000000000000010001010";
164
+ -- s_read <= '1';
165
+ -- s_write <= '0';
166
+ -- wait until rising_edge(s_waitrequest);
167
+ -- s_read <= '0';
168
+ -- s_write <= '0';
169
+ -- wait for clk_period;
170
+
171
+
172
+ -- 11. Valid, clean, write, hit
173
+ -- s_addr <= "00000000000000000000000000001011";
174
+ -- s_read <= '0';
175
+ -- s_writedata <= x"000F000C";
176
+ -- s_write <= '1';
177
+ -- wait until rising_edge(s_waitrequest);
178
+ -- s_write <= '1';
179
+ -- s_read <= '0';
180
+ -- s_writedata <= x"0000000B";
181
+ -- wait until rising_edge(s_waitrequest);
182
+ -- s_write <= '0';
183
+ -- s_read <= '0';
184
+ -- wait for clk_period;
185
+
186
+ -- 12. Valid, clean, write, miss
187
+ -- s_addr <= "00000000000000000000000000001101";
188
+ -- s_read <= '0';
189
+ -- s_writedata <= x"000F000C";
190
+ -- s_write <= '1';
191
+ -- wait until rising_edge(s_waitrequest);
192
+ -- s_addr <= "00000000000000000000100000001101";
193
+ -- s_write <= '1';
194
+ -- s_read <= '0';
195
+ -- s_writedata <= x"0000000B";
196
+ -- wait until rising_edge(s_waitrequest);
197
+ -- s_write <= '0';
198
+ -- s_read <= '0';
199
+ -- wait for clk_period;
200
+
201
+ -- 13. Valid, dirty, read, hit
202
+ -- s_addr <= "00000000000000000000000000001100";
203
+ -- s_read <= '0';
204
+ -- s_writedata <= x"000F00BC";
205
+ -- s_write <= '1';
206
+ -- wait until rising_edge(s_waitrequest);
207
+ -- s_read <= '0';
208
+ -- s_writedata <= x"000F00BA";
209
+ -- s_write <= '1';
210
+ -- wait until rising_edge(s_waitrequest); -- write hit, dirty
211
+ -- s_read <= '1';
212
+ -- s_write <= '0';
213
+ -- wait until rising_edge(s_waitrequest);
214
+ -- s_write <= '0';
215
+ -- s_read <= '0';
216
+ -- wait for clk_period;
217
+
218
+ -- 14. Valid, dirty, read, miss
219
+ -- s_addr <= "00000000000000000000000000001110";
220
+ -- s_read <= '0';
221
+ -- s_writedata <= x"000F00BF";
222
+ -- s_write <= '1';
223
+ -- wait until rising_edge(s_waitrequest);
224
+ -- s_read <= '0';
225
+ -- s_writedata <= x"000F00BF";
226
+ -- s_write <= '1';
227
+ -- wait until rising_edge(s_waitrequest);
228
+ -- s_addr <= "00000000000000000000000010001110";
229
+ -- s_read <= '1';
230
+ -- s_write <= '0';
231
+ -- wait until rising_edge(s_waitrequest);
232
+ -- s_write <= '0';
233
+ -- s_read <= '0';
234
+ -- wait for clk_period;
235
+
236
+ -- 15. Valid, dirty, write, hit
237
+ -- s_addr <= "00000000000000000000000000001111";
238
+ -- s_read <= '0';
239
+ -- s_writedata <= x"000000BD";
240
+ -- s_write <= '1';
241
+ -- wait until rising_edge(s_waitrequest);
242
+ -- s_read <= '0';
243
+ -- s_writedata <= x"000F00BA";
244
+ -- s_write <= '1';
245
+ -- wait until rising_edge(s_waitrequest); -- write hit, dirty
246
+ -- s_read <= '0';
247
+ -- s_writedata <= x"000000BA"; -- write hit on the dirty
248
+ -- s_write <= '1';
249
+ -- wait until rising_edge(s_waitrequest);
250
+ -- s_write <= '0';
251
+ -- s_read <= '0';
252
+ -- wait for clk_period;
253
+
254
+ -- 16. Valid, dirty, write, miss
255
+ s_addr <= "00000000000000000000000000001111" ;
256
+ s_read <= '0' ;
257
+ s_writedata <= x"000000BD" ;
258
+ s_write <= '1' ;
259
+ wait until rising_edge (s_waitrequest);
260
+ s_read <= '0' ;
261
+ s_writedata <= x"000F00BA" ;
262
+ s_write <= '1' ;
263
+ wait until rising_edge (s_waitrequest);
264
+ s_addr <= "00000000000000000000011000001111" ;
265
+ s_read <= '0' ;
266
+ s_writedata <= x"000FF0BA" ;
267
+ s_write <= '1' ;
268
+ wait until rising_edge (s_waitrequest);
269
+ s_write <= '0' ;
270
+ s_read <= '0' ;
271
+ wait for clk_period;
272
+
120
273
end process ;
121
274
122
275
end ;
0 commit comments