使用时钟IP核(含工程源码)

基于 ZYNQ MINI开发板

一、文档实现功能介绍

本文档实现在 VIVADO 下面新建一个 FPGA 开发工程,然后调用时钟锁相环IP通过输入的50M时  钟产生100M甚至更高的时钟源,在学习7系列的始终锁相环IP的使用的同时,学会如何在VIVADO下使 调用IP核。实现效果:锁相环时钟输出,最后驱动流水灯模块。 工程新建方法请参考文档《开发软 件安装和介绍/VIVADO简介及软件下新建ZYNQ工程教程》。

二、ZYNQ 工程建立

起始页(或file->Project->New)创建新工程(CreateNew Project)
向导起始页面点击 Next- >
ProjectName(工程名)工程名:fpga_04_pll_clock工程路径: (自己选择,尽量不要有中文路径)勾选Create ProjectSubdirectory,点击Next- >
AddSource(添加设计源文件)点击 Next- >
AddExsixtingIP(添加已有的 IP)点击 Next- >
AddConstraints(添加已有约束文件)点击 Next- >
DefaultPart(默认配置,芯片选型)Family->Zynq-7000Package- >clg400Speed->7010选-1,7020选-27010版本选择目标器件:xc7z010clg400-17020版本选择目标器件:xc7z020clg400-2 点击 Next- >
NewProjectSummary(新建工程概况)确认工程信息,选型等,点击 Finish 完成

三、时钟模块IP调用及实现

工程管理栏点击 Add Sources 添加新建文件:pll_clock_top.v,模块名pll_clock_top,添加新建完成 之后点击工程管理栏的PROJECT MANAGER下的IP Catalog:

使用时钟IP核(含工程源码) - 第1张

调用IP核 。我们调整下窗口布局,并且将新弹出的IP Catalog窗口最大化。读者在 使用VIVADO的时候,多多熟悉一下软件界面,很多时候界面布局和工具栏,功能导航界面 都跟传统的有些区别,在使用的时候多多摸索,多多熟悉,毕竟软件很强大,使用上也有些 新颖之处,多多使用就好。我们在IP Catalog输入clock,下拉界面找到clocking wizard并  且双击,打开IP配置界面:

使用时钟IP核(含工程源码) - 第2张

修改配置与下图保持一致:

使用时钟IP核(含工程源码) - 第3张

输出时钟配置如下,只输出一路时钟, 100M频率:

使用时钟IP核(含工程源码) - 第4张

右边下拉界面,最下面设置reset信号为低有效,最后点击OK完成配置:

使用时钟IP核(含工程源码) - 第5张

弹出对话框,点击OK:

使用时钟IP核(含工程源码) - 第6张

最后,生成输出文件对话框,我们点击Generate

使用时钟IP核(含工程源码) - 第7张

我们回到Sources界面,可以看到, Design Sources出现了clk_wiz_0的IP核添加进来了。点 击左边IP核的箭头,打开IP的架构。

使用时钟IP核(含工程源码) - 第8张

弹出的对话框点击OK:

使用时钟IP核(含工程源码) - 第9张

Sources下的Design Sources的IP核下出现了一个时钟模块的顶层.v文件。我们双击打 开他,可以看到模块的名称和接口信号。我们将这个时钟模块例化到pll_clock_top.v里面。

使用时钟IP核(含工程源码) - 第10张

最后,整个pll_top_top.v文件代码如下:

module pll_clock_top(
  output reg [3:0] led,  // LED4 --- LED1, 1  on, 0 off
  input           clk, // FPGA PL clock,input 50 MHz
  input           rst_n // FPGA reset pin
 );

  reg [31:0] cnt;
  reg [1:0]  led_on_number;

  wire clk_out1;
  parameter CLOCK_FREQ  =100000000;
  parameter COUNTER_MAX_CNT=CLOCK_FREQ/2-1;//change time 0.5s

  //clock pll inst
    clk_wiz_0 clk_wiz_0_inst
    (
    .clk_out1(clk_out1),
    .resetn(rst_n),
    .locked(),
    .clk_in1(clk)
    );
    always @(posedge clk_out1, negedge rst_n) begin
      if(!rst_n) begin
      cnt <= 32'd0;
      led_on_number <= 2'd0;
    end
    else begin
      cnt <= cnt + 1'b1;
      if(cnt == COUNTER_MAX_CNT) begin//计数0.5s
        cnt <= 32'd0;
        led_on_number <= led_on_number + 1'b1;
      end
    end
  end
  always @(led_on_number) begin
    case(led_on_number)
      0: led <= 4'b0001;
      1: led <= 4'b0010;
      2: led <= 4'b0100;
      3: led <= 4'b1000;
    endcase
  end
endmodule

先进行综合,然后绑定管脚,保存管脚约束文件名pll_test_top。最后,综合布局布线 生成比特文件,我们下载到板子上,可以看到,流水灯比我们之前的实验效果要快一倍。因为 我们时钟倍频100M速度,而之前流水灯的时钟直接使用外部晶振,速度是50M。

本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/9298.html