Files
eb001/doc/spec/SmUnit.md

53 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2026-07-28 17:28:49 +08:00
# SMUnit
---------------------------------------------
以下是用户区域
---------------------------------------------
SMUnit本质是一个SRAM队列FIFO的维护模块
## 接口
对外接口包括:
* sram对外写接口
* sram对外读接口
* enq 输入Bool 压栈
* deq 输入Bool 弹出
* SRAM对内接口接入实际例化的多个SRAM
* cnt 输出当前fifo内有多少个数据
* flush 输入软件复位整个SMUnit
* isComf 输入Bool确认正式写入
* isAbrt 输入Bool放弃写入
-----------------------------------------
## 指针
* FIFO内部除了常见的读指针`rPtr`和写指针`wPtr`,额外增加了一个提交指针`cPtr`
* 提交指针是为了在系统错误写入时进行撤销而设计的当eb01从站接收数据过程中有可能收到了部分数据进而写入fifo并进行压栈但是本次传输并没有完全完成例如后续数据错误crc校验失败。这时我们需要回滚fifo的状态抛弃掉之前写入的数据
-------------------------
* 三个指针的位宽比fifo实际需要位宽多1bits用于指示空满`log2Ceil(depth)+1`
* 当读指针`rPtr`和提交指针`cPtr`相等时fifo为空
* 当读指针`rPtr`和写指针`wPtr`最高位不同其余比特相同fifo为满
* 复位或者使用`flush`软复位时,所有指针归零
*`enq`时且fifo不为满写指针加1
*`isAbrt`了,写指针`wPtr`回退到提交指针`cPtr`的位置
* **对于写指针`wPtr`,当`enq``isAbrt`同时到来,`enq`的优先级更高,对整个大系统工作功能会不会产生问题需要测,或者系统正常运行时不会发生这种情况**
*`deq`且fifo不为空读指针加1
*`isComf`时提交指针`cPtr`前进到写指针`wPtr`的位置
* 根据写指针`wPtr`的有效比特位的值sram对外写接口连接到内部实际例化特定SRAM的写接口其余未指向的接口保持为0不活动或者悬空
* 根据读指针`rPtr`的有效比特位的值sram对外读接口连接到内部实际例化特定SRAM的读接口其余未指向的接口保持为0不活动或者悬空
---------------------------------------
以下是大模型补充区域
---------------------------------------