FPGA深入浅出IP核学习(一)-- vivado中clk IP MMCM核的使用

news2024/11/22 15:54:31

        FPGA深入浅出IP核学习系列文章主要是自己关于学习FGPA IP核的学习笔记,供大家参考学习指正。


目录

前言

一、MMCM-IP核简介

二、MMCM-IP核使用

1.IP核配置

2.模块程序设计

总结


前言

        本文主要参考B站野火FGPA相关学习视频、正点原子达芬奇FPGA开发指南和赛灵思官方用户手册。
        原理部分详见赛灵思7系列FPGA时钟资源用户指南(XILINX 7 series FPGAs Clocking Resource User Guide


一、MMCM-IP核简介

        在7系列fpga中,时钟管理模块(Clock Management Tile,简称CMT)包括一个混合模式时钟管理器(Mixed-Mode Clock Manager,简称MMCM)和一个锁相环(Phase-Locked Loop,简称PLL)。          MMCM(Mixed-Mode Clock Manager)和 PLL(Phase-Locked Loop)作为频率合成器,它们不仅可以广泛应用于频率范围的调节,还可用作外部或内部时钟的抖动滤波器,以及桌面时钟的控制器。
        这两种时钟管理器模块能够灵活地对输入到 FPGA 中的时钟信号进行任意分频、倍频、相位调整和占空比调整,从而输出所需的时钟信号。用于实现复杂的时序控制和时钟同步功能。相较于 PLL,MMCM 在配置上更加灵活,提供了更多功能选项,例如,MMCM 可以用于差分信号的生成,具有更高的适用性和通用性。
        MMCM 可以接收输入时钟,并根据需求生成一个或多个输出时钟,并支持相位调节和频率合成等功能,是一种灵活且可重配置的时钟管理器,广泛应用于数字系统中。此外,MMCM 还能够支持更复杂的时钟控制需求,如动态时钟切换、时钟域交叉等特性,为工程师提供了更强大的时钟管理工具。
        详细的MMCM框图如下图所示,可以看出一个MMCM包括2个时钟输入端口CLKIN1和CLKIN2,使用过程中选择1路就可以,输入的时钟信号经过鉴频鉴相器(PFD)比较参考时钟和反馈回来的对比时钟之间的差异,在经过电荷泵(CP)和环路滤波器(LF)后产生一定幅度的电压到压控振荡器(VCO),压控振荡器会产生一个与输入电压幅度成比例的时钟信号进行输出到M(Fractional Divide),信号值除以M倍后会反馈到鉴频鉴相器(PFD)。MMCM可以从右侧7个端口输出7个不同倍数的时钟信号(倍频、分频),此外,第0-3路可以输出差分的时钟信号。

二、MMCM-IP核使用

1.IP核配置

        如下图所示,首先,我们打开“IP Catalog”窗口,搜索“clock”,双击“FPGA Features and Design”→“Clocking”下的“Clocking Wizard”进入IP核配置界面。

        如下图所示,为MMCM IP核配置界面(点击Documentation下的Product Guide可以调用官方文档,通过IP核的产品指南学习具体的配置参数含义):
        1.Clocking Options
        (1)“Clock Monitor”用来监测时钟是否停止、故障和频率变化,一般保持默认不做勾选。    
        (2)Primitive(原语)---底层逻辑功能单元,选择MMCM(Mixed-Mode Clock Manager)时钟管理器模块;
        (3)“Clocking Featurs”用来设置时钟的特征,包括Frequency Synthesis(频率合成)、Minimize Power(最小化功率)、Phase Alignment(相位校准)、Dynamic Reconfig(动态重配置)、Safe Clock Startup (安全时钟启动)等,其中Spread Spectrum(扩频)和Dynamic Phase Shift(动态相移)是使用MMCM时才能够设置的特征,保持默认设置
        (4)“Jitter Optimization”用于抖动优化,可选 Balanced(平衡)、 Minimize Output Jitter(最小化输 出抖动)或Maximize Input Jitter filtering(最大化输入抖动滤波)等优化方式,保持默认平衡优化方式
        (5)“Jitter Optimization”用于抖动优化,可选 Balanced(平衡)、 Minimize Output Jitter(最小化输 出抖动)或Maximize Input Jitter filtering(最大化输入抖动滤波)等优化方式,保持默认平衡优化方式
        (6)“Input Clock Information”下的表格用于设置输入时钟的信息,第一列“Input Clock(输入时钟)”中Primary(主要,即主时钟)是必要的,Secondary(次要,即副时钟)是可选是否使用的,这里我们只需要用到一个输入时钟,所以保持默认不启用副时钟,其他列保持默认。

        如下图所示,接下来,切换至“Output Clocks”配置输出时钟,具体配置如下:
        2.Output Clocks        
        (1)The phase is calculated relative to the active input clockbiaoge 下方表格从第1-7列分别设置输出时钟路数和时钟的名字、频率、相位偏移、占空比、驱动器类型、缓冲器的最大频率。
        (2)USE CLOCK SEQUENCING(使用时钟排序),当在第一个选项卡“Clocking Options”上启用安全时钟启动功能时,Use Clock Sequence表处于活动状态,可用于配置每个已启用时钟的序列号。在此模式下,只允许 BUFGCE作为时钟输出的驱动程序;
        (3)Clocking Feedback(时钟反馈),用于设置时钟信号的来源是片上还是片外,是自动控制还是用 户控制,当自动控制片外的时钟时,还需要配置时钟信号的传递方式是单端还是差分,这里我们保持默认选项(自动控制片上)即可;
        (4)Enable Optional lnputs/Outputs for MMCM/PLL(启用 MMCM/PLL的可选输入/输出),其中 reset(复位)和power_down(休眠)为输入信号,locked(锁定)、clkfbstopped(指示信号,表示反馈时钟是否丢失)和input_clk_stopped(指示信号,表示所选输入时钟不再切换)为输出信号,因为我们不需 要锁相环进入休眠状态,也不需要看两个指示信号,所以这里我们保持默认启用复位信号和锁定信号即可;
        (5)Reset Type(复位类型),用于设置复位信号是高电平有效还是低电平有效,这里我们可以保持 默认的高电平有效。

        对“Port Renaming”选项卡进行配置,如下图所示:

         对“MMCM Setting”选项卡展示了对整个MMCM的最终配置参数,这些参数都是由Vivado根据之前用户输入的时钟需求来自动配置的,Vivado已经对参数进行了最优的配置,保持默认即可,如下图所示:

        如下图所示,“Summary”选项卡是对前面所有配置的一个总结,检查没问题后我们点击“OK”,生成IP核。

2.模块程序设计

(1)输入模块设计

        模块的输入端口包含2个输入端口系统时钟sys_clk、复位信号sys_rst_n,输出端口包含100MHz时钟输出信号clk_100M、25MHz时钟输出信号clk_25M、相位偏移90°时钟输出信号clk_s_90、占空比20%时钟输出信号clk_d_20。

(2)波形图绘制

(3)程序设计

       关于程序设计, 在新建.v文件后,可以通过下图的方式进行IP核实例化的调用。

        完善后的具体代码如下:

//IP核MMCM的使用,倍频、分频、相移、占空比调整
module ip_mmcm(
    input sys_clk,
    input sys_rst_n,
    //输出时钟
    output clk_100M,//100Mhz时钟频率
    output clk_25M, //25Mhz时钟频率
    output clk_s_90,//50Mhz时钟频率,相位偏移90度
    output clk_d_20 //50Mhz时钟频率,占空比为20%
    
    );
    
wire locked; 
   
//MMCM IP核的例化    
clk_wiz_0 clk_wiz_inst
(
    // Clock out ports
    .clk_100M(clk_100M),     // output clk_100M
    .clk_25M(clk_25M),     // output clk_25M
    .clk_s_90(clk_s_90),     // output clk_s_90
    .clk_d_20(clk_d_20),     // output clk_d_20
    // Status and control signals
    .reset(~sys_rst_n), // input reset
    .locked(locked),       // output locked
    // Clock in ports
    .clk_in1(sys_clk)      // input clk_in1
);      
       
endmodule

(4)仿真代码

        仿真代码如下:

`timescale 1ns / 1ns

module tb_ip_mmcm();

reg     sys_clk  ;
reg     sys_rst_n;
    
wire    clk_100M;   
wire    clk_25M ;   
wire    clk_s_90;   
wire    clk_d_20;

//信号初始化
initial begin
    sys_clk = 1'b1;
    sys_rst_n = 1'b0;
    #201
    sys_rst_n = 1'b1;
end

//产生时钟
always #10 sys_clk = ~sys_clk;

   
ip_mmcm ip_mmcminst(
    .sys_clk  (sys_clk  ),
    .sys_rst_n(sys_rst_n),
               
    .clk_100M (clk_100M ),
    .clk_25M  (clk_25M  ),
    .clk_s_90 (clk_s_90 ),
    .clk_d_20 (clk_d_20 ) 
    
    );
endmodule

(5)仿真结果

        锁定信号初始是低电平,后来拉高;在锁定信号是低电平时,可以看到,输出的时钟信号不稳定,锁定信号的作用就是指示输出时钟信号是否稳定。当锁定信号是低电平时,表示输出的信号是不稳定的,当前的时钟信号不能正常使用;当锁定信号是高电平时,表示输出的信号是稳定的,当前的时钟信号可以正常使用。
        四路输出时钟在“locked”信号为高电平时才会稳定输出,观察locked为高电平后的4路输出信号,如下图所示,locked信号拉高之后,锁相环开始输出4个稳定的时钟。
        从图中可以看出,clk_100M输出时钟信号周期为10ns,是20ns周期的1/2,所以频率是系统时钟信号的2倍,也就是100MHz;clk_25M输出时钟信号周期为40ns,是20ns周期的2倍,所以频率是系统时钟信号的1/2,也就是25MHz;clk_s_90输出时钟信号相对系统时钟信号延迟了5ns,5ns/20ns = 90°/360°,即相位偏移了90°;clk_d_20输出时钟信号高电平占比4ns,4ns/20ns = 20%,即输出为占空比为20%的时钟信号。


总结

        本文简单介绍了MMCM IP核的调用,通过 MMCM IP 核输出四路不同频率、相位或者占空比的时钟。

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

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

相关文章

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长,看源码的时候要见名知意&am…

docker笔记4-镜像理解

docker笔记4-镜像理解 一、镜像原理之联合文件系统二、镜像原理之分层理解三、commit镜像 一、镜像原理之联合文件系统 UnionFS(联合文件系统): Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持…

深入了解路由器工作原理:从零开始的简单讲解

简介 在现代网络中,路由器扮演着至关重要的角色。它不仅连接了不同的设备,还确保数据能够准确地传输到目的地。本文将带你深入探讨路由器的工作原理,帮助网络基础小白们理解这一重要设备的基本功能。 路由器的构成 路由器是一种具有多个输入…

云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析

一、配置web服务器 准备操作 首先在正式配置之前需要做以下操作 关闭防火墙 systemctl stop firewalld 永久关闭防火墙 systemctl disable firewalld 关闭selinux setenforce 0 永久关闭selinux vim /etc/selinux/config selinuxpermissive 还需要保证能够正常ping通www.bai…

使用uniapp开发小程序(基础篇)

本文章只介绍微信小程序的开发流程,如果需要了解其他平台的开发的流程的话,后续根据情况更新相应的文章,也可以根据uniapp官网的链接了解不同平台的开发流程 HBuilderX使用:https://uniapp.dcloud.net.cn/quickstart-hx.html 开发工具 开始…

【Django】在vscode中运行调试Django项目(命令及图形方式)

文章目录 命令方式图形方式默认8000端口设置自定义端口 命令方式 python manage.py runserver图形方式 默认8000端口 设置自定义端口

LIS系统源码,实验室管理信息系统LIS,.Net C#语言开发,支持DB2,Oracle,MS SQLServer等主流数据库

实验室管理信息系统LIS源码,采用.Net C#语言开发,C/S架构。支持DB2,Oracle,MS SQLServer等主流数据库。(LIS系统全套商业源码,自主版权,多家大型综合医院应用案例,适合二次开发&…

【Android】ListView和RecyclerView知识总结

文章目录 ListView步骤适配器AdpterArrayAdapterSimpleAdapterBaseAdpter效率问题 RecyclerView具体实现不同布局形式的设置横向滚动瀑布流网格 点击事件 ListView ListView 是 Android 中的一种视图组件,用于显示可滚动的垂直列表。每个列表项都是一个视图对象&…

spring IOC DI --DI详解

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 文章目录 4.3 DI详解4.3.1属性注入4.3.2 构造方法注入4.3.3 Setter注入4.3.4 三种注入优缺点 4.4 Autowired 存在问题PrimaryQualifier 4.3 DI详解 依赖注入是一个过程,是指Ioc容器在创建Bean…

在 Android 上实现语音命令识别:详细指南

在 Android 上实现语音命令识别:详细指南 语音命令识别在现代 Android 应用中变得越来越普遍。它允许用户通过自然语言与设备进行交互,从而提升用户体验。本文将详细介绍如何在 Android 上实现语音命令识别,包括基本实现、带有占位槽位的命令处理,以及相关的配置和调试步骤…

C++:模板(函数模板,类模板)

目录 泛型编程 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 类模板 类模板格式 类模板实例化 模板分为函数模板和类模板 在C中使用模板可以让我们实现泛型编程 泛型编程 如果我们需要实现一个加法add函数,那么会怎么实现呢? int…

AI学习记录 - 规范化输出对接现有系统的实例

假设我们有一个学生管理系统,通过prompt提示,格式化输出然后对接现有系统,也是通过react实现,因为这只是一个知识分享,没弄太复杂(使用react实现)。 学生管理系统 1、设计好prompt getMemory()…

大屏数据看板一般是用什么技术实现的?

我们看到过很多企业都会使用数据看板,那么大屏看板的真正意义是什么呢?难道只是为了好看?答案当然不仅仅是。 大屏看板不仅可以提升公司形象,还可以提升企业的管理层次。对于客户,体现公司实力和品牌形象,…

Linux shell编程学习笔记66:ping命令 超详细的选项说明

0 前言 网络信息是电脑网络信息安全检查中的一块重要内容,Linux和基于Linux的操作系统,提供了很多的网络命令,今天我们研究最常用的ping命令。 1 ping命令 的功能、格式和选项说明 1.1 ping命令 的功能 简单来说, ping 命令 会…

编写SpringBoot的自定义starter包

starter项目 先来看一下Starter的官方解释: Spring Boot Starter 是一种方便的依赖管理方式,它封装了特定功能或技术栈的所有必要依赖项和配置,使得开发者可以快速地将这些功能集成到Spring Boot项目中。Spring Boot官方提供了一系列的Star…

首次 Cloudberry Database 社区聚会 · 北京站,8月3日,诚邀

近期 Greenplum 源码归档及走向闭源在圈内讨论火热,原有开源用户面临断档风险。作为 Greenplum 衍生版和开源替代,Cloudberry Database 由原厂核心开发者打造,与其保持兼容,并且具备更新内核和更丰富功能。Cloudberry Database 逐…

代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?

代理IP协议是一种网络代理技术,可以实现隐藏客户端IP地址、加速网站访问、过滤网络内容、访问内网资源等功能。常用的IP代理协议主要有Socks5代理、HTTP代理、HTTPS代理这三种。代理IP协议主要用于分组交换计算机通信网络的互联系统中使用,只负责数据的路…

【MATLAB实战】基于UNet的肺结节的检测

数据: 训练过程图 算法简介: UNet网络是分割任务中的一个经典模型,因其整体形状与"U"相似而得名,"U"形结构有助于捕获多尺度信息,并促进了特征的精确重建,该网络整体由编码器,解码器以及跳跃连接三部分组成。 编码器由…

UE4/5 对话系统

参考教程:UE4甜筒教艺术生学蓝图#21.UE4对话系统(1)--唠嗑案例展示_哔哩哔哩_bilibili 说来惭愧两年前看的教程,现在才记录一下,很好的教程推荐大家观看 1.首先创建两个枚举,内容如下 2.创建三个结构体,内容如下 3.再…

SSRF:服务端请求伪造

SSRF漏洞原理 SSRF漏洞通常是因为服务端应用程序提供了从其他服务器获取数据的功能,但未对目标地址或协议进行适当的过滤和限制。攻击者可以通过这个漏洞发送构造好的恶意请求,让服务器以自己的身份去访问其他资源,与文件包含漏洞有些许相似…