2024-06-11 18:29:02 +08:00
|
|
|
package BACK
|
|
|
|
|
|
|
|
|
|
import chisel3._
|
|
|
|
|
import chisel3.util._
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trait BackBoardSlvOut16{ this: BackBoardSlvLocal =>
|
|
|
|
|
|
|
|
|
|
val outRegSync = Wire(UInt(16.W))
|
|
|
|
|
|
|
|
|
|
val mthodReg = RegInit(0.U(16.W))
|
|
|
|
|
val valueReg = RegInit(0.U(16.W))
|
|
|
|
|
|
|
|
|
|
val outPin = Wire(UInt(16.W))
|
|
|
|
|
|
|
|
|
|
outPin :=
|
|
|
|
|
Mux(statusPR === 3.U, outRegSync, (mthodReg & valueReg) | (~mthodReg & outRegSync))
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-12 17:36:10 +08:00
|
|
|
trait DoutInspect{ this: BackBoardSlvLocal =>
|
|
|
|
|
val flt = IO(Input(Vec(2, Bool())))
|
|
|
|
|
val v24Det = IO(Input(Bool()))
|
|
|
|
|
val LED_ERR = IO(Output(Bool()))
|
|
|
|
|
|
|
|
|
|
LED_ERR := ~RegNext(~v24Det)
|
|
|
|
|
|
|
|
|
|
when( statusPage === 0.U ){
|
|
|
|
|
upReg(2) := Cat( 0.U(7.W), RegNext(~v24Det) )
|
|
|
|
|
upReg(3) := 0.U
|
|
|
|
|
upReg(4) := Cat( 0.U(7.W), RegNext(~flt(0)) )
|
|
|
|
|
upReg(5) := 0.U
|
|
|
|
|
upReg(6) := Cat( 0.U(7.W), RegNext(~flt(1)) )
|
|
|
|
|
upReg(7) := 0.U
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-11 18:29:02 +08:00
|
|
|
|
2025-03-12 17:36:10 +08:00
|
|
|
trait DoutInspect_Plus{ this: BackBoardSlvLocal =>
|
|
|
|
|
val flashCounter: UInt
|
|
|
|
|
|
|
|
|
|
val v24Det = IO(Input(Bool()))
|
|
|
|
|
val LED_ERR = IO(Output(Bool()))
|
|
|
|
|
|
|
|
|
|
val fin_cur = IO(Input(UInt(4.W)))
|
|
|
|
|
val fin_sel = IO(Output(UInt(3.W)))
|
|
|
|
|
val fin_clk = IO(Output(Bool()))
|
|
|
|
|
val fin_vol = IO(Input(UInt(3.W)))
|
|
|
|
|
|
|
|
|
|
val inspectCurr = for( i <- 0 until 4 ) yield { RegInit(0.U(8.W)) }
|
|
|
|
|
val finSelReg = RegInit(0.U(3.W)); fin_sel := finSelReg
|
|
|
|
|
val finClkReg = RegInit(false.B); fin_clk := finClkReg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
when(flashCounter(2,0).andR){
|
|
|
|
|
finClkReg := ~finClkReg
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
when( flashCounter(2,0).andR & finClkReg ){
|
|
|
|
|
finSelReg := finSelReg + 1.U
|
|
|
|
|
|
|
|
|
|
inspectCurr(0) := ( inspectCurr(0) & ~( 1.U(8.W) << finSelReg) ) | ( fin_cur.extract(0) << finSelReg )
|
|
|
|
|
inspectCurr(1) := ( inspectCurr(1) & ~( 1.U(8.W) << finSelReg) ) | ( fin_cur.extract(1) << finSelReg )
|
|
|
|
|
inspectCurr(2) := ( inspectCurr(2) & ~( 1.U(8.W) << finSelReg) ) | ( fin_cur.extract(2) << finSelReg )
|
|
|
|
|
inspectCurr(3) := ( inspectCurr(3) & ~( 1.U(8.W) << finSelReg) ) | ( fin_cur.extract(3) << finSelReg )
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LED_ERR := ~( RegNext(~v24Det) | ( inspectCurr.map{ (isp: UInt) => (isp =/= 0.U) }.reduce(_|_) ) | ( RegNext(fin_vol) =/= 0.U ) )
|
|
|
|
|
|
|
|
|
|
when( statusPage === 0.U ){
|
|
|
|
|
upReg(2) := Cat( 0.U(4.W), RegNext(fin_vol), RegNext(~v24Det) )
|
|
|
|
|
upReg(3) := 0.U
|
|
|
|
|
upReg(4) := inspectCurr(0)
|
|
|
|
|
upReg(5) := inspectCurr(1)
|
|
|
|
|
upReg(6) := inspectCurr(2)
|
|
|
|
|
upReg(7) := inspectCurr(3)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abstract class DOut16 extends BackBoardSlvLocal
|
2024-06-11 18:29:02 +08:00
|
|
|
with BackBoardSlvStatusPR
|
|
|
|
|
with BackBoardSlvOut16{
|
|
|
|
|
val out = IO(Output(UInt(16.W)))
|
|
|
|
|
val outReg = RegInit(0.U(16.W))
|
|
|
|
|
|
|
|
|
|
when( isCrcPass & downRegTemp(0)(3,0) === 0.U ){
|
2024-09-05 15:17:20 +08:00
|
|
|
outReg := Cat(downRegTemp(13), downRegTemp(12))
|
2024-06-11 18:29:02 +08:00
|
|
|
}
|
2024-09-05 15:17:20 +08:00
|
|
|
when( isCrcPass & downRegTemp(0)(3,0) === 0.U ){
|
|
|
|
|
mthodReg := Cat(downRegTemp(9), downRegTemp(8))
|
|
|
|
|
valueReg := Cat(downRegTemp(11), downRegTemp(10))
|
2024-06-11 18:29:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
outRegSync := RegEnable( outReg, 0.U, isUpdate )
|
|
|
|
|
|
|
|
|
|
when( statusPage === 0.U ){
|
2024-09-02 17:46:14 +08:00
|
|
|
upReg(8) := mthodReg(7,0)
|
|
|
|
|
upReg(9) := mthodReg(15,8)
|
|
|
|
|
|
|
|
|
|
upReg(10) := valueReg(7,0)
|
|
|
|
|
upReg(11) := valueReg(15,8)
|
2024-06-11 18:29:02 +08:00
|
|
|
|
2024-09-02 17:46:14 +08:00
|
|
|
upReg(12) := outReg(7,0)
|
|
|
|
|
upReg(13) := outReg(15,8)
|
2024-06-11 18:29:02 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
out := outPin
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-12 17:36:10 +08:00
|
|
|
|
|
|
|
|
class DOut16c extends DOut16 with DoutInspect
|
|
|
|
|
class DOut16p extends DOut16 with DoutInspect_Plus
|