FPGA开发——在Quartus中实现对IP核的PLL调用

news2024/11/15 21:12:08

一、简介

        PLL主要由鉴相器(PD)、环路滤波器(LF)和压控振荡器(VCO)三部分组成。鉴相器检测输入信号与VCO输出信号的相位差,并输出一个与相位差成正比的电压信号。该信号经过环路滤波器滤除高频噪声后,作为控制电压输入到VCO,调整其振荡频率,使输出信号的相位逐渐接近输入信号的相位,直至两者相位锁定。

        PLL是FPGA重要的资源,不同FPGA的PLL 是不一样。以我们开发板的Cyclone IV为例,它有两个PLL,每个PLL可以提供5路输出。
        PLL 的时钟输入可以是PLL 所在的 Bank 的时钟输入管脚或者其他 PLL 的输出,FPGA 内部产生的信号不能驱动PLL。Cyclone IV PLL 产生的时钟可以为单端时钟信号或差分时钟信号, 可以通过GCLK 网络直接驱动 FPGA 外部的 IO 口。

二、PLL的调用

 1、首先打开Quartus ,进行工程的创建,这里在前面已经说过怎样创建工程。如果有不会的小伙伴可以在我主页找找。

2、创建好工程之后在右边的IP Catalog 中输入“PLL”搜索IP核。双击选择“ALTPLL”选项。

3、选择好ALT PLL进入到之后,选择我们pll存放的路径(这里我们可以工程文件夹里新建一个ip或者ip_core文件夹,用于存放我们引用的ip核相关的文件)。

 文件夹样式:

这里是我保存的文件夹和pll的名字,大家可以参考(这里的名字可以自己取,只要知道就行) ,选择好之后点击“OK”进入下一个界面。

 

4、 IP核配置界面

如下图,是配置PLL的初始界面,
1是速度等级,由芯片型号决定,不用更改。
2是输入时钟频率,此处修改为50MHz,与开发板匹配。
3是PLL的类型,默认不用修改。
4是PLL的四种输出模式,选择普通模式(In normal mode)即可。
5是补偿输出时钟,不用改。

 我们真正需要改的部分就只有2的时钟频率,其他的基本上都是默认选择好的。

5、 这里的optional inputs 我们选择第二个使用异步复位进行pll的复位,在Lock Output我们选择第一个选项创建一个锁定信号locked,当输出时钟达到想要的时钟频率时,locked才为高,系统才会工作。选择好之后点击next。

6、本页面主要是扩展频谱时钟和带宽等参数,保持默认,点击next。

 

7、这里是第二个时钟信号创建界面,用户可以根据自身看是否需要,这里一般不用选择。

 

8、这里也保持默认,不用选择。

 

9、下面是pll输出的时钟设置界面,一个pll总共可以输出5个时钟,可以进行倍频、分频、相位偏移、占空比等的操作 。

1是5个时钟,点击对应的时钟可以进行不同的设置。

2是使用该时钟,要使用这个时钟,这个必须选上,否则使用不了该时钟。 

3和4的功能有点相似,都可以对输出时钟频率进行设置,如果使用3的话,√上选项,直接在后面的框中输入想要的频率就可以设置,而选择使用4的话就需要选择相应的分频或者倍频因子,才能得到我们想要的输出频率。4的第一行是倍频因子,第二行是分频因子。

5是时钟占空比,默认为50,根据自己需要进行设置就行。

后面的几个时钟都是按照同样的方式进行修改就行。 

10、 时钟设置之后就进入EDA设置界面,这里保持默认。

11、接着就是Summary界面,这里除了默认的ip_pll_bb.v之外,我们还要把ip_pll_inst.v实例化文件勾上,这样在后面的工程里面进行调用或者方针时直接使用就行。

 

12、最后就是在弹出的界面选择“YES”之后,我们就成功调用了pll。

 

三、波形仿真

 1、调用之后的pll文件,这里名字就是前面我们前面选择存发文件时起的名字。

2、设计文件的编写

        在rtl文件中新建一个ip_pll.v文件,对于pll_test.v进行一个调用。其中后面的实例化的代码就是我们直接从pll_test_inst里面复制过来的。

module  pll
(
    input   wire    sys_clk     ,   //系统时钟50Mhz

    output  wire    clk_mul_2   ,   //系统时钟经过2倍频后的时钟
    output  wire    clk_div_2   ,   //系统时钟经过2分频后的时钟
    output  wire    clk_phase_90,   //系统时钟经过相移90°后的时钟
    output  wire    clk_ducle_20,   //系统时钟变为占空比为20%的时钟
    output  wire    locked          //检测锁相环是否已经锁定,
                                    //只有该信号为高时输出的时钟才是稳定的
);

