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

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



前言

        本文主要参考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 核输出四路不同频率、相位或者占空比的时钟。

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vivado FFT IP核是Xilinx公司提供的一种用于高性能快速傅里叶变换(FFT)的可编程逻辑器件,可用于信号处理、通信系统、雷达、音频处理和图像处理等领域。 Vivado FFT IP核的主要功能是实现快速傅里叶变换,这是一种将时域信号转换为频域信号的数学技术。FFT是一种高效的算法,能够在较短的时间内对信号进行频谱分析和频率测量。Vivado FFT IP核提供了多种FFT算法,包括基于蝶形算法、流水线和并行化等技术,可以根据应用的需求选择适合的算法。 Vivado FFT IP核提供了多种配置选项,可以实现不同数据宽度、数据精度和时域点数的FFT计算。用户可以通过Vivado设计环境来配置和生成FFT IP核,方便地集成到自己的设计IP核的接口支持AXI4-Stream和AXI4-Lite等标准接口,与其他系统组件进行数据交换。 通过使用Vivado FFT IP核,用户可以在FPGA上快速实现高性能的FFT计算,提高系统的性能和效率。IP核的可编程性使得用户可以根据应用需求进行定制,并且可以随着设计的迭代进行功能增强或优化。此外,使用IP核还可以减少设计开发时间和复杂度,提高设计的可重用性。 综上所述,Vivado FFT IP核是一种用于快速傅里叶变换的可编程逻辑器件,具有灵活的配置选项和高性能的计算能力。使用IP核可以快速实现高性能的FFT计算,提高系统的性能和效率。 ### 回答2: Vivado FFT IP核是Xilinx公司提供的一种用于快速傅里叶变换(FFT)运算的IP核。FFT是一种用于信号频谱分析的算法,广泛应用于数字信号处理领域。Vivado FFT IP核通过硬件加速的方式,实现了高效的FFT计算。 Vivado FFT IP核具有以下主要特点: 1. 高性能:Vivado FFT IP核使用专门的FFT硬件来执行计算,速度比软件实现的FFT更快。它能够在很短的时间内完成大规模FFT计算。 2. 可定制性:Vivado FFT IP核提供了许多可定制的选项。用户可以根据具体的需求选择不同的FFT大小、输出数据宽度、输入数据格式等。这样有助于优化设计,提高系统整体性能。 3. 多种接口:Vivado FFT IP核支持多种接口,如AXI4-Stream接口、AXI4-Lite接口等,方便与其他IP核或外部系统进行连接。 4. 低功耗:Vivado FFT IP核经过优化设计,能够在低功耗下运行,节约能源消耗。 Vivado FFT IP核的应用范围广泛。在通信领域,它可以用于信号解调、频谱分析、通道估计等。在图像处理领域,它可以用于图像压缩、图像增强等。此外,在雷达、声音处理、金融分析等其他领域也有广泛的应用。 Vivado FFT IP核使用步骤相对简单。首先,在Vivado设计工具导入该IP核,在设计进行配置和参数设置。然后,将IP核与其他系统进行连接,并根据需要编写相应的控制和数据处理逻辑。最后,生成比特流文件(bitstream)并下载到目标设备进行验证和调试。 总之,Vivado FFT IP核是一种高性能、可定制的FFT计算IP核,广泛应用于信号处理等领域,为设计人员提供了快速可靠的FFT计算解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值