jake的个人空间 http://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

日志

数字前端设计基本电路(1)-- 边沿检测

热度 21已有 1114 次阅读2021-8-6 01:57 |系统分类:芯片设计

如何知道一个信号上升沿或下降沿是否到来?下面是一个简单的边沿检测电路。

image.png

这个电路的原理很简单。当din上升沿或下降沿到来时,din_re_fe_p产生一个脉冲。后续电路看到这个脉冲,就知道din上升沿或下降沿发生了。

如果din是异步输入,前面要加一个两级同步器(其实就是两级DFF)。

image.png

边沿检测可以演化出只检测上升沿,只检测下降沿。

image.png

边沿检测电路非常有用。

1:作为跨时钟域同步握手信号

有一组信号data_bus,需要从clk_a同步到clk_b。如果每一个信号都经过两级同步器,那就太浪费资源了。而且有时一组信号要保证所有位传到clk_b时同时更新,就更不能用两级同步器了。两级同步器的latency13个周期之间,有随机性,无法保证两个信号各自通过同步器后同时更新。

这个场景可以加一个简单的握手信号data_toggle。当clk_a这边信号变化时,data_toggle也改变状态(0->11->0)。data_toggle送到clk_b,经过两级同步+边沿检测产生data_toggle_re_fe_pclk_b这边的逻辑看到data_toggle_re_fe_p脉冲后,就可以放心大胆地锁存data_bus

image.png

喜欢low power的朋友可以把data_toggle_re_fe_p作为ICGEN信号。RTL写得干净,工具也能自动infer ICG

边沿检测输出作为ICG EN其实是非常有用的low power技巧之一。

当然,这个例子是很简单地握手方式。复杂一些的可以用requestacknowledge之类的双向握手。

clk_a送一个req=1clk_b,告诉clk_b数据ready

clk_b同步req并做上升沿检测。检测到req上升沿后锁存数据。

clk_b发一个ack=1clk_a,告诉clk_a数据已经锁存。

clk_a同步ack并做上升沿检测。检测到ack上升沿后清除req=0,准备下一次传数据。

clk_b这边检测到req下降沿,清除ack=0,准备接受下一次数据。

 

边沿检测电路其他应用实例还有很多。

发表评论 评论 (11 个评论)

回复 yangfc37 2021-8-17 17:04
Mark
回复 smarthb 2021-8-18 10:32
总结的不错,设计中经常用到类似的功能。
回复 wxl_123 2021-8-18 11:52
很不错   学习了
回复 西西在冰城 2021-8-19 15:26
学习~
回复 zxyglx 2021-8-20 10:06
不错,谢谢
回复 summeryang 2021-8-26 10:17
Mark
回复 肖雨3154 2021-8-31 15:01
mark
回复 control_zyx 2021-9-1 10:40
学习
回复 冰峰漫步 2021-9-3 11:06
大佬~~~
回复 zhh124 2021-9-7 14:58
实用
回复 wgf95109 2021-9-13 22:26
大佬 膜拜

facelist

您需要登录后才可以评论 登录 | 注册

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| 在线咨询 |  EETOP 创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2021-9-21 23:14 , Processed in 0.034763 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部