Files
eb001/src/main/scala/backBoard/shin/ShinTop.scala

102 lines
2.2 KiB
Scala
Raw Normal View History

2025-04-24 16:18:33 +08:00
package BACK
2025-04-02 16:40:25 +08:00
2025-04-24 16:18:33 +08:00
import chisel3._
import chisel3.util._
2025-04-02 16:40:25 +08:00
2025-08-26 10:30:12 +08:00
2025-04-24 16:18:33 +08:00
class ShinTopIO extends Bundle{
2025-04-02 16:40:25 +08:00
val dDatIn = Input(Bool())
val dDatOut = Output(Bool())
val uDatIn = Input(Bool())
val uDatOut = Output(Bool())
2025-04-02 16:40:25 +08:00
val multiCLK = Input(Vec(16, Bool()))
2025-04-27 16:56:35 +08:00
2025-05-13 18:03:22 +08:00
val iqspi = new QSPIInterfaceIO
val ospi = new SSPIInterfaceIO
val oqspi = new QSPIInterfaceIO
2025-04-27 16:56:35 +08:00
val iSync = Output(Vec(4, Bool()))
val isSoftReset = Output(Bool())
2025-05-23 17:22:59 +08:00
val interrupt = Output(Bool())
2025-07-30 15:22:46 +08:00
val latchPin = Input(Vec(2, Bool()))
2025-08-08 16:28:39 +08:00
val hwSerial = Input(UInt(48.W))
val uniCode = Input(UInt(64.W))
2025-08-11 16:54:18 +08:00
val pllCtrl = Output(UInt(32.W))
val xtal = Output(UInt(12.W))
2025-08-20 19:30:49 +08:00
val anamuxSel = Output(UInt(5.W))
val ldo2p5 = Output(UInt(8.W))
val ldo1p1 = Output(UInt(8.W))
val refTop = Output(UInt(3.W))
val bias = Output(UInt(2.W))
2025-08-11 16:55:43 +08:00
val spiSel = Output(UInt(2.W))
2025-04-24 16:18:33 +08:00
}
2025-04-02 16:40:25 +08:00
2025-08-26 10:30:12 +08:00
class ShinTop extends Module with RequireAsyncReset{
2025-04-02 16:40:25 +08:00
2025-08-26 10:30:12 +08:00
downCDRIn.multiCLK := io.multiCLK
upCDRIn.multiCLK := io.multiCLK
2025-07-22 09:35:06 +08:00
val downCDROut = Module(new CDROut)
val upCDROut = Module(new CDROut)
2025-08-26 10:30:12 +08:00
val downCDRIn = Module(new MPCDRIn)
val upCDRIn = Module(new MPCDRIn)
2025-06-04 16:51:16 +08:00
2025-04-27 14:56:07 +08:00
2025-07-31 15:26:17 +08:00
when( interface.io.cReg.modeSel === false.B ){ //slave
when( (slaveParser.io.intHWTrig(0) | slaveParser.io.intHWTrig(1)) | interface.io.isPoReset ){ //硬件错误
2025-07-31 15:26:17 +08:00
downCDRIn.io.serDat := false.B
upCDRIn.io.serDat := false.B
2025-07-31 15:29:35 +08:00
when( slaveParser.io.isLoop ){ //回环
2025-07-31 15:26:17 +08:00
io.dDatOut := false.B
io.uDatOut := io.dDatIn
2025-07-31 15:29:35 +08:00
} .otherwise{ //非回环
2025-07-31 15:26:17 +08:00
io.dDatOut := io.dDatIn
io.uDatOut := io.uDatIn
}
2025-07-31 15:29:35 +08:00
} .otherwise{ //无硬件错误
when( slaveParser.io.isLoop ){ //回环
2025-07-31 15:26:17 +08:00
downCDRIn.io.serDat := io.dDatIn
upCDRIn.io.serDat := downCDROut.io.serDat
io.dDatOut := false.B
io.uDatOut := upCDROut.io.serDat
2025-07-31 15:29:35 +08:00
} .otherwise{ //非回环
2025-07-31 15:26:17 +08:00
downCDRIn.io.serDat := io.dDatIn
upCDRIn.io.serDat := io.uDatIn
io.dDatOut := downCDROut.io.serDat
io.uDatOut := upCDROut.io.serDat
}
}
} .otherwise{ //master
downCDRIn.io.serDat := false.B
upCDRIn.io.serDat := io.uDatIn
io.dDatOut := downCDROut.io.serDat
io.uDatOut := false.B
}
2025-08-26 10:30:12 +08:00
2025-07-31 15:26:17 +08:00
}
2025-08-26 10:30:12 +08:00