【RK3568+PG2L50H开发板实验例程】FPGA部分 | Pango 的时钟资源——锁相环

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com)

1.实验简介

实验目的:

了解 PLL IP 的基本使用方法。

实验环境: Window11 PDS2022.2-SP6.4

芯片型号: PG2L50H-484

2.实验原理

2.1. PLL 介绍

      锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号来控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。

      锁相环拥有强大的性能,可以对输入到 FPGA 的时钟信号进行任意分频、倍频、 相位调整、占空比调整,从而输出一个期望时钟;除此之外,在一些复杂的工程中, 哪怕我们不需要修改任何时钟参数,也常常会使用 PLL 来优化时钟抖动,以此得到一个更为稳定的时钟信号。正是因为 PLL 的这些性能都是我们在实际设计中所需要的,并且是通过编写代码无法实现的,所以 PLL IP 核才会成为程序设计中最常用 IP 核之一。 PLL IP 是紫光同创基于 PLL 及时钟网络资源设计的 IP,通过不同的参数配置,可实 现时钟信号的调频、调相、同步、频率综合等功能。

2.2. IP 配置

   首先点击快捷工具栏的“IP”图标,进入 IP 例化设置

   然后在 IP 目录处选择 PLL,在 Instance name 处为本次实例化的 IP 取一个名字,接着点击 Customise 进入 IP 配置页面。操作示意图如下:

    PLL 的使用可选择 Basic 和 Advanced 两种模式,Advanced 模式下 PLL 的内部参数配置完全开放,需要自己填写输入分频系数、输出分频系数、占空比、相位、反馈分频系数等才能正确配置。Basic 模式下用户无需关心 PLL 的内部参数配置,只需输入期望的频率值、相位值、占空比等,IP 将自动计算,得到最佳的配置参数。如果没有特殊应用,建议使用 Basic 模式配置 PLL。本次实验我们选择 Basic Configuration。

   接下来进行基础配置:

   在 Public Configurations 一栏将输入时钟频率设置为 25MHZ。

   在 Clockout0 Configurations 选项卡下,勾选使能 clkout0,将输出频率设置为 50MHZ。

   在 Clockout1 Configurations 选项卡下,勾选使能 clkout1,将输出频率设置为 100MHZ。

   在 Clockout2 Configurations 选项卡下,勾选使能 clkout2,将输出频率设置为 100MHZ,并设置相位偏移为 180 度。

    其他选项可以使用默认设置,若有其他需求可以查阅 IP 手册了解,本实验我们暂介绍 IP 基本的使用方法:

点击左上角 generate 生成 IP。

3.代码设计

    模块接口列表如下所示:

    表 1- 3- 1 PLL IP 使用实验模块接口表

端口I/O位宽描述
 sys_clk input1 系统时钟
 clkout0 output1 54MHZ 时钟
 clkout1 output1 81MHZ 时钟
 clkout2 output1 81MHZ 时钟,相位偏移 180 度
 lock output1时钟锁定信号,当为高电平时, 代表 IP 核输出时钟稳定

PLL_TEST 顶层代码:

