轻松实现高速串行I/O
轻松实现高速串行I/O
轻松实现高速串行I/O
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
SERDES 示例资料—RocketIO X 收发器概述<br />
状态机通过跟踪合法和非法的同步报头来完成其工作。系统复位后,block_lock 信号为<br />
0,此时状态为 LOCK_INIT。下一个状态是 RESET_CNT,所有的计数器清零。若 test_sh<br />
为 1,则下一个状态是 TEST_SH,即检测同步报头的合法性。如果报头是合法的,下一个<br />
状态是 VALID_SH,否则下一个状态为 INVALID_SH。<br />
从VALID_SH状态起,如果sh_cntis比属性sh_cnt_max小并且test_sh为1,则下一个状态<br />
为TEST_SH。如果sh_cnt等于sh_cnt_max并且sh_invalid_cnt为0,则下一个状态为GOOD_64,<br />
此时block_lock信号设置为1。之后开始重复上述过程,并且计数器均清零。<br />
如果TEST_SHsh_cnt和sh_cnt_max相等,但是sh_invalid_cntis大于0,则下一个状态为<br />
RESET_CNT。从INVALID_SH状态起,如果sh_invalid_cnt等于sh_invalid_cnt_max或者<br />
block_lock信号为0,则下一个状态为SLIP,即bit_slip信号变为1,之后跳转到RESET_CNT<br />
状态。如果sh_cnt和sh_cnt_max相等,并且sh_invalid_cnt小于sh_invalid_cnt_max,且block_lock<br />
信号为1,此时跳转回RESET_CNT状态,而不改变block_lock或bit_slip的值。<br />
最后,如果test_sh为高且sh_cnt 小于sh_cnt_max,sh_invalid_cnt小于sh_invalid_cnt_max,<br />
同时block_lock为1,则跳转回TEST_SH状态。需要注意的是为了完成块锁定,状态机必须<br />
连续接收到sh_cnt_max个合法同步报头,而没有接收到非法同步报头。尽管如此,一旦完成<br />
块锁定,在接收到sh_cnt_max number个合法同步报头的同时允许接收sh_invalid_cnt_max-1<br />
个非法同步报头,而不会发生失锁。可见,一旦块锁定之后,失锁的情况很难发生。<br />
适用于所有协议的功能<br />
时钟修正<br />
当接收FIFO写入端的输入数据速率和读取端的输出数据速率不一致时,需要进行时钟<br />
修正。输入FIFO的输入数据速率是由RXRECCLK的频率决定的。从FIFO读取端输出的数据<br />
速率是由RXUSRCLK的频率决定的。<br />
此处仅有一种时钟修正模式:插入/移除idle时隙的时钟修正模式。<br />
插入/移除idle时隙的时钟修正<br />
当CLK_COR_SEQ_DROP属性为低且CLK_CORRECT_USE属性为高时,启用插入/移除idle<br />
时隙的时钟修正。<br />
插入/移除idle时隙的时钟修正模式:首先在比特流中寻找idle时隙,之后在这些idle时隙<br />
位置插入或者移除时隙,从而实现时钟修正。<br />
为使插入/移除idle时隙的时钟修正常运作,用户需要对几个属性进行适当设置。<br />
CLK_COR_MAX_LAT属性设置通过接收FIFO的最大延迟。如果通过接收FIFO的延迟超过<br />
了该值,则移除idle时隙,从而使通过接收FIFO的延迟小于CLK_COR_MAX_LAT的值。<br />
属性CLK_COR_MIN_LAT设置通过接收FIFO的最小延迟。如果通过接收FIFO的延迟小<br />
于这个值,则插入idle时隙,从而使通过接收FIFO的延迟大于CLK_COR_MIN_LAT的值。<br />
由于延迟超过CLK_COR_MAX_LAT而引起的延迟修正,修正后的延迟不会低于<br />
CLK_COR_MIN_LAT。同样,由CLK_COR_MAX_LAT引起的延迟修正,修正后的延迟不<br />
会高于CLK_COR_MAX_LAT。<br />
150·Xilinx