Vivado下PLL实验

2023-11-12


前言

本节介绍一下赛灵思锁相环的一个使用方法,我手头的 AC7020 fpga 开发板上面有一个 50MHz 的晶振连接在 PL 端,晶振输出链接到 FPGA 的全局时钟(MRCC),这个 CLK 可以用来驱动 FPGA 内的用户逻辑电路,该时钟源的原理图如图所示:
在这里插入图片描述
但是在我们实际应用当中呢我们可能想要使用特定大小的频率,比如 25MHz 或者 100MHz,那么我们可以使用赛灵思的锁相环的 IP 实现它的时钟分频或者倍频。


一、CMT(时钟管理单元)

1、CMT 简介

Xilinx7 系列器件中的时钟资源包含了CMT(全称 Clock Management Tile,即时钟管理单元),每个 CMT 由一个 MMCM(全称 Mixed-Mode Clock Manager,即混合模式时钟管理)和一个 PLL(全称 Phase Locked Loop,即锁相环)组成,

  • MMCM(混合模式时钟管理):是基于 PLL 的新型混合模式时钟管理器,实现了最低的抖动和抖动滤波,为高性能的 FPGA 设计提供更高性能的时钟管理功能。
    • MMCM 在 PLL 的基础上加上了相位动态调整功能,
  • PLL:为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存的存取数据 等。PLL 用于振荡器中的反馈技术。
    • 锁相环拥有强大的性能,可以对输入到 FPGA 的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟;

MMCM 相对 PLL 的优势就是相位可以动态调整,但 PLL 占用的面积更小,而在大部分的设计当中大家使用 MMCM 或者 PLL 来对系统时钟进行分频、倍频和相位偏移都是完全可以的。

2、FPGA CMT 框图

下图为 7 系列 FPGA CMT 的一个简单的结构,最左边是输入的一些时钟源,最右边是输出。
在这里插入图片描述

3、MMCM 框图

下图是 MMCM 的框图,可以看到它包含 8 个相位的拍 + 1 个可变相位拍
在这里插入图片描述

4、PLL 框图

下图是 PLL 的框图,可以看到它只包含 8 个相位的拍
在这里插入图片描述

二、创建工程

1、创建工程

创建一个名字为 pll_test 的工程
在这里插入图片描述

2、PLL IP 核配置

1、点击 IP Catalog,搜索 clock,找到 Clocking Wizard 并双击
在这里插入图片描述
2、在 Clocking Option 下按如下图进行配置

  • Primitive 选择 PLL
  • Input Clock Information 中的主时钟的输入频率填上我们板子晶振频率:50MHz
    在这里插入图片描述

3、在 Output Clocks 下按如下图进行配置,并点击 OK
我们输出 200MHz、100MHz、50MHz、25MHz 这么四路不同频率的时钟
在这里插入图片描述
4、点击生成 Generate
在这里插入图片描述

3、进行例化