module PLL_TEST(input      sys_clk , output     clkout0 , output     clkout1 , output     clkout2 , output     lock);PLL PLL_U0 (.clkout0   (clkout0 ),   // output.clkout1   (clkout1 ),   // output.clkout2   (clkout2 ),   // output.lock      (lock ),     // output.clkin1    (sys_clk )   // input);endmodule

该模块的功能是例化 PLL IP 核,功能简单,在此不做说明。

PLL_tb 测试代码:

 timescale 1ns / 1psmodule PLL_tb();reg sys_clk ;wire   clkout0 ;wire   clkout1 ;wire   clkout2 ;wire   lock ;initialbegin#2sys_clk <= 0 ;endparameter CLK_FREQ = 25;//Mhzalways # ( 1000/CLK_FREQ/2 ) sys_clk = ~sys_clk ;PLL_TEST u_PLL_TEST(.sys_clk   (sys_clk   ), .clkout0   (clkout0   ), .clkout1   (clkout1   ), .clkout2   (clkout2   ), .lock     (lock      ));endmodule

    timescale 定义了模块仿真的时间单位和时间精度。时间单位是 1 纳秒,精度是 1 皮秒。

    initial 块负责初始化系统时钟。在仿真启动后的 2 纳秒,系统时钟 sys_clk 被设置为 0。这是为了在仿真开始时定义一个已知的初始状态。

    代码定义了一个时钟频率参数 CLK_FREQ 为 25 MHz,并使用一个 always 块来翻转系统时钟信号。always 块中的逻辑使得 sys_clk 每 40 纳秒翻转一次,从而生成一个 25MHz 的方波时钟信号。这种时钟信号用于驱动被测试的 PLL_TEST 模块。

    最后,将测试平台的各个信号连接到 PLL_TEST 模块。这包括将生成的系统时钟 sys_clk 连接到 PLL_TEST 的时钟输入端,并将 PLL_TEST 的输出信号 clkout0、clkout1、 clkout2 和 lock 使用 wire 引出观察。

4.PDS 与 Modelsim 联合仿真

     PDS 支持与 Modelsim 或 QuestaSim 等第三方仿真器的联合仿真,而 Modelsim 是较为常用的仿真器,使用 PDS 与 Modelsim 来进行联合仿真。

    接下来选择 Project->Project Setting,打开工程设置,准备设置联合仿真。

     选择 Simulation 选项卡,红框 1 选择刚才编译生成的仿真库的路径,红框 2 选择 Modelsim 的启动路径,之后点击 OK。

     右键仿真的文件,选择 Run Behavior Simulation 开始行为仿真。

     运行后会自动打开 Modelsim。并执行仿真,如果没有任何报错,则表示成功。如果出现错误,请检测 PDS 与 Modelsim 的配置。

5.实验现象

  点击 Wave 观察 PLL 输出信号:

 使用标尺测量 clkout0,发现其一个时钟周期是 20ns,也就是 50MHZ。

     可以看到 clkout1 的时钟频率是 100MHZ,且和 clkout2 相位偏差 180°,符合设置。需要注意 PLL 的输出时钟应该在时钟锁定信号 lock 有效之后才能使用,lock 信号拉高之前输出 的时钟是不确定的。

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

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

相关文章

Graph Contrastive Learning with Generative Adversarial Network基于生成对抗网络的图对比学习

1. 什么是图&#xff1f;&#xff08;Graph&#xff09;想象一下社交网络&#xff0c;每个人是一个“点”&#xff08;节点&#xff09;&#xff0c;他们之间的朋友关系是“线”&#xff08;边&#xff09;。这样的点和线组成的结构就是“图”。在计算机科学中&#xff0c;图被…

PyTorch中的torch.argmax()和torch.max()区别

在PyTorch中&#xff0c;torch.argmax()和torch.max()都是针对张量操作的函数&#xff0c;但它们的核心区别在于返回值的类型和用途&#xff1a;1. torch.argmax() 作用&#xff1a;仅返回张量中最大值所在的索引位置&#xff08;下标&#xff09;。返回值&#xff1a;一个整数…

WebSocket主从服务器架构完整教程

目录 1. 前言:为什么要学习WebSocket主从架构 第一章:基础知识准备 2.1 什么是WebSocket 生活中的例子 技术特点 2.2 WebSocket vs HTTP 什么时候用WebSocket? 2.3 什么是主从架构 生活中的例子 技术架构图 2.4 环境准备 需要的软件 项目结构 第二章:WebSock…

Java的extends通配符

在Java泛型中&#xff0c;extends通配符用于限定泛型类型的上界&#xff0c;即指定泛型可以是某个类型或其子类型。它有两种常见用法&#xff1a;类型参数限定和通配符限定&#xff0c;下面详细介绍&#xff1a; 1. 类型参数限定&#xff08;在类/方法定义中&#xff09; 在定义…

vue自定义提示框组件

不想要elementui的消息提示&#xff0c;自定义一个组件系统统一使用 一、写页面 vue &#xff08;我放的目录是src/plugins/message.vue&#xff09;&#xff08;这里面使用elementui 里面icon 需要单独引入&#xff09; <template><Transition name"down"&…

自动驾驶数据集综述:统计特征、标注质量与未来展望

自动驾驶数据集综述&#xff1a;统计特征、标注质量与未来展望 A Survey on Autonomous Driving Datasets: Statistics, Annotation Quality, and a Future Outlook 得益于硬件和深度学习技术的快速进步&#xff0c;自动驾驶近年来迅速发展并展现出良好的性能。高质量的数据集…

redis数据结构和数据类型

1.动态字符串SIMPLE DYNAMIC STRING(SDS)观察上图中的SDS结构&#xff0c;头部包含字符串长度和分配的空间&#xff0c;可以以O&#xff08;1&#xff09;的时间复杂度计算出字符串长度&#xff0c;并且有了字符串长度后可以无视c语言的字符串缺陷&#xff08;\0作为结尾标识&a…

深度学习--神经网络

一、深度学习的简单概念深度学习是一种模仿人类大脑的运行方式&#xff0c;从大量数据中学习特征的学习模式。深度学习是机器学习的子集&#xff0c;它与机器学习的关系如下&#xff1a;二、感知神经网络2.1简单定义神经网络&#xff08;Neural Networks&#xff09;是一种模拟…

.NET 程序的强名称签名与安全防护技术干货

在 .NET 开发领域&#xff0c;保障程序的安全性和完整性至关重要。强名称签名和有效的安全防护措施是实现这一目标的关键手段。下面将详细介绍 .NET 程序的强名称签名以及相关的安全防护方法。一、什么是强名称签名强名称签名是 .NET 框架提供的一种安全机制&#xff0c;其主要…

DNS(Domain Name System,域名系统)

目录 **一、DNS的核心功能****二、DNS的工作原理****1. 解析流程(以车载导航请求为例)****2. 关键机制****三、车载以太网中DNS的特殊性**1. **高可靠性要求**2. **低延迟优化**3. **安全挑战与防护****四、DNS相关协议与技术****五、车载DNS配置示例****六、DNS故障排查工具…

优化 ECharts 多条折线:折线数据不完整导致的X轴日期错乱问题

目录 一、简单介绍 1.1 常见类型 二、时间轴错乱问题 2.1 示例 2.2 示例完整代码 2.3 问题分析 2.4 修复方法 第一步 第二步 2.5 优化后完整代码 一、简单介绍 ECharts 是一款基于 JavaScript 的数据可视化图表库&#xff0c;动态图表是 ECharts 的一个重要应用场景…

网络安全之注入攻击:原理、危害与防御之道

网络安全之注入攻击&#xff1a;原理、危害与防御之道 引言 在OWASP Top 10安全风险榜单中&#xff0c;注入攻击常年占据首位。2023年Verizon数据泄露调查报告显示&#xff0c;67%的Web应用漏洞与注入类攻击直接相关。本文从技术视角系统解析注入攻击的核心原理、典型场景及防御…

Python爬虫动态IP代理报错全解析:从问题定位到实战优化

目录 一、代理IP失效&#xff1a;爬虫的"隐形杀手" 1.1 失效场景复现 1.2 解决方案 二、403封禁&#xff1a;反爬机制的"精准打击" 2.1 封禁原理剖析 2.2 破解方案 三、速度瓶颈&#xff1a;代理性能的"致命短板" 3.1 性能对比测试 3.2…

机器学习基础知识【 激活函数、损失函数、优化器、 正则化、调度器、指标函数】

目录标题机器学习基础知识概览激活函数 (Activation Functions)损失函数 (Loss Functions / Cost Functions)优化器 (Optimizers)正则化 (Regularization)调度器 (Schedulers / Learning Rate Schedulers)指标函数 (Metric Functions)其他重要概念训练流程机器学习基础知识概览…

【达梦数据库|JPA】后端数据库国产化迁移记录

项目背景 经典的springbootjpa&#xff0c;java1.8数据库MySQL需要迁移到国产化数据库达梦上 开发环境安装 最简单的方式&#xff1a; 官方网站下载安装时选择“典型安装”即可 Linux安装 国产化一律上docer不要犹豫 下载三方提供的docker镜像按页面文档启动即可同上下载官…

ubuntu22默认安装firefox使用snap安装还老打不开解决办法

终极解决方案&#xff08;100% 避免 Snap 版 Firefox&#xff09; 步骤 1&#xff1a;彻底移除 Snap 版 Firefox bash sudo snap remove --purge firefox 步骤 2&#xff1a;添加 Mozilla 官方 PPA&#xff08;提供 .deb 版 Firefox&#xff09; bash sudo add-apt-repository …

MyBatis02-mybatis-config.xml配置文件讲解

mybatis-config.xml 是 MyBatis 的核心配置文件&#xff0c;用于配置整个 MyBatis 框架的全局行为&#xff0c;比如环境&#xff08;数据源&#xff09;、事务、类型别名、插件、Mapper 映射等。示例&#xff1a;<?xml version"1.0" encoding"UTF-8" ?…

合上电脑不关机

在Debian 系统上&#xff0c;如何实现合上电脑不关机的效果&#xff1f; 可以修改配置文件&#xff1a; sudo vim /etc/systemd/logind.conf1.找到 HandleLidSwitch &#xff0c;将其值改为 ignore &#xff08;处理盖子开关为忽略&#xff09; 2.将 LidSwitchIgnoreInhibited …

服务器深夜告警?可能是攻击前兆!

凌晨三点&#xff0c;刺耳的告警铃声把你从梦中惊醒&#xff1a;服务器CPU 100%&#xff0c;内存耗尽&#xff01;你手忙脚乱地登录服务器&#xff0c;发现某个进程疯狂占用资源。是程序Bug&#xff1f;还是业务突增&#xff1f;排查半天&#xff0c;最后在角落的日志里发现蛛丝…

重学前端003 --- CSS 颜色

文章目录文档声明head颜色模型div根据在这里 Freecodecamp 实践&#xff0c;记录笔记总结。 文档声明 在文档顶部添加 DOCTYPE html 声明 <!DOCTYPE html>head title 元素为搜索引擎提供了有关页面的额外信息。 它还通过以下两种方式显示 title 元素的内容&#xff1a…