# 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`输出本地设备的索引16bits * `isDevOnRight`表示设备的“右边”(下行方向下一级)是否还有设备2bits,实际只使用了1bits * `isDevOnRightModify`表示设备的“右边”(下行方向下一级)是否改变过 * `indexOfRightDev`表示设备的“右边”(下行方向下一级)设备的索引号 * `mstDeltaTimeStamp`输出32bits的时间戳信息 * `slvDeltaTime`输出32bits的时间戳信息 * `deltaFinal`输出64bits的时间戳信息 * `isLoop`是否回环Bool * `cReg`以结构体输入通用寄存器组 * `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 ## 同步特质 ## 嗅探特质 ## --------------------------------------- 以下是大模型补充区域 ---------------------------------------