复位将在spi写操作0x40地址任意值后16拍触发,引出为外部输出io
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user