FPGA中的PLL锁相环
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Cyclone系列FPGA具有锁相环(PLL)和全局时钟网络,PLL具有时钟的倍频、分频、相位偏移、可编程占空比和外部时钟输出。
每一个Cyclone的FPGA包括多达两个的PLL,如下表所示:
下面用实例的方式说明PLL的用法;
通常的接口如下表,作用
实验要求:(1)开发板的频率为50Mhz。将其倍频为100Mhz,和200Mhz,并且仿真运行。
(2)将倍频后频率输出在开发板上LED上观察两个灯
实验步骤:
(1)建立一个工程,工程名为PLL_prj;
(2 )新建一个verilog文件,开始代码的编写;
module PLL_prj(clk, rst_n, clkc0, clkc1);
input clk; //时钟输入(50M)
input rst_n; //复位
wire clkc0; //100M
wire clkc1; // 200M
wire locked; //检测是否有效
endmodule
(3)在软件中设置锁相环
之后就会弹出来如下图所示页面
上边有5个选项卡(不同版本可能有点差别)第一个里面如下
创建上面说到复位和检测
第二页默认就可以了
第三页
不同的器件能够建立输出个数也不一样这里我们用前俩个
一些文件的输出
配置完成之后
到这个时候就已经在软件中配置好了PLL 接下来就是列化了
打开文件复制里面的代码到刚开始建立的.v文件中修改补充完全代码如下:
module PLL_prj(
clk,
rst_n,
led0,
led1
);
input clk; //50M
input rst_n; //rest
output led0;
output led1;
wire clkc0; //100M
wire clkc1; //200M
wire locked;
PLL_ctrl PLL_ctrl_inst (
.areset ( !rst_n ),
.inclk0 ( clk),
.c0 ( clkc0),
.c1 ( clkc1 ),
.locked ( locked )
);
reg[23:0] cnt0;
reg[24:0] cnt1;
always @(posedge clkc0 or negedge rst_n)
if(!rst_n) cnt0<=24'd0;
else cnt0<=cnt0+1'b1;
assign led0=cnt0[23]
always @(posedge clkc1 or negedge rst_n) if(!rst_n) cnt1<=24'd0;
else cnt1<=cnt1+1'b1;
assign led1=cnt1[24]
endmodule
下载到开发板中;