增加控制码3个必选,3个可选
This commit is contained in:
52
doc/spec/SmUnit.md
Normal file
52
doc/spec/SmUnit.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# 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不活动或者悬空
|
||||
|
||||
|
||||
|
||||
---------------------------------------
|
||||
|
||||
以下是大模型补充区域
|
||||
|
||||
---------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user