bug:滤波需要顺序打拍,防止边界上跳变

This commit is contained in:
Ruige Lee
2025-08-14 19:15:09 +08:00
committed by GitHub
parent 46f0ba9e19
commit 573a1ad45f

View File

@@ -83,24 +83,28 @@ trait CDRInMultiSample{ this: CDRInBase =>
for( i <- 0 until 16 ) yield {
sampleReg(i)
}
} else if (true){ //5选3 多数投票 滤波
} else if (false){ //5选3 多数投票 滤波
for( i <- 0 until 16 ) yield {
(sampleReg((i-2+16)%16) & sampleReg((i-1+16)%16) & sampleReg((i+0)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i-1+16)%16) & sampleReg((i+1)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i-1+16)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i+0)%16) & sampleReg((i+1)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i+0)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i+1)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+0)%16) & sampleReg((i+1)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+0)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+1)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-0)%16) & sampleReg((i+1)%16) & sampleReg((i+2)%16))
withClockAndReset(multiCLK((i+3)%16).asClock, reset.asBool){ RegNext(
(sampleReg((i-2+16)%16) & sampleReg((i-1+16)%16) & sampleReg((i+0)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i-1+16)%16) & sampleReg((i+1)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i-1+16)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i+0)%16) & sampleReg((i+1)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i+0)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-2+16)%16) & sampleReg((i+1)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+0)%16) & sampleReg((i+1)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+0)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+1)%16) & sampleReg((i+2)%16)) |
(sampleReg((i-0)%16) & sampleReg((i+1)%16) & sampleReg((i+2)%16))
)}
}
} else { //3选2 多数投票 滤波
for( i <- 0 until 16 ) yield {
(sampleReg((i-1+16)%16) & sampleReg((i+0)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+1)%16)) |
(sampleReg((i+0)%16) & sampleReg((i+1)%16))
withClockAndReset(multiCLK((i+2)%16).asClock, reset.asBool){ RegNext(
(sampleReg((i-1+16)%16) & sampleReg((i+0)%16)) |
(sampleReg((i-1+16)%16) & sampleReg((i+1)%16)) |
(sampleReg((i+0)%16) & sampleReg((i+1)%16))
)}
}
}
@@ -246,3 +250,4 @@ with CDRInOverSample
class MPCDRIn extends CDRInBase
with CDRInAxis
with CDRInMultiSample