异步FIFO面试宝典(二)

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

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

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

‍‍

‍‍

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

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

‍‍此时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的验证为例,验证分为验证场景和验证平台。验证场景如表所示:

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

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

初始复位:在验证激励施加之前对读、写指针的复位,可以在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面试宝典关注我们1获取更多IC资料2共同在IC的路上一起学习和成长3了解更多名企招聘资讯你点的每个赞,我都认真当成了喜欢

verilog异步复位jk触发器_以不变应万变的异步FIFO面试宝典(二)相关推荐

  1. verilog异步复位jk触发器_异步复位同步释放原理

    关键词:同步释放,recovery,removal 在数字IC设计中肯定会涉及到异步复位的问题,因为需要对电路进行复位操作.这种复位设计主要依靠前端设计以及工具来检查,从数字IC后端的角度上讲,只要在 ...

  2. verilog异步复位jk触发器_同步复位和异步复位常见问题总结

    总结同步和异步复位使用中的常见问题. 同步复位 问题1: 综合工具并不能轻易区分出同步复位信号和其他数据信号,综合出来的电路不唯一,某些电路结构在网表仿真时可能出现x态. 该段代码可能综合出两种电路结 ...

  3. verilog异步复位jk触发器_Verilog专题(九)DFF、Dlatch、JK flipflop

    DFF.Dlatch.JK flip-flop 对于verilog的学习,这里推荐一个比较好的实践网站HDLBits: https://hdlbits.01xz.net/wiki/Main_Page ...

  4. verilog异步复位jk触发器_HDLBits: 在线学习Verilog(Problem 120-126)

    这几天在刷HDLBits,参考的是HDLBits中文导学专栏:HDLBits中文导学,刷到120题的时候发现缺少了中间的120题到126题的解析,就打算自己边写边记录一下.也方便其他的同学进行参考. ...

  5. verilog异步复位jk触发器_JK触发器(异步复位置位)

    LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY jkff IS PORT(clk,j,k,clr,pset:IN STD_LOGIC; q,qb:O ...

  6. (33)VHDL实现异步复位D触发器

    (33)VHDL实现异步复位D触发器 1.1 目录 1)目录 2)FPGA简介 3)VHDL简介 4)VHDL实现异步复位D触发器 5)结语 1.2 FPGA简介 FPGA(Field Program ...

  7. 异步复位同步释放_简谈同步复位和异步复位

    简谈同步复位和异步复位 大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊数字电路设计中的同步复位和异步复位. 谈到同步复位和异步复位,那咱们就不得不来聊一聊复位这个词了.在数字逻辑电路设计中,电路通 ...

  8. 用labview设计jk触发器_编写数字电路JK触发器仿真程序

    1 目录 一.<虚拟仪器设计>课程设计任务书 . ..................................................................... ...

  9. 用labview设计jk触发器_基于LabVIEW的基本触发器设计.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspLabview 基于LabVIEW的基本触发器设计.doc15页 ...

最新文章

  1. 实施Kubernetes可以实现多云架构安全
  2. 如何使用万用表测量随机噪声
  3. 基于 OpenYurt EdgeX Foundry 的云边端一体化解决方案
  4. 让孩子尽快了解这个世界
  5. jzoj1295-设计【差分约束系统,最短路】
  6. 大数据之Yarn——Capacity调度器概念以及配置
  7. python和pytorch是什么关系_【PyTorch】Tensor和tensor的区别
  8. fastjson 1.2.57 版本发布,Bug 修复维护版本
  9. 团队管理---猴子管理管理法则
  10. Google 为什么以 Flutter 作为原生突破口?| 技术头条
  11. Jmeter 常用断言使用
  12. POJ1088(记忆搜索加dp)
  13. [2018.07.31 T1] 第一题
  14. 小米蓝牙音响驱动_拆解报告:小米无线充蓝牙音箱
  15. python字符串赋值列表_Python 第二篇:python字符串、列表和字典的基本操作方法...
  16. 2017年是晚立秋,“秋老虎”来袭!
  17. notepad打开java乱码_notepad打开中文乱码
  18. 华为机试HJ55:挑7
  19. iOS-VLCKit实现仿网易云音乐播放音乐
  20. 数据分析 --- 收集数据的技巧

热门文章

  1. .net pdf转图片_在客户端实现PDF转图片
  2. 低通滤波和高通滤波的理解
  3. restful 参数带斜杠_SpringCloud实战:Restful架构API接口经典设计误区
  4. python两个csv表数据合并_怎么用python把一个*。csv 文件里面的数据整合成一个表格...
  5. linux中存放着内核和引导程序的是,Linux操作系统 考试题库
  6. php获取pid,在Shell脚本中获取指定进程的PID
  7. probie 菜鸟翻译工具开源了
  8. 强迫症福利--收起.NET程序的dll来
  9. 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc
  10. python快速排序最简单写法_面试官:来,这位精神小伙,简简单单写个快速排序吧...