赞
踩
总的来说,GTP的复位就是你想怎么复位都可以,支持整体复位,单个组件复位。我们也可以不复位,核不会因为我们没有进行软复位就不对核进行复位,在上电之后会自动进行一系列的复位,不随你的意志而转移。可以说GTP核复位做得非常的灵活、全面,但也因此多了非常多的复位相关信号。
本章节不会按照《GTP的时钟结构》那般细说每个信号了,因为涉及到了单个组件,而单个组件的介绍会在后文进行,所以复位相关的逻辑也会随组件的介绍来阐述,本文主要介绍GTP核上电后必须进行的复位逻辑,在核内部主要设计如下两个模块的内容,其实这两个模块的内容差别不大,了解一个另外一个也大概清楚了。
涉及到的对外接口信号如下所示,一共六个,分别对应发送模块和接收模块的复位输入与输出。
首先来说第一部分,发送部分的复位逻辑。也就是“gtp_core_TX_STARTUP_FSM.v”这个模块。如下图所示,有用的信号很少,才12个,我们先看下每个信号的含义,在来分析模块内部的逻辑。
我对接口信号进行了简单的分类,可分如下7类
1、STABLE_CLOCK和TXUSERCLK:
两个时钟,第一个是系统时钟,第二个是“gtp_core_GT_USRCLK_SOURCE”产生的用户时钟,对该时钟的描述详见第三章,也可以简单的理解为两个时钟。
2、SOFT_RESET:
用户接口的软复位,高电平有效,我们可以再任何时刻将其拉高,对整个发送模块进行复位。
3、PLL0_RESET、PLL0REFCLKLOST和PLL0LOCK
第一个是对“gtp_core_common”模块的复位信号,第二、三分别是该模块的状态,也就是我们上文说的非常重要的“GTPE2_COMMON”这个原语的复位。
4、GTTXRESET和TXRESETDONE
第一个是对“GTPE2_CHANNEL”发送通道的复位,第二个是复位完成信号。
5、MMCM_RESET和MMCM_LOCK
第一个是对“gtp_core_GT_USRCLK_SOURCE”模块的发送部分PLL的复位,第二个自然是复位完成锁相信号。
6、TX_FSM_RESET_DONE
本模块的复位状态机执行完成,复位完成。
7、TXUSERRDY
拉高表示TXUSRCLK和TXUSRCLK2稳定,复位完成,是告知“GTPE2_CHANNEL”发送模块的。
有没有发现什么呢?这些接口就是对GTP核主要模块的复位以及相应的复位完成信号,由此,也大致了解该模块干什么了,就是对各个模块进行逐个复位。由下图所示,在FPGA上电后,首先是对PLL进行复位,也就是“GTPE2_COMMON”,然后对“GTPE2_CHANNEL”复位,完成后既可以正常运行。
然后我们打开该模块翻一番,内容还真不是,但看到有下面一段注释,优秀啊!!复位状态机每部干什么都写得清清楚楚,所以我们就应该多看别人的代码,多看优秀的代码,会对自己水平的提升大有裨益,这点我深有体会。
这个模块主要内容就是状态机,当我们把这个状态机搞懂了,也就明白这个模块的工作逻辑了。好了,接下来看看人家说了什么吧。
0、“INIT”
在上电500ns后启动复位如下图 ,如果有软复位,就一直是0,当释放软复位就开始计数,直到计数到“WAIT_MAX”,将init_wait_done拉高,随后复位状态机开始工作,从INIT状态跳转到“ASSERT_ALL_RESETS”状态。
我们看下仿真,确实,如上述代码
1、“ASSERT_ALL_RESETS”
从这个状态机的名字也能看出来,是置复位,也就是给“GTPE2_COMMON”、“GTPE2_CHANNEL”和“MMCM” 置复位信号。如下代码红色框图中,对“GTPE2_CHANNEL”和“MMCM”的复位信号是直接置一,而对“GTPE2_COMMON”的复位需要满足一定条件,就是“refclk_lost==0”,“refclk_lost”为高电平表示PLL失锁。所谓的失锁就是PLL的相位频率检测器的参考时钟丢失,这时候复位时没有意义的,故须检测到该信号为低电平,才可对其进行复位。
我们看下跳转条件,当检测到pll0lock_sync为低电平时,且对PLL置复位了才进行跳转,首先来了解下pll0lock_sync信号的作用,实际上就是PLL0LOCK,此信号表示PLL频率锁定信号,高电平有效,表示PLL频率在预定容差范围内。满足此条件,收发器及其时钟输出才可靠。而置复位后,这个信号理应为低电平。
此时时序图如下图所示,在此我们也应该注意到,对PLL的复位只时一个时钟周期。
2、WAIT_FOR_PLL_LOCK
这个状态机就是等待一段时间,1000个时钟周期,10us
3、RELEASE_PLL_RESET
等待pll0lock_sync信号,也就是完成PLL锁存,如果超过2ms则重新复位,而且会通过“retry_counter_int”这个信号对超时的次数进行限制。
4、WAIT_FOR_TXOUTCLK
将对“GTPE2_CHANNEL”的置位信号取消,并等待10us
5、RELEASE_MMCM_RESET
该状态有两个目的,一是释放对MMCM的复位,二是检测“MMCM_LOCK”信号,也就是PLL频率是否在预定容差范围内,如果是则该信号为1,否则为0。如果超过一定时间未检测到锁定信号,则回到“ASSERT_ALL_RESETS”状态。
6、WAIT_FOR_TXUSRCLK
等待,同4
7、WAIT_RESET_DONE
GTP复位完成,逻辑同复位“MMCM”差不多,这里等待的是“txresetdone_s3”这个对“GTPE2_CHANNEL”的复位完成信号。
8、DO_PHASE_ALIGNMENT
忽略,对外接口的信号都没有引出。
9、RESET_FSM_DONE
复位完成,我们可以发现这个是锁存的,不会跳转到IDLE状态,所以这个模块可以说是上电初始化,也就是为什么叫“gtp_core_TX_STARTUP_FSM”的原因了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。