在使用MAX II给用户做替代模块的过程中,出现了一些很诡异的状况,这些状况也往往发生在上电伊始。因此,特权同学特别的花心思好好研究了一下MAX II的上电过程和简单的RC复位。当然,最终问题的解决其实和本文要说的上电过程和复位并没有什么关系,但仍然不妨碍好好的梳理一下这些看似简单却又非常基础的知识点。
首先来说MAX II的上电过程,在handbook中已有较详细的说明。如图1所示,在VCCINT从0V不断上升的过程中,一旦买过1.7V的闸值电压后,MAX II内部便开始进行逻辑的配置,大约需要Tconfig时间,这个时间长短取决于逻辑资源多少。Tconfig时间内对外IO的状态也是可以通过Quartus II选项进行配置的,在这个时间后,器件便进入正常的用户模式。
图1 MAX II的上电过程图
对于前面提到的Tconfig时间,不同逻辑资源的器件稍有区别,如表1所示。
表1 不同逻辑资源的器件的Tconfig时间的区别
接下来要讨论复位的问题,原文在图1的下方有一段注释:
After SRAM configuration, all registers in the device are cleared and released into user function before I/O tri-states are released. To release clears after tri-states are released, use the DEV_CLRn pin option. To hold the tri-states beyond the power-up configuration time, use the DEV_OE pin option.
简单的说,在CPLD内部配置完成后,所有寄存器通常是出于清零状态,IO脚进入用户模式。而用户如果希望这时候内部各个寄存器的状态处于可控或者特定的状态(尤其当其值不一定是清零的状态),那么用户可以使用器件提供的专用管脚DEV_CLRn或DEV_OE来达到所期望的效果。一般而言,使用其他的IO(当然最好是全局时钟输入管脚)作为内部复位管脚也没问题,反正是通过在Tconfig时间过后的一段初始时间内继续使器件处于复位或者期望的状态即可。这里也只讨论复位的状况,如表2所示,MAX II的3.3V LVTTL电平的输入高电平也是>1.7V。
表2 复位的状况
一个最简单的低电平复位电路如图2所示。
图2 低电平复位电路
这个电路在上电初始过程中,可以起到延缓SYS_RST信号电压从DGND突变到VCC3.3。其延时时间的计算方法如下:
V0 为电容上的初始电压值,初上电时通常该电压值为0V。
V1 为电容最终可充到或放到的电压值,通常为电源电压VCC。
Vt 为t时刻电容上的电压值,即RESET信号的电压值。
则从t0时刻到电压到达Vt所需要的时间为:t = RC*Ln[(V1-V0)/(V1-Vt)]
特权同学也简单的对公示做了一些验证。这里取C=1uF,R=10k,V0=0,V1=VCC,Vt=1.7V。那么计算到的延时值约为7.24ms。而实际检测到的波形如图3所示。约为7.25ms,和理论值很接近。
图3 实际检测到的波形图