FPGA_学习_10_IP核_PLL

这篇具有很好参考价值的文章主要介绍了FPGA_学习_10_IP核_PLL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

片上资源的使用,或者说IP核的使用,是FPGA编程要学习的分量很重的一部分内容。 其中最常见的就要属PLL了,时钟是一切程序的基础。 PLL的时钟倍频功能是用户自己手撕代码无法实现的,但使用PLL IP核,几步简单的图像界面的操作就能个实现。本文的内容就是配置一个PLL IP核,并在我们的FPGA代码中调用。

1 PLL IP核配置步骤

(Vivado 赛灵思)

FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

 FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

 FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

我看的教程里面,那个兄弟是选的下面这个。 看来还是比较注重开发效率。

下面按照截图路径打开这个veo文件,学习如何在FPGA程序中例化IP核(有点像C++你创建了一个类,然后你实例化一个)。

FPGA_学习_10_IP核_PLL,FPGA,fpga开发,学习

2 测试代码

现在咱们有3个不同频率的时钟了,我们用这三个时钟计数到同样的值,然后点灯。 就能看出时钟频率的区别。由于灯只有两个,所以实验分成了两次,一次是50MHz时钟和100MHz时钟的对比,一次是50MHz时钟和25MHz时钟的对比。

`timescale 1ns / 1ps

module pll(
        input   wire            clk     ,
        input   wire            rst_n   ,
        output  wire    [1:0]   led   
);

//==================================================================
//                        Parameter define
//==================================================================

localparam CNT_MAX = 50_000_000 - 1;


//==================================================================
//                        Internal Signals
//==================================================================

// IP_PLL 输出信号引出
wire            clk_out1        ;       // 注意,这里用的wire类型
wire            clk_out2        ;
wire            clk_out3        ;
wire            locked          ;

reg     [31:0]  timer1cnt       ;
reg     [31:0]  timer2cnt       ;
reg     [31:0]  timer3cnt       ;
reg     [1:0]   led_r           ;

assign  led = ~led_r;

IP_PLL inst_pll
(
        .clk_out1(clk_out1),    // output clk_out1      50MHz   0
        .clk_out2(clk_out2),    // output clk_out2      100MHz  90
        .clk_out3(clk_out3),    // output clk_out3      25MHz   0
        .reset(~rst_n),         // input reset          默认高有效,我们的复位信号是低有效,遂取反
        .locked(locked),        // output locked
        .clk_in1(clk)           // input clk_in1        我们的输入时钟信号是clk
);         

//----------------------------- clk_out1 and timer1cnt and locked -----------------------------
always @(posedge clk_out1 or negedge rst_n) begin
        if (rst_n == 1'b0) begin
                timer1cnt       <= 'd0;     
        end
        else if (locked == 1'b1) begin
                if (timer1cnt == CNT_MAX) begin
                        timer1cnt <= 'd0;
                end
                else begin
                        timer1cnt <= timer1cnt + 1'b1;
                end
        end
        else begin
                timer1cnt <= 'd0;
        end
end

//----------------------------- clk_out2 and timer2cnt and locked -----------------------------
always @(posedge clk_out2 or negedge rst_n) begin
        if (rst_n == 1'b0) begin
                timer2cnt       <= 'd0;     
        end
        else if (locked == 1'b1) begin
                if (timer2cnt == CNT_MAX) begin
                        timer2cnt <= 'd0;
                end
                else begin
                        timer2cnt <= timer2cnt + 1'b1;
                end
        end
        else begin
                timer2cnt <= 'd0;
        end
end

//----------------------------- clk_out3 and timer3cnt and locked -----------------------------
always @(posedge clk_out3 or negedge rst_n) begin
        if (rst_n == 1'b0) begin
                timer3cnt       <= 'd0;     
        end
        else if (locked == 1'b1) begin
                if (timer3cnt == CNT_MAX) begin
                        timer3cnt <= 'd0;
                end
                else begin
                        timer3cnt <= timer3cnt + 1'b1;
                end
        end
        else begin
                timer3cnt <= 'd0;
        end
end

//----------------------------- clk_out1 led -----------------------------
always @(posedge clk_out1 or negedge rst_n) begin
        if (rst_n == 1'b0) begin
                led_r[0] <= 1'b0;                    
        end
        else if (timer1cnt == CNT_MAX) begin
                led_r[0] <= ~led_r[0];
        end
        else begin
                led_r[0] <= led_r[0];
        end
end


// //----------------------------- clk_out2 led -----------------------------
// always @(posedge clk_out2 or negedge rst_n) begin
//         if (rst_n == 1'b0) begin
//                 led_r[1] <= 1'b0;                    
//         end
//         else if (timer2cnt == CNT_MAX) begin
//                 led_r[1] <= ~led_r[1];
//         end
//         else begin
//                 led_r[1] <= led_r[1];
//         end
// end

//----------------------------- clk_out3 led -----------------------------
always @(posedge clk_out3 or negedge rst_n) begin
        if (rst_n == 1'b0) begin
                led_r[1] <= 1'b0;                    
        end
        else if (timer3cnt == CNT_MAX) begin
                led_r[1] <= ~led_r[1];
        end
        else begin
                led_r[1] <= led_r[1];
        end
end

endmodule

在代码中,应该重点关注IP核是如何被调用(例化)的,同时注意例化时,填写的输入输出。 另外,在使用IP核输出的时钟信号计数时,我们同时使用了locked信号,这一点请不要忽略。

3 约束文件

create_clock	-period			20.000		[	get_ports	clk	]

set_property    PACKAGE_PIN		N18			[	get_ports	clk			]
set_property    PACKAGE_PIN		P15			[	get_ports	{led[0]}	]
set_property    PACKAGE_PIN		U12			[	get_ports	{led[1]}	]
set_property    PACKAGE_PIN		T12			[	get_ports	rst_n		]

set_property    IOSTANDARD      LVCMOS33	[	get_ports	clk			]  
set_property    IOSTANDARD      LVCMOS33	[	get_ports	{led[*]}	]  
set_property    IOSTANDARD      LVCMOS33	[	get_ports	rst_n		]  

4 运行结果

PLL_RUN1

左边的灯闪1次,右边的灯闪2次。  左边灯用的是50MHz时钟,右边灯用的100MHz时钟

PLL_RUN2

左边的灯闪2次,右边的灯闪1次。  左边灯用的是50MHz时钟,右边灯用的25MHz时钟文章来源地址https://www.toymoban.com/news/detail-542966.html

到了这里,关于FPGA_学习_10_IP核_PLL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA学习:PLL的使用与仿真

    PLL(phase-locked loop),即锁相环。是FPGA中的重要资源。由于一个复杂的FPGA系统往往需要多个不同频率,相位的时钟信号。所以,一个FPGA芯片中PLL的数量是衡量FPGA芯片能力的重要指标。FPGA的设计中,时钟系统的FPGA高速设计机器重要,一个低抖动,低延迟的系统时钟会增加FPGA设计

    2023年04月17日
    浏览(30)
  • vivado中的FPGA时钟管理单元PLL学习记录

    FPGA中时钟管理模块(CMT)包括PLL和MMCM,用于将时钟倍频(比如输入时钟25M,我们要产生50M时钟)、分频(在不影响系统功能的前提下,较低的工作时钟,能够降低系统功耗)、改变相位偏移或占空比等。 当需要上板时,由于板上晶振时钟固定,所以其他频率的时钟产生就要用到

    2024年01月16日
    浏览(38)
  • 从底层结构开始学习FPGA(15)----MMCM与PLL

            《从底层结构开始学习FPGA》目录与传送门         锁相环 (phase-locked loop,PLL),是一种控制反馈电路。PLL对时钟网络进行系统级别的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。MMCM是混合模式时钟管理器,相当于能够进行精准

    2024年02月06日
    浏览(36)
  • [FPGA 学习记录] 快速开发的法宝——IP核

    快速开发的法宝——IP核 在本小节当中,我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛,它被称为快速开发的法宝。在本小节当中,我们将和各位朋友一起来学习了解 IP 核的相关知识、理解掌握 IP 核的调用方法。 我们分为以下几个部分进行 IP 核的学

    2024年02月05日
    浏览(34)
  • 【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之DDR3 IP简单读写测试(六)

    本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发平台)简介 盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板,全

    2024年01月23日
    浏览(55)
  • FPGA之PLL详解

            在前面的博客里详细介绍了FIFO、RAM两个常用的IP核,而这些IP核在FPGA当中应用非常广泛,很多书籍教程、培训机构也都会蜻蜓点水提起些,但往往不作为重点,而更偏重讲解例程的具体设计。笔者编写FPGA基础知识篇的初衷就是把FPGA学习路上细枝末节、模糊不清的知

    2024年02月08日
    浏览(28)
  • Xilinx FPGA 中PLL与MMCM区别

    原文连接,版权所有 对于FPGA工程师来说,DCM / DLL / MMCM / PLL这些词简直每天都能看到,但很多人并不是很清楚它们之间的差异。 在Xilinx的FPGA中,时钟管理器称为 Clock Management,简称CMT 。我们所用到的DCM / PLL / MMCM都包含在CMT中。 DCM 是比较早的FPGA中使用的,某些Sparten-3和Vir

    2024年02月07日
    浏览(31)
  • FPGA时钟分频倍频之PLL锁相环

    1、使用vivado创建一个工程 2、点击IP Catalog,搜索Clock Wizard,然后双击,本次实验使用PLL进行分频倍频,不动态改变相位,故选择PLL选项,并将时钟频率改变为50MHz,此处我们使用50MHz晶振作为时钟源 3、点击Output Clocks,配置产生的时钟频率,其他选项保持默认,点击ok,生pll ip核

    2024年02月12日
    浏览(27)
  • FPGA代码实现分频和pll分频后的时钟的使用

    1、代码实现的分频时钟 假如 clk_out 输出信号是我们想要的分频后的信号,然后很多人会直接把这个信号当作新的低频时钟来使用,并实现了自己想要的功能。虽然最终实现的功能是成功的,但往往忽略了一些隐患的存在,这种做法所衍生的潜在问题在低速系统中不易察觉,

    2024年02月05日
    浏览(30)
  • FPGA 中 IP基础学习

    首先,要知道什么是IP。Intellecture Property,相当于软件领域的API函数库,三方开源项目。要开发一个真正可用的电路设计,不管什么领域,总会使用到一些IP,不太可能从头开始。IP分为硬核和软核,我们今天讲的是软核IP。 IP 为了方便使用,业界对于IP 约定了封装的关键格式

    2024年02月16日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包