原创 第一次使用定制的pll

2011-3-7 09:25 2250 12 12 分类: FPGA/CPLD

以前总是不懂,需要不同的频率不是很简单么,直接用程序分频就可以了 ,干嘛来个定制宏呢?(实际上是用Mega Wizard Plug)听起来很玄乎。

今天简单用了下,发现以前想得太简单了。主要是altera器件中用的pll并不是纯逻辑电路,里面用了模拟电路的,比如VCO,PFD等,而模拟电路是很难编程的。所以cyclon器件一般是有2个pll,cyclonII一般有4个,这也解决了以前的疑惑——既然pll是逻辑电路,怎么说cyclon器件中只有那么少的pll呢,难道我不能牺牲逻辑资源弄很多个么(当然这种想法是很可笑的。)

下面是照着特权同学的代码改的,用的DE1开发板,去掉了原代码的两行,个人感觉没什么用的,呵呵。

当然定制pll的步骤就不说了,特权的视频很清楚,还有如果哪位想深究altera器件中的pll,本论坛中有一篇文章《使用Cyclone器件中的PLL》,写得非常详细。

module PllTest(Clk50Mhz,RstN,LED1,LED2);//本测试最终可以看到红灯闪烁的率//大约是绿灯的4倍,因为输入的是50Mhz,经过pll变成yige一个100Mhz,一个25Mhz。

 

input RstN;

input Clk50Mhz;

output LED1,LED2;   

 

wire Clk25Mhz,Clk100Mhz,locked;

 

PllCreate   PllCreate_inst (

    .areset ( !RstN),

    .inclk0 ( Clk50Mhz ),

    .c0 ( Clk100Mhz ),

    .c1 ( Clk25Mhz ),

    .locked ( locked )

    );

 

reg[24:0]cnt1;

 

always@(posedge Clk100Mhz or negedge RstN)

    if(!RstN)cnt1<=25'd0;

    else cnt1<=cnt1+25'd1;

assign   LED1=cnt1[24];//控制fpga上的红灯,大概0.32秒闪一次

 

reg[24:0]cnt2;

always@(posedge Clk25Mhz or negedge RstN)

    if(!RstN)cnt2<=25'd0;

    else cnt2<=cnt2+25'd1;

assign LED2=cnt2[24]; //控制fpga上的红灯,大概1.28秒闪一次

 

endmodule

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /3 下一条