复位将在spi写操作0x40地址任意值后16拍触发,引出为外部输出io

This commit is contained in:
Ruige Lee
2025-05-21 16:04:39 +08:00
parent f8712482ee
commit 72e725a11f
3 changed files with 35 additions and 43 deletions

View File

@@ -90,18 +90,13 @@ class SlaveRegisterBundle extends Bundle{
// }) // })
// val downTimeStamp = UInt(64.W) //下行本地时间戳寄存器
// val upTimeStamp = UInt(64.W) //上行本地时间戳寄存器
// val mstTimeStamp = UInt(64.W) //主站时间戳
// val dcSyncEnable = Bool()
// val dcSyncWidth = UInt(16.W)
val localDevIndex = UInt(16.W) val localDevIndex = UInt(16.W)
//链路寄存器组 //链路寄存器组
// val isDevOnLeft = UInt(2.W)
val isDevOnLeftModify = Bool() val isDevOnLeftModify = Bool()
val indexOfLeftDev = UInt(14.W) val indexOfLeftDev = UInt(14.W)
val isDevOnRight = UInt(2.W) val isDevOnRight = UInt(2.W)
@@ -109,15 +104,6 @@ class SlaveRegisterBundle extends Bundle{
val indexOfRightDev = UInt(14.W) val indexOfRightDev = UInt(14.W)
// val downTimeStamp = Reg(UInt(64.W)) //下行本地时间戳寄存器
// val upTimeStamp = Reg(UInt(64.W)) //上行本地时间戳寄存器
// val mstDeltaTimeStamp = Reg(UInt(32.W)); io.mstDeltaTimeStamp := mstDeltaTimeStamp //主站时间戳差值
// val mstSlvDeltaTimeStamp = Reg(UInt(32.W)) //主发从接时间差(中间变量)
// val deltaMstSlvDeltaTimeStamp = Reg(UInt(32.W)) //主差从差时间差(中间变量)
// val mstTimeStamp = UInt(64.W) //主站时间戳
val slvDeltaTime = UInt(32.W) //从站时间戳差值 val slvDeltaTime = UInt(32.W) //从站时间戳差值
val deltaFinal = UInt(32.W) //当前时间戳与主站时间差 val deltaFinal = UInt(32.W) //当前时间戳与主站时间差
val recoTimeStamp = UInt(64.W) //时钟补偿寄存器 val recoTimeStamp = UInt(64.W) //时钟补偿寄存器
@@ -133,13 +119,6 @@ class SlaveRegisterBundle extends Bundle{
// recoTimeStamp = io.timeStamp + deltaFinal
// recoTimeStamp = io.timeStamp + mstSlvDeltaTimeStamp + deltaMstSlvDeltaTimeStamp
// recoTimeStamp = io.timeStamp + mstTimeStamp - downTimeStamp + (mstDeltaTimeStamp - slvDeltaTimeStamp ) >> 1
// recoTimeStamp = io.timeStamp + mstTimeStamp - downTimeStamp + (mstDeltaTimeStamp - (upTimeStamp - downTimeStamp)) >> 1
} }
@@ -189,6 +168,8 @@ class InterfaceIO extends Bundle{
val deltaFinal = Input(UInt(32.W)) val deltaFinal = Input(UInt(32.W))
val sync = Output(Vec(4, Bool())) val sync = Output(Vec(4, Bool()))
val isSoftReset = Output(Bool())
} }
@@ -662,12 +643,7 @@ trait InterfaceSync{ this: InterfaceBase =>
cReg.timeStamp := RegNext( cReg.timeStamp + 1.U, 0.U ) cReg.timeStamp := RegNext( cReg.timeStamp + 1.U, 0.U )
cReg.mstDeltaTime := io.mstDeltaTime cReg.mstDeltaTime := io.mstDeltaTime
// Cat(
//RegEnable( dataw, 0.U, isEnW & addrw === "h1d3".U ),
//RegEnable( dataw, 0.U, isEnW & addrw === "h1d2".U ),
//RegEnable( dataw, 0.U, isEnW & addrw === "h1d1".U ),
//RegEnable( dataw, 0.U, isEnW & addrw === "h1d0".U ),
// )
// sReg.mstTimeStamp := io.mstTimeStamp // sReg.mstTimeStamp := io.mstTimeStamp
sReg.deltaFinal := io.deltaFinal sReg.deltaFinal := io.deltaFinal
@@ -727,11 +703,16 @@ trait InterfaceSync{ this: InterfaceBase =>
} }
trait InterfaceSystem{ this: InterfaceBase =>
io.isSoftReset := ShiftRegister( isEnW & addrw === "h40".U, 16, false.B, true.B )
}
class Interface extends InterfaceBase class Interface extends InterfaceBase
with InterfaceMCUop with InterfaceMCUop
with InterfaceCheckSM with InterfaceCheckSM
with InterfaceLVDSop with InterfaceLVDSop
with InterfaceSync with InterfaceSync
with InterfaceSystem
{ {

View File

@@ -43,6 +43,8 @@ class ShinTopIO extends Bundle{
val iSync = Output(Vec(4, Bool())) val iSync = Output(Vec(4, Bool()))
val oSync = Output(Vec(4, Bool())) val oSync = Output(Vec(4, Bool()))
val isSoftReset = Output(Bool())
} }
@@ -66,6 +68,8 @@ abstract class ShinTopBase extends Module{
val interface = Module(new Interface) val interface = Module(new Interface)
io.isSoftReset := interface.io.isSoftReset
downCDRIn.io.serDat := io.dDatIn downCDRIn.io.serDat := io.dDatIn
downCDRIn.io.overCLK := io.clk8x downCDRIn.io.overCLK := io.clk8x

View File

@@ -26,9 +26,11 @@ module ShinTopSpiTb(
integer spidata_file; integer spidata_file;
integer c_line; integer c_line;
wire [4:0] isSoftReset;
ShinTop s_ShinTop_Mst( ShinTop s_ShinTop_Mst(
.clock(clock), .clock(clock),
.reset(reset), .reset(reset | isSoftReset[0]),
.io_clk8x(clk8x), .io_clk8x(clk8x),
.io_dDatIn(1'b0), .io_dDatIn(1'b0),
@@ -55,13 +57,13 @@ ShinTop s_ShinTop_Mst(
.io_oqspi_csn(spi_csn[10]), .io_oqspi_csn(spi_csn[10]),
.io_rsp_valid(isResp), .io_rsp_valid(isResp),
.io_rsp_bits_isError() .io_rsp_bits_isError(),
// .io_rsp_bits_length() .io_isSoftReset(isSoftReset[0])
); );
ShinTop s_ShinTop_slv0( ShinTop s_ShinTop_slv0(
.clock(clock), .clock(clock),
.reset(reset), .reset(reset | isSoftReset[1]),
.io_clk8x(clk8x), .io_clk8x(clk8x),
.io_dDatIn(dDat_w[0]), .io_dDatIn(dDat_w[0]),
@@ -87,13 +89,13 @@ ShinTop s_ShinTop_slv0(
.io_oqspi_csn(spi_csn[11]), .io_oqspi_csn(spi_csn[11]),
.io_rsp_valid(), .io_rsp_valid(),
.io_rsp_bits_isError() .io_rsp_bits_isError(),
// .io_rsp_bits_length() .io_isSoftReset(isSoftReset[1])
); );
ShinTop s_ShinTop_slv1( ShinTop s_ShinTop_slv1(
.clock(clock), .clock(clock),
.reset(reset), .reset(reset | isSoftReset[2]),
.io_clk8x(clk8x), .io_clk8x(clk8x),
.io_dDatIn(dDat_w[1]), .io_dDatIn(dDat_w[1]),
@@ -119,13 +121,13 @@ ShinTop s_ShinTop_slv1(
.io_oqspi_csn(spi_csn[12]), .io_oqspi_csn(spi_csn[12]),
.io_rsp_valid(), .io_rsp_valid(),
.io_rsp_bits_isError() .io_rsp_bits_isError(),
// .io_rsp_bits_length() .io_isSoftReset(isSoftReset[2])
); );
ShinTop s_ShinTop_slv2( ShinTop s_ShinTop_slv2(
.clock(clock), .clock(clock),
.reset(reset), .reset(reset | isSoftReset[3]),
.io_clk8x(clk8x), .io_clk8x(clk8x),
.io_dDatIn(dDat_w[2]), .io_dDatIn(dDat_w[2]),
@@ -151,13 +153,13 @@ ShinTop s_ShinTop_slv2(
.io_oqspi_csn(spi_csn[13]), .io_oqspi_csn(spi_csn[13]),
.io_rsp_valid(), .io_rsp_valid(),
.io_rsp_bits_isError() .io_rsp_bits_isError(),
// .io_rsp_bits_length() .io_isSoftReset(isSoftReset[3])
); );
ShinTop s_ShinTop_slv3( ShinTop s_ShinTop_slv3(
.clock(clock), .clock(clock),
.reset(reset), .reset(reset | isSoftReset[4]),
.io_clk8x(clk8x), .io_clk8x(clk8x),
.io_dDatIn(dDat_w[3]), .io_dDatIn(dDat_w[3]),
@@ -183,8 +185,8 @@ ShinTop s_ShinTop_slv3(
.io_oqspi_csn(spi_csn[14]), .io_oqspi_csn(spi_csn[14]),
.io_rsp_valid(), .io_rsp_valid(),
.io_rsp_bits_isError() .io_rsp_bits_isError(),
// .io_rsp_bits_length() .io_isSoftReset(isSoftReset[4])
); );
@@ -766,6 +768,11 @@ initial begin
txBuf[6+3] = 0; //负载0x128 sync3脉冲宽度 txBuf[6+3] = 0; //负载0x128 sync3脉冲宽度
txBuf[7+3] = 0; //负载0x129 txBuf[7+3] = 0; //负载0x129
spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(2)) ); //slv2 spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(2)) ); //slv2
//复位系统
txBuf[0+3] = 8'h01;
spi_trans( (16'h40), (`SPI_WRITE), (1), (`IF_IDX(0)) );//复位主站
spi_trans( (16'h40), (`SPI_WRITE), (1), (`IF_IDX(3)) );//复位从站2
end end