ZYNQ FPGA自学笔记~操作PLL

时钟缓冲器、管理和路由

        垂直时钟中心(clock backbone)将设备分为相邻的左侧和右侧区域,水平中心线将设备分为顶部和底部两侧。clock backbone中的资源镜像到水平相邻区域的两侧,从而将某些时钟资源扩展到水平相邻区域。BUFG不属于任何一个时钟区域,并且可以到达设备上的任何时钟点。

                                                图:7系列FPGA的时钟架构图

       下图是时钟区域内可用的时钟资源及其基本连接性的概述。从下图中左侧的垂直时钟中心(clock backbone)开始看,BUFG可以通过水平时钟行(HROW)驱动到每个区域,即使它们并未物理位于那里。BUFH通过HROW驱动到区域内的每个时钟点。BUFG和BUFH在HROW中共享路由轨迹。I/O缓冲器(BUFIO)和区域时钟缓冲器(BUFR)位于I/O bank内。BUFIO仅驱动I/O时钟资源,而BUFR驱动I/O资源和逻辑资源。BUFMR支持BUFIO和BUFR的多区域链结。时钟功能输入将外部时钟连接到设备上的时钟资源。某些资源可以通过CMT骨干连接到上方和下方的区域。

                                                        图:基本时钟区域的原理图

  时钟管理片CMT

       CMT包括一个混模式时钟管理器(MMCM)和一个相位锁定环(PLL)。从MMCM和PLL的示意图上可以看出,MMCM反馈这里可以分数分频,并且CLKOUT0~CLKOUT3可以反相输出。CMT 的输入可以是 BUFR, IBUFG, BUFG, GT, BUFH,本地布线(不推荐使用)。

                                                                    图:MMCM示意图

                                                                    图:PLL示意图

  控制PLL输出时钟

     调用 Xilinx 提供的 PLL IP 核来产生不同频率的时钟, 并把其中的一个时钟输出到 FPGA 外部 IO 上,配置输入时钟50M,输出时钟为200M,100M,50M,10M。并且driver的类型都是BUFG。

                                                                 图:输入时钟的配置

                                                                  图:输出时钟的配置

​​​​​​​

                                                                    图:原理图

pll_test文件:

module pll_test(

input sys_clk, //system clock 50Mhz on board

input rst_n, //reset ,low active

output clk_out //pll clock output J8_Pin3

 );

wire locked;

/PLL IP call

clk_wiz_0 clk_wiz_0_inst

 (// Clock in ports

 .clk_in1(sys_clk), // IN 50Mhz

 // Clock out ports

 .clk_out1(), // OUT 200Mhz

 .clk_out2(), // OUT 100Mhz

 .clk_out3(), // OUT 50Mhz

 .clk_out4(clk_out), // OUT 10Mhz

 // Status and control signals

 .reset(~rst_n), // pll reset, high-active

 .locked(locked)); // OUT

endmodule

ip文件:

module clk_wiz_0_clk_wiz

 (// Clock in ports

  // Clock out ports

  output        clk_out1,

  output        clk_out2,

  output        clk_out3,

  output        clk_out4,

  // Status and control signals

  input         reset,

  output        locked,

  input         clk_in1

 );

  // Input buffering

  //------------------------------------

wire clk_in1_clk_wiz_0;

