合并通讯线路的交叉功能,为环网做准备
This commit is contained in:
@@ -52,6 +52,10 @@ class CommonRegisterBundle extends Bundle{
|
|||||||
val refTop = UInt(3.W)
|
val refTop = UInt(3.W)
|
||||||
val bias = UInt(2.W)
|
val bias = UInt(2.W)
|
||||||
|
|
||||||
|
val dwupEx = UInt(16.W)
|
||||||
|
val b8b4Sel = UInt(16.W)
|
||||||
|
val cdrParam = UInt(16.W)
|
||||||
|
|
||||||
|
|
||||||
val softResetCode = Vec(4, UInt(8.W))
|
val softResetCode = Vec(4, UInt(8.W))
|
||||||
|
|
||||||
@@ -295,7 +299,20 @@ abstract class InterfaceBase extends Module with RequireAsyncReset{
|
|||||||
(addr === ("h48".U(16.W) + i.U) ) -> cReg.xtal( 8*i+7,8*i+0 )
|
(addr === ("h48".U(16.W) + i.U) ) -> cReg.xtal( 8*i+7,8*i+0 )
|
||||||
}) ++
|
}) ++
|
||||||
|
|
||||||
|
|
||||||
|
((0 until 2).map{ i =>
|
||||||
|
(addr === ("h4c".U(16.W) + i.U) ) -> cReg.b8b4Sel( 8*i+7,8*i+0 )
|
||||||
|
}) ++
|
||||||
|
|
||||||
|
((0 until 2).map{ i =>
|
||||||
|
(addr === ("h4e".U(16.W) + i.U) ) -> cReg.cdrParam( 8*i+7,8*i+0 )
|
||||||
|
}) ++
|
||||||
|
|
||||||
Seq(
|
Seq(
|
||||||
|
(addr === "h4a".U ) -> cReg.dwupEx.extract(0),
|
||||||
|
(addr === "h4c".U ) -> cReg.b8b4Sel.extract(0),
|
||||||
|
(addr === "h4e".U ) -> cReg.cdrParam(7,0),
|
||||||
|
|
||||||
(addr === "h50".U ) -> cReg.anamuxSel,
|
(addr === "h50".U ) -> cReg.anamuxSel,
|
||||||
(addr === "h51".U ) -> cReg.ldo2p5,
|
(addr === "h51".U ) -> cReg.ldo2p5,
|
||||||
(addr === "h52".U ) -> cReg.ldo1p1,
|
(addr === "h52".U ) -> cReg.ldo1p1,
|
||||||
@@ -1087,6 +1104,24 @@ trait InterfaceSystem{ this: InterfaceBase =>
|
|||||||
cReg.softResetCode(3) := RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h43".U )
|
cReg.softResetCode(3) := RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h43".U )
|
||||||
|
|
||||||
|
|
||||||
|
cReg.dwupEx :=
|
||||||
|
Cat(
|
||||||
|
RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h4b".U ),
|
||||||
|
RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h4a".U )
|
||||||
|
)
|
||||||
|
|
||||||
|
cReg.b8b4Sel :=
|
||||||
|
Cat(
|
||||||
|
RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h4d".U ),
|
||||||
|
RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h4c".U )
|
||||||
|
)
|
||||||
|
cReg.cdrParam :=
|
||||||
|
Cat(
|
||||||
|
RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h4f".U ),
|
||||||
|
RegEnable(dataw, 0.U(8.W), isEnW & addrw === "h4e".U )
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
cReg.intEnable :=
|
cReg.intEnable :=
|
||||||
Cat(
|
Cat(
|
||||||
1.U(1.W), //复位中断,时钟为1 //31 上电复位
|
1.U(1.W), //复位中断,时钟为1 //31 上电复位
|
||||||
|
|||||||
@@ -472,9 +472,10 @@ class MstSlvSwitch extends MstSlvSwitchBase
|
|||||||
with MstSlvSwitchMaster
|
with MstSlvSwitchMaster
|
||||||
with MstSlvSwitchSlave
|
with MstSlvSwitchSlave
|
||||||
with MstSlvSwitchWatchDog{
|
with MstSlvSwitchWatchDog{
|
||||||
|
val isDwUpEx = interface.io.cReg.dwupEx(15,8) === "h58".U && interface.io.cReg.dwupEx.extract(0)
|
||||||
|
|
||||||
|
|
||||||
|
when( ~isDwUpEx ){ //未交叉
|
||||||
when( interface.io.cReg.modeSel === false.B ){ //slave
|
when( interface.io.cReg.modeSel === false.B ){ //slave
|
||||||
when( (slaveParser.io.intHWTrig(0) | slaveParser.io.intHWTrig(1)) | interface.io.isPoReset ){ //硬件错误
|
when( (slaveParser.io.intHWTrig(0) | slaveParser.io.intHWTrig(1)) | interface.io.isPoReset ){ //硬件错误
|
||||||
io.downCDRIn.serDat := false.B
|
io.downCDRIn.serDat := false.B
|
||||||
@@ -505,6 +506,42 @@ with MstSlvSwitchWatchDog{
|
|||||||
io.dDatOut := io.downCDROut.serDat
|
io.dDatOut := io.downCDROut.serDat
|
||||||
io.uDatOut := false.B
|
io.uDatOut := false.B
|
||||||
}
|
}
|
||||||
|
} .otherwise{ //交叉
|
||||||
|
when( interface.io.cReg.modeSel === false.B ){ //slave
|
||||||
|
when( (slaveParser.io.intHWTrig(0) | slaveParser.io.intHWTrig(1)) | interface.io.isPoReset ){ //硬件错误
|
||||||
|
|
||||||
|
when( slaveParser.io.isLoop ){ //回环
|
||||||
|
io.dDatOut := io.uDatIn
|
||||||
|
io.uDatOut := false.B
|
||||||
|
io.downCDRIn.serDat := false.B
|
||||||
|
io.upCDRIn.serDat := false.B
|
||||||
|
} .otherwise{ //非回环
|
||||||
|
io.dDatOut := io.dDatIn
|
||||||
|
io.uDatOut := io.uDatIn
|
||||||
|
io.downCDRIn.serDat := false.B
|
||||||
|
io.upCDRIn.serDat := false.B
|
||||||
|
}
|
||||||
|
} .otherwise{ //无硬件错误
|
||||||
|
when( slaveParser.io.isLoop ){ //回环
|
||||||
|
io.downCDRIn.serDat := io.uDatIn
|
||||||
|
io.upCDRIn.serDat := io.downCDROut.serDat
|
||||||
|
io.uDatOut := false.B
|
||||||
|
io.dDatOut := io.upCDROut.serDat
|
||||||
|
} .otherwise{ //非回环
|
||||||
|
io.downCDRIn.serDat := io.uDatIn
|
||||||
|
io.upCDRIn.serDat := io.dDatIn
|
||||||
|
io.dDatOut := io.upCDROut.serDat
|
||||||
|
io.uDatOut := io.downCDROut.serDat
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} .otherwise{ //master
|
||||||
|
io.downCDRIn.serDat := false.B
|
||||||
|
io.upCDRIn.serDat := io.dDatIn
|
||||||
|
io.uDatOut := io.downCDROut.serDat
|
||||||
|
io.dDatOut := false.B
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user