在芯片设计中,遇到多比特数据跨时钟操作时,我们通常使用异步FIFO。
在使用FIFO之前,我们要计算FIFO的深度,有事后计算出的FIFO深度不一定是2的整数幂,
这时候我们需要向上取整到2的整次幂。
因为异步FIFO里面读写地址做跨时钟之前把地址做了格雷编码,然后使用格雷编码的地址做跨时钟处理。
格雷码的特点是相临(十进制表示)数字只有1bit变化,这样做跨时钟时,可以降低亚稳态的概率。
如果FIFO深度不是2的整次幂,那么地址从最大跳变到0时,相应的格雷码地址变化就不止1bit了,这样会增加亚稳态的概率。
如果想FIFO深度不是2的整次幂,需要特殊处理,选择别的编码方式了。