尝试速率配平,回环改到phy上
This commit is contained in:
@@ -48,10 +48,12 @@ class SlaveSendGen extends Module{
|
||||
|
||||
io.isError := stateCurr === STATE_ERROR
|
||||
|
||||
crc.io.isEnable :=
|
||||
crc.io.isEnable := io.send.fire & (
|
||||
stateCurr === STATE_FRAME_HEADER |
|
||||
stateCurr === STATE_SUBMSG_HEADER |
|
||||
stateCurr === STATE_SUBMSG_DATA
|
||||
stateCurr === STATE_SUBMSG_DATA
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -84,15 +86,18 @@ class SlaveSendGen extends Module{
|
||||
val lengthCnt = Reg(UInt(12.W))
|
||||
val frameLenCnt = Reg(UInt(12.W))
|
||||
|
||||
when( stateCurr === STATE_IDLE || stateCurr === STATE_FRAME_HEADER ){
|
||||
frameLenCnt := 0.U
|
||||
} .elsewhen( stateCurr === STATE_SUBMSG_HEADER || stateCurr === STATE_SUBMSG_DATA ){
|
||||
frameLenCnt := frameLenCnt + 1.U
|
||||
when( io.send.fire ){
|
||||
when( stateCurr === STATE_FRAME_HEADER ){
|
||||
frameLenCnt := 0.U
|
||||
} .elsewhen( stateCurr === STATE_SUBMSG_HEADER || stateCurr === STATE_SUBMSG_DATA ){
|
||||
frameLenCnt := frameLenCnt + 1.U
|
||||
}
|
||||
}
|
||||
|
||||
when( stateCurr === STATE_IDLE || stateCurr =/= stateNext ){
|
||||
|
||||
when( stateCurr =/= stateNext ){
|
||||
lengthCnt := 0.U
|
||||
} .otherwise{
|
||||
} .elsewhen(io.send.fire){
|
||||
lengthCnt := lengthCnt + 1.U
|
||||
}
|
||||
|
||||
@@ -109,32 +114,34 @@ class SlaveSendGen extends Module{
|
||||
|
||||
stateNext := Mux1H(Seq(
|
||||
(stateCurr === STATE_IDLE) -> Mux( io.frameReq.fire, STATE_FRAME_HEADER, STATE_IDLE ),
|
||||
(stateCurr === STATE_FRAME_HEADER) -> Mux( lengthCnt === (4-1).U, Mux(
|
||||
(stateCurr === STATE_FRAME_HEADER) -> Mux( io.send.fire, Mux( lengthCnt === (4-1).U, Mux(
|
||||
frameInfo.frameStyle === FRAME_STYLE_COMMON,
|
||||
Mux(io.subMsgReq.valid, STATE_SUBMSG_HEADER, STATE_ERROR),
|
||||
STATE_CRC ),
|
||||
STATE_FRAME_HEADER),
|
||||
(stateCurr === STATE_SUBMSG_HEADER) -> Mux( lengthCnt === (8-1).U, STATE_SUBMSG_DATA, STATE_SUBMSG_HEADER),
|
||||
(stateCurr === STATE_SUBMSG_DATA) ->
|
||||
STATE_FRAME_HEADER), STATE_FRAME_HEADER ),
|
||||
(stateCurr === STATE_SUBMSG_HEADER) -> Mux( io.send.fire, Mux( lengthCnt === (8-1).U, STATE_SUBMSG_DATA, STATE_SUBMSG_HEADER), STATE_SUBMSG_HEADER),
|
||||
(stateCurr === STATE_SUBMSG_DATA) -> Mux( io.send.fire,
|
||||
Mux( lengthCnt === subMsgInfoSel.length-1.U, //已经发送完成该子报文
|
||||
Mux( frameLenCnt === frameInfo.frameLenAim -1.U, STATE_CRC, //主报文长度达到, 进CRC
|
||||
Mux( io.subMsgReq.valid, STATE_SUBMSG_HEADER, STATE_ERROR ) ), //主报文长度未到,进下一个子报文
|
||||
STATE_SUBMSG_DATA
|
||||
),
|
||||
(stateCurr === STATE_CRC) -> Mux( lengthCnt === (4-1).U, STATE_IDLE, STATE_CRC),
|
||||
(stateCurr === STATE_ERROR) -> STATE_IDLE,
|
||||
// (stateCurr === STATE_WAIT) ->
|
||||
), STATE_SUBMSG_DATA ),
|
||||
(stateCurr === STATE_CRC) -> Mux( io.send.fire, Mux( lengthCnt === (4-1).U, STATE_IDLE, STATE_CRC ), STATE_CRC),
|
||||
(stateCurr === STATE_ERROR) -> Mux( io.send.fire, STATE_IDLE, STATE_ERROR),
|
||||
))
|
||||
|
||||
io.data(0).ready := (stateCurr === STATE_SUBMSG_DATA) & (subMsgInfoSel.source === 0.U)
|
||||
io.data(1).ready := (stateCurr === STATE_SUBMSG_DATA) & (subMsgInfoSel.source === 1.U)
|
||||
io.data(0).ready := io.send.fire & (stateCurr === STATE_SUBMSG_DATA) & (subMsgInfoSel.source === 0.U)
|
||||
io.data(1).ready := io.send.fire & (stateCurr === STATE_SUBMSG_DATA) & (subMsgInfoSel.source === 1.U)
|
||||
|
||||
assert( ~(io.data(0).ready & ~io.data(0).valid) )
|
||||
assert( ~(io.data(1).ready & ~io.data(1).valid) )
|
||||
|
||||
|
||||
|
||||
io.send.valid :=
|
||||
(stateCurr === STATE_FRAME_HEADER) |
|
||||
(stateCurr === STATE_SUBMSG_HEADER) |
|
||||
(stateCurr === STATE_SUBMSG_DATA) |
|
||||
(stateCurr === STATE_SUBMSG_DATA & ( (io.data(0).valid & subMsgInfoSel.source === 0.U) | (io.data(1).valid & subMsgInfoSel.source === 1.U) )) |
|
||||
(stateCurr === STATE_CRC)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user