wire clk_in2_clk_wiz_0;

  IBUF clkin1_ibufg

   (.O (clk_in1_clk_wiz_0),

    .I (clk_in1));

  // Clocking PRIMITIVE

  //------------------------------------

  // Instantiation of the MMCM PRIMITIVE

  //    * Unused inputs are tied off

  //    * Unused outputs are labeled unused

  wire        clk_out1_clk_wiz_0;

  wire        clk_out2_clk_wiz_0;

  wire        clk_out3_clk_wiz_0;

  wire        clk_out4_clk_wiz_0;

  wire        clk_out5_clk_wiz_0;

  wire        clk_out6_clk_wiz_0;

  wire        clk_out7_clk_wiz_0;

  wire [15:0] do_unused;

  wire        drdy_unused;

  wire        psdone_unused;

  wire        locked_int;

  wire        clkfbout_clk_wiz_0;

  wire        clkfbout_buf_clk_wiz_0;

  wire        clkfboutb_unused;

   wire clkout4_unused;

  wire        clkout5_unused;

  wire        clkout6_unused;

  wire        clkfbstopped_unused;

  wire        clkinstopped_unused;

  wire        reset_high;

  PLLE2_ADV

  #(.BANDWIDTH            ("OPTIMIZED"),

    .COMPENSATION         ("ZHOLD"),

    .STARTUP_WAIT         ("FALSE"),

    .DIVCLK_DIVIDE        (1),

    .CLKFBOUT_MULT        (20),

    .CLKFBOUT_PHASE       (0.000),

    .CLKOUT0_DIVIDE       (5),

    .CLKOUT0_PHASE        (0.000),

    .CLKOUT0_DUTY_CYCLE   (0.500),

    .CLKOUT1_DIVIDE       (10),

    .CLKOUT1_PHASE        (0.000),

    .CLKOUT1_DUTY_CYCLE   (0.500),

    .CLKOUT2_DIVIDE       (20),

    .CLKOUT2_PHASE        (0.000),

    .CLKOUT2_DUTY_CYCLE   (0.500),

    .CLKOUT3_DIVIDE       (100),

    .CLKOUT3_PHASE        (0.000),

    .CLKOUT3_DUTY_CYCLE   (0.500),

    .CLKIN1_PERIOD        (20.000))

  plle2_adv_inst

    // Output clocks

   (

    .CLKFBOUT            (clkfbout_clk_wiz_0),

    .CLKOUT0             (clk_out1_clk_wiz_0),

    .CLKOUT1             (clk_out2_clk_wiz_0),

    .CLKOUT2             (clk_out3_clk_wiz_0),

    .CLKOUT3             (clk_out4_clk_wiz_0),

    .CLKOUT4             (clkout4_unused),

    .CLKOUT5             (clkout5_unused),

     // Input clock control

    .CLKFBIN             (clkfbout_buf_clk_wiz_0),

    .CLKIN1              (clk_in1_clk_wiz_0),

    .CLKIN2              (1'b0),

     // Tied to always select the primary input clock

    .CLKINSEL            (1'b1),

    // Ports for dynamic reconfiguration

    .DADDR               (7'h0),

    .DCLK                (1'b0),

    .DEN                 (1'b0),

    .DI                  (16'h0),

    .DO                  (do_unused),

    .DRDY                (drdy_unused),

    .DWE                 (1'b0),

    // Other control and status signals

    .LOCKED              (locked_int),

    .PWRDWN              (1'b0),

    .RST                 (reset_high));

  assign reset_high = reset;

  assign locked = locked_int;

// Clock Monitor clock assigning

//--------------------------------------

 // Output buffering

  //-----------------------------------

  BUFG clkf_buf

   (.O (clkfbout_buf_clk_wiz_0),

    .I (clkfbout_clk_wiz_0));

  BUFG clkout1_buf

   (.O   (clk_out1),

    .I   (clk_out1_clk_wiz_0));

  BUFG clkout2_buf

   (.O   (clk_out2),

    .I   (clk_out2_clk_wiz_0));

  BUFG clkout3_buf

   (.O   (clk_out3),

    .I   (clk_out3_clk_wiz_0));

  BUFG clkout4_buf

   (.O   (clk_out4),

    .I   (clk_out4_clk_wiz_0));

endmodule

仿真结果:

从结果看输出的时钟是10M,sys_clk为50M

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

考研数据结构——C语言实现小顶堆

数组初始化: 首先,我们有一个整数数组arr,里面包含了一系列需要排序的数字。数组的长度n是通过对数组arr的总字节大小除以单个元素的字节大小得到的。 小顶堆调整函数: adjustHeapMin函数的作用是将数组中的元素从某个节点向下调整…

[001-02-001].第2节:java开发环境搭建

4.1.书籍推荐: 4.2.人机交互方式 1.图形化界面(Graphical User Interface GUI)这种方式简单直观,使用者易于接受,容易上手操作2.命令行方式(Command Line Interface CLI):需要有一个控制台,输入特定的指令&#xff0c…

好用的工具网址

代码类: 1,json解析:JSON在线解析及格式化验证 - JSON.cn 2.传参转化编码 在线url网址编码、解码器-BeJSON.com 日常: 1.莆田医院查询:滚蛋吧!莆田系

[数据结构]无头单向非循环链表的实现与应用

文章目录 一、引言二、线性表的基本概念1、线性表是什么2、链表与顺序表的区别3、无头单向非循环链表 三、无头单向非循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、增删查改 四、分析无头单向非循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引…

插入、更新与删除MySQL记录

在现代应用开发中,数据库操作是非常重要的一环。作为程序员,熟练掌握数据库的增删改功能,能够更有效地管理数据并提高开发效率。 本课程将围绕插入、更新与删除记录这三个操作展开,涵盖SQL中的常见语句:INSERT INTO、UPDATE 和 DELETE,并结合实际应用中的常见问题讨论如…

Scikit-learn 识别手写数字

Scikit-learn 识别手写数字的完整教程(包含各模型预测结果和准确率) 本教程将使用 Scikit-learn 提供的手写数字数据集,分别使用支持向量机 (SVM)、随机森林和逻辑回归三种模型进行训练,并展示它们的预测结果和准确率。 1. Scik…

Frontiers出版社系列SCISSCI合集

【SciencePub学术】本期,小编根据WOS数据库,整理了一下Frontiers出版社系列的SCI&SSCI合集,以供各位学者投稿参考! 来源:WOS数据库 Frontiers系列期刊中,Frontiers in Immunology以其5.7分的影响因子位…

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目,包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题,可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

每日一练:二叉树的层序遍历

102. 二叉树的层序遍历 - 力扣(LeetCode) 一、题目要求 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,n…

合宙LuatOS应用,与时间相关那些事

合宙嵌入式操作系统LuatOS——在蜂窝物联网模组上推出开源二次开发框架,功能齐全性能稳定,可大幅度降低用户的研发成本和研发周期。 在LuatOS中,获取时间函数用得最多的就是os.time()函数了。接下来,我会讲一些与这个函数以及其他…

c++924

2 #include <iostream> #include <cstring>using namespace std;class MyString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 定义无参构造MyString() : size(0) {str new char[1];str[0] \0;cou…

中秋节特别游戏:给玉兔投喂月饼

&#x1f5bc;️ 效果展示 &#x1f4dc; 游戏背景 在中秋这个充满诗意的节日里&#xff0c;玉兔因为贪玩被赶下人间。在这个温柔的夜晚&#xff0c;我们希望通过一个小游戏&#xff0c;让玉兔感受到人间的温暖和关怀。&#x1f430;&#x1f319; &#x1f3ae; 游戏设计 人…

Oracle数据库的比较运算符Comparison Operators

Comparison operators compare one expression to another. The result is always either TRUE, FALSE, or NULL. If the value of one expression is NULL, then the result of the comparison is also NULL. 如果一个表达式的值为NULL&#xff0c;那么比较的结果也是NULL。 …

5、论文阅读:深水下的图像增强

深水下的图像增强 前言介绍贡献UWCNN介绍网络架构残差Residuals块 Blocks网络层密集串联网络深度减少边界伪影网络损失Loss后处理前言 水下场景中,与波长相关的光吸收和散射会降低图像的可见度,导致对比度低和色偏失真。为了解决这个问题,我们提出了一种基于卷积神经网络的…

Rust调用tree-sitter解析C语言

文章目录 一、Rust 调用 tree-sitter 解析 C 语言代码1. 设置 Rust 项目2. 添加 tree-sitter 依赖3. 编写 Rust 代码4. 运行程序5. 编译出错 二、解决步骤1. 添加 tree-sitter 构建依赖2. 添加 tree-sitter-c 源代码3. 修改 build.rs 以编译 tree-sitter-c 库4. 修改 Cargo.tom…

Ubuntu中常用的操作指令

ubuntu中常通过在命令行中输入各种指令完成操作。 文件操作指令 ls&#xff1a;列出目录内容 ls cd&#xff1a;改变当前目录 # 进入指定目录 cd /path/to/directory # 返回上一级目录 cd .. # 返回用户主目录 cd ~ cp&#xff1a;复制文件或目录 # 复制文件 …

伊犁云计算22-1 apache 安装rhel8

1 局域网网络必须通 2 yum 必须搭建成功 3 apache 必须安装 开干 要用su 用户来访问 一看httpd 组件安装完毕 到这里就是测试成功了 如何修改主页的目录 网站目录默认保存在/var/WWW/HTML 我希望改变/home/www 122 127 167 行要改

频率色散效应及其与时间选择性衰落信道的联系

频率色散效应&#xff08;Frequency Dispersion Effect&#xff09;是在无线通信中&#xff0c;由于信道中的多普勒效应引起的现象&#xff0c;它会导致接收信号频谱的扩展和频率上的变化。该效应与信道的时间变化有关&#xff0c;是时间选择性衰落信道&#xff08;time-select…

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器&#xff08;DateTimePicker&#xff09;是一个常见且重要的组件。它允许用户轻松地选择日期和时间&#xff0c;极大地提升了用户体验。然而&#xff0c;在某些场景下&#xff0c;用户可能需要更细粒度的控制&#xff0c;例如单独清除已选择的时间…

Swagger 概念和使用以及遇到的问题

前言 接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变 成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新&#xff0c; 导致前端人员抱怨接口文档和实际情况不一致。 很多人员会抱怨别人写的接口文档不…