4.3 KiB
4.3 KiB
SlaveParser
以下为用户区域
- 该模块例化在
MstSlvSwith模块内,负责从站接收功能实现 - 内部例化了两个
SlaveRecParser(downRecParser和upRecParser)和两个SlaveSendGen(downSendGen和upSendGen)
接口
downIn以Decoupled封装的axis格式的lvds下行串行数据输入downOut以Decoupled封装的axis格式的lvds下行串行数据输出upIn以Decoupled封装的axis格式的lvds上行串行数据输入upOut以Decoupled封装的axis格式的lvds上行串行数据输出sram_w接入到4个SmUnit的SRAM写接口sram_r接入到4个SmUnit的SRAM读接口dSMenq接入到4个SmUnit的下行写入压栈Bool信号uSMdeq接入到4个SmUnit的上行读出弹出Bool信号localDevIndex输出本地设备的索引16bitsisDevOnRight表示设备的“右边”(下行方向下一级)是否还有设备2bits,实际只使用了1bitsisDevOnRightModify表示设备的“右边”(下行方向下一级)是否改变过indexOfRightDev表示设备的“右边”(下行方向下一级)设备的索引号mstDeltaTimeStamp输出32bits的时间戳信息slvDeltaTime输出32bits的时间戳信息deltaFinal输出64bits的时间戳信息isLoop是否回环BoolcReg以结构体输入通用寄存器组sReg以结构体输入从站寄存器组lvds一个类似sram的访问接口,用于允许从lvds总线的访问读写寄存器区域intHWTrig输出两个Bool硬件中断信号intHWClr输入两个Bool硬件清除中断信号downRecStat输出下行接收方向信息upRecStat输出上行接收方向信息
主报文转发处理
-
下行发送模块
downSendGen的帧头请求frameReq来自于下行接收downRecParser的报文头同步握手,同时frameInfo会被更改为本地设备的索引号lcalDevIndex -
上行发送模块
upSendGen的帧头请求frameReq- 上行接收
upRecParser的报文头同步握手,此时frameStyle需要为普通包FRAME_STYLE_COMMON,转发完全相同的上行接收报文头 - 下行接收到的是嗅探包而进入
isAckProbe状态,发送(回复)嗅探包,frameLenAim为0,frameStyle为FRAME_STYLE_PROBE,frameInfo为localDevIndex
- 上行接收
子报文处理
- 子报文接收在上、下行各有2个位宽8bits,深度20的FIFO
downRecFifo/upRecFifo,以乒乓方式工作,子报文负载信息先进入RecFifo,再由发送模块SendGen发送 - 子报文接收在上、下行各有2组寄存器分别保存子报文头,子报文尾信息,以乒乓方式工作,发送模块发送时从寄存器中提取和修改信息
索引特质
- 当子报文的
operator为SUBMSG_OPERATOR_INDEX,为索引模式,从站按顺序更新自己的索引 - 更新索引时
- 本设备索引
localDevIndex更新为子报文尾工作计数workCnt加1 - 下行转发的
workCnt计数也加1,即localDevIndex - 右边(下行方向)设备索引
indexOfRightDev- 当是最后一个设备,记录为0
- 不是最后一个设备,更新为子报文尾工作计数
workCnt计数加2
- 本设备索引
读写特质
- 写操作发生在下行阶段
- 读操作发生在上行阶段
- 单独读(和/或)写操作是否执行需要根据子报文头的报文类型
style进行判定- 当为顺序索引
SeqIndex,只需要子报文头的设备索引devIndex匹配上本设备的索引localDevIndex,则需要进行操作 - 当为逻辑索引
LgcIndex, 则需要进一步根据EBMMU的配置进行判定
- 当为顺序索引
- 广播读(和/或)写操作则均会被执行
- 如果从站对该子报文进行了操作,则转发到下一级从站时,子报文的工作计数
workCnt需要加1 - lvds的写操作根据地址可以访问
- 寄存器
- SMUnit0
- SMUnit2
- SMUnit4
- SMUnit6
- lvds的写操作根据地址可以访问
- 寄存器
- SMUnit1
- SMUnit3
- SMUnit5
- SMUnit7
- 当lvds的读、写操作到特定地址时,触发SMUnit对应的写压入或者读弹出操作
ebmmu
同步特质
嗅探特质
以下是大模型补充区域