叠甲声明:我是菜鸟,我是菜鸟,我是菜鸟,以下均为我的个人理解,肯定有错误,忘指正。
信号描述
首先这是一个复位模块,就是用来复位的,其中左边5个都是输入信号,右边5个(组)都是输出的复位信号,各信号的描述大致如下:
1. 时钟输入端
slowest_sync_clk,最慢同步时钟,其实这就是复位模块的输入时钟,但是应该要连接到系统使用的最慢同步时钟。因为输出的各路信号之间有时延(应该是故意这么设计的),并且需要对输入的时钟进行滤波,防止误触发,所以需要有输入时钟,用最慢的时钟只是为了防止某些设备复位时间不够。
2. DCM锁定信号
dcm_locked,DCM(Digital Clock Manager)锁定信号,锁定了表明时钟已经保持稳定了,所以可以衍生为PLL,MMCM等时钟锁定信号。如果没有使用DCM,则该信号应该接高。如果使用了多个DCM,那么应该把最终实现锁定的DCM连接于此(比如所有DCM锁定信号相与再连接于此)。它可以理解为整个复位模块的使能信号,为高时各种输出的复位信号才有用,为低时所有输出的复位信号均处于有效状态(即复位状态)。
3. 输入的复位信号
ext_reset_in,aux_reset_in,mb_debug_sys_rst,这3个信号都为输入的复位信号,输出的复位信号可以由这三个信号中的任意一个触发。
ext_reset_in:外部复位输入
aux_reset_in:总线复位输入
mb_debug_sys_rst:调试复位
至于它们为什么叫这个名字,我觉得无所谓啦,只需要知道他们的特性就行。
其中ext_reset_in和aux_reset_in可以分别设置有效电平,即高电平复位还是低电平复位,也可以单独设置有效宽度,有效宽度可选范围为1~16,举个栗子:设置ext_reset_in为低电平有效,有效电平宽度为4个时钟,那么意味着ext_reset_in至少保持4个时钟的低电平才能输出复位信号。因此ext_reset_in和aux_reset_in其实就是两个可以单独配置的复位输入端,名字什么的无所谓。
mb_debug_sys_rst有效电平固定为高电平,其有效宽度与mb_debug_sys_rst一致。
4. 输出的复位信号
mb_reset,bus_struct_reset,peripheral_reset,interconnect_aresetn,peripheral_aresetn这5个信号都为输出的复位信号。其中bus_struct_reset,peripheral_reset为高电平有效,interconnect_aresetn,peripheral_aresetn为低电平有效,bus_struct_reset和interconnect_aresetn可以单独设置宽度1~8,可以理解为可以选择1~8个引脚输出相同的信号,peripheral_reset和peripheral_aresetn可以单独设置宽度1~16,可以理解为可以选择1~16个引脚输出相同的信号。可以设置输出的复位信号宽度,这样让每个输出信号只接到一个模块,这样不需要把同一个信号串接到不同的模块。
另外我理解bus_struct_reset和interconnect_aresetn应该适合接到需要复位的内部模块上,而peripheral_reset和peripheral_aresetn适合分配引脚,接到其他需要复位的芯片上。
mb_reset则不可配置宽度和电平,时钟为高电平有效,它适合接在其他核心的复位引脚上,比如ARM。
输出时序
首先输出的复位信号可以由3个输入的复位信号中的任何一个信号触发,假设此时配置的ext_reset_in为低电平有效,有效宽度为4,那么当ext_reset_in拉低4个时钟之后,复位信号成立,但是输出的复位信号不会立马生效,而是要过6个时钟,所有复位信号共同生效。
当ext_reset_in由低变成高之后,输出的复位信号同样不会立马恢复,先经过32个时钟之后,bus_struct_reset和interconnect_aresetn恢复,再经过16个时钟peripheral_reset和peripheral_aresetn恢复,再经过16个时钟mb_reset恢复,这样也很好理解,先让FPGA内部各复位信号恢复,然后让板子上其他外设恢复,最后让ARM(假设)恢复。也就是说输入的复位信号恢复以后,要经过32+16+16=64个时钟之后所有的复位信号才能恢复,至于在这64个时钟之内,输入的信号再次变成了有效状态会发生什么呢?我自己仿真了一下,在不同阶段有不同的结果,但是讨论这个问题实际意义不大。
还有一个很重要的点是,这个模块具有上电复位功能,上电之后的前46个时钟输出的都是复位状态,第46个时钟之后bus_struct_reset和interconnect_aresetn恢复,再经过16个时钟peripheral_reset和peripheral_aresetn恢复,再经过16个时钟mb_reset恢复。