【FIFO漫谈】异步FIFO·二进制与格雷码转换的技巧
发布网友
发布时间:2024-10-17 09:10
我来回答
共1个回答
热心网友
时间:2024-11-04 09:04
在设计非2的整数幂次深度的异步FIFO时,常会遇到地址跳转时格雷码不连续的问题。解决这一难题,我们需利用格雷码的连续性特点,确保地址变化时只改变1比特。
首先,观察格雷码码盘,发现任何相邻或以2的整数幂次为轴的两个数之间只差1比特。这意味着在二进制顺序跳转或以2的整数幂次为轴跳转时,格雷码均只跳变1比特。
假设FIFO深度为6,常规计数器跳转路径可能引起格雷码不连续。为解决此问题,我们可以调整计数路径,使得在低位计满时跳转到一个高位为1的值,即从5('b0101)跳至10('b1010),这样实际偏移量为2,符合格雷码连续性要求。
对于深度为5的FIFO,当低位计满后,跳转至高位为1的点,即从4('b0110)跳至8('b1000),偏移量为3。通过这种方式,高位为1的计数值实际上是减去偏移量后的正常指针位置。
为实现此设计,深度为DEPTH的FIFO,需要调整地址位宽ADDR_W,以确保低位计满时的跳转符合格雷码连续性原则。计算公式为:
[公式]
则ADDR_W即为所需位宽,通常为公式计算的结果。跳转的2的整数幂轴DEPTH_TO2为:
[公式]
偏移量SHIFT计算公式为:
[公式]
例如,对于深度为6的FIFO,低位计满后跳转值JUMP为:
[公式]
通过上述方法,我们确保了在非2的整数幂次深度的异步FIFO设计中,格雷码连续性得到满足,避免了功能性错误的发生。在后续设计读写通路控制单元时,将使用这些关键变量,确保FIFO功能的正确实现。
热心网友
时间:2024-11-04 08:58
在设计非2的整数幂次深度的异步FIFO时,常会遇到地址跳转时格雷码不连续的问题。解决这一难题,我们需利用格雷码的连续性特点,确保地址变化时只改变1比特。
首先,观察格雷码码盘,发现任何相邻或以2的整数幂次为轴的两个数之间只差1比特。这意味着在二进制顺序跳转或以2的整数幂次为轴跳转时,格雷码均只跳变1比特。
假设FIFO深度为6,常规计数器跳转路径可能引起格雷码不连续。为解决此问题,我们可以调整计数路径,使得在低位计满时跳转到一个高位为1的值,即从5('b0101)跳至10('b1010),这样实际偏移量为2,符合格雷码连续性要求。
对于深度为5的FIFO,当低位计满后,跳转至高位为1的点,即从4('b0110)跳至8('b1000),偏移量为3。通过这种方式,高位为1的计数值实际上是减去偏移量后的正常指针位置。
为实现此设计,深度为DEPTH的FIFO,需要调整地址位宽ADDR_W,以确保低位计满时的跳转符合格雷码连续性原则。计算公式为:
[公式]
则ADDR_W即为所需位宽,通常为公式计算的结果。跳转的2的整数幂轴DEPTH_TO2为:
[公式]
偏移量SHIFT计算公式为:
[公式]
例如,对于深度为6的FIFO,低位计满后跳转值JUMP为:
[公式]
通过上述方法,我们确保了在非2的整数幂次深度的异步FIFO设计中,格雷码连续性得到满足,避免了功能性错误的发生。在后续设计读写通路控制单元时,将使用这些关键变量,确保FIFO功能的正确实现。