opt
This commit is contained in:
@@ -143,7 +143,6 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
val TxStatusWrite = Wire(Bool())
|
val TxStatusWrite = Wire(Bool())
|
||||||
|
|
||||||
|
|
||||||
val TxValidBytesLatched = RegInit(0.U(2.W))
|
|
||||||
|
|
||||||
val TxLength = RegInit(0.U(16.W))
|
val TxLength = RegInit(0.U(16.W))
|
||||||
val LatchedTxLength = RegInit(0.U(16.W))
|
val LatchedTxLength = RegInit(0.U(16.W))
|
||||||
@@ -151,19 +150,16 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
val RxStatus = RegInit(0.U(2.W)) //[14:13]
|
val RxStatus = RegInit(0.U(2.W)) //[14:13]
|
||||||
|
|
||||||
// Synchronizing TxRetry TxDone_wb TxAbort signal (synchronized to WISHBONE clock)
|
// Synchronizing TxRetry TxDone_wb TxAbort signal (synchronized to WISHBONE clock)
|
||||||
val TxRetrySync1 = RegNext(io.TxRetry, false.B)
|
|
||||||
val TxAbortSync1 = RegNext(io.TxAbort, false.B)
|
|
||||||
val TxDoneSync1 = RegNext(io.TxDone, false.B)
|
|
||||||
|
|
||||||
val TxStartFrm_wb = RegInit(false.B)
|
val TxStartFrm_wb = RegInit(false.B)
|
||||||
val TxRetry_wb = RegNext(TxRetrySync1, false.B)
|
|
||||||
val TxAbort_wb = RegNext(TxAbortSync1, false.B)
|
|
||||||
val TxDone_wb = RegNext(TxDoneSync1, false.B)
|
|
||||||
|
|
||||||
// Generating delayed signals
|
// Generating delayed signals
|
||||||
val TxDone_wb_q = RegNext(TxDone_wb, false.B)
|
|
||||||
val TxAbort_wb_q = RegNext(TxAbort_wb, false.B)
|
val TxRetry_wb = ShiftRegisters( io.TxRetry, 3, false.B, true.B )
|
||||||
val TxRetry_wb_q = RegNext(TxRetry_wb, false.B)
|
val TxAbort_wb = ShiftRegisters( io.TxAbort, 3, false.B, true.B )
|
||||||
|
val TxDone_wb = ShiftRegisters( io.TxDone, 3, false.B, true.B )
|
||||||
|
|
||||||
val TxRetryPacket = RegInit(false.B)
|
val TxRetryPacket = RegInit(false.B)
|
||||||
val TxRetryPacket_NotCleared = RegInit(false.B)
|
val TxRetryPacket_NotCleared = RegInit(false.B)
|
||||||
val TxDonePacket = RegInit(false.B)
|
val TxDonePacket = RegInit(false.B)
|
||||||
@@ -206,16 +202,12 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
|
|
||||||
val StartRxBDRead = Wire(Bool())
|
val StartRxBDRead = Wire(Bool())
|
||||||
|
|
||||||
val TxIRQEn = Wire(Bool())
|
|
||||||
val WrapTxStatusBit = Wire(Bool())
|
|
||||||
|
|
||||||
val RxIRQEn = Wire(Bool())
|
|
||||||
val WrapRxStatusBit = Wire(Bool())
|
|
||||||
|
|
||||||
val TxValidBytes = Wire(UInt(2.W))
|
|
||||||
|
|
||||||
val TempTxBDAddress = Wire(UInt(7.W)) //[7:1]
|
|
||||||
val TempRxBDAddress = Wire(UInt(7.W)) //[7:1]
|
|
||||||
|
|
||||||
|
|
||||||
val RxStatusWrite = Wire(Bool())
|
val RxStatusWrite = Wire(Bool())
|
||||||
val RxBufferFull = Wire(Bool())
|
val RxBufferFull = Wire(Bool())
|
||||||
@@ -265,23 +257,22 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
val StartShiftWillEnd = Wire(Bool())
|
val StartShiftWillEnd = Wire(Bool())
|
||||||
|
|
||||||
val StartOccured = RegInit(false.B)
|
val StartOccured = RegInit(false.B)
|
||||||
val TxStartFrm_syncb1 = RegInit(false.B)
|
val TxStartFrm_sync2_txclk = Wire(Bool())
|
||||||
val TxStartFrm_syncb2 = RegInit(false.B)
|
val TxStartFrm_syncb1 = RegNext(TxStartFrm_sync2_txclk, false.B)
|
||||||
|
val TxStartFrm_syncb2 = RegNext(TxStartFrm_syncb1, false.B)
|
||||||
|
|
||||||
val TxFifoClear = Wire(Bool())
|
val TxFifoClear = Wire(Bool())
|
||||||
val TxBufferAlmostFull = Wire(Bool())
|
val TxBufferAlmostFull = Wire(Bool())
|
||||||
val TxBufferFull = Wire(Bool())
|
val TxBufferFull = Wire(Bool())
|
||||||
val TxBufferEmpty = Wire(Bool())
|
val TxBufferEmpty = Wire(Bool())
|
||||||
val TxBufferAlmostEmpty = Wire(Bool())
|
val TxBufferAlmostEmpty = Wire(Bool())
|
||||||
val SetReadTxDataFromMemory = Wire(Bool())
|
|
||||||
val BlockReadTxDataFromMemory = RegInit(false.B)
|
val BlockReadTxDataFromMemory = RegInit(false.B)
|
||||||
|
|
||||||
val tx_burst_en = RegInit(true.B)
|
val tx_burst_en = RegInit(true.B)
|
||||||
val rx_burst_en = RegInit(false.B)
|
val rx_burst_en = RegInit(false.B)
|
||||||
val tx_burst_cnt = RegInit(0.U(3.W))
|
val tx_burst_cnt = RegInit(0.U(3.W))
|
||||||
|
|
||||||
val ReadTxDataFromMemory_2 = Wire(Bool())
|
// val tx_burst = Wire(Bool())
|
||||||
val tx_burst = Wire(Bool())
|
|
||||||
val m_wb_cti_o = RegInit(0.U(3.W)); io.m_wb_cti_o := m_wb_cti_o // Cycle Type Identifier
|
val m_wb_cti_o = RegInit(0.U(3.W)); io.m_wb_cti_o := m_wb_cti_o // Cycle Type Identifier
|
||||||
|
|
||||||
val TxData_wb = Wire(UInt(32.W))
|
val TxData_wb = Wire(UInt(32.W))
|
||||||
@@ -317,7 +308,6 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
val ResetTxBDReady = Wire(Bool())
|
|
||||||
|
|
||||||
|
|
||||||
val cyc_cleared = RegInit(false.B)
|
val cyc_cleared = RegInit(false.B)
|
||||||
@@ -326,8 +316,7 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
val RxByteSel = Wire(UInt(4.W))
|
val RxByteSel = Wire(UInt(4.W))
|
||||||
val MasterAccessFinished = Wire(Bool())
|
val MasterAccessFinished = Wire(Bool())
|
||||||
|
|
||||||
val LatchValidBytes = RegInit(false.B)
|
|
||||||
val LatchValidBytes_q = RegNext(LatchValidBytes, false.B)
|
|
||||||
|
|
||||||
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
|
// Start: Generation of the ReadTxDataFromFifo_tck signal and synchronization to the WB_CLK_I
|
||||||
val ReadTxDataFromFifo_tck_txclk = Wire(Bool())
|
val ReadTxDataFromFifo_tck_txclk = Wire(Bool())
|
||||||
@@ -485,9 +474,7 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val ResetTxBDReady = TxDonePulse | TxAbortPulse | TxRetryPulse
|
||||||
|
|
||||||
ResetTxBDReady := TxDonePulse | TxAbortPulse | TxRetryPulse
|
|
||||||
|
|
||||||
|
|
||||||
// Latching READY status of the Tx buffer descriptor
|
// Latching READY status of the Tx buffer descriptor
|
||||||
@@ -521,8 +508,8 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
TxStatusWrite := (TxDonePacket_NotCleared | TxAbortPacket_NotCleared) & TxEn & TxEn_q & ~BlockingTxStatusWrite
|
TxStatusWrite := (TxDonePacket_NotCleared | TxAbortPacket_NotCleared) & TxEn & TxEn_q & ~BlockingTxStatusWrite
|
||||||
|
|
||||||
|
|
||||||
// Status writing must occur only once. Meanwhile it is blocked.
|
// Status writing must occur only once. Meanwhile it is blocked.
|
||||||
when(~TxDone_wb & ~TxAbort_wb){
|
when(~TxDone_wb(1) & ~TxAbort_wb(1)){
|
||||||
BlockingTxStatusWrite := false.B
|
BlockingTxStatusWrite := false.B
|
||||||
} .elsewhen(TxStatusWrite){
|
} .elsewhen(TxStatusWrite){
|
||||||
BlockingTxStatusWrite := true.B
|
BlockingTxStatusWrite := true.B
|
||||||
@@ -544,9 +531,7 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Latching status from the tx buffer descriptor
|
// Latching status from the tx buffer descriptor Data is avaliable one cycle after the access is started (at that time signal TxEn is not active)
|
||||||
// Data is avaliable one cycle after the access is started (at that time
|
|
||||||
// signal TxEn is not active)
|
|
||||||
when(TxEn & TxEn_q & TxBDRead){
|
when(TxEn & TxEn_q & TxBDRead){
|
||||||
TxStatus := Cat(txBuffDesc.irq, txBuffDesc.wr, txBuffDesc.pad, txBuffDesc.crc)
|
TxStatus := Cat(txBuffDesc.irq, txBuffDesc.wr, txBuffDesc.pad, txBuffDesc.crc)
|
||||||
}
|
}
|
||||||
@@ -604,20 +589,13 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SetReadTxDataFromMemory := TxEn & TxEn_q & TxPointerRead;
|
|
||||||
|
|
||||||
when( (TxLength === 0.U) | TxAbortPulse | TxRetryPulse){
|
when( (TxLength === 0.U) | TxAbortPulse | TxRetryPulse){
|
||||||
ReadTxDataFromMemory := false.B
|
ReadTxDataFromMemory := false.B
|
||||||
} .elsewhen(SetReadTxDataFromMemory){
|
} .elsewhen(TxEn & TxEn_q & TxPointerRead){
|
||||||
ReadTxDataFromMemory := true.B
|
ReadTxDataFromMemory := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val tx_burst = ReadTxDataFromMemory & ~BlockReadTxDataFromMemory & tx_burst_en
|
||||||
ReadTxDataFromMemory_2 := ReadTxDataFromMemory & ~BlockReadTxDataFromMemory
|
|
||||||
|
|
||||||
tx_burst := ReadTxDataFromMemory_2 & tx_burst_en
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
when((TxBufferAlmostFull | TxLength <= 4.U) & MasterWbTX & (~cyc_cleared) & (~(TxAbortPacket_NotCleared | TxRetryPacket_NotCleared))){
|
when((TxBufferAlmostFull | TxLength <= 4.U) & MasterWbTX & (~cyc_cleared) & (~(TxAbortPacket_NotCleared | TxRetryPacket_NotCleared))){
|
||||||
BlockReadTxDataFromMemory := true.B
|
BlockReadTxDataFromMemory := true.B
|
||||||
@@ -631,7 +609,7 @@ abstract class MacTileLinkBase extends Module{
|
|||||||
|
|
||||||
// Enabling master wishbone access to the memory for two devices TX and RX.
|
// Enabling master wishbone access to the memory for two devices TX and RX.
|
||||||
|
|
||||||
val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDataToMemory, MasterAccessFinished, cyc_cleared, tx_burst, rx_burst)
|
val masterStage = Cat(MasterWbTX, MasterWbRX, (ReadTxDataFromMemory & ~BlockReadTxDataFromMemory), WriteRxDataToMemory, MasterAccessFinished, cyc_cleared, tx_burst, rx_burst)
|
||||||
|
|
||||||
// Switching between two stages depends on enable signals
|
// Switching between two stages depends on enable signals
|
||||||
|
|
||||||
@@ -781,7 +759,7 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Start: Generation of the TxStartFrm_wb which is then synchronized to the MTxClk
|
// Start: Generation of the TxStartFrm_wb which is then synchronized to the MTxClk
|
||||||
when(TxBDReady & ~StartOccured & (TxBufferFull | TxLength === 0.U)){
|
when(TxBDReady & ~StartOccured & (TxBufferFull | TxLength === 0.U)){
|
||||||
TxStartFrm_wb := true.B
|
TxStartFrm_wb := true.B
|
||||||
} .elsewhen(TxStartFrm_syncb2){
|
} .elsewhen(TxStartFrm_syncb2){
|
||||||
@@ -789,7 +767,7 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// StartOccured: TxStartFrm_wb occurs only ones at the beginning. Then it's blocked.
|
// StartOccured: TxStartFrm_wb occurs only ones at the beginning. Then it's blocked.
|
||||||
when(TxStartFrm_wb){
|
when(TxStartFrm_wb){
|
||||||
StartOccured := true.B
|
StartOccured := true.B
|
||||||
} .elsewhen(ResetTxBDReady){
|
} .elsewhen(ResetTxBDReady){
|
||||||
@@ -797,14 +775,6 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val TxStartFrm_sync2_txclk = Wire(Bool())
|
|
||||||
when(true.B){
|
|
||||||
TxStartFrm_syncb1 := TxStartFrm_sync2_txclk
|
|
||||||
TxStartFrm_syncb2 := TxStartFrm_syncb1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TxEndFrm_wb: indicator of the end of frame
|
// TxEndFrm_wb: indicator of the end of frame
|
||||||
when((TxLength === 0.U) & TxBufferAlmostEmpty & io.TxUsedData){
|
when((TxLength === 0.U) & TxBufferAlmostEmpty & io.TxUsedData){
|
||||||
TxEndFrm_wb := true.B
|
TxEndFrm_wb := true.B
|
||||||
@@ -814,19 +784,15 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
|
|
||||||
// Marks which bytes are valid within the word.
|
// Marks which bytes are valid within the word.
|
||||||
TxValidBytes := Mux(TxLength < 4.U, TxLength(1,0), 0.U)
|
val TxValidBytes = Mux(TxLength < 4.U, TxLength(1,0), 0.U)
|
||||||
|
val TxValidBytesLatched = RegInit(0.U(2.W))
|
||||||
|
// val LatchValidBytes = RegNext((TxLength < 4.U) & TxBDReady, false.B)
|
||||||
|
// val LatchValidBytes_q = RegNext(LatchValidBytes, false.B)
|
||||||
when( (TxLength < 4.U) & TxBDReady){
|
|
||||||
LatchValidBytes := true.B
|
|
||||||
}.otherwise{
|
|
||||||
LatchValidBytes := false.B
|
|
||||||
}
|
|
||||||
|
|
||||||
|
val LatchValidBytes = ShiftRegisters((TxLength < 4.U) & TxBDReady, 2, false.B, true.B)
|
||||||
|
|
||||||
// Latching valid bytes
|
// Latching valid bytes
|
||||||
when(LatchValidBytes & ~LatchValidBytes_q){
|
when(LatchValidBytes(0) & ~LatchValidBytes(1)){
|
||||||
TxValidBytesLatched := TxValidBytes
|
TxValidBytesLatched := TxValidBytes
|
||||||
} .elsewhen(TxRetryPulse | TxDonePulse | TxAbortPulse){
|
} .elsewhen(TxRetryPulse | TxDonePulse | TxAbortPulse){
|
||||||
TxValidBytesLatched := 0.U
|
TxValidBytesLatched := 0.U
|
||||||
@@ -834,22 +800,19 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
|
|
||||||
// dontTouch(TxStatus)
|
// dontTouch(TxStatus)
|
||||||
TxIRQEn := TxStatus.extract(3) //[14:11]
|
val TxIRQEn = TxStatus.extract(3) //[14:11]
|
||||||
WrapTxStatusBit := TxStatus.extract(2)
|
val WrapTxStatusBit = TxStatus.extract(2)
|
||||||
io.PerPacketPad := TxStatus.extract(1)
|
io.PerPacketPad := TxStatus.extract(1)
|
||||||
io.PerPacketCrcEn := TxStatus.extract(0)
|
io.PerPacketCrcEn := TxStatus.extract(0)
|
||||||
|
|
||||||
RxIRQEn := RxStatus.extract(1) //[14:13]
|
val RxIRQEn = RxStatus.extract(1) //[14:13]
|
||||||
WrapRxStatusBit := RxStatus.extract(0)
|
val WrapRxStatusBit = RxStatus.extract(0)
|
||||||
|
|
||||||
|
|
||||||
// Temporary Tx and Rx buffer descriptor address
|
// Temporary Tx and Rx buffer descriptor address//[7:1]
|
||||||
TempTxBDAddress := Fill(7, TxStatusWrite & ~WrapTxStatusBit) & (TxBDAddress + 1.U) // Tx BD increment or wrap (last BD)
|
val TempTxBDAddress = Mux( TxStatusWrite & ~WrapTxStatusBit, (TxBDAddress + 1.U), 0.U ) // Tx BD increment or wrap (last BD)
|
||||||
|
val TempRxBDAddress = Mux( WrapRxStatusBit, io.r_TxBDNum(6,0), (RxBDAddress + 1.U) ) // Using first Rx BD / Using next Rx BD
|
||||||
|
|
||||||
TempRxBDAddress :=
|
|
||||||
( Fill(7, WrapRxStatusBit) & io.r_TxBDNum(6,0) ) | // Using first Rx BD
|
|
||||||
( Fill(7,~WrapRxStatusBit) & (RxBDAddress + 1.U)) // Using next Rx BD
|
|
||||||
// (increment address)
|
|
||||||
|
|
||||||
// Latching Tx buffer descriptor address
|
// Latching Tx buffer descriptor address
|
||||||
when(io.r_TxEn & (~r_TxEn_q)){
|
when(io.r_TxEn & (~r_TxEn_q)){
|
||||||
@@ -874,9 +837,9 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
|
|
||||||
// Signals used for various purposes
|
// Signals used for various purposes
|
||||||
TxRetryPulse := TxRetry_wb & ~TxRetry_wb_q
|
TxRetryPulse := TxRetry_wb(1) & ~TxRetry_wb(2)
|
||||||
TxDonePulse := TxDone_wb & ~TxDone_wb_q
|
TxDonePulse := TxDone_wb(1) & ~TxDone_wb(2)
|
||||||
TxAbortPulse := TxAbort_wb & ~TxAbort_wb_q
|
TxAbortPulse := TxAbort_wb(1) & ~TxAbort_wb(2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -888,9 +851,9 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
val TxAbortPacketBlocked = RegInit(false.B)
|
val TxAbortPacketBlocked = RegInit(false.B)
|
||||||
|
|
||||||
when(TxAbort_wb & (~tx_burst_en) & MasterWbTX & MasterAccessFinished &
|
when(
|
||||||
(~TxAbortPacketBlocked) | TxAbort_wb & (~MasterWbTX) &
|
TxAbort_wb(1) & (~TxAbortPacketBlocked) & MasterWbTX & (~tx_burst_en) & MasterAccessFinished |
|
||||||
(~TxAbortPacketBlocked)){
|
TxAbort_wb(1) & (~TxAbortPacketBlocked) & (~MasterWbTX) ){
|
||||||
TxAbortPacket := true.B
|
TxAbortPacket := true.B
|
||||||
} .otherwise{
|
} .otherwise{
|
||||||
TxAbortPacket := false.B
|
TxAbortPacket := false.B
|
||||||
@@ -899,13 +862,13 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
when(TxEn & TxEn_q & TxAbortPacket_NotCleared){
|
when(TxEn & TxEn_q & TxAbortPacket_NotCleared){
|
||||||
TxAbortPacket_NotCleared := false.B
|
TxAbortPacket_NotCleared := false.B
|
||||||
} .elsewhen(TxAbort_wb & (~tx_burst_en) & MasterWbTX & MasterAccessFinished &
|
} .elsewhen(
|
||||||
(~TxAbortPacketBlocked) | TxAbort_wb & (~MasterWbTX) &
|
TxAbort_wb(1) & (~TxAbortPacketBlocked) & MasterWbTX & (~tx_burst_en) & MasterAccessFinished |
|
||||||
(~TxAbortPacketBlocked)){
|
TxAbort_wb(1) & (~TxAbortPacketBlocked) & (~MasterWbTX) ){
|
||||||
TxAbortPacket_NotCleared := true.B
|
TxAbortPacket_NotCleared := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
when(~TxAbort_wb & TxAbort_wb_q){
|
when(~TxAbort_wb(1) & TxAbort_wb(2)){
|
||||||
TxAbortPacketBlocked := false.B
|
TxAbortPacketBlocked := false.B
|
||||||
} .elsewhen(TxAbortPacket){
|
} .elsewhen(TxAbortPacket){
|
||||||
TxAbortPacketBlocked := true.B
|
TxAbortPacketBlocked := true.B
|
||||||
@@ -913,14 +876,11 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
val TxRetryPacketBlocked = RegInit(false.B)
|
val TxRetryPacketBlocked = RegInit(false.B)
|
||||||
|
|
||||||
when(
|
when(
|
||||||
TxRetry_wb & ~tx_burst_en & MasterWbTX & MasterAccessFinished & ~TxRetryPacketBlocked |
|
TxRetry_wb(1) & ~TxRetryPacketBlocked & MasterWbTX & ~tx_burst_en & MasterAccessFinished |
|
||||||
TxRetry_wb & ~MasterWbTX & ~TxRetryPacketBlocked){
|
TxRetry_wb(1) & ~TxRetryPacketBlocked & ~MasterWbTX ){
|
||||||
TxRetryPacket := true.B
|
TxRetryPacket := true.B
|
||||||
} .otherwise{
|
} .otherwise{
|
||||||
TxRetryPacket := false.B
|
TxRetryPacket := false.B
|
||||||
@@ -933,13 +893,13 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
when(StartTxBDRead){
|
when(StartTxBDRead){
|
||||||
TxRetryPacket_NotCleared := false.B
|
TxRetryPacket_NotCleared := false.B
|
||||||
} .elsewhen(
|
} .elsewhen(
|
||||||
TxRetry_wb & ~tx_burst_en & MasterWbTX & MasterAccessFinished & ~TxRetryPacketBlocked |
|
TxRetry_wb(1) & ~TxRetryPacketBlocked & MasterWbTX & ~tx_burst_en & MasterAccessFinished |
|
||||||
TxRetry_wb & ~MasterWbTX & ~TxRetryPacketBlocked){
|
TxRetry_wb(1) & ~TxRetryPacketBlocked & ~MasterWbTX ){
|
||||||
TxRetryPacket_NotCleared := true.B
|
TxRetryPacket_NotCleared := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
when(~TxRetry_wb & TxRetry_wb_q){
|
when(~TxRetry_wb(1) & TxRetry_wb(2)){
|
||||||
TxRetryPacketBlocked := false.B
|
TxRetryPacketBlocked := false.B
|
||||||
} .elsewhen(TxRetryPacket){
|
} .elsewhen(TxRetryPacket){
|
||||||
TxRetryPacketBlocked := true.B
|
TxRetryPacketBlocked := true.B
|
||||||
@@ -950,8 +910,8 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
val TxDonePacketBlocked = RegInit(false.B)
|
val TxDonePacketBlocked = RegInit(false.B)
|
||||||
|
|
||||||
when(
|
when(
|
||||||
TxDone_wb & ~tx_burst_en & MasterWbTX & MasterAccessFinished & ~TxDonePacketBlocked |
|
TxDone_wb(1) & ~tx_burst_en & MasterWbTX & MasterAccessFinished & ~TxDonePacketBlocked |
|
||||||
TxDone_wb & ~MasterWbTX & ~TxDonePacketBlocked){
|
TxDone_wb(1) & ~MasterWbTX & ~TxDonePacketBlocked){
|
||||||
TxDonePacket := true.B
|
TxDonePacket := true.B
|
||||||
}.otherwise{
|
}.otherwise{
|
||||||
TxDonePacket := false.B
|
TxDonePacket := false.B
|
||||||
@@ -960,13 +920,13 @@ val masterStage = Cat(MasterWbTX, MasterWbRX, ReadTxDataFromMemory_2, WriteRxDat
|
|||||||
when(TxEn & TxEn_q & TxDonePacket_NotCleared){
|
when(TxEn & TxEn_q & TxDonePacket_NotCleared){
|
||||||
TxDonePacket_NotCleared := false.B
|
TxDonePacket_NotCleared := false.B
|
||||||
} .elsewhen(
|
} .elsewhen(
|
||||||
TxDone_wb & ~tx_burst_en & MasterWbTX & MasterAccessFinished & (~TxDonePacketBlocked) |
|
TxDone_wb(1) & ~tx_burst_en & MasterWbTX & MasterAccessFinished & (~TxDonePacketBlocked) |
|
||||||
TxDone_wb & ~MasterWbTX & (~TxDonePacketBlocked)){
|
TxDone_wb(1) & ~MasterWbTX & (~TxDonePacketBlocked)){
|
||||||
TxDonePacket_NotCleared := true.B
|
TxDonePacket_NotCleared := true.B
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
when(~TxDone_wb & TxDone_wb_q){
|
when(~TxDone_wb(1) & TxDone_wb(2)){
|
||||||
TxDonePacketBlocked := false.B
|
TxDonePacketBlocked := false.B
|
||||||
} .elsewhen(TxDonePacket){
|
} .elsewhen(TxDonePacket){
|
||||||
TxDonePacketBlocked := true.B
|
TxDonePacketBlocked := true.B
|
||||||
|
|||||||
Reference in New Issue
Block a user