产生初始化完成,传输完成,错误中断信号,宽度一个周期(10MHZ)
This commit is contained in:
@@ -30,11 +30,7 @@ val reset_calib = Input(Bool())
|
|||||||
val lvds_down_dout = Output(Bool())
|
val lvds_down_dout = Output(Bool())
|
||||||
val lvds_up_din = Input(Bool())
|
val lvds_up_din = Input(Bool())
|
||||||
|
|
||||||
val cdrErr = Output(Bool())
|
val interrupt = Output(Bool())
|
||||||
val crcErr = Output(Bool())
|
|
||||||
val linkErr = Output(Bool())
|
|
||||||
|
|
||||||
// val interrupt = Output(Bool())
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +74,7 @@ class BackBoardMstBase extends Module{ //10M
|
|||||||
val slvNum = RegInit(0.U(6.W))
|
val slvNum = RegInit(0.U(6.W))
|
||||||
val slvOffLine = RegInit(0.U(6.W))
|
val slvOffLine = RegInit(0.U(6.W))
|
||||||
val testReg = RegInit("haa55".U(16.W))
|
val testReg = RegInit("haa55".U(16.W))
|
||||||
|
val interrupt = RegInit(false.B); io.interrupt := interrupt
|
||||||
|
|
||||||
lvdsMst.io.rst_n := ~reset.asBool
|
lvdsMst.io.rst_n := ~reset.asBool
|
||||||
lvdsMst.io.reset_calib := io.reset_calib
|
lvdsMst.io.reset_calib := io.reset_calib
|
||||||
@@ -100,10 +97,10 @@ class BackBoardMstBase extends Module{ //10M
|
|||||||
mirrorUp.io.clockr := io.ides_pclk.asBool //100M
|
mirrorUp.io.clockr := io.ides_pclk.asBool //100M
|
||||||
|
|
||||||
|
|
||||||
|
when(interrupt === true.B){
|
||||||
|
interrupt := false.B
|
||||||
|
}
|
||||||
|
|
||||||
io.cdrErr := statusCDRErr
|
|
||||||
io.crcErr := statusCRCErr
|
|
||||||
io.linkErr := statusLinkErr
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,20 +131,15 @@ trait BackBoardMstFSMC{ this: BackBoardMstBase =>
|
|||||||
val regOut = Wire(UInt(16.W))
|
val regOut = Wire(UInt(16.W))
|
||||||
|
|
||||||
|
|
||||||
// val fsmcCSWRSync = ShiftRegisters( ~io.FSMC.csn & ~io.FSMC.wrn, 3, false.B, true.B )
|
|
||||||
// val fsmcCSRDSync = ShiftRegisters( ~io.FSMC.csn & ~io.FSMC.rdn, 3, false.B, true.B )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mirrorDown.io.enw := isAccessSRAM & fsmcCSSync(0) & fsmcWRSync(0)
|
||||||
mirrorDown.io.enw := isAccessSRAM & fsmcCSSync(0) & fsmcWRSync(0) //~fsmcCSWRSync(2) & fsmcCSWRSync(1)
|
|
||||||
mirrorDown.io.addrw := activeAddr
|
mirrorDown.io.addrw := activeAddr
|
||||||
mirrorDown.io.dataw := io.FSMC.ADIn
|
mirrorDown.io.dataw := io.FSMC.ADIn
|
||||||
|
|
||||||
mirrorUp.io.enr := isAccessSRAM & fsmcCSSync(0) & fsmcRDSync(0) // ~fsmcCSRDSync(2) & fsmcCSRDSync(1)
|
mirrorUp.io.enr := isAccessSRAM & fsmcCSSync(0) & fsmcRDSync(0)
|
||||||
mirrorUp.io.addrr := activeAddr
|
mirrorUp.io.addrr := activeAddr
|
||||||
|
|
||||||
|
|
||||||
io.FSMC.ADOut := Mux( isAccessReg, regOut, mirrorUp.io.datar)
|
io.FSMC.ADOut := Mux( isAccessReg, regOut, mirrorUp.io.datar)
|
||||||
|
|
||||||
regOut := Mux1H(Seq(
|
regOut := Mux1H(Seq(
|
||||||
@@ -354,8 +346,10 @@ trait BackBoardMstLVDSInitialization{ this: BackBoardMstLVDSBase =>
|
|||||||
stateCur := 8.U
|
stateCur := 8.U
|
||||||
synchCnt := 0.U
|
synchCnt := 0.U
|
||||||
} .otherwise{
|
} .otherwise{
|
||||||
|
stateCur := 14.U
|
||||||
statusInit := true.B
|
statusInit := true.B
|
||||||
ctrlInit := false.B
|
ctrlInit := false.B
|
||||||
|
interrupt := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
} .elsewhen( stateCur === 8.U ){ //synch
|
} .elsewhen( stateCur === 8.U ){ //synch
|
||||||
@@ -397,10 +391,13 @@ trait BackBoardMstLVDSInitialization{ this: BackBoardMstLVDSBase =>
|
|||||||
stateCur := 8.U
|
stateCur := 8.U
|
||||||
}
|
}
|
||||||
} .elsewhen( stateCur === 13.U ){
|
} .elsewhen( stateCur === 13.U ){
|
||||||
|
stateCur := 14.U
|
||||||
statusSynch := true.B
|
statusSynch := true.B
|
||||||
statusInit := true.B
|
statusInit := true.B
|
||||||
ctrlSynch := false.B
|
ctrlSynch := false.B
|
||||||
ctrlInit := false.B
|
ctrlInit := false.B
|
||||||
|
interrupt := true.B
|
||||||
|
} .elsewhen( stateCur === 14.U ){
|
||||||
|
|
||||||
} .elsewhen( stateCur === 15.U ){
|
} .elsewhen( stateCur === 15.U ){
|
||||||
|
|
||||||
@@ -419,8 +416,6 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
|
|||||||
|
|
||||||
val trigger = ctrlTransmit & ~RegNext(ctrlTransmit, false.B)
|
val trigger = ctrlTransmit & ~RegNext(ctrlTransmit, false.B)
|
||||||
|
|
||||||
// val ( _, trigger ) = Counter(Range( 0,1000), ctrlTransmit )
|
|
||||||
|
|
||||||
when(ctrlTransmit){
|
when(ctrlTransmit){
|
||||||
when( trigger ){ //reset
|
when( trigger ){ //reset
|
||||||
stateCur := 0.U
|
stateCur := 0.U
|
||||||
@@ -455,7 +450,9 @@ trait BackBoardMstLVDSTransmit{ this: BackBoardMstLVDSBase =>
|
|||||||
}
|
}
|
||||||
|
|
||||||
} .elsewhen( stateCur === 3.U ){
|
} .elsewhen( stateCur === 3.U ){
|
||||||
|
stateCur := 4.U
|
||||||
ctrlTransmit := false.B
|
ctrlTransmit := false.B
|
||||||
|
interrupt := true.B
|
||||||
} .otherwise{
|
} .otherwise{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -492,14 +489,17 @@ trait BackBoardMstLVDSError{ this: BackBoardMstLVDSBase =>
|
|||||||
when( lvdsMst.io.closed_loop_err ){
|
when( lvdsMst.io.closed_loop_err ){
|
||||||
slvOffLine := lvdsMst.io.link_err_location(5,0)
|
slvOffLine := lvdsMst.io.link_err_location(5,0)
|
||||||
statusLinkErr := true.B
|
statusLinkErr := true.B
|
||||||
|
interrupt := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
when( lvdsMst.io.upstream_cdr_err ){
|
when( lvdsMst.io.upstream_cdr_err ){
|
||||||
statusCDRErr := true.B
|
statusCDRErr := true.B
|
||||||
|
interrupt := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
when( lvdsMst.io.upstream_crc_valid & lvdsMst.io.upstream_crc_err ){
|
when( lvdsMst.io.upstream_crc_valid & lvdsMst.io.upstream_crc_err ){
|
||||||
statusCRCErr := true.B
|
statusCRCErr := true.B
|
||||||
|
interrupt := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ module master_top(
|
|||||||
input io_FSMC_csn,
|
input io_FSMC_csn,
|
||||||
input io_FSMC_rdn,
|
input io_FSMC_rdn,
|
||||||
input io_FSMC_wrn,
|
input io_FSMC_wrn,
|
||||||
input io_FSMC_advn
|
input io_FSMC_advn,
|
||||||
|
|
||||||
|
output interrupt
|
||||||
);
|
);
|
||||||
|
|
||||||
wire [15:0] io_FSMC_ADIn;
|
wire [15:0] io_FSMC_ADIn;
|
||||||
@@ -150,7 +152,9 @@ BackBoardMst i_BackBoardMst(
|
|||||||
.io_ides_fclk(clk_400m_a),
|
.io_ides_fclk(clk_400m_a),
|
||||||
|
|
||||||
.io_lvds_down_dout(lvds_down_dout),
|
.io_lvds_down_dout(lvds_down_dout),
|
||||||
.io_lvds_up_din(lvds_up_din)
|
.io_lvds_up_din(lvds_up_din),
|
||||||
|
|
||||||
|
.io_interrupt(interrupt)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user