1、创建一个名为 pll_test.v 文件
在这里插入图片描述
2、复制例化模板到我们刚创建的 pll_test.v 文件中
在这里插入图片描述
3、对 pll_test.v 文件进行修改,修改之后的代码如下(这里我们只输出 25MHz 信号

`timescale 1ns / 1ps

module pll_test(
    input sys_clk,  // 50MHz
    input rst_n,
    output clk_out
    );

wire pll_locked;    
    
    
clk_wiz_0 clk_inst
 (
  // Clock out ports
  .clk_out1(),     // output clk_out1
  .clk_out2(),     // output clk_out2
  .clk_out3(),     // output clk_out3
  .clk_out4(clk_out),     // output clk_out4
  // Status and control signals
  .reset(~rst_n), // input reset
  .locked(pll_locked),       // output locked
 // Clock in ports
  .clk_in1(sys_clk));      // input clk_in1  
    
endmodule

三、进行仿真

1、创建仿真文件

创建名为 vtf_pll_test.v 的仿真文件,并进行例化编写 verilog 仿真程序

`timescale 1ns / 1ps

module vtf_pll_test;

reg sys_clk;
reg rst_n;
wire clk_out;

pll_test pll_inst(
    .sys_clk    (sys_clk),  // 50MHz
    .rst_n      (rst_n),
    .clk_out    (clk_out)
    );

initial 
begin
    sys_clk = 1'b0;
    rst_n = 1'b0;   // 对于按键来说我们进行的是低电平的一个复位
    # 100 rst_n = 1'b1;
end

always #10 sys_clk = ~sys_clk;  // 10ns 时钟翻转产生 25MHz 时钟

endmodule

在这里插入图片描述

2、进行仿真设置

①、右键 Run Simulation -> Simulation Settings…
在这里插入图片描述
②、设置仿真时间,这里填 200us 即可
在这里插入图片描述

3、进行行为级仿真

①、左键 Run Simulation -> Run Behavioral Simulation
在这里插入图片描述
②、将 vtf_pll_test 下的 pll_inst 下的 clk_inst 的 clk_out1、clk_out2、clk_out3、clk_out_4、reset、locked 拖拽到仿真界面 Name 栏下
在这里插入图片描述
③、点击 Run for 10us,可以看下图结果
在这里插入图片描述

四、硬件验证

1、引脚绑定

1、点击 “Open Elaborated Design”,再打开 Window 下的 I/O Ports
在这里插入图片描述
2、查看原理图
①、T11 -> rst_n,T0 -> clk_out
在这里插入图片描述
②、U18 -> sys_clk
在这里插入图片描述
③、因此分配情况如下:
在这里插入图片描述
④、进行保存
在这里插入图片描述
⑤、生成的 pll.xdc 文件如下图:
在这里插入图片描述

2、生成比特流文件

①、点击 “Generate Bitstream”,直接生成 bit 文件
在这里插入图片描述
出现了如下报错:

[Place 30-172] Sub-optimal placement for a clock-capable IO pin and PLL pair. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_inst/inst/clk_in1_clk_wiz_0] >

clk_inst/inst/clkin1_ibufg (IBUF.O) is locked to IOB_X0Y15
 clk_inst/inst/plle2_adv_inst (PLLE2_ADV.CLKIN1) is provisionally placed by clockplacer on PLLE2_ADV_X0Y0

The above error could possibly be related to other connected instances. Following is a list of 
all the related clock rules and their respective instances.

Clock Rule: rule_pll_bufg
Status: PASS 
Rule Description: A PLL driving a BUFG must be placed on the same half side (top/bottom) of the device
 clk_inst/inst/plle2_adv_inst (PLLE2_ADV.CLKFBOUT) is provisionally placed by clockplacer on PLLE2_ADV_X0Y0
 and clk_inst/inst/clkf_buf (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y5

在这里插入图片描述
把这条提示加入 XDC 约束文件里面即可,原理就是绕过 PAR 的检查。

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_inst/inst/clk_in1_clk_wiz_0]

在这里插入图片描述
②、选择 Open Hardware Manager 并点击 OK

在这里插入图片描述
③、插上 fpga 仿真器及其电源,选择 Auto Connect
在这里插入图片描述
④、右键 xc7z020_1 -> Program Device
在这里插入图片描述

3、验证

找一个示波器用探头接到 T10 引脚查看输出,可以看到 25MHz 方波信号
在这里插入图片描述

五、资源自取

基于vivado 2017.4 的 pll 测试


