@@ -205,27 +205,37 @@ class DirectionSpec extends ChiselPropSpec with Matchers {
205
205
val b = Output (Bool ())
206
206
}
207
207
208
+ val index = IO (Input (UInt (1 .W )))
209
+
208
210
// Check all permutations of Vec and Flipped.
209
- val regularVec = IO (Vec (1 , new MyBundle ))
211
+ val regularVec = IO (Vec (2 , new MyBundle ))
210
212
regularVec <> DontCare
211
213
assert(DataMirror .directionOf(regularVec.head.a) == Direction .Input )
212
214
assert(DataMirror .directionOf(regularVec.head.b) == Direction .Output )
215
+ assert(DataMirror .directionOf(regularVec(index).a) == Direction .Input )
216
+ assert(DataMirror .directionOf(regularVec(index).b) == Direction .Output )
213
217
214
- val vecFlipped = IO (Vec (1 , Flipped (new MyBundle )))
218
+ val vecFlipped = IO (Vec (2 , Flipped (new MyBundle )))
215
219
vecFlipped <> DontCare
216
220
assert(DataMirror .directionOf(vecFlipped.head.a) == Direction .Output )
217
221
assert(DataMirror .directionOf(vecFlipped.head.b) == Direction .Input )
222
+ assert(DataMirror .directionOf(vecFlipped(index).a) == Direction .Output )
223
+ assert(DataMirror .directionOf(vecFlipped(index).b) == Direction .Input )
218
224
219
- val flippedVec = IO (Flipped (Vec (1 , new MyBundle )))
225
+ val flippedVec = IO (Flipped (Vec (2 , new MyBundle )))
220
226
flippedVec <> DontCare
221
227
assert(DataMirror .directionOf(flippedVec.head.a) == Direction .Output )
222
228
assert(DataMirror .directionOf(flippedVec.head.b) == Direction .Input )
229
+ assert(DataMirror .directionOf(flippedVec(index).a) == Direction .Output )
230
+ assert(DataMirror .directionOf(flippedVec(index).b) == Direction .Input )
223
231
224
232
// Flipped(Vec(Flipped())) should be equal to non-flipped.
225
- val flippedVecFlipped = IO (Flipped (Vec (1 , Flipped (new MyBundle ))))
233
+ val flippedVecFlipped = IO (Flipped (Vec (2 , Flipped (new MyBundle ))))
226
234
flippedVecFlipped <> DontCare
227
235
assert(DataMirror .directionOf(flippedVecFlipped.head.a) == Direction .Input )
228
236
assert(DataMirror .directionOf(flippedVecFlipped.head.b) == Direction .Output )
237
+ assert(DataMirror .directionOf(flippedVecFlipped(index).a) == Direction .Input )
238
+ assert(DataMirror .directionOf(flippedVecFlipped(index).b) == Direction .Output )
229
239
}
230
240
231
241
val elaborated = Driver .elaborate(() => new MyModule )
@@ -238,10 +248,10 @@ class DirectionSpec extends ChiselPropSpec with Matchers {
238
248
// Chisel Emitter formats spacing a little differently than the
239
249
// FIRRTL Emitter :-(
240
250
val s = o.replace(" {flip a" , " { flip a" )
241
- assert(s.contains(" output regularVec : { flip a : UInt<1>, b : UInt<1>}[1 ]" ))
242
- assert(s.contains(" input vecFlipped : { flip a : UInt<1>, b : UInt<1>}[1 ]" ))
243
- assert(s.contains(" input flippedVec : { flip a : UInt<1>, b : UInt<1>}[1 ]" ))
244
- assert(s.contains(" output flippedVecFlipped : { flip a : UInt<1>, b : UInt<1>}[1 ]" ))
251
+ assert(s.contains(" output regularVec : { flip a : UInt<1>, b : UInt<1>}[2 ]" ))
252
+ assert(s.contains(" input vecFlipped : { flip a : UInt<1>, b : UInt<1>}[2 ]" ))
253
+ assert(s.contains(" input flippedVec : { flip a : UInt<1>, b : UInt<1>}[2 ]" ))
254
+ assert(s.contains(" output flippedVecFlipped : { flip a : UInt<1>, b : UInt<1>}[2 ]" ))
245
255
} }
246
256
}
247
257
@@ -252,35 +262,49 @@ class DirectionSpec extends ChiselPropSpec with Matchers {
252
262
val b = Output (Bool ())
253
263
}
254
264
255
- val inputVec = IO (Vec (1 , Input (new MyBundle )))
265
+ val index = IO (Input (UInt (1 .W )))
266
+
267
+ val inputVec = IO (Vec (2 , Input (new MyBundle )))
256
268
inputVec <> DontCare
257
269
assert(DataMirror .directionOf(inputVec.head.a) == Direction .Input )
258
270
assert(DataMirror .directionOf(inputVec.head.b) == Direction .Input )
271
+ assert(DataMirror .directionOf(inputVec(index).a) == Direction .Input )
272
+ assert(DataMirror .directionOf(inputVec(index).b) == Direction .Input )
259
273
260
- val vecInput = IO (Input (Vec (1 , new MyBundle )))
274
+ val vecInput = IO (Input (Vec (2 , new MyBundle )))
261
275
vecInput <> DontCare
262
276
assert(DataMirror .directionOf(vecInput.head.a) == Direction .Input )
263
277
assert(DataMirror .directionOf(vecInput.head.b) == Direction .Input )
278
+ assert(DataMirror .directionOf(vecInput(index).a) == Direction .Input )
279
+ assert(DataMirror .directionOf(vecInput(index).b) == Direction .Input )
264
280
265
- val vecInputFlipped = IO (Input (Vec (1 , Flipped (new MyBundle ))))
281
+ val vecInputFlipped = IO (Input (Vec (2 , Flipped (new MyBundle ))))
266
282
vecInputFlipped <> DontCare
267
283
assert(DataMirror .directionOf(vecInputFlipped.head.a) == Direction .Input )
268
284
assert(DataMirror .directionOf(vecInputFlipped.head.b) == Direction .Input )
285
+ assert(DataMirror .directionOf(vecInputFlipped(index).a) == Direction .Input )
286
+ assert(DataMirror .directionOf(vecInputFlipped(index).b) == Direction .Input )
269
287
270
- val outputVec = IO (Vec (1 , Output (new MyBundle )))
288
+ val outputVec = IO (Vec (2 , Output (new MyBundle )))
271
289
outputVec <> DontCare
272
290
assert(DataMirror .directionOf(outputVec.head.a) == Direction .Output )
273
291
assert(DataMirror .directionOf(outputVec.head.b) == Direction .Output )
292
+ assert(DataMirror .directionOf(outputVec(index).a) == Direction .Output )
293
+ assert(DataMirror .directionOf(outputVec(index).b) == Direction .Output )
274
294
275
- val vecOutput = IO (Output (Vec (1 , new MyBundle )))
295
+ val vecOutput = IO (Output (Vec (2 , new MyBundle )))
276
296
vecOutput <> DontCare
277
297
assert(DataMirror .directionOf(vecOutput.head.a) == Direction .Output )
278
298
assert(DataMirror .directionOf(vecOutput.head.b) == Direction .Output )
299
+ assert(DataMirror .directionOf(vecOutput(index).a) == Direction .Output )
300
+ assert(DataMirror .directionOf(vecOutput(index).b) == Direction .Output )
279
301
280
- val vecOutputFlipped = IO (Output (Vec (1 , Flipped (new MyBundle ))))
302
+ val vecOutputFlipped = IO (Output (Vec (2 , Flipped (new MyBundle ))))
281
303
vecOutputFlipped <> DontCare
282
304
assert(DataMirror .directionOf(vecOutputFlipped.head.a) == Direction .Output )
283
305
assert(DataMirror .directionOf(vecOutputFlipped.head.b) == Direction .Output )
306
+ assert(DataMirror .directionOf(vecOutputFlipped(index).a) == Direction .Output )
307
+ assert(DataMirror .directionOf(vecOutputFlipped(index).b) == Direction .Output )
284
308
}
285
309
286
310
val elaborated = Driver .elaborate(() => new MyModule )
@@ -293,12 +317,12 @@ class DirectionSpec extends ChiselPropSpec with Matchers {
293
317
// Chisel Emitter formats spacing a little differently than the
294
318
// FIRRTL Emitter :-(
295
319
val s = o.replace(" {a" , " { a" )
296
- assert(s.contains(" input inputVec : { a : UInt<1>, b : UInt<1>}[1 ]" ))
297
- assert(s.contains(" input vecInput : { a : UInt<1>, b : UInt<1>}[1 ]" ))
298
- assert(s.contains(" input vecInputFlipped : { a : UInt<1>, b : UInt<1>}[1 ]" ))
299
- assert(s.contains(" output outputVec : { a : UInt<1>, b : UInt<1>}[1 ]" ))
300
- assert(s.contains(" output vecOutput : { a : UInt<1>, b : UInt<1>}[1 ]" ))
301
- assert(s.contains(" output vecOutputFlipped : { a : UInt<1>, b : UInt<1>}[1 ]" ))
320
+ assert(s.contains(" input inputVec : { a : UInt<1>, b : UInt<1>}[2 ]" ))
321
+ assert(s.contains(" input vecInput : { a : UInt<1>, b : UInt<1>}[2 ]" ))
322
+ assert(s.contains(" input vecInputFlipped : { a : UInt<1>, b : UInt<1>}[2 ]" ))
323
+ assert(s.contains(" output outputVec : { a : UInt<1>, b : UInt<1>}[2 ]" ))
324
+ assert(s.contains(" output vecOutput : { a : UInt<1>, b : UInt<1>}[2 ]" ))
325
+ assert(s.contains(" output vecOutputFlipped : { a : UInt<1>, b : UInt<1>}[2 ]" ))
302
326
} }
303
327
}
304
328
}
0 commit comments