允许修改从机寄存器访问个数

This commit is contained in:
RuigeLee
2024-03-20 16:00:42 +08:00
parent 63ec7859a6
commit d64fa778ae
2 changed files with 21 additions and 52 deletions

View File

@@ -59,6 +59,7 @@ class BackBoardMstBase extends Module{ //10M
val linkNum = RegInit(0.U(7.W)) val linkNum = RegInit(0.U(7.W))
val testReg = RegInit("haa55".U(16.W)) val testReg = RegInit("haa55".U(16.W))
val interrupt = RegInit(false.B); io.interrupt := interrupt val interrupt = RegInit(false.B); io.interrupt := interrupt
val slaveDataLength = RegInit(((8/8)*32-1).U(8.W))
lvdsMst.io.rst_n := ~reset.asBool lvdsMst.io.rst_n := ~reset.asBool
lvdsMst.io.reset_calib := io.reset_calib lvdsMst.io.reset_calib := io.reset_calib
@@ -148,6 +149,7 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
( activeAddr === 3.U) -> slvOffLine, ( activeAddr === 3.U) -> slvOffLine,
( activeAddr === 4.U) -> testReg, ( activeAddr === 4.U) -> testReg,
( activeAddr === 5.U) -> linkNum, ( activeAddr === 5.U) -> linkNum,
( activeAddr === 6.U) -> slaveDataLength,
)) ))
@@ -203,6 +205,10 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
testReg := wrRegData testReg := wrRegData
} }
when( wrRegAddr === 6.U ){
slaveDataLength := wrRegData
}
} }
} }
@@ -242,12 +248,12 @@ with BackBoardMstFSMC
val frame_info_update_en = RegInit(false.B) val frame_info_update_en = RegInit(false.B)
val slave_type_num = RegInit(0.U(8.W)) val slave_type_num = RegInit(0.U(8.W))
val slave_data_length = RegInit(0.U(8.W))
val tx_start = RegInit(false.B) val tx_start = RegInit(false.B)
lvdsMst.io.frame_info_update_en := frame_info_update_en lvdsMst.io.frame_info_update_en := frame_info_update_en
lvdsMst.io.slave_type_num := slave_type_num lvdsMst.io.slave_type_num := slave_type_num
lvdsMst.io.slave_data_length := slave_data_length lvdsMst.io.slave_data_length := slaveDataLength
lvdsMst.io.tx_start := tx_start lvdsMst.io.tx_start := tx_start
val stateCur = RegInit(15.U(4.W)) val stateCur = RegInit(15.U(4.W))
@@ -266,7 +272,6 @@ trait BackBoardMstLVDSInit{ this: BackBoardMstLVDSBase =>
frame_info_update_en := false.B frame_info_update_en := false.B
slave_type_num := 0.U slave_type_num := 0.U
slave_data_length := 0.U
tx_start := false.B tx_start := false.B
@@ -275,7 +280,7 @@ trait BackBoardMstLVDSInit{ this: BackBoardMstLVDSBase =>
frame_info_update_en := true.B frame_info_update_en := true.B
slave_type_num := Cat( "b00".U(2.W), slvNum ) slave_type_num := Cat( "b00".U(2.W), slvNum )
slave_data_length := ((8/8)*32-1).U slaveDataLength := slaveDataLength
tx_start := false.B tx_start := false.B
} .elsewhen( stateCur === 1.U ){ // tx start } .elsewhen( stateCur === 1.U ){ // tx start
@@ -322,14 +327,13 @@ trait BackBoardMstLVDSSync{ this: BackBoardMstLVDSBase =>
stateCur := 0.U stateCur := 0.U
frame_info_update_en := false.B frame_info_update_en := false.B
slave_type_num := 0.U slave_type_num := 0.U
slave_data_length := 0.U
tx_start := false.B tx_start := false.B
}.elsewhen( stateCur === 0.U ){ }.elsewhen( stateCur === 0.U ){
stateCur := 1.U stateCur := 1.U
frame_info_update_en := true.B frame_info_update_en := true.B
slave_type_num := Cat( "b01".U(2.W), slvNum ) slave_type_num := Cat( "b01".U(2.W), slvNum )
slave_data_length := ((8/8)*32-1).U slaveDataLength := slaveDataLength
tx_start := false.B tx_start := false.B
} .elsewhen( stateCur === 1.U ){ // tx start } .elsewhen( stateCur === 1.U ){ // tx start
@@ -370,7 +374,6 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
frame_info_update_en := false.B frame_info_update_en := false.B
slave_type_num := 0.U slave_type_num := 0.U
slave_data_length := 0.U
tx_start := false.B tx_start := false.B
@@ -380,7 +383,7 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
frame_info_update_en := true.B frame_info_update_en := true.B
slave_type_num := Cat( "b10".U(2.W), slvNum ) slave_type_num := Cat( "b10".U(2.W), slvNum )
slave_data_length := ((8/8)*32-1).U slaveDataLength := slaveDataLength
tx_start := false.B tx_start := false.B
} .elsewhen( stateCur === 1.U ){ // tx start } .elsewhen( stateCur === 1.U ){ // tx start

View File

@@ -47,15 +47,14 @@ abstract class BackBoardSlvBase extends Module{
trait BackBoardSlvDown{ this: BackBoardSlvBase => trait BackBoardSlvDown{ this: BackBoardSlvBase =>
val downCnt = RegInit(0.U(6.W)) val downCnt = Reg(UInt(6.W))
val downTimeoutEn = RegInit( false.B )
val downTimeoutRst = (downCnt === 0.U & lvdsSlv.io.downstream_rx_data_valid)
val ( _, downTimeout ) = Counter( Range( 0,1000 ), downTimeoutEn, downTimeoutRst )
when( lvdsSlv.io.downstream_rx_data_valid ){ when( lvdsSlv.io.downstream_rx_data_valid ){
downRegTemp(downCnt) := lvdsSlv.io.downstream_rx_data_out downRegTemp(downCnt) := lvdsSlv.io.downstream_rx_data_out
downCnt := downCnt + 1.U
} .otherwise{
downCnt := 0.U
} }
when( lvdsSlv.io.downstream_rx_crc_valid ){ when( lvdsSlv.io.downstream_rx_crc_valid ){
@@ -64,56 +63,23 @@ trait BackBoardSlvDown{ this: BackBoardSlvBase =>
} }
} }
when( downTimeout ){
downTimeoutEn := false.B
} .elsewhen( downCnt === 32.U ){
downTimeoutEn := false.B
} .elsewhen(downCnt === 0.U & lvdsSlv.io.downstream_rx_data_valid){
downTimeoutEn := true.B
}
when( downTimeout ){
downCnt := 0.U
}.elsewhen( downCnt === 32.U ){
downCnt := 0.U
}.elsewhen( lvdsSlv.io.downstream_rx_data_valid ){
downCnt := downCnt + 1.U
}
} }
trait BackBoardSlvUp{ this: BackBoardSlvBase => trait BackBoardSlvUp{ this: BackBoardSlvBase =>
val upCnt = RegInit(31.U(6.W)) val upCnt = Reg(UInt(6.W))
val upTimeoutEn = RegInit( false.B )
val upTimeoutRst = (upCnt === 0.U & lvdsSlv.io.upstream_tx_data_ready)
val ( _, upTimeout ) = Counter( Range( 0,1000 ), upTimeoutEn, upTimeoutRst )
lvdsSlv.io.upstream_tx_data_in := upReg(upCnt) lvdsSlv.io.upstream_tx_data_in := upReg(upCnt)
when( lvdsSlv.io.upstream_tx_data_ready ){
when( ~RegNext(lvdsSlv.io.upstream_tx_data_ready, false.B) ){
when( upTimeout ){
upTimeoutEn := false.B
} .elsewhen( upCnt === 31.U ){
upTimeoutEn := false.B
} .elsewhen(upCnt === 0.U & lvdsSlv.io.upstream_tx_data_ready){
upTimeoutEn := true.B
}
when( upTimeout ){
upCnt := 0.U
}.elsewhen( lvdsSlv.io.upstream_tx_data_ready ){
when(upCnt === 31.U){
upCnt := 0.U upCnt := 0.U
} .elsewhen( lvdsSlv.io.upstream_tx_data_ready ){ } .otherwise{
upCnt := upCnt + 1.U upCnt := upCnt + 1.U
} }
} }
} }