CrazyBingo

Chapter 14:国产FPGA之内部PLL的使用

0
阅读(5683)

第十四章

国产FPGA的之内部PLL的使用

前前一节不解的一个问题,必须使用PLL才能为MSS和Fabric提供时钟,明明不用PLL跑的好好的。。。但听人说也许是推介是专用,故没办法,我们开始PLL吧。。。

只用外部晶振,才10M,非常的不爽。据说Astro II能够跑到150M ,没有PLL怎么行呢。。。但是这PLL出了GUI还真Quartus II的配置有点点不一样,因此这一部分单独提取出来作为一个章节,不要见怪哦。。。PLL配置,不仅仅是的可以使用低俗外部晶振来保证稳定,而且接下来使用内部晶振或者无源晶振的时候也会用到,还是蛮重要的。

相信大家肯定会Quartus II或者ISE吧,而不是直接学国产FPGA的,您可以自己对照。接下来且听Bingo一一道来!

一、PLL的介绍

wps_clip_image-25782

(1)PLL接口

wps_clip_image-28308

据说支持5~350M的时钟源,而输出能达到10~350M。这应该是针对PLL而言的吧。。

clkout[x]支持动态时钟,这好像Altera Cyclone IV才开始支持的。。。

v Clkin简单的说就是PLL的时钟输入

v Fbclk反馈时钟,用到再说哈

v Clk_cpu是8051内核的时钟吧。。。

v Pll_lock和pll_reset和Quartus II中的一样。。

(2)PLL配置特别的功能

Astro II的PLL非同Altera的PLL ,这个Wozard还包括了全局时钟选择电路,MSS(8051内核)和Fabric(总线架构)的时钟的配置

a) 全局时钟选择

wps_clip_image-17031

Clk0,clk1,clk2,clk3是IC外部输入的时钟,但是FPGA内部的全局时钟,尤其是CLK[0],CLK[1],确实可以选择的(默认为外部输入clk0,clk).如下:

² CLK[0],是可以选择FPGA外部专用时钟管脚clk0或者内部震荡时钟

² CLK[1],可以选择FPGA外部专用时钟管脚clk1或者外部专用晶体时钟crystal(无源晶振的时钟)

² CLK[2],CLK[3]只能分别使用FPGA外部专用时钟管脚clk2和clk3。

n 其中CLK[0],CLK[1]默认为外部clk0,clk1输入,如下所示。

wps_clip_image-18103

b) 全局时钟输出配置

wps_clip_image-31743

这个很特殊,前面我讲述Astro II全局时钟架构的时候分析过,Astro II共有8个全局时钟,而除了CLK[0],CLK[1],CLK[2],CLK[3]这四个全局时钟以外,就是以上Clkcpu,Clkout0,Clkout1,Clkout2这四个全局时钟网络。

v input0可以选择:PLL的输出时钟clkout0,clkout1或者clkout2

v Input1可以为全局时钟CLK[0],CLK[1],CLK[2],CLK[3]

wps_clip_image-4300

c)  Clkcpu,Clkout0,Clkout1,Clkout2配置

wps_clip_image-1509

如上图所示,默认情况下。

v CLK[0]为clk0

v  CLK[1]为clk1

v Clkcpu为input0的pllout[0]

v Clkout0为input0的pllout[0]

v Clkout1为input0的pllout[0]

v Clkout2为input0的pllout[0]

v

根据前面的 介绍,应该清楚什么是用来干什么的了吧。。。。一般在设计中,如果使用了PLL,我们就不会再使用相应PLL的输入的那个时钟,因为时序的原因。因此用Clkout0,Clkout1,Clkout2来作为全局时钟,同样能满足全局时钟。

唯一需要注意的是,如果用了MSS即8051内核,就不许使用PLL来配置了,因为Clkcpu默认输入为PLL的clkout0.

二、PLL的配置

(1)打开ip配置向导,如下图所示

wps_clip_image-22476

wps_clip_image-11121

下面是Quartus II, GUI还是挺像的

