原功能保持不变,增加单播

This commit is contained in:
RuigeLee
2024-04-03 10:40:29 +08:00
parent b599d885cf
commit d3a17e50c2

View File

@@ -53,6 +53,7 @@ class BackBoardMstBase extends Module{ //10M
assert( ~(mirrorReg.io.enwB & mirrorReg.io.enrB) ) assert( ~(mirrorReg.io.enwB & mirrorReg.io.enrB) )
val ctrlTransmit = RegInit( false.B ) val ctrlTransmit = RegInit( false.B )
val ctrlUnicast = RegInit( false.B )
val ctrlSynch = RegInit( false.B ) val ctrlSynch = RegInit( false.B )
val ctrlInit = RegInit( false.B ) val ctrlInit = RegInit( false.B )
@@ -141,6 +142,10 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
when( mirrorReg.io.datarB === 5.U ){ when( mirrorReg.io.datarB === 5.U ){
ctrlTransmit := true.B ctrlTransmit := true.B
} }
when( mirrorReg.io.datarB === 6.U ){
ctrlUnicast := true.B
}
} }
} }
@@ -422,32 +427,95 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
} }
val addrr = RegInit(0.U(11.W))
val addrw = RegInit(0.U(11.W))
when( isTransStart ){
addrw := 0.U
} .elsewhen( lvdsMst.io.rx_data_valid & ctrlTransmit){
assert( (stateCur === 5.U) || (stateCur === 6.U) )
addrw := addrw + 1.U
}
when( isTransStart ){
addrr := 0.U
} .elsewhen( lvdsMst.io.tx_data_ready & ctrlTransmit){
addrr := addrr + 1.U
}
mirrorDown.io.enr := (stateCur === 4.U || stateCur === 5.U) & ctrlTransmit
lvdsMst.io.tx_data_in := mirrorDown.io.datar
mirrorDown.io.addrr := addrr
mirrorUp.io.enw := lvdsMst.io.rx_data_valid & ctrlTransmit
mirrorUp.io.dataw := lvdsMst.io.rx_data_out
mirrorUp.io.addrw := addrw
} }
trait BackBoardMstLVDSUnicast{ this: BackBoardMstLVDSBase =>
val isUnicast = ctrlUnicast & ~RegNext(ctrlUnicast, false.B)
when(ctrlUnicast){
when( isUnicast ){ //reset
stateCur := 0.U
frame_info_update_en := false.B
slave_type_num := 0.U
tx_start := false.B
} .elsewhen( stateCur === 0.U ){ //statusUnicast
stateCur := 1.U
mirrorReg.io.addrB := 13.U
mirrorReg.io.datawB := 0.U
mirrorReg.io.enwB := true.B
} .elsewhen( stateCur === 1.U ){ //slvnum
stateCur := 2.U
mirrorReg.io.addrB := 2.U
mirrorReg.io.enrB := true.B
} .elsewhen( stateCur === 2.U ){ //slaveDataLength
stateCur := 3.U
//lock slvNum
slvNum := mirrorReg.io.datarB
mirrorReg.io.addrB := 6.U
mirrorReg.io.enrB := true.B
} .elsewhen( stateCur === 3.U ){ //setting
stateCur := 4.U
//lock slaveDataLength
slaveDataLength := mirrorReg.io.datarB
frame_info_update_en := true.B
slave_type_num := Cat( "b11".U(2.W), slvNum )
// slaveDataLength := slaveDataLength
tx_start := false.B
} .elsewhen( stateCur === 4.U ){ // tx start
stateCur := 5.U
frame_info_update_en := false.B
tx_start := true.B
} .elsewhen( stateCur === 5.U ){ //waiting for busy drop
tx_start := false.B
when( RegNext(lvdsMst.io.downstream_busy, false.B) & ~lvdsMst.io.downstream_busy ){
stateCur := 6.U
}
} .elsewhen( stateCur === 6.U ){
when( lvdsMst.io.upstream_crc_valid ){
stateCur := 7.U
//statusUnicast
mirrorReg.io.addrB := 13.U
mirrorReg.io.datawB := 1.U
mirrorReg.io.enwB := true.B
ctrlUnicast := false.B
interrupt := true.B
}
} .elsewhen( stateCur === 7.U ){
// stateCur := 8.U
} .otherwise{
}
}
}
trait BackBoardMstLVDSError{ this: BackBoardMstLVDSBase => trait BackBoardMstLVDSError{ this: BackBoardMstLVDSBase =>
when( lvdsMst.io.closed_loop_err ){ when( lvdsMst.io.closed_loop_err ){
@@ -488,4 +556,31 @@ class BackBoardMst extends BackBoardMstLVDSBase
with BackBoardMstLVDSInit with BackBoardMstLVDSInit
with BackBoardMstLVDSSync with BackBoardMstLVDSSync
with BackBoardMstLVDSTransmit with BackBoardMstLVDSTransmit
with BackBoardMstLVDSError with BackBoardMstLVDSUnicast
with BackBoardMstLVDSError{
val addrr = RegInit(0.U(11.W))
val addrw = RegInit(0.U(11.W))
when( isTransStart | isUnicast ){
addrw := 0.U
} .elsewhen( lvdsMst.io.rx_data_valid & (ctrlTransmit | ctrlUnicast) ){
assert( (stateCur === 5.U) || (stateCur === 6.U) )
addrw := addrw + 1.U
}
when( isTransStart | isUnicast ){
addrr := 0.U
} .elsewhen( lvdsMst.io.tx_data_ready & (ctrlTransmit | ctrlUnicast) ){
addrr := addrr + 1.U
}
mirrorDown.io.enr := (stateCur === 4.U || stateCur === 5.U) & (ctrlTransmit | ctrlUnicast)
lvdsMst.io.tx_data_in := mirrorDown.io.datar
mirrorDown.io.addrr := addrr
mirrorUp.io.enw := lvdsMst.io.rx_data_valid & (ctrlTransmit | ctrlUnicast)
mirrorUp.io.dataw := lvdsMst.io.rx_data_out
mirrorUp.io.addrw := addrw
}