天津市住房与城乡建设部网站,成都网站设计建设推荐,网络管理系统的基本组成和功能,韩国女篮出线了吗本节不去讨论同步复位与异步复位以及异步复位的reset_release#xff0c;这些问题可参考#xff1a;芯片设计进阶之路——Reset深入理解——cy413026
本机主要回答一下几个问题。
1.片外的reset信号特别是按键reset怎么防止错误抖动的影响#xff1f; 常见的处理方法包括两…本节不去讨论同步复位与异步复位以及异步复位的reset_release这些问题可参考芯片设计进阶之路——Reset深入理解——cy413026
本机主要回答一下几个问题。
1.片外的reset信号特别是按键reset怎么防止错误抖动的影响 常见的处理方法包括两种:
使用斯密特触发器做IO输入斯密特触发器有一定的防抖动功能使用de-bounce电路 de-bounce电路原理就是检测到IO输入的信号翻转之后 在多次间隔一定时间检测信号值稳定才会输出这个变化
2.常见soc设计为何把reset_release放在子系统来做 应该从两个方面来考虑一个是逻辑设计和软件使用方面另一个方面从reset网络的物理实现上考虑 对于逻辑设计和软件来讲有几个方面
release的时钟太多了在系统级release就需要把所有的clk拉过去有些clk甚至是子系统内部的时钟在reset同步的时候 一般会加上软件复位系统级不方便加这么多软复位软件也难控制需要软件知道所有子系统甚至子IP的软件复位时序 对于物理实现来说
把所有系统clk集中放在一个模块 就会有问题时钟间相互干扰timing都有问题soc这么大的系统来说复位放在一个地方走线到各个复位寄存器也有问题【但本人并不能说明物理实现上的详细影响】
3.异步复位到底要不要时钟和时钟稳定有啥关系 异步复位本身和时钟没有关系而且没有时钟的时候直接复位还没有recovery/remove的时序问题那么为什么要做同步释放 首先没有时钟的时候直接异步复位 确实没有recovery/remove的问题但是不能保证复位的时候没有时钟。 为何很多情况下复位流程是这样的【上电复位】
要求先复位然后打开时钟等到时钟输出稳定在解复位 这里面有几个考虑
首先即使先解复位由于没有时钟复位同步电路输出也是不会变的先解复位后打开时钟时钟开启不论是门控时钟还是PLL时钟都需要一定的稳定时间在不稳定的时候不能确认复位同步输出会不会有问题而且时钟不稳定时候有些数字和模拟逻辑也会出现错误系统中还存在很多无复位寄存器在复位时候打开时钟这些无复位寄存器经过几拍时间也会稳定到一定状态考虑EDA仿真会出现如果解复位之后 在打开clk的情形可能会直接报出寄存器的x态并传播导致后续仿真跑飞 无复位寄存器有些是可以在有clk就可以翻转复位有效时经过几拍capture有复位寄存器的复位值就达到了稳定。有clk但受控制信号限制的无复位寄存器在有了clk后虽然不能capture数据但经过一段时间自身也会停留在稳定状态。 有一个问题就是系统上电复位的时候PLL还没起来或者lock还需要一段时间此时如何打开时钟呢 有些做法就是在这段时间把PLL输出clk mux到晶振输出。 是否一定在异步复位的时候要打开时钟 其实根据上面的描述如果不打开时钟对功能没有影响也是可以不开时钟的。
一些观点来自下面论坛。
上电复位同步释放问题 - SOC讨论区 - EETOP 创芯网论坛 (原名电子顶级开发网) -
4.异步桥异步fifo该怎样复位
异步FIFO设计与使用
这篇资源中详细写了异步fifo的复位。对于复位或者flush/clear都有相似的要求。如果是对afifo及其相关的外围逻辑都进行复位的话是比较简单的此时无论afifo是否是空状态指针是否为0大家一起复位就是没问题的。
关键在于有些时候 只要求复位afifo本身下面给出了异步FIFO的flush/clear/reset的一些实现。这几个手段是通用的但是一般情况下复位不会单独去做逻辑所以都是靠flush/clear信号来完成的。
4.1 afifo flush/clear 可以考虑为 FIFO 提供单一的清空信号或独立的清空信号push_flush、 pop_flush。flush 信号的实现通常为置 FIFO 读写指针的值使 FIFO 处于 EMPTY 状态下。由于 flush 操作的特殊性我们通常是根据应用的实际情况考虑 flush 的实现例如可以规定 flush 操作前后的一些动作。事实上在实际应用中当 需要发生 flush 操作时经常可以满足某些条件例如 flush 操作前若干个周期不 能有 push 或 pop 操作flush 操作维持若干个周期等。
4.1.1 一种先从读时钟域flush的操作 AFIFO 的 rflush 的实现仅仅是简单的将 rgnext 赋为 rwptr2 的值从而可以在 下一个周期有效 empty 信号输出。然后读指针将通过两级寄存后到达到写时钟 域输出正确的写时钟域信号。应该注意的是在 flush 过程中应该保证写时钟 域没有 push 操作而且 flush 操作需要维持三个慢时钟周期以确保信号正确的 传递到了写时钟域。代码如下
if (rflush) rgnext rwptr2;
else rgnext (rbnext1) ^ rbnext;
4.2 afifo 复位 可以考虑实现单一复位信号或独立复位信号。如果实现单一复位信号则该 复位信号为 FIFO 控制器内部所有寄存器的异步复位信号同时复位两个时钟域 的寄存器。由于复位信号为完全异步信号不与任一时钟同步或与其中一个时 钟同步无论何种情况当复位信号有效/无效时至少有一个时钟域内的寄存 器可能产生 recovery/removal timing violation即复位信号在该时钟上升沿附近变 化由此可能产生复位时的不稳定状态。 因此更合理的做法是分别为两个不同时钟域提供独立的复位信号或者在内部将某个时钟域的复位信号同步到另一个时钟域后再使用
4.2.1 先clr写时钟域 有一种比较稳妥的做法是 只用一个clr信号输入然后在另外一个clk domain输出一个clr_done表示clr完成。在这段时间内保证外围逻辑不去读写afifo。
输入wrclk的wr_clr信号用wr_clr信号clr本时钟域逻辑同时产生wr2rd_clr信号并同步至rd_clkrd_clk域检测到同步过来的clr信号开始clrwrclk检测到从rdclk同步过来的rd_ptr0说明rdclk已经完成clr此时清除wr2rd_clrrdclk检测到wr2rd_clr的同步信号已经清零且wr_ptr0 就认为afifo已全部clr完毕输出clr_done信号
实际上从上面的描述来看clr信号是从wrclk输入还是rdclk输入都可以完成clr操作。这一段描述明显要求不能再clr期间操作afifo 5.部分逻辑复位会不会影响外围逻辑 这个其实就是典型的RDC问题。常见在总线模块对某些master逻辑复位不能影响其他master的通路 一般这种情况下会有一个reset保护电路把边界信号clamp到不影响别的通路值。其实无论这个边界有没有做异步处理都需要做clamp因为这部分电路的复位会产生两个影响
毛刺不满足外围逻辑的setup/hold的信号翻转
6.RDC reset domain cross要做什么 什么是reset domain cross 经过reset_0_n复位的信号被其他复位域 reset_1_n的寄存器capture的时候就会出现亚稳态的风险 这种情况的常见处理方式如下
reset assert order---也就是通过控制reset的顺序能够解决很多问题reset-clamp----复位钳位在复位之前把cross的path输出钳位到需要的值也就是isolation和不同power domain边界isolation作用一致clk 隔离----就是把会受到影响的复位域的寄存器的clk关掉
具体可参考另外一篇文章
RDC(reset domian cross)复位跨域-CSDN博客 7.异步复位树是什么样的结构
异步复位树是由一级一级的复位同步逻辑构成的即每个层级都加上一个异步复位同步器。如下图所示