wps_clip_image-32168

(2)明显Next,选择PLL,继续Next

wps_clip_image-25599

(3)这边还是跟Quartus II差不多,且看下图。

wps_clip_image-3252

(4)首先设置PLL输入10M外部晶振时钟,如下图所示:

wps_clip_image-26457

wps_clip_image-24908

(5)火大了,既然手册说最高支持150M ,那就使劲虐待吧!

wps_clip_image-32059

(6)如下所示,我们的PLL输入输出示意图

wps_clip_image-21962

(7)设置全局时钟CLK[0] CLK[1]

wps_clip_image-10745

wps_clip_image-11014

CLK[0],CLK[1]默认为clk0,clk1,可以根据需要选择内部振荡器,或者外部晶体时钟

(8)设置Clkout全局时钟

wps_clip_image-10620

如上图所示,我们没有用到MSS,自然Clkcpu可以不管,disable。也没有用到Clkout1,Clkout2,也可以忽略--disable。我们需要注意的是Clkout0,而这刚好是我们默认的inpout0(PLL输出时钟)的pllout[0],因此默认即可。

(9)完成任务

wps_clip_image-31222

三.PLL的使用

(1)PLL ip配置完成状态

wps_clip_image-29414

wps_clip_image-7975

(2)myPLL的例化

注意,正如前面所说的那样,clkcpu是MSS的时钟,我们没用到,clkout0是pllout0,被我配置成了150M ,clkout2,clkout3默认也是pllout0,由于软件默认配制成了全局时钟,用户可以随便选择一个时钟即可,例化如下所示:

wps_clip_image-4771

(3)其实最好用示波器看看这150M 怎么样,但我“矮戳穷”,没有示波器,所以只能看流水灯了。。。修改water_led delay_05s 延时,如下:

wps_clip_image-22309

module water_led

(

input clk, //10MHz 外部晶振

output [7:0] led_data //8位LED灯

);

wire clkout0; //50M全局时钟

myPll u_myPll

(

.clkin (clk), // Reference clock input.

.clkout0 (clkout0) // Main clock output.

);

//-----------------------------

//0.5s计数

reg [26:0] cnt;

parameter DELAY_CNT = 27'd25_000000;

always@(posedge clkout0)

begin

if(cnt < DELAY_CNT)

cnt <= cnt + 1'b1;

else

cnt <= 27'd0;

end

wire delay_05s = (cnt == DELAY_CNT) ? 1'b1 : 1'b0;

//------------------------------

//流水灯

reg [7:0] led_datar = 8'd0;

always @(posedge clkout0)

begin

if(delay_05s)

led_datar <= led_datar + 1'b1; //递增

else

led_datar <= led_datar;

end

assign led_data = ~led_datar; //LED 低亮

endmodule

(4)F4--综合,全编译。

wps_clip_image-21935

NND这样也要多花钱啊。。。LE好贵。。

(5)下载,不用我说了,看看150M效果咋样。。。

-------------------------------------------------无奈的分割线--------------------------------------------------

实践证明,验证结果,Astro II 挂了,流水灯流成SB了。。。这货丫的1/10的LE布局布线都over,伤不起啊~~~~(>_<)~~~~

降速验证

(1)打开向导

wps_clip_image-15122或者wps_clip_image-22614

(2)Edit an existing Design,如下

wps_clip_image-1782

(3)修改PLL输出为50MHz,Finish,run project

wps_clip_image-23487

(4)Download,验证测试。。。

a) 10MHz→活着的

b) 50MHz→活着的

c) 60MHz→活着的

d) 70MHz→活着的

e) 80MHz→活着的

f) 85MHz→活着的

g) 90MHz→蜗牛的速度→跑飞了

h) 100MHz→挂掉了

i) 我还需要继续往上面测试吗???我看我们跑50MHz以内就好了。。。

为什么官方说Astro II可以跑150MHz,请问这是为啥???这样的逻辑还需要约束吗?

wps_clip_image-8082