我是靠谱客的博主 鲜艳河马,最近开发中收集的这篇文章主要介绍verilog异步复位jk触发器_以不变应万变的异步FIFO面试宝典(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

异步FIFO面试宝典(二) f3eb4599cb273ff06256cb92cd195f70.png

上一期为童鞋们带来了FIFO工作的基本原理,本期将继续与各位童鞋探讨FIFO类面试相关问题。首先让我们回顾一下上一期的课后思考题:

如果读时钟域速度较快、写时钟域速度较慢(或者写、读时钟域速度相差较大)会出现什么情况?

‍ ‍   背景知识补充:假设存在两个时钟域CLKA和CLKB,信号从CLKA时钟域传输到CLKB时钟域,CLKA时钟周期为CLKB时钟周期两倍,且此处电路为同步电路(即所有触发器的状态的变化都与所加的时钟脉冲信号同步)如下图所示。

6df5ae153e5ac8af15c01def2f32f9a3.png

‍‍

‍ ‍

此时不难发现CLKA时钟域的逻辑变化时间点1、2、3,在CLKB时钟域总有时钟上升沿能采样CLKA时钟域的1、2、3节点的变化。

如果CLKA时钟域与CLKB时钟域时钟周期相反,即CLKB时钟周期为CLKA时钟周期的两倍,如下图所示。

6f6d24503e9aee09dc6213f418a9fa24.png

‍‍此时CLKA时钟域中的1、3、5节点信号值可以被CLKB时钟域采样,而2、4、6时钟节点的信号值被遗漏,出现了“漏采”。

由此可见,在跨时钟域数据同步时,使用快时钟域采样慢时钟域数据,数据可以被正确的采样,但是如果使用慢时钟域采样快时钟域数据,会出现“漏采”且该情形无法避免(注:此处指跨时钟域数据同步中使用两级D触发器的情形,异步FIFO中指针同步使用此方法)。

回到问题本身,如果读时钟域速度较快、写时钟域速度较慢(或者写、读时钟域速度相差较大)会出现什么情况?

     情形一:读快、写慢。

‍‍由于读时钟域速度快,写时钟域速度慢,则当写时钟域指针同步到读时钟域时,数据同步正常,即判断读空状态时,判断正常;当读时钟域指针同步到写时钟域时,出现指针“漏采”,此时从数据同步图可以看出,当CLKA指针从1变到6的过程中,CLKB只会采样到1、3、5。取地址指向3的情形,当CLKB采样到指针3时,如果判断不为满,那此时FIFO必不为满。如果判断为满,则不一定真满(两级D触发器同步时会消耗两个周期,即读时钟域采样到3时,写时钟域指针已经到了5)。由此可见指针“漏采”并未对FIFO满空判断造成影响,而两级D触发器进行指针同步的滞后性,使得判断为满时,出现了假满,对FIFO的性能造成了影响。对满空进行保守判断的方法对性能造成损失,但不会出错。

情形二:读慢、写快。

请参照情形一类比。

   极端情形:读、写速度相差数十倍或者数百倍时什么情形?(往年校招面试真题)

   当读写时钟域速度相差极大时,假设写的速度极快,读的速度极慢,取极限,则一开始就会写满。同理,假设写的速度挤满,读的速度极快,取极限,则一开始就会读空。

‍‍

‍‍

‍ ‍

‍异步FIFO设计核心:格雷码+指针同步

为了判断满空状态,引入最高位。

为了消除亚稳态,引入了格雷码。

为了判断满空状态,引入两级D触发器对指针进行同步。

在对异步FIFO的原理进行分析后,便可使用Verilog语言进行电路设计了,此处请各位童鞋自行设计哦,异步FIFO代码是各大公司笔试的必考题,童鞋们一定要慎重对待。

在异步FIFO设计完成后,新的问题又出现了:

如何验证一个异步FIFO?(紫光展锐2019校招面试题)

此处侧重于分析总结异步FIFO的功能点,考察对待验证设计的验证点提取能力。以基于UVM验证方法学对异步FIFO的验证为例,验证分为验证场景和验证平台。验证场景如表所示:

f1cf67ba27022c511e27b8c81ef81d63.png

构建的UVM验证平台如下图所示:

bd6574545a4a315c272757ae6fcd2743.png

‍‍注:在验证复位场景时,完整的复位验证应当包含以下情形的复位:

初始复位:在验证激励施加之前对读、写指针的复位,可以在driver中完成。

写复位:在FIFO写入过程中对写时钟域信号复位;在FIFO读出过程中对写时钟域信号复位。

读复位:在FIFO读出过程中对读时钟域信号复位;在FIFO写入过程中对读时钟域信号复位。

随机复位:任意情形下的随机复位。

   在完成验证平台和验证场景的设计后,还需添加断言用于检查部分时序,所构建的断言应当包括以下点:

(1)检查复位时所有指针和满/空信号是否都处于低电平状态。

(2)当fifo读计数为0时,检查fifo_empty是否被置位。

(3)当fifo写计数大于FIFO宽度时,检查fifo_full是否被置位。

(4)检查如果fifo已满,并且尝试写入时写入指针不会更改。

(5)检查如果fifo已空,并且尝试读出时读指针不会更改。

(6)有一个属性会在尝试fifo写满时发出警告。

(7)有一个属性会在尝试fifo读空时发出警告。

(8)确保在WRITE模式下,写输入指针处于已定义状态(0或1),它不应为X态.同样适用于READ模式。

‍ ‍

关注公众号并回复关键字 “异步FIFO” 获取异步FIFO设计参考资料。

往期文章

   以不变应万变的异步FIFO面试宝典关注我们 3ef6334c04389b34f8b594e475c41859.png1获取更多IC资料2共同在IC的路上一起学习和成长3了解更多名企招聘资讯 e81ce52de391521cfc2cdc9f74d27fa0.png a6237db54e3d24b0b53308fb9b8f884e.png你点的每个赞,我都认真当成了喜欢

最后

以上就是鲜艳河马为你收集整理的verilog异步复位jk触发器_以不变应万变的异步FIFO面试宝典(二)的全部内容,希望文章能够帮你解决verilog异步复位jk触发器_以不变应万变的异步FIFO面试宝典(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部