在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 杰克淡定

[原创] Verilog基本电路设计之一(单bit跨时钟域同步)

[复制链接]
发表于 2016-9-28 16:50:35 | 显示全部楼层
先赞后看,mark占位~
发表于 2016-9-30 13:47:37 | 显示全部楼层
回复 1# 杰克淡定


   大牛,你好,想问一下简单的单bit可以打两拍降低亚稳态,那么多bit数据可以打两拍降低亚稳态吗?
 楼主| 发表于 2016-9-30 15:19:35 | 显示全部楼层
回复 42# 洋大侠00


   多bit直接抓,不仅仅是亚稳态的问题,而是会出现非期望的值。比如,两bit,00向11变化时,出现的可能是00-01-11或者00-10-11等,中间的01和10是错误值而不仅仅是亚稳态的问题。
发表于 2016-10-14 17:04:18 | 显示全部楼层
学习了,最近在做FIFO,楼主详细的讲解给了我很大的启发
发表于 2016-10-30 14:30:33 | 显示全部楼层
回复 32# 小红帽奶爸



我觉得30楼问的是在同步过程中,对亚稳态的值进行决断的时候可能会产生一个错误的错误的值,即clka中输入的是0,而经过同步电路后,在clkb最终得到了1,这个应该也是有可能的,要怎么才能尽量减少这种亚稳态决断的错误?



FF对输入采样,在输入不跳变的情况下,输出就等于输入,不存在采样错误。这应该很好懂。

我觉得你真正想问的是,会不会一个0/1 或者1/0 signal_a 信号被同步成 1/0 或者0/1.
这是有可能的,这就是Failure。signal_a在第一级FF1的电平边沿跳变,造成setup/hold violation,所以FF1_Q就出现metastability, 但是它的值还是要回归到1或者0,这就有可能和实际想要的signal_a的值不一样。
假设signal_a 0/1, FF1_Q 的结果是metastability → 0, 然后下一个clk,FF2采样这个0,也输出了0;

到这里,就出现一个分水岭,signal_a到底有多长,假如它足够长,那么第二个clk的时候,它就被FF1正常采样,然后第三个clk被FF2正常采样,实际的level_b 输出也就只有时间早晚的问题。  

再一个就是上述的 两级FF 不是100% metastability free, 第二级的FF 还是会因为各种原因有setup/hold violation. 减少metastability就只能继续增加FF的级数。
发表于 2016-11-3 07:49:18 | 显示全部楼层
写的不错  楼主的时钟切换思路与我的项目中基本一致  呵呵
发表于 2016-11-4 11:45:41 | 显示全部楼层
楼主你这异步复位的代码风格,我不太赞同。
在我看来,xilinx提倡的使用同步复位并且尽量避免使用无谓的复位更适合。
发表于 2016-11-4 11:49:16 | 显示全部楼层
另外关于异步信号的同步处理,我的通用做法是这样:
单bit,使用两级ASYNC_REG(这是xilinx的用法,我也只熟悉xilinx);
多bit,如果速率低仍然可以使用ASYNC_REG,速率高我一半使用分布式RAM的FIFO来完成,这样处理
时序上是比较稳妥的。

当然我这里都是说的实际设计中的一些用法,如果纯粹将verilog设计则不见得适用。
发表于 2016-11-4 15:12:57 | 显示全部楼层
参考了
发表于 2016-11-5 11:08:34 | 显示全部楼层
好货,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 13:25 , Processed in 0.021241 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表