彭州建设局网站,a wordpress,美妆网站建设,简易静态网站制作流程图概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文#xff0c;添加了笔者的个人理解与注释#xff0c;文中蓝色部分为笔者注或意译。前文链接#xff1a;异步FIFO设计的仿真与综合技术#xff0…概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文添加了笔者的个人理解与注释文中蓝色部分为笔者注或意译。前文链接异步FIFO设计的仿真与综合技术1https://blog.csdn.net/apple_53311083/article/details/132852687 我们书接上文
2.3 二进制FIFO指针注意事项Binary FIFO pointer considerations 试图将一个二进制计数值从一个时钟域同步到另一个时钟域是有问题的因为n位计数器的每一点都有可能同步改变例如二进制数中的7-8是0111-1000所有位都改变了。解决这个问题的一种方法是在保持寄存器中保存周期性的二进制计数值并将同步的ready信号传递到新的时钟域。当识别ready信号时接收时钟域向发送时钟域发送同步确认信号。在从接收时钟域接收到确认信号之前被采样的指针不能改变。使用这种技术可以将一个具有多个变化位的计数值安全地转移到一个新的时钟域。在接收到确认信号后发送时钟域被允许清除ready信号并重新采样二进制计数值。 这里笔者把他理解成一种握手信号的形式1发送端将数据驱动到数据总线并发出ready信号告知接收端数据已经被驱动到了数据总线上2将ready信号同步到接收端的时钟域3接收器在接收到同步后的ready信号后锁存数据总线上的数据4接收端给出ack信号表示已经接收到了数据5发送端同步ack信号6发送端识别ack信号一次传输结束。但是这样会导致一个问题就是给传输引入了大量的冗余时钟周期效率大大降低了。 使用这种技术二进制计数器值定期采样并不是所有的二进制计数器值都可以传递到一个新的时钟域。问题是我们需要关注二进制计数器可能增加溢出或下溢出FIFO的情况吗答案是否定的。 当写指针赶上被同步和采样过的读指针时FIFO满。被同步和采样过的读指针可能不会反映实际读指针的当前值但写指针将不会尝试进行在同步读指针值之外的计数。不会发生溢出。 当读指针赶上被同步和采样过的写指针时FIFO空。被同步和采样过的写指针可能不会反映实际写指针的当前值但读指针将不会尝试进行在同步写指针值之外的计数。不会发生下溢出。 这里对上面说的不会发生溢出和下溢出做一下说明 在我们判断FIFO满的时候使用的是真实的写指针和同步过的读指针由于我们的读指针是同步过的所以它可能不能正确反映此时刻FIFO的状态可能在进行同步期间FIFO又进行了读操作读指针已经更新了但是同步的读指针还没有更新所以此时FIFO中的数据只可能少于等于同步后读指针的指示数据如果此时同步后的读指针与真实的写指针进行判断得出FIFO已经满的结果那么这个结果实际上是一个“假满”如满(bushi)实际上FIFO可能是满或者未满但是是不可能溢出的我们想象一下其实这种情况是可以接受的毕竟最多只是有可能造成资源上的浪费但是不会造成错误这是完全可以接受的。 同样的方法我们来分析一下判断FIFO空的时候使用的是真实的读指针和同步过的写指针由于我们的写指针是同步过的所以它可能不能正确反映此时刻FIFO的状态可能在进行同步期间FIFO又进行了写操作写指针已经更新了但是同步的写指针还没有更新所以此时的FIFO中的数据只可能大于等于同步后写指针指示的数据如果此时同步后的写指针和真实的读指针进行判断得出FIFO已经空的结果那么这个结果实际是一个“假空”实际上FIFO可能是空的或者还没有空但是不可能是下溢出这种情况一样是我们可以接受的。 虽然还没有到FIFO的具体设计部分但是这里的原理对于FIFO的设计至关重要这里就解释了为什么在异步FIFO的设计过程中我们经常能看到一种说法是读指针同步到写时钟域写指针同步到读时钟域。 使用FIFO计数器指针的一种常用方法是使用格雷码计数器。格雷码只允许每个时钟转换改变一个位消除了与试图同步同一时钟边缘的多个变化信号相关的问题。
2.4 FIFO测试故障 测试一个FIFO设计的微妙的设计问题几乎是不可能做到的。这个问题源于这样一个事实即使实现错误RTL模拟中的FIFO指针表现理想但是如果在实际的使用中它们可能导致灾难性的故障。也就是说就算是有错误测试也很可能测试不出来但是一旦使用中出错问题就大了 在RTL模拟中如果设计中包含了二进制计数的FIFO指针那么所有的FIFO指针位都将同时发生变化没有机会观察到同步和比较问题。在门级模拟没有注释延迟只有一个轻微的机会观察问题如果门过渡不同上升和下降边缘信号即使这样必须幸运有正确的比特序列变化之前和之后上升的时钟边缘。对于更高的速度设计上升和下降的边缘信号之间的延迟差异减小检测问题的概率也减小。对于具有反向注释延迟的栅极级设计发现实际的FIFO设计问题是最大的但即使做这种类型的模拟发现问题也很难做而且随着信号传播延迟的减少观察设计问题的几率会降低。 显然答案是要认识到存在潜在的FIFO设计问题并从一开始就正确地进行设计。