最近遇到非标准的sram:两个sram拼在一起,每个SRAM 数据位宽是128bit,
关于读写
对于写端:每次可能写入128bit或256bit;
对于读端:只要sram 剩余数据大于等于256bit就会读256bit,否则读128bit,直至sram empty.
关于空满
pre_full , 可通过寄存器(back_pressure_thrd/back_pressure_return_thrd)配置sram 剩余多少空间pre_full举起来以及举起后剩余多少空间pre_full拉低;
当pre_full拉起来后HW还可以write 3 行sram address .
empty,就是sram 空;
一些验证思考
check part
- 计算sram使用空间的单位是什么,是128bit还是256bit(考虑写入奇数个128bit的场景)
- sram used depth 是否计算正确
- pre_full assert/de-assert的行为是否正确(是小于thrd还是小于等于thrd pre_full就会assert;产生逻辑是组合和是register out)
- pre_full拉起后是否最多写三笔
- sram 是否会overflow(当thrd设定值比较小时)
- 结合3、4、5,若是register out,需考虑back_pre_thrd不能小于5;若设为4,因为HW是小于thrd pre_full会为1,即left space 为3时,且 pre_full register out,故当pre_full举起时left space 可能为2.
- simulation结束时 FSM是IDLE,counter、sram used depth 均为0,sram 为empty ,读写指针要相等
cover part
- stimulus 是否足够random(应对一些没有想到的场景)
- 两个sram address 是否都有访问
- 当sram left space 恰好等于back_press_thrd,且没有数据再写入sram
- 当sram left space 恰好等于back_press_return_thrd,且有数据再写入sram
- sram left space 等于0(full)
- sram 写入奇数个128bit data
- back_pressure_thrd 和 return_thrd相等
- 同T读2笔data(unit : sram used depth )
- 同T写2笔data(unit : sram used depth )
- cross item8和item9