增加主站offset寄存器用于多个主站校准时间
This commit is contained in:
@@ -122,6 +122,7 @@ class MasterRegisterBundle extends Bundle{
|
||||
|
||||
val isRecCRCErr = UInt(4.W)
|
||||
val rplTimeStampTx = UInt(16.W)
|
||||
val timeStampOffset = UInt(64.W)
|
||||
}
|
||||
|
||||
|
||||
@@ -478,14 +479,14 @@ abstract class InterfaceBase extends Module with RequireAsyncReset{
|
||||
(addr === "h146".U ) -> cReg.syncOffset(3)(23,16),
|
||||
(addr === "h147".U ) -> cReg.syncOffset(3)(31,24),
|
||||
|
||||
// (addr === "h148".U ) -> 0.U,//cReg.localPoint(7,0),
|
||||
// (addr === "h149".U ) -> 0.U,//cReg.localPoint(15,8),
|
||||
// (addr === "h14a".U ) -> 0.U,//cReg.localPoint(23,16),
|
||||
// (addr === "h14b".U ) -> 0.U,//cReg.localPoint(31,24),
|
||||
// (addr === "h14c".U ) -> 0.U,//cReg.localPoint(39,32),
|
||||
// (addr === "h14d".U ) -> 0.U,//cReg.localPoint(47,40),
|
||||
// (addr === "h14e".U ) -> 0.U,//cReg.localPoint(55,48),
|
||||
// (addr === "h14f".U ) -> 0.U,//cReg.localPoint(63,56),
|
||||
(addr === "h148".U ) -> mReg.timeStampOffset(7,0),
|
||||
(addr === "h149".U ) -> mReg.timeStampOffset(15,8),
|
||||
(addr === "h14a".U ) -> mReg.timeStampOffset(23,16),
|
||||
(addr === "h14b".U ) -> mReg.timeStampOffset(31,24),
|
||||
(addr === "h14c".U ) -> mReg.timeStampOffset(39,32),
|
||||
(addr === "h14d".U ) -> mReg.timeStampOffset(47,40),
|
||||
(addr === "h14e".U ) -> mReg.timeStampOffset(55,48),
|
||||
(addr === "h14f".U ) -> mReg.timeStampOffset(63,56),
|
||||
|
||||
) ++
|
||||
( 0 until 128 ).map{ i =>
|
||||
@@ -788,6 +789,8 @@ trait InterfaceSync{ this: InterfaceBase =>
|
||||
cReg.syncWidth(i) := syncWidth(i)
|
||||
}
|
||||
|
||||
val timeStampOffset = RegInit(0.U(64.W)); mReg.timeStampOffset := timeStampOffset
|
||||
val timeStampOffset_WRCopy = RegInit(0.U(64.W))
|
||||
val syncPoint = RegInit("hFFFFFFFFFFFFFFFF".U(64.W)); cReg.syncPoint := syncPoint
|
||||
val syncPoint_WRCopy = RegInit("hFFFFFFFFFFFFFFFF".U(64.W))
|
||||
val syncPeroid = RegInit(0.U(32.W)); cReg.syncPeroid := syncPeroid
|
||||
@@ -839,23 +842,24 @@ trait InterfaceSync{ this: InterfaceBase =>
|
||||
syncPeroid := Cat( dataw, syncPeroid(23,0) )
|
||||
}
|
||||
|
||||
// .elsewhen( addrw === "h148".U ){
|
||||
// localPoint := Cat( localPoint(63,8), dataw )
|
||||
// } .elsewhen( addrw === "h149".U ){
|
||||
// localPoint := Cat( localPoint(63,16), dataw, localPoint(7,0) )
|
||||
// } .elsewhen( addrw === "h14a".U ){
|
||||
// localPoint := Cat( localPoint(63,24), dataw, localPoint(15,0) )
|
||||
// } .elsewhen( addrw === "h14b".U ){
|
||||
// localPoint := Cat( localPoint(63,32), dataw, localPoint(23,0) )
|
||||
// } .elsewhen( addrw === "h14c".U ){
|
||||
// localPoint := Cat( localPoint(63,40), dataw, localPoint(31,0) )
|
||||
// } .elsewhen( addrw === "h14d".U ){
|
||||
// localPoint := Cat( localPoint(63,48), dataw, localPoint(39,0) )
|
||||
// } .elsewhen( addrw === "h14e".U ){
|
||||
// localPoint := Cat( localPoint(63,56), dataw, localPoint(47,0) )
|
||||
// } .elsewhen( addrw === "h14f".U ){
|
||||
// localPoint := Cat( dataw, localPoint(55,0) )
|
||||
// }
|
||||
.elsewhen( addrw === "h148".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,8), dataw )
|
||||
} .elsewhen( addrw === "h149".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,16), dataw, timeStampOffset_WRCopy(7,0) )
|
||||
} .elsewhen( addrw === "h14a".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,24), dataw, timeStampOffset_WRCopy(15,0) )
|
||||
} .elsewhen( addrw === "h14b".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,32), dataw, timeStampOffset_WRCopy(23,0) )
|
||||
} .elsewhen( addrw === "h14c".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,40), dataw, timeStampOffset_WRCopy(31,0) )
|
||||
} .elsewhen( addrw === "h14d".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,48), dataw, timeStampOffset_WRCopy(39,0) )
|
||||
} .elsewhen( addrw === "h14e".U ){
|
||||
timeStampOffset_WRCopy := Cat( timeStampOffset_WRCopy(63,56), dataw, timeStampOffset_WRCopy(47,0) )
|
||||
} .elsewhen( addrw === "h14f".U ){
|
||||
timeStampOffset_WRCopy := Cat( dataw, timeStampOffset_WRCopy(55,0) )
|
||||
timeStampOffset := Cat( dataw, timeStampOffset_WRCopy(55,0) )
|
||||
}
|
||||
|
||||
|
||||
for( i <- 1 until 4 ){
|
||||
@@ -934,7 +938,7 @@ trait InterfaceSync{ this: InterfaceBase =>
|
||||
|
||||
sReg.deltaFinal := io.deltaFinal
|
||||
cReg.recoTimeStamp :=
|
||||
Mux(isMstMode, cReg.timeStamp,
|
||||
Mux(isMstMode, cReg.timeStamp + mReg.timeStampOffset,
|
||||
RegNext( cReg.timeStamp + sReg.deltaFinal, 0.U(64.W) )
|
||||
)
|
||||
sReg.slvDeltaTime := io.slvDeltaTime
|
||||
|
||||
Reference in New Issue
Block a user