我的qq:2442391036,欢迎交流!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vivado下PLL实验 的相关文章

  • FPGA设计篇之流水线思想

    FPGA设计篇之流水线思想 一 写在前面 二 正文开始 2 1举个栗子 2 2 1情况一 组合逻辑 2 1 2情况二 流水线设计 2 1 4 小总结 2 2举第二个栗子 写在最后 一 写在前面 流水线 大家好 我是富土康三号流水线的张全蛋
  • 在vivado中使用tcl脚本(UG894)

    本文源自UG894 主要介绍如何在vivado中使用tcl脚本 1 vivado中如何获取tcl help vivado中任何自带的命令都可以通过 help 获取帮助信息 也可以直接输入 help 取得vivado命令合集 并通过 help
  • 各种FIFO硬件设计(FIFO概念、异步、同步、非2次幂深度FIFO)

    文章目录 一 FIFO概述 二 FIFO分类 三 FIFO重要信号与参数 3 1 信号 3 2 参数 3 2 1 data depth的确定 四 FIFO存储原理 五 同步FIFO 5 1 空满信号判断 5 2 同步FIFO源码 5 3 测
  • 【Xilinx Vivado时序分析/约束系列6】FPGA开发时序分析/约束-IO时序输入延时

    目录 源同步FPGA输入时序分析的模型 input delay约束 极限input delay 往期系列博客 源同步FPGA输入时序分析的模型 以下为源同步FPGA输入时序分析的模型的示意图 在之前的文章中介绍过 在此介绍一下各个时钟延时的
  • HDLBits — Verilog Practice(每日一题)

    HDLBits Verilog Practice 每日一题 一 Getting Started 1 Getting Started 一 Getting Started 1 Getting Started 问题描述 Build a circu
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • MOS管的知识,看这一篇就可以了

    转载 21ic电子网 2020 11 15 18 19 以下文章来源于记得诚电子设计 作者记得诚 记得诚电子设计 分享电子硬件知识 永远相信美好的事情即将发生 今天的文章简单总结一下MOS管 如下是本文目录 场效应管分类 场效应管分为结型
  • 数码管电子时钟

    文章目录 前言 一 回顾数码管 二 任务描述 三 系统框图 四 模块调用 五 模块原理图 六 工程源码 6 2 时钟计数模块代码 6 2 数码管驱动模块代码 6 3 顶层模块代码 七 仿真测试 7 1 测试代码 7 2 仿真结果 八 管脚信
  • 实验1-FPGA编程入门

    文章目录 一 认识全加器 二 输入原理图实现1位加法器 一 半加器原理图输入 二 全加器原理图输入 三 Verilog语言实现全加器 四 总结 五 资料参考 一 认识全加器 一 半加器 1 逻辑分析 如下图所示 半加器只有两个输入和两个输出
  • 八、RISC-V SoC外设——GPIO接口 代码讲解

    前几篇博文中注释了RISC V的内核CPU部分 从这篇开始来介绍RISC V SoC的外设部分 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 目录 0 RISC V SoC注解系列文章目录 1 结构
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • [从零开始学习FPGA编程-28]:进阶篇 - 基本组合电路-奇偶校验生成器(Verilog语言版本)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 第1章 奇偶校验生成器 1 1 什么是奇校验 1 2 Verilog语言描述
  • [HDLBits] Exams/ece241 2014 q7a

    Design a 1 12 counter with the following inputs and outputs Reset Synchronous active high reset that forces the counter
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注 大部分参考内容来自 征途Pro FPGA Verilog开发实战指南 基于Altera EP4CE10 2021 7 10 上 贴个下载地址 野火FPGA Altera EP4CE10征途开发板 核心板 野火产品资料下载中心 文档 hd
  • 【FPGA多周期时序约束详解】- 解读FPGA多周期时序约束的全过程

    FPGA多周期时序约束详解 解读FPGA多周期时序约束的全过程 FPGA作为数字电路设计的常见工具 其设计中必然会遇到时序约束的问题 而多周期时序约束更是FPGA设计中不可避免的难点之一 本文将详细介绍FPGA多周期时序约束的全过程 并结合
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r

