增加控制码3个必选,3个可选
This commit is contained in:
113
doc/spec/SlaveParser.md
Normal file
113
doc/spec/SlaveParser.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# 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
|
||||
|
||||
|
||||
## 同步特质
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 嗅探特质
|
||||
|
||||
##
|
||||
|
||||
|
||||
|
||||
|
||||
---------------------------------------
|
||||
|
||||
以下是大模型补充区域
|
||||
|
||||
---------------------------------------
|
||||
Reference in New Issue
Block a user