//------------------------ pll_inst ------------------------
pll_ip  pll_ip_inst
(
    .inclk0 (sys_clk        ),  //input     inclk0
    .c0     (clk_mul_2      ),  //output    c0
    .c1     (clk_div_2      ),  //output    c1
    .c2     (clk_phase_90   ),  //output    c2
    .c3     (clk_ducle_20   ),  //output    c3
    .locked (locked         )   //output    locked
);

endmodule

 3、测试文件的编写

`timescale  1ns/1ns
module tb_pll();

//内部信号定义
wire    clk_mul_2   ;
wire    clk_div_2   ;
wire    clk_phase_90;
wire    clk_ducle_20;
wire    locked      ;

reg     sys_clk     ;


//初始化系统时钟
initial sys_clk = 1'b1;

always #10 sys_clk = ~sys_clk;

pll pll_inst
(
    .sys_clk        (sys_clk        ),  //input     sys_clk

    .clk_mul_2      (clk_mul_2      ),  //output    clk_mul_2
    .clk_div_2      (clk_div_2      ),  //output    clk_div_2
    .clk_phase_90   (clk_phase_90   ),  //output    clk_phase_90
    .clk_ducle_20   (clk_ducle_20   ),  //output    clk_ducle_20
    .locked         (locked         )   //output    locked
);

endmodule

4、仿真波形图

通过各个时钟输出信号我们可以看到,不同频率的波形对应一致,到这里pll成功调用。

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

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

相关文章

esp32学习笔记

前言:学习视频链接放在最后,开发方式为esp32Arduino,使用型号为ESP32-WROOM-32,引脚功能分配图如下。 #esp32介绍 GPIO的引脚默认情况下,只能当做普通功能引脚使用,也就是只能输入,输出&#x…

git 常用指令(创建分支、提交分支、解决冲突)

1. 初始化git 将你的代码放入你创建的文件中&#xff0c;执行 git init(前提你电脑安装过git哈)2. 查看当前项目git 状态 git status 3. 将代码添加到暂存区 git add . &#xff08;提交所有修改的代码&#xff0c;如果向指定提交使用&#xff1a;git add <文件名>&am…

SQL语句创建数据库(增删查改)

SQL语句 一.数据库的基础1.1 什么是数据库1.2 基本使用1.2.1 连接服务器1.2.2 使用案例 1.2 SQL分类 二.库的操作2.1 创建数据库2.2 创建数据库示例2.3 字符集和校验规则2.3.1 查看系统默认字符集以及校验规则2.3.2查看数据库支持的字符集2.3.3查看数据库支持的字符集校验规则2…

【RTOS面试题】ISR中可以使用互斥锁和信号量吗?

在中断服务程序&#xff08;ISR, Interrupt Service Routine&#xff09;中直接使用互斥锁&#xff08;mutex&#xff09;和信号量&#xff08;semaphore&#xff09;是有风险的&#xff0c;因为这些同步机制通常不是中断安全的。但是&#xff0c;可以通过一些方法来安全地在 I…

QWT+Qt Creator+MSVC的配置与使用

目录 一、介绍 二、QWT下载 三、QWT编译 3.1 设置构建套件 3.2 修改QWT相关文件 3.3 进行QWT编译 四、QWT配置 4.1 配置QWT的lib文件 4.2 配置QWT的dll文件 4.3 配置QWT的designer的dll文件 五、代码实验 一、介绍 QWT&#xff0c;全称是Qt Widgets for Technical…

Python 异步编程:Asyncio 实现原理

常见的并发模型 多进程/多线程异步ActorPub/Sub Python 异步的基石&#xff1a;协程 协程简介 概念&#xff1a;协作式多任务的子程序&#xff0c;用户态线程或微线程&#xff08;Coroutine&#xff09;。 特点&#xff1a;子程序执行可以中断&#xff0c;恢复后不会丢失之…

uniapp 荣耀手机 没有检测到设备 运行到Android手机 真机运行

背景&#xff1a; 使用uniapp框架搭建的项目&#xff0c;开发的时候在浏览器运行&#xff0c;因为项目要打包成App&#xff0c;所以需要真机联调&#xff0c;需要运行到Android手机&#xff0c;在手机上查看/运行项目。通过真机调试才能确保软件开发的准确性和页面显示的完整性…

mac 2k显示器 配置

前言 今年5月份买了一个2k显示器&#xff0c;刚收到的时候发现只有一个1080 x 720&#xff08;HiDPI&#xff09;分辨率是人眼看起来比较舒服的&#xff0c;于是一直用着。但是直到开始写前端代码的时候&#xff0c;我才发现&#xff0c;网页在2k显示器和内建显示器的布局竟然…

Python 循环引用与内存泄漏:深度解析

Python 循环引用与内存泄漏&#xff1a;深度解析 在Python编程中&#xff0c;循环引用和内存泄漏是两个需要特别注意的问题。本文将深入探讨Python中的循环引用现象、其导致的内存泄漏问题&#xff0c;并提供详细的解决思路与方法。同时&#xff0c;我们还将分析一些常见场景&…

【CSDN平台BUG】markdown图片链接格式被手机端编辑器自动破坏(8.6 已修复)

文章目录 bug以及解决方法bug原理锐评后续 bug以及解决方法 现在是2024年8月&#xff0c;我打开csdn手机编辑器打算修改一下2023年12月的一篇文章&#xff0c;结果一进入编辑器&#xff0c;源码就变成了下面这个样子&#xff0c;我起初不以为意&#xff0c;就点击了发布&#…

【IoT NTN】面向 5G/6G 卫星:NTN 标准发展、关键技术与未来思考

目录 国际标准化进展 架构及关键技术 5GNTN组网架构 关键技术 1、时频同步技术 2、覆盖增强技术 3、移动性管理技术 4、混合自动重传请求技术 5、自适应调制与编码技术 挑战与潜在解决方案 星地协同全域覆盖模型 星地协同多维资源调度 星地协同多层卫星路由 星地…

网络主播进入国家职业分类!1500万主播将有新身份

在营销策划界摸爬滚打十多年的我&#xff0c;最近可是被一则劲爆消息给震撼到了——国家正式官宣了19个全新职业&#xff0c;这可是职场版图的一次大扩张啊&#xff01; 其中最让人眼前一亮的是&#xff0c;网络主播竟然堂而皇之地登上了新职业的大舞台&#xff0c;正式“转正…

【多线程-从零开始-陆】wait、notify和notifyAll

线程饿死 一个或多个线程因为无法获得执行所需的资源&#xff08;如CPU时间、锁、或其他同步控制&#xff09;而被长时间阻塞或延迟执行的情况。尽管这些线程可能处于可执行状态并且已经准备好运行&#xff0c;但由于资源分配的不均衡或调度策略的问题&#xff0c;它们无法获得…

快讯 | 单卡4090显卡即可解锁视频生成,智谱AI CogVideoX模型开源!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

认识RAID磁盘阵列

文章目录 1、RAID磁盘阵列介绍2、多种RAID级别RAID 0 &#xff08;条带化存储&#xff09;RAID 1 &#xff08;镜像存储&#xff09;RAID 5RAID 6RAID 10&#xff08;先做镜象&#xff0c;再做条带&#xff09;RAID 01&#xff08;先做条带&#xff0c;再做镜象&#xff09;区别…

leetcode日记(64)最小覆盖子串

很复杂的题目&#xff0c;无论是思路还是实践都很难… 思路还是看了答案&#xff08;&#xff1f;&#xff09;设定两个指针“框”出一串字符串&#xff0c;初始两个指针都指在s的零位&#xff0c;先移动下指针&#xff0c;直到使框出的字符串中包含t中所有字符串&#xff0c;…

c# 排序、强转枚举

List<Tuple<double,int>> mm中doble从小到大排序 mm本身排序 在C#中&#xff0c;如果你有一个List<Tuple<double, int>>类型的集合mm&#xff0c;并且你想要根据Tuple中的double值&#xff08;即第一个元素&#xff09;从小到大进行排序&#xff0c;同…

TCP全队列连接,tcpdum抓包

TCP全队列连接&#xff0c;tcpdum抓包 1. listen的第二个参数作用2. 理解全连接队列&#xff08;原理&#xff09;3. 为什么要有全连接队列并且队列长度要适当4. 使用不tcpdump 进行抓包&#xff0c;分析TCP过程&#xff08;三次握手&#xff0c;四次挥手&#xff09;4.1安装tc…

CVE-2023-28525~文件上传【春秋云境靶场渗透】

# 今天我们来攻克CVE-2023-28525文件上传漏洞# 看到页面&#xff0c;经过尝试 账号&#xff1a;admin 密码&#xff1a;admin# 发现Posts可以添加文件上传# 尝试发现&#xff0c;只能上传图片格式的文件&#xff0c;那我们试一下看能不能上传成功# 发现上传失败&#xff0c;发现…

console与控制台使用demo

文章目录 console是一个普通(实例)对象A、函数对象拥有2个属性&#xff1a;B、console只有__proto__属性&#xff1a;C、综上&#xff0c;console是一个实例对象 console拥有的函数&#xff08;特殊列举&#xff09;占位符用法以参数为key记录执行次数——count()dir()和dirxml…