重构逻辑关系

This commit is contained in:
RuigeLee
2024-06-26 12:31:16 +08:00
parent f32e82cd7b
commit eca0931fa3

View File

@@ -43,7 +43,7 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal =>
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) }
val isCounter31Flip = for( i <- 0 until 2 ) yield { (RegNext( counter(i).extract(31)) =/= counter(i).extract(31)) & (RegNext( counter(i).extract(32)) === counter(i).extract(32)) }
for( i <- 0 until 2 ){
@@ -61,78 +61,29 @@ trait BackBoardSlvQei{ this: BackBoardSlvLocal =>
when(isEnable(i)){
when(~is2Phase(i)){ //A Phase only
when( RegNext( phaseA(i) ) & ~phaseA(i) ){
when( isSetVal(i) & isCounter32Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
counter(i) := counter(i) + 1.U
}
}
isOverflow(i) := isSetVal(i) & isCounter32Flip(i)
} .otherwise{ //AB Phase
when( isMiss(i) ){
printf("Warning! QEI Miss one pulse!\n")
} .elsewhen( isAdvA(i) ){
when( isSign(i) ) {
when( invDirect(i) ){
when( isSetVal(i) & isCounter31Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
when( invDirect(i) ) {
when(isAdvA(i)){
counter(i) := counter(i) - 1.U
}
} .otherwise{
when( isSetVal(i) & isCounter31Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
} .elsewhen(isAdvB(i)){
counter(i) := counter(i) + 1.U
}
}
} .otherwise{
when( invDirect(i) ){
when( isSetVal(i) & isCounter32Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
counter(i) := counter(i) - 1.U
}
} .otherwise{
when( isSetVal(i) & isCounter32Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
} .otherwise{ //~invDirect(i)
when(isAdvA(i)){
counter(i) := counter(i) + 1.U
}
}
}
} .elsewhen( isAdvB(i) ){
when( isSign(i) ) {
when( invDirect(i) ){
when( isSetVal(i) & isCounter31Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
counter(i) := counter(i) + 1.U
}
} .otherwise{
when( isSetVal(i) & isCounter31Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
} .elsewhen(isAdvB(i)){
counter(i) := counter(i) - 1.U
}
}
} .otherwise{
when( invDirect(i) ){
when( isSetVal(i) & isCounter32Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
counter(i) := counter(i) + 1.U
}
} .otherwise{
when( isSetVal(i) & isCounter32Flip(i) ){
isOverflow(i) := true.B
} .otherwise{
counter(i) := counter(i) - 1.U
}
}
}
} .otherwise{
// assert( isKeep(i) )
}
isOverflow(i) :=
Mux( isSign(i), isSetVal(i) & isCounter31Flip(i), isSetVal(i) & isCounter32Flip(i) )
}
} .otherwise{ //~isEnable