随机推荐

  • unityShader之固定渲染管线

    固定渲染管线功能较单一 能实现的效果不多 基本快要被淘汰了 老式的机器上还能用一用 附上几个脚本示例简单说明一下 shader likang king01 properties Color MainColor color 0 0 0 1 固
  • 【C#学习笔记】指针使用

    using System namespace ConsoleApplication2 class Program static void Main string args int a 5 unsafe int pa a Console Wr
  • 浅谈边缘计算

    一 概念 定义 1 维基百科对边缘计算的定义如下 边缘计算是一种优化云计算系统的方法 在边缘执行分析和知识生成减少受控系统和数据中心之间的通信带宽 2 OpenStack基金会对边缘计算的定义如下 边缘计算是为应用开发者和服务提供商在网络的
  • 【LeetCode102】二叉树的层序遍历

    题目描述 首刷自解 vector
  • 【Vue 常用属性】

    Vue 常用属性 vue常用的属性有 数据属性 方法 计算属性 监听属性 数据属性 组件的data 选项是一个函数 Vue 会在创建新组件实例的过程中调用此函数 它应该返回一个对象 然后Vue 会通过响应性系统将其包裹起来 并以 data
  • JDK8特性--Stream(求和,过滤,排序)

    Stream简介 Java 8 API添加了一个新的抽象称为流Stream 可以让你以一种声明的方式处理数据 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象 元素流在管道
  • Modern OpenGL---09 纹理(纹理单元可贴多个纹理)

    对之前画的矩形基础上贴上纹理 在片段着色器中 声明一个采样器 表示纹理位置 每个纹理位置叫做纹理单元 比如 0 1等 当只有一个纹理事时 纹理单元默认为0 当有一个以上的纹理时 则需要通过uniform从外部设置每个纹理单元的值 需要注意的
  • Makefile实例,利用Makefile给多文件、多目录C源码建立工程

    0 前言 粉丝留言 想知道如何使用Makefile给多个文件和多级目录建立一个工程 必须安排 关于Makefile的入门参考文章 可以先看这篇文章 Makefile入门教程 为了让大家有个更加直观的感受 一口君将之前写的一个小项目 本篇在该
  • Jenkins系列:2、Jenkins构建流水线

    Jenkins系列 2 Jenkins构建流水线 文章目录 Jenkins系列 2 Jenkins构建流水线 1 前言 2 创建自由项目 2 1 创建简单示例 2 2 构建触发器 构建环境 构建 构建后操作简介 3 最后 1 前言 上一节我
  • Process.Start 为什么会引发“系统找不到指定的文件”异常

    目录 前言 深入探究 结论 前言 偶然发现 如果想用如下代码在 NET 6 中打开指定 URL Process Start https baidu com 会引发异常 而同样的代码在 NET Framework 中是可以正常执行的 难道 N
  • 为什么某些网站有些地方打得开,有些地方打不开?

    我们都知道 网站是由 域名 空间 网页组成 如果这三部分中有其一出问题 网站都不能打开 我们在浏览器输入要访问的网站网址时 我们的计算机首先要找到这个网站放在那台服务器上 找到这台服务器后 再找这个网站放在那个目录下 那就是我们常说的 网站
  • UI设计用什么软件?这3个必用!

    在当今数字化时代 UI设计在各行各业都扮演着重要角色 但为了进行UI设计 需要使用专业的软件 在线UI设计软件是最受欢迎的选项之一 因为它们可以轻松创建和编辑设计 并且无需下载或安装任何软件 那么 有哪些在线UI设计软件呢 本文将介绍三款最
  • gpt_academic使用注意事项

    不要开启360等安全卫士
  • Padavan各源码融合教程

    本文涉及的Padavan源码如下 https github com hanwckf rt n56uhttps github com chongshengB rt n56uhttps github com padavanonly rt n56
  • JavaScript中的Object.defineProperty()和defineProperties()

    文章同步到github ECMAS 262第5版在定义只有内部采用的特性时 提供了描述了属性特征的几种属性 ECMAScript对象中目前存在的属性描述符主要有两种 数据描述符 数据属性 和存取描述符 访问器属性 数据描述符是一个拥有可写或
  • 小程序图片加载失败binderror方法处理

    场景 我们在小程序项目中的一个图片列表 当某些图片加载失败后 直接显示空白 这样用户体验不好 为了解决当图片加载失败 我们给一个默认图片代替 参考官方给的图片加载失败的处理方法 binderror cover image 微信开放文档 第一
  • vue3+vite 使用 postcss-pxtorem、autoprefixer 实现自适应和自动添加前缀

    自动添加前缀 自适应 1 安装 postcss pxtorem 和 autoprefixer npm install postcss pxtorem save npm i autoprefixer 2 vite config js引入并配置
  • 解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.

    应用朴素贝叶斯分类器时候 发现报错无法解析名称 NaiveBayes fit 这是因为 你想用NaiveBayes 适用于MATLAB R2018b 根据NaiveBayes的R2014b发布说明 fit被fitNaiveBayes取代 同
  • 【Flutter】时间轴高度自适应最佳实践

    1 使用部件 画圆圈 使用 canvas drawCircle 和属性为 paint style PaintingStyle fill 画笔画两个实心圆 画竖线 使用 canvas drawLine 和属性为 paint style Pai
  • Vivado下PLL实验

    文章目录 前言 一 CMT 时钟管理单元 1 CMT 简介 2 FPGA CMT 框图 3 MMCM 框图 4 PLL 框图 二 创建工程 1 创建工程 2 PLL IP 核配置 3 进行例化 三 进行仿真 1 创建仿真文件 2 进行仿真设