2.2 KiB
2.2 KiB
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不活动或者悬空
以下是大模型补充区域