USER_CLOCK_P和USER_CLOCK_N 是vertix 7评估板上频率可配置的差分输入时钟。
On power-up the user clock defaults to an output frequency of 156.250 MHz.User applications can change the output frequency within the range of 10 MHz to 810 MHz through an IIC interface。
这是datasheet中的两句话,这两路差分时钟默认输入为156.250MHz,(在不配置的情况下),可以通过IIC协议对其进行配置,范围在10MHz到810MHz,有没有感觉很方便,哈哈哈哈。。。。下面说下详细配置步骤。(也是为了这一周工作的记录)。
这是板子上的芯片接口图。
这是SI570 芯片寄存器的地址及各个位详细说明。
HS寄存器,000代表十进制数值4,001代表十进制数值5,依次类推。
N1寄存器0000000代表十进制数值1,1111111代表数值128,依次类推。
ok了,这就是它的全部寄存器了,关于RFREQ,稍后会详细说明。
先来说下配置步骤:
1、读取各个寄存器的值,主要是N1、HS、RFREQ。(这个稍后我会给出各个的默认值,所以可以省略)
2、根据这个求出原始晶振频率,即fxatl,f0为默认的时钟输出频率,即156.25MHz
3、设f1为你想要的时钟频率,根据fxatl=f1*HS_1*N1_1/RFREQ_1,计算HS_1、N1_1、RFREQ_1的新数值;;(这里有个重点,要先确定HS_1和N1_1的值,因为要保证f1*HS_1*N1_1这个值在4850到5670之间,开始没注意到这个问题,耽误了一整天。。。。。。。。。。。)确定好这两个值后,再计算出RFREQ_1的数值;
4、冻结SI570芯片,停止时钟输出,为了一会配置寄存器。Freeze the DCO (bit 5 of Register 137).也就是在137那个寄存器的bit5 写1;
5、将第三步计算好的各个新值,分别写入各个寄存器。
6、最少延时10ms后,解冻SI570芯片,即向137寄存器5bit写0,再向135寄存器6bit写1,即NewFreq;(输出新的时钟频率)
下面说下RFREQ这个寄存器,一共38bit,高10bit是整数部分,低28bit是小数部分,所以在运算中,需要先把低28bit的数字除以2^28加上整数部分,再参与运算,求出来的新值则逆这个过程即可,记住要把16进制化成十进制运算奥。
给出各个寄存器的默认值,你可就可以省略了,然后按照新频率直接求出各个寄存器新值,写入即可。
寄存器7:0x01;
寄存器8:0xC2;
寄存器9:0xBC;
寄存器10:0x01;
寄存器11:0xEB;
寄存器12:0xB0;
举个简单的例子,我准备配置125MHz的频率,因为156.25*HS(默认是000=4)刚好等于125*5,所以我只需要把寄存器7重新配置一下即可,先freeze寄存器137,然后写入0x21到寄存器7,然后unfreeze,写入1到NewFreq,大功告成。