TA的每日心情 | 开心 2017-2-14 08:56 |
---|
签到天数: 18 天 连续签到: 1 天 [LV.4]偶尔看看III
|
在设置PWM的时候,需要用到锁相环,即常见的PLL。看一下百度百科的定义PLL(Phase Locked Loop):为锁相回路或锁相环,用来统一整合时脉讯号,使高频器件正常工作,如内存的存取资料等。许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。顾名思义,玩过单片机的都知道内核有时钟有分频和倍频电路,锁相环就是干这个的。
时钟是控制器的心脏,为每一次行动提供所需要的跳动。有时候设备不同的外设工作在不同的频率,或者同频不同相,都可以用到PLL技术。MAX10内部有一个时钟管理模块。如果你看datasheet仔细的话,你会看到这部分的介绍。下面我们来以一个简单的例子来介绍PLL的使用。
首先肯定是要新建一个工程max10PLL,在工具菜单下有一个IP Catalog,点击。在编程界面的最右边出现如图1所示的列表。
双击ALTPLL,进入PLL设置页面。先为你的PLL起个名字吧。然后点击OK,进入设置页面。
将输入频率修改为板卡的外设晶振的频率50M,如图2所示。
然后点击【3】outputclocks页面,如图3所示。
将频率改为1M。占空比保持50%就可以了。在这里你会发现,提供了5个时钟可以设置,很丰富吧。
直接进入【5】Summary界面,勾选mypll_inst.v模板文件,如果你要把PLL用在图形中,就勾选mypll.bsf文件。如图4所示。Finish就可以了。
在项目文件夹中,找到刚定义的锁相环文件,如max10pll_inst.v。打开将其拷到主文件中,如下图所示。
max10pll max10pll_inst ( .areset ( areset_sig ), .inclk0 ( inclk0_sig ), .c0 ( c0_sig ), .locked ( locked_sig ) );在主文件稍加修改后,就可以应用了。如下面代码所示。
module max10PLL(clk,led);input clk;output reg led;reg [19:0] cnt;wire clk_1M;wire lock;max10pll max10pll_inst ( .areset ( areset_sig ), .inclk0 ( clk), .c0 ( clk_1M ), .locked ( lock ) ); always @(posedge clk_1M) begin cnt <= cnt +1'b1; if(cnt == 20'd1000000) begin led <= ~led; cnt<=20'b0; end endendmodule接下来就是编译综合,仿真,配置引脚,Programmer。看看效果吧,是不是和预想的一样呢! |
|