diff options
| -rw-r--r-- | src/main/scala/firrtl/passes/Passes.scala | 6 | ||||
| -rw-r--r-- | src/test/scala/firrtlTests/FeatureSpec.scala | 2 | ||||
| -rw-r--r-- | test/features/NestedSubAccessTester.fir | 27 |
3 files changed, 33 insertions, 2 deletions
diff --git a/src/main/scala/firrtl/passes/Passes.scala b/src/main/scala/firrtl/passes/Passes.scala index ef9380d3..777498d6 100644 --- a/src/main/scala/firrtl/passes/Passes.scala +++ b/src/main/scala/firrtl/passes/Passes.scala @@ -870,7 +870,11 @@ object RemoveAccesses extends Pass { case (e:ValidIf) => e map (remove_e) case (e:SIntValue) => e case (e:UIntValue) => e - case e => { + case x => { + val e = x match { + case (w:WSubAccess) => WSubAccess(w.exp,remove_e(w.index),w.tpe,w.gender) + case _ => x + } if (has_access(e)) { val rs = get_locations(e) val foo = rs.find(x => {x.guard != one}) diff --git a/src/test/scala/firrtlTests/FeatureSpec.scala b/src/test/scala/firrtlTests/FeatureSpec.scala index 33cd473f..9545dedf 100644 --- a/src/test/scala/firrtlTests/FeatureSpec.scala +++ b/src/test/scala/firrtlTests/FeatureSpec.scala @@ -6,7 +6,7 @@ import org.scalatest._ // Miscellaneous Feature Checks class FeatureSpec extends FirrtlPropSpec { - property("Nested SubAcceses should be supported!") { + property("Nested SubAccesses should be supported!") { runFirrtlTest("NestedSubAccessTester", "/features") } } diff --git a/test/features/NestedSubAccessTester.fir b/test/features/NestedSubAccessTester.fir new file mode 100644 index 00000000..36465012 --- /dev/null +++ b/test/features/NestedSubAccessTester.fir @@ -0,0 +1,27 @@ +circuit NestedSubAccessTester : + module NestedSubAccess : + input foo : UInt<1>[4] + input index : UInt<2> + output out : UInt<4> + + wire vec : UInt<4>[2] + vec[0] <= UInt(3) + vec[1] <= UInt(4) + + out <= vec[foo[index]] + + module NestedSubAccessTester : + input clk : Clock + input reset : UInt<1> + + inst dut of NestedSubAccess + + dut.foo is invalid + dut.index <= UInt(2) + dut.foo[2] <= UInt(1) + + when neq(dut.out, UInt(4)) : + printf(clk, not(reset), "Assertion failed\nTest Failed!\n") + stop(clk, not(reset), 1) + else : + stop(clk, not(reset), 0) |
