@@ -8,15 +8,13 @@ class DynamicMemorySearch extends Module {
88 val wrAddr = UInt (INPUT , 3 )
99 val data = UInt (INPUT , 4 )
1010 val en = Bool (INPUT )
11- val elt = UInt (OUTPUT , 4 )
12- val target = UInt (OUTPUT , 4 )
11+ val target = UInt (OUTPUT , 3 )
1312 val done = Bool (OUTPUT )
1413 }
15- val index = Reg (init = UInt (0 , width = 3 ))
16- val list = Mem (UInt (width = 4 ), 8 )
17- val elt = list(index)
18- io.elt := elt
19- val done = ! io.en && ((elt === io.data) || (index === UInt (7 )))
14+ val index = Reg (init = UInt (0 , width = 3 ))
15+ val list = Mem (UInt (width = 4 ), 8 )
16+ val memVal = list(index)
17+ val done = ! io.en && ((memVal === io.data) || (index === UInt (7 )))
2018 when (io.isWr) {
2119 list(io.wrAddr) := io.data
2220 } .elsewhen (io.en) {
@@ -32,28 +30,28 @@ class DynamicMemorySearchTests(c: DynamicMemorySearch) extends Tester(c) {
3230 val list = Array .fill(8 ){ 0 }
3331 for (k <- 0 until 16 ) {
3432 // WRITE A WORD
35- poke(c.io.en, 0 )
33+ poke(c.io.en, 0 )
3634 poke(c.io.isWr, 1 )
3735 val wrAddr = rnd.nextInt(8 - 1 )
38- val data = rnd.nextInt(16 )
36+ val data = rnd.nextInt(15 ) + 1 // can't be 0
3937 poke(c.io.wrAddr, wrAddr)
4038 poke(c.io.data, data)
4139 step(1 )
4240 list(wrAddr) = data
4341 // SETUP SEARCH
44- // val target = rnd.nextInt(16)
45- val target = data
42+ val target = if (k> 12 ) rnd.nextInt(16 ) else data
4643 poke(c.io.isWr, 0 )
4744 poke(c.io.data, target)
48- poke(c.io.en, 1 )
45+ poke(c.io.en, 1 )
4946 step(1 )
5047 do {
5148 poke(c.io.en, 0 )
5249 step(1 )
53- peek(c.index); peek(c.io.elt)
5450 } while (peek(c.io.done) == 0 )
5551 val addr = peek(c.io.target).toInt
56- expect(addr == list.length || list(addr) == target,
57- " LOOKING FOR " + target + " FOUND " + addr)
52+ if (list contains target)
53+ expect(list(addr) == target, " LOOKING FOR " + target + " FOUND " + addr)
54+ else
55+ expect(addr== (list.length- 1 ), " LOOKING FOR " + target + " FOUND " + addr)
5856 }
5957}
0 commit comments