以前总是不懂,需要不同的频率不是很简单么,直接用程序分频就可以了 ,干嘛来个定制宏呢?(实际上是用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
文章评论(0条评论)
登录后参与讨论