数字IC秋招总结-亚稳态以及跨时钟域

目录

亚稳态产生原因

单比特信号

电平检测

边沿检测

脉冲展宽同步

握手

延迟采样

多比特信号

握手

DMUX同步器

异步FIFO

注意事项


亚稳态产生原因

每一个触发器都有其规定的建立(setup)和保持(hold)时间参数,在这个时间参数内,输入信号在时钟的上升沿是不允许发生变的。如果这段时间中对信号进行采样,得到的结果将是不可预知的,即亚稳态。

单比特信号

电平检测

电平检测也就是我们通常说的打两拍,此方法适用于慢到快,因为在快到慢时候,可能会采不到。

为什么打两拍会避免亚稳态

亚稳态产生的原因就是时序不满足,从而导致了了CK-Q的时间很长,所以在第一次打拍后,产生亚稳态,ck-q很长,就算他很长,但是在下一级打拍的时候也会满足时序,所以避免了亚稳态的产生,如果还违反时序的话,就得再打一次拍。

边沿检测

在电平检测的基础上,通过输出端的逻辑,对信号进行边沿检测,这种方法更适合需要脉冲输出的电路,此外也可以避免快时钟多次采样到有效信号。

脉冲展宽同步

此处适用于快到慢的跨时钟域的情况,直接打两拍的话,在慢时钟域下采样不不到,所以为了在慢时钟下采样到信号,在快时钟下(也就是原时钟域下),将信号展宽而让在慢时钟下可以采样的到,展宽一般就是在信号来的时候,对信号进行取反。

握手

握手其实也用到了脉冲展宽的思想,只是展宽信号的变化条件不同,如果不对信号进行展宽,就没办法采到快时钟域下的信号,比如data_clka只有一个脉冲,所以握手就是在脉冲展宽的基础上加上了反馈信号。

多比特信号

握手

多比特信号的握手与单比特信号的握手非常相似,具体波形如下图所示,相关代码参看之前的一个博客:https://blog.csdn.net/Fortune77/article/details/126574116?spm=1001.2014.3001.5501

1.用后缀_t表示数据发送端,用后缀_r表示数据接收端。发送端时钟用tclk表示,接收端时钟用rclk表示

2.当有数据需要发送的时候,将t_rdy信号拉高为1,同时再rclk的时钟域下,打两拍与rclk进行时钟同步,得到r_rdy_clk。

3.当r_rdy_clk为高时,说明数据在rclk中处于安全地带,所以这个时候可以开始读取数据,读取数据的同时,将r_ack置1。

4.同样的,将r_ack信号打两拍同步t_clk时钟域,在同步过来时,将t_rdy拉低,表示数据传输完成

5.在数据的准备信号t_rdy(t_rdy_clk)拉低时,将r_ack拉低,r_ack_tclk也紧跟着被拉低,握手完成,等待下一次的数据传输

延迟采样

此方法只针对多比特信号从慢到快的传输,具体思想就是找一个采信号安全的时间,然后进行采样,具体要分在慢时钟下是否有使能信号,根据这个分为两种情况

有使能信号

对使能信号进行打拍,让其在信号的安全位置来进行采样

无使能信号

但如果慢时钟域没有数据使能信号 din_en, 或数据使能信号一直有效,此时在快时钟域对数据使能信号进行上升沿检测的方法将会失效。解决方法就是对慢时钟进行边沿检测作为输出的使能信号

如果两边的频率差别较大,边沿检测后的dout_en还是在比较容易发生时序违例的位置的话,还可以用添加计数器来使其到安全的位置,参考链接:https://zhuanlan.zhihu.com/p/405936794

DMUX同步器

通过一个使能信号来判断data信号是否已经稳定,当使能信号有效的时候说明data处于稳定状态,这种处理方法和上述的延迟采样和握手的方法非常的相似,都是按照一个思路:使用一个使能信号来确定采样的时候数据是否已经稳定了,如果稳定的话,就进行采样。dmux同步器的思路与上述的有使能信号的延迟采样法一样,与握手信号不一样的是,握手信号还会有一个ack的反馈信号。

异步FIFO

异步fifo的主要作用就是在不同的时钟域下进行数据的缓冲,具体见:https://blog.csdn.net/Fortune77/article/details/126895109?spm=1001.2014.3001.5502

注意事项

1.同步器前不能有组合逻辑电路

在前一个时钟域的dff输出和后一个时钟域输入之间不能有组合逻辑,原因是组合逻辑会造成毛刺现象,后一级时钟域的dff很可能敲到毛刺,进而引入错误。

2.聚合问题

聚合问题发生在多个信号(可能是同一个时钟域也可以是不同的时钟域)从一个时钟域跨到另一个相同的时钟域,但是这些信号是分开同步的。这样你在使用这些同步过的信号的时候,就不能确定他们是不是同时有效,这样有可能就有问题。相当于多比特信号直接打拍,A时钟域的多根信号分别进行同步,同步到B时钟域,然后在B时钟域从新做逻辑汇聚成一根信号。无法预期同步后的多根信号和之前还是一致的。所以存在很大问题。

解决方法:在原时钟域完成信号的聚合与寄存,然后进行整体同步,不能分别将单个信号同步然后再聚合

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值