[其他芯片] 安路SparkRoad开发板测评(5) PLL IP与频率计

cruelfox   2022-4-30 09:01 楼主

  PLL是FPGA中常用到的资源,用来合成外部晶振提供的频率以外的时钟。EG4S20带了四个PLL,使用PLL资源也是通过IP核的形式。

 

  在TD的IP Generator中选择PLL,出现第一个对话框,将看到一些选项了。

203159yxf4sxkfjn3wkdwj.png

  PLL最简单的配置方式是指定输入频率和一个输出频率,让工具计算分频和倍频系数。SparkRoad上FPGA外接24MHz有源晶振,所以填写上24,其它可以默认试试,点Next到下一页。

203159k67qc7c7gh1quc7w.png

  例如只需要一个输出时钟,50MHz,就在Use C0 clock后面填上50. 注意到旁边显示的实际时钟是48MHz! 在下面的信息框中提示了,VCO振荡器的频率是1008(MHz),M和N计数器分别是2和1. 也就是输出等于输入两倍,为什么没有做到指定的50MHz呢?

  我以前用Altera的FPGA PLL时,没有遇到这样的情况。

 

  点对话框上面Parameter setting,切换到手动指定参数模式。

203159wll8gnal8csci554.png

  注意到在”Use C0 clock”旁边的输入变成了”Division Factor”的设置,给出的数值是21. 调小调大这个数,输出频率还是48MHz没变,但是下面显示的VCO频率会变化。如果VCO频率低于300MHz, 软件会提示错误:

203159n618heufhf1eweu0.png

  那么决定输出频率的应该是上面的两个数字:division factor与multiplication factor. 将输入时钟除以一个数,再乘一个数——得到期望的输出频率,但VCO频率是这个频率的倍数,由下面那个因子决定。

  现在输入频率是24MHz,就注定最多是除以2,不然,输入相位比较器的频率过低不能工作:

203159smy46x6oo19he9ev.png

  只能是得到较高的VCO频率以后再分频下来。

 

  勾选”Use C1 clock”等,再试其它系数,看能组合怎样的输出频率吧。

203159vweeffncoqm3qrft.png

  看来另外几个Division Factor都是从VCO频率除上一个值,对应到输出时钟。而C0旁边的数才是调节VCO频率的。

 

  要从24MHz输入频率得到50MHz PLL输出,究竟应该怎么算?24和50的最小公倍数是600,那么将VCO频率设置为600MHz就该可以了吧。然而现在不能直接指定这个倍数,因为是24/12*25=600, 输入频率是不能除以12的(2MHz太低)

  在网上搜了下这个问题,线索是要用”No compensation”模式,就是在第一个对话框里面选,不能用Normal模式了。退回去修改一下,然后:

203159lkkbizyy3ybrs839.png

  这样可以输出50MHz了。注意到现在填写的”clock multiplication factor”对频率的控制和前面不同。对比一下软件给出的PLL逻辑框图,反馈环路不同了:

203159hwllyywsfl1f616e.png

 

  也就是,No compensation模式下,从VCO输出取出分频,给相位比较器;而Normal模式下,是从输出的C0时钟取出分频,给到相位比较器的。我在PLL方面的经验少,不知这两种方式的优劣。

  现在为了实现24MHz到50MHz频率合成,是必须用No compensation模式的。

 

  好了,编写一个频率计,来测试PLL生成的时钟频率吧。

  利用SparkRoad的数码管,显示4位数字表示的频率。在前面编写的数值转换十进制显示逻辑基础上,增加一个周期复位的计数器,用来测量PLL输出频率。

  这个计数器工作在PLL输出时钟频率上,与其它部分(控制和显示,工作在24MHz)是异步的,因此我用了跨时钟域上升沿检测。比如,计数器工作频率50MHz,每当检测到一个1MHz时钟的上升沿时,就将计数器复位,那么计数器值就会是0,1,2,…,48,49,0,1…这样循环。在复位的时候,把计数器值锁存到另外一个寄存器,就大概实现频率计了。

203159nf6312p001yphnfm.png

  我在这里多加了一些处理:一是频率显示末位是0.1MHz,二是加了一点类似四舍五入的功能,因此实际复位计数器的时间更长。

203159tjsu04pw44o9904o.png

  给频率计数器的异步参考时钟是主时钟24MHz的1/960.

 

  运行效果:

203159du14k67u8k017m15.jpg

 

  提高PLL输出频率,这里面的频率计数器能跑到多快呢?

  一直到400MHz还能正常显示:

203159nk8kliwpw795chgx.jpg

  420MHz的时候已经挂掉了:

203159u5a8a8q5be5aob5x.jpg

 

回复评论 (1)

看来,要进行24MHz到50MHz频率合成,用No compensation模式是必须用的。

点赞  2022-4-30 09:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复