赞
踩
PLL (Phase Locked Loop),锁相环,是一种反馈控制电路。其功能主要是时钟倍频、分频、相位偏移和可编程占空比。
1、新建pll_test工程,点击Project Manager界面下的IP Catalog。
2、再在IP Catalog界面里搜索框搜索Clocking,找到下面的Clocking Wizard,双击打开配置界面。
3、进入配置界面。默认这个Clocking Wizard的名字为clk_wiz_0, 可以修改。在第一个界面Clocking Options里,输入的时钟名字可以修改。输入的时钟频率也可以修改,这里我设置为20Mhz。
4、在Output Clocks界面里可以选择clk_out1~clk_out4四个时钟的输出,这里我只选择一个时钟clk_out1,频率我设置为50Mhz。这里还可以设置时钟输出的相位,我没有设置。
5、在弹出的对话框中点击Generate按钮生成PLL IP的设计文件。
pll_test工程中自动生成一个clk_wiz_0.xci,双击可以修改IP的配置。
1、在IP Sources界面找到clk_wiz_0.veo文件,文件中是IP的例化模板。我们只需要将文件中内容复制粘贴到我们verilog程序中,对IP进行实例化。
2、我们在创建一个顶层设计文件来实例化这个PLL IP, 编写pll_test.v代码如下。注意PLL的复位是高电平有效,也就是高电平时一直在复位状态,PLL不会工作。而rst_n是低电平复位,因此需要反向连接到PLL的复位。
- `timescale 1ns/1ps
- module pll_test(
- input clk ,//20m系统时钟
- input rst_n ,
-
- output clk_out//pll clk output
- );
-
- //参数定义
- wire locked;
-
- //ip核例化
- clk_wiz_0 instance_name
- (
- // Clock out ports
- .clk_out1 (clk_out ), // output clk_out1
- // Status and control signals
- .reset (~rst_n ), // input reset
- .locked (locked ), // output locked
- // Clock in ports
- .clk_in1 (clk )
- );
- endmodule
3、保存工程后,pll_test自动成为了top文件,clk_wiz_0成为Pll_test文件的子模块。
1、我们在创建一个仿真激励文件来仿真这个pll_test顶层文件, 编写pll_test_tb.v代码如下。
- `timescale 1ns / 1ps
- //
- // Module Name: _led_test_tb
- //
-
- module pll_test_tb;
- // Inputs
- reg sys_clk;
- reg rst_n;
-
- // Outputs
- wire clk_out;
-
- // Instantiate the Unit Under Test (UUT)
- pll_test u_pll_test (
- .clk(sys_clk), //system clock 20Mhz on board
- .rst_n(rst_n), //reset ,low active
-
- .clk_out(clk_out), //pll clock output 50Mhz
-
- );
-
- initial begin
- // Initialize Inputs
- sys_clk = 0;
- rst_n = 0;
-
- // Wait 100 ns for global reset to finish
- #100;
- rst_n = 1;
- // Add stimulus here
- #20000;
- // $stop;
- end
-
- always #10 sys_clk = ~ sys_clk; //5ns一个周期,产生50MHz时钟源
-
- endmodule
2、运行后PLL的lock信号会变高,说明PLL IP锁相环已经初始化完成。clk_out有时钟信号输出,输出的频率为输入时钟频率20Mhz的5/2, 为50Mhz。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。