diff --git a/src/main/scala/backBoard/Qei.scala b/src/main/scala/backBoard/Qei.scala index 5aa2bd4..f9e0892 100644 --- a/src/main/scala/backBoard/Qei.scala +++ b/src/main/scala/backBoard/Qei.scala @@ -8,7 +8,7 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => val phaseA = for( i <- 0 until 2 ) yield { Wire(Bool()) } val phaseB = for( i <- 0 until 2 ) yield { Wire(Bool()) } val phaseZ = for( i <- 0 until 2 ) yield { Wire(Bool()) } - val counter = for( i <- 0 until 2 ) yield { Reg(UInt(32.W)) } + val counter = for( i <- 0 until 2 ) yield { Reg(UInt(33.W)) } val encordNxt = for( i <- 0 until 2 ) yield { Cat( phaseB(i), phaseA(i) ) } val encordCur = for( i <- 0 until 2 ) yield { RegNext(encordNxt(i)) } @@ -23,8 +23,6 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => val isSetValPos = for( i <- 0 until 2 ) yield { ~RegNext( isSetVal(i), false.B ) & isSetVal(i) } val isSetValNeg = for( i <- 0 until 2 ) yield { RegNext( isSetVal(i), false.B ) & ~isSetVal(i) } - - val isAdvA = for( i <- 0 until 2 ) yield { ( encordCur(i) === "b00".U & encordNxt(i) === "b01".U & mode(i).extract(1)) | ( encordCur(i) === "b01".U & encordNxt(i) === "b11".U & mode(i) =/= "b00".U ) | @@ -44,6 +42,9 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => // val isKeep = for( i <- 0 until 2 ) yield { encordCur(i) === encordNxt(i) } val isOverflow = for( i <- 0 until 2 ) yield { Wire(Bool()) } + val isCounter32Flip = for( i <- 0 until 2 ) yield { RegNext( counter(i).extract(32)) =/= counter(i).extract(32) } + val isCounter31Flip = for( i <- 0 until 2 ) yield { RegNext( counter(i).extract(31)) =/= counter(i).extract(31) } + for( i <- 0 until 2 ){ @@ -60,7 +61,7 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => when(isEnable(i)){ when(~is2Phase(i)){ //A Phase only when( RegNext( phaseA(i) ) & ~phaseA(i) ){ - when( isSetVal(i) & counter(i) === "hFFFFFFFF".U ){ + when( isSetVal(i) & isCounter32Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) + 1.U @@ -72,13 +73,13 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => } .elsewhen( isAdvA(i) ){ when( isSign(i) ) { when( invDirect(i) ){ - when( isSetVal(i) & counter(i) === "h80000000".U ){ + when( isSetVal(i) & isCounter31Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) - 1.U } } .otherwise{ - when( isSetVal(i) & counter(i) === "h7FFFFFFF".U ){ + when( isSetVal(i) & isCounter31Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) + 1.U @@ -86,13 +87,13 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => } } .otherwise{ when( invDirect(i) ){ - when( isSetVal(i) & counter(i) === 0.U ){ + when( isSetVal(i) & isCounter32Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) - 1.U } } .otherwise{ - when( isSetVal(i) & counter(i) === "hFFFFFFFF".U ){ + when( isSetVal(i) & isCounter32Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) + 1.U @@ -102,13 +103,13 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => } .elsewhen( isAdvB(i) ){ when( isSign(i) ) { when( invDirect(i) ){ - when( isSetVal(i) & counter(i) === "h7FFFFFFF".U ){ + when( isSetVal(i) & isCounter31Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) + 1.U } } .otherwise{ - when( isSetVal(i) & counter(i) === "h80000000".U ){ + when( isSetVal(i) & isCounter31Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) - 1.U @@ -116,13 +117,13 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal => } } .otherwise{ when( invDirect(i) ){ - when( isSetVal(i) & counter(i) === "hFFFFFFFF".U ){ + when( isSetVal(i) & isCounter32Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) + 1.U } } .otherwise{ - when( isSetVal(i) & counter(i) === 0.U ){ + when( isSetVal(i) & isCounter32Flip(i) ){ isOverflow(i) := true.B } .otherwise{ counter(i) := counter(i) - 1.U