我有2个与动态调整DCM相移有关的问题。
关于DCM的其他所有工作正常。
1.关于溢出状态位似乎存在一些相互矛盾的信息。
我在故障排除指南中看到,如果设置了溢出位,则应重置DCM。
我还在用户指南中看到溢出位保持设置,直到相位调整通过自身温度补偿调整或手动调整(至少我是如何读取它,pg72)降低到极限以下。
我在
仿真中看到的是,一旦相位递增到溢出位置位的位置,递减相位不会导致该位被清零,并且一旦该位置位,实际相位也不会递减。
看起来溢出位锁定了相位变化,这一方面是有意义的。
但是在
电路板上,一旦达到限制就会设置溢出位,并通过一次递减清除,我可以进一步将实际相位减少回0。
2.出于调试原因,我在DIRECT模式下使用DCM。
在我增加相位的时候,在溢出位限制递增代码之前,我只能达到128。
为什么我不能达到1023?
直接模式是否从相位控制电路中移除任何智能并允许0-1023范围,无论温度和其他变量如何?
但是,在设置溢出位之前,我只能达到638,但不确定是什么原因。
我需要一些关于正确使用相位溢出位的指导。
来自inst的泛型:
CLKDV_DIVIDE => 2.0, - 除以:1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 - 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0
,15.0或16.0 CLKFX_DIVIDE => 1, - 可以是1到32之间的任何整数CLKFX_MUL
tiPLY => 2, - 可以是2到32之间的任何整数CLKIN_DIVIDE_BY_2 => FALSE, - TRUE / FALSE使CLKIN除以2
feature --CLKIN_PERIOD => 2.857143, - 以ns为单位指定输入时钟的周期,单位为1.25至1000.00。CLKOUT_PHASE_SHIFT =>“DIRECT”, - 指定NONE,FIXED, - VARIABLE_POSITIVE,VARIABLE_CENTER或DIRECT CLK_FEEDBACK =>“的相移模式
1X“, - 指定时钟反馈NONE或1X DCM_PERFORMANCE_MODE =>”MAX_SPEED“, - 可以是MAX_SPEED或MAX_RANGE DCM_AUTOCALIBRATION => TRUE, - DESKEW_ADJUST =>”SYSTEM_SYNCHRONOUS“, - SOURCE_SYNCHRONOUS,SYSTEM_SYNCHRONOUS或 - 整数
从0到15 DFS_FREQUENCY_MODE => HIGH, - HIGH或LOW频率模式,用于频率合成DLL_FREQUENCY_MODE => HIGH, - LOW,HIGH或HIGH_SER频率模式,用于DLL DUTY_CYCLE_CORRECTION => TRU
E, - 占空比校正,TRUE或FALSE FACTORY_JF => X“F0F0”, - FACTORY JF值建议设置为X“F0F0”PHASE_SHIFT => 0, - 从-255到1023的固定相移量
SIM_DEVICE =>“VIRTEX5”, - 设置目标设备,“VIRTEX4”或“VIRTEX5”STARTUP_WAIT => FALSE
相位控制代码片段:
当s_not_locked => - 等待DCM锁定if(dcm_locked ='1')然后状态else state end if;
当s_check_phase => - DCM现在被锁定,看看它是否需要相位调整if(dcm_phase(9 downto 0)= cpu_phase(9 downto 0))然后 - 不需要相位调整状态else else state end if;
当s_adjust_phase => if(dcm_phase(9 downto 0)> cpu_phase(9 downto 0))则 - 减少DCM阶段o_psincdec o_psen dcm_phase elsif phase_ovrflw ='0'然后 - 如果不是极限,则增加DCM阶段o_psincdec o_psen dcm_phase end if;
s_check_for_adjust_done =>时的状态 - 如果CPU有,则等待先前的相位调整完成
- 如果(psdone ='1'或cpu_phase_setting_change ='1')则改变相位设置(如果错过了完成脉冲则防止锁定)然后状态else状态结束if;
谢谢。
此致,Ray Haynes,Ostendo Technologies,Inc。Carl***ad,CA