Files
eb001/doc/spec/SlaveParser.md

113 lines
4.3 KiB
Markdown
Raw Normal View History

2026-07-28 17:28:49 +08:00
# 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
## 同步特质
## 嗅探特质
##
---------------------------------------
以下是大模型补充区域
---------------------------------------