总线位宽不变,有效数据位宽变化的缓存方案
总线位宽不变,有效数据位宽变化的缓存方案
譬如总线位宽为64bit,但是有时候只有高32bit有效,有时只有低32bit有效,有时64bit都有效。总线上收到的数据要先缓存到FIFO中,那么这个FIFO的宽度和深度如何设置呢?
深度的话这里不说,只说宽度。
基础版本,有两种选择:
- 宽度设置为32bit。
- 宽度设置为64bit。
对于第一中选择,会影响总线的带宽,当64bit数据都有有效的时候,带宽会被压缩成实际总线带宽的一半。对于第二种选择,会让FIFO内部的存储空间有大量的浪费,假设有效数据为64bit的情况只有50%,那么FIFO中就会有25%的存储被浪费。
既不想浪费带宽也不想浪费存储空间的做法如下。
用两个FIFO,每个FIFO都是32bit宽。同时设置一个读指针和写指针。读指针表示的是上一次按顺序最后读的是哪一个FIFO,写指针表示的是上一次按顺序写的是哪一个FIFO。这样做的话,带宽和FIFO的存储空间都可以得到最大的利用。