大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~
世界是混沌的,每一个人在出生之时都有着无数的未来可能性,并在环境,家人,朋友和自身等多种因素的影响之下会逐渐向着某种方向发展。而对于芯片来说,其中分布着相当多的触发器,当我们给芯片供电时,每个触发器中存储的是1还是0是不确定的,因此芯片的后续运行也有无数种可能,但是这显然不是我们想要的,芯片工程师并不是神,无法穷究每一种可能性下的发展方向,我们只需要芯片在上电初期有一个确定的初始状态,这样我们才能使得芯片按照我们设定的轨迹运行下去,这就可以通过芯片中的复位系统实现。
在芯片设计中,复位系统是一个很重要的部分,我们随时可以通过复位来将数字电路中的触发器设置到一个确定的初始值上,从而使得状态机和其他的控制电路可以从一个已知的初始状态开始工作。
ic基础|复位篇∶关于同步复位和异步复位你不得不知道的二三事!
在我们前面的文章中(即上述蓝色连接的那篇文章)已经提过了复位可以分为同步复位和异步复位两种。在这两种复位中,由于同步复位会带来更多的资源消耗,以及挤占数据路径会导致更多的延时,从而对时序的满足造成负面影响等缺陷,我们的芯片中使用更多的还是异步复位。
在本期文章,我们将给出一个基础的时钟和复位产生模块中的复位系统,并会将其和时钟系统的配合进行简要描述。
一、复位系统
下图是一个简单的复位系统,下面我们将对其进行介绍:
1.1 复位的源头
对于芯片来说,其中的复位信号也有一个源头,那就是上电复位(POR)电路,POR的作用是在芯片上电时,由POR产生的复位信号始终有效,使得芯片内部的电路保持静态,当给芯片施加的电源电压达到了一个能保证芯片正常工作的电压之后,POR才会释放其内部复位信号,芯片内部才能够开始正常工作。
在上图中的por就是这个复位系统的上电复位模块,其中的rst_n_ext为外部输入的复位信号。外部的电路可以使用该信号对芯片的复位进行控制。
1.2 复位的同步
对于复位信号来说,其释放需要满足恢复时间(recovery time)和撤销时间(removal time),因此在我们的复位系统设计之中,需要对每个异步时钟区域独立地同步复位。如上图所示,其中对每个独立的时钟区域都使用了一个独立的复位同步器。
在这里我们还加入了两个信号rst_bypass_sel和rst_bypass_n,这两个信号是用于可测性设计(dft,design for test)的,由于芯片中的部分复位信号是受寄存器控制的,在scan shift过程中寄存器的值并不确定,因此可能导致复位错误触发,因此为了避免这种情况的发生,我们可以通过加入一个mux,通过rst_bypass_sel选择在scan shift过程中选择rst_bypass_n。
1.3 复位和时钟的配合
由于锁相环pll的输出稳定需要一定的时间,在pll没有锁定之前,应该保持复位信号始终有效,以避免由于时钟的不稳定导致芯片的运行出现问题,因此在上图中,我们首先将por释放的原始复位信号输入至pll,等待其稳定之后,即产生了pll的锁定信号pll_locked,后续逻辑部分的复位信号pll_rst_n才能被释放。
1.4 寄存器复位信号
和通过寄存器配置时钟使能信号类似,我们也可以通过寄存器配置模块的复位信号(如图中的reg_rst_n),以便需要的时候,我们能够通过软件控制的模块复位,将其变为一个确定的初始状态。
二、上电流程
下面结合一个实例来说明复位系统的使用:
先说明一下图上的各个信号:
- VDDIO和VANA是上电管脚;
- XSHUTDOWN是管脚输入的外部复位信号;
- EXTCLK是管脚输入的外部参考钟;
-SDA和SCL为I2C信号;
在了解了各个信号的内容后,我们进一步对该芯片的上电时序进行说明:
- 第一步先在VDDIO和VANA处给电,两个管脚给电顺序可变,只需要满足一定的时间要求即可;
- 在VDDIO和VANA两个管脚给电时,根据XSHUTDOWN的电平有以下两种情况:
-电源VDDA和VDDIO接通时,如果XSHUTDOWN为低电平或关闭,则该芯片进入硬件待机模式(此时不能通过软件配置寄存器)。
-如果电源接通(超过电压电平的90%, 即达到电压阈值)后将XSHUTDOWN变为高电平,则该芯片进入软件待机模式(即可通过软件配置寄存器)。
-在这两种情况下,通过POR在合适的时机释放其内部复位信号,确保寄存器值正确初始化为其默认值。 - 在释放外部复位后,给入参考钟;
- 还需要等待一段时间(即图中的t4),以确保pll稳定,并进行一系列初始化操作等等;
- 等待了t4后,此时可以响应i2c命令,对芯片进行配置,例如释放各个模块的软件复位,进行正常工作下的初始化配置等等;
- 芯片进入正常工作模式。
三、总结
以上就是我们本篇文章的全部内容了,希望大家看了能有所收获吧~
最后,还提一个关于复位的小知识,由于带有复位引脚的触发器所占用的芯片面积比没有复位引脚的触发器略微大一些,因此,如果用于保存数据信号的触发器的初始值无关紧要(即该数据信号不会用于做控制逻辑驱动后续的电路,且在后续工作过程中会有正确的数据对其进行覆盖),那么,我们可以使用不带复位引脚的触发器,以降低芯片的面积。
如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!