package BACK import chisel3._ import chisel3.util._ class MasterRegisterBundle extends Bundle{ val isMstNSlv = Bool() val hwVersion = UInt(8.W) val hwSerial = UInt(48.W) val busRate = UInt(16.W) val isExInfoInit = Bool() val isTxReq = UInt(8.W) val txStatus = UInt(16.W) val spiSel = UInt(2.W) val isSoftReset = Bool() val encryptKey = UInt(128.W) val isEncrypt = Bool() val intEnable = UInt(8.W) val intMask = UInt(8.W) val intStatus = UInt(8.W) val upRecErrorCnt = UInt(32.W) val downRecErrorCnt = UInt(32.W) val upForwardErrorCnt = UInt(32.W) val downForwardErrorCnt = UInt(32.W) val qspiErrorCnt = UInt(32.W) val forwardCnt = UInt(32.W) val recByteCnt = UInt(32.W) val forwardByteCnt = UInt(32.W) val linkStatus = UInt(8.W) val wdtStatus = UInt(16.W) val wdtOverflow = UInt(8.W) val timeStamp = UInt(64.W) val deltaTime = UInt(32.W) } class SlaveRegisterBundle extends Bundle{ val isMstNSlv = Bool() val hwVersion = UInt(8.W) val hwSerial = UInt(48.W) val busRate = UInt(16.W) val RAMSize = UInt(8.W) val MMUNum = UInt(8.W) val nodeSeqAddr = UInt(16.W) val nodeSetAddr = UInt(16.W) val spiSel = UInt(2.W) val isSoftReset = Bool() val encryptKey = UInt(128.W) val isEncrypt = Bool() val ebmmu = Vec(8, new Bundle{ val logicAddr = UInt(32.W) val length = UInt(16.W) val phyAddr = UInt(32.W) val op = UInt(2.W) val enable = Bool() }) val intStatus = UInt(16.W) val mb = Vec(8, new Bundle{ val ctrl = UInt(8.W) val status = UInt(8.W) }) val upRecErrorCnt = UInt(32.W) val downRecErrorCnt = UInt(32.W) val upForwardErrorCnt = UInt(32.W) val downForwardErrorCnt = UInt(32.W) val qspiErrorCnt = UInt(32.W) val forwardCnt = UInt(32.W) val recByteCnt = UInt(32.W) val forwardByteCnt = UInt(32.W) val linkStatus = UInt(8.W) val wdtStatus = UInt(16.W) val wdtOverflow = UInt(8.W) val timeStamp = UInt(64.W) val downTimeStamp = UInt(64.W) //下行本地时间戳寄存器 val upTimeStamp = UInt(64.W) //上行本地时间戳寄存器 val mstTimeStamp = UInt(64.W) //主站时间戳 val deltaTime = UInt(32.W) val dcSyncEnable = Bool() val dcSyncWidth = UInt(16.W) } class SPIInterfaceIO extends Bundle{ val sck = Input(Bool()) val csn = Input(Bool()) val mosi = Input(Bool()) val miso = Output(Bool()) } class InterfaceIO extends Bundle{ val spi = new SPIInterfaceIO val req = Valid(new Bundle{ val addr = UInt(16.W) val dataw = UInt(8.W) val isWRn = Bool() }) val resp = Valid(new Bundle{ datar = UInt(8.W) }) } abstract class InterfaceBase extends Module{ val io: InterfaceIO = IO(new InterfaceIO) // val softReset = Reg(Bool()) // val logicAddr = Reg(UInt(30.W)) // val logicLength = Reg(UInt(16.W)) // val phyAddr - Reg(UInt(16.W)) } class Interface extends InterfaceBase{ }