首页 > 技术 > 内容

FPGA学习:PLL分频计数的LED闪烁实例

时间:2025-11-29  作者:Diven  阅读:0

如图8.17所示,本实例将用到FPGA内部的PLL资源,输入FPGA引脚上的25MHz时钟,配置PLL使其输出4路分别为12.5MHz、25MHz、50MHz和100MHz的时钟信号,这4路时钟信号又分别驱动4个不同位宽的计数器不停的计数工作,这些计数器的最高位最终输出用于控制4个不同的LED亮灭。由于这4个时钟频率都有一定的倍数关系,所以我们也很容易通过调整合理的计数器位宽,达到4个LED闪烁一致的控制。

图8.17 基于PLL分频计数的LED闪烁功能框图

cy4.v模块代码解析

先来看cy4.v模块的代码,是工程的顶层模块,主要做接口定义和模块例化,一般不会在这个模块中做任何的具体逻辑设计。

首先是接口部分,只有时钟、复位和8个LED信号。

Module cy4(

input ext_clk_25m, //外部输入25MHz时钟信号

input ext_rst_n,   //外部输入复位信号,低电平有效

output[7:0] led    //8个LED指示灯接口   

);                                                

接着这里申明5个wire类型的信号,所有在不同模块间接口的信号,在上级模块中都必须定义为wire类型,这里有4个不同频率的时钟以及由PLL的lock信号引出的复位信号sys_rst_n。

wire clk_12m5;  //PLL输出12.5MHz时钟

wire clk_25m;   //PLL输出25MHz时钟

wire clk_50m;   //PLL输出50MHz时钟

wire clk_100m;  //PLL输出100MHz时钟

wire sys_rst_n; //PLL输出的locked信号,作为FPGA内部的复位信号,低电平复位,高电平正常工作

PLL是我们配置的IP核模块,需要在我们的代码中例化,如下所示。

//-------------------------------------

//PLL例化

pll_controller  pll_controller_inst (

.areset ( !ext_rst_n ),

.inclk0 ( ext_clk_25m ),

.c0 ( clk_12m5 ),

.c1 ( clk_25m ),

.c2 ( clk_50m ),

.c3 ( clk_100m ),

.locked ( sys_rst_n )

);  

最后4个LED闪烁控制模块的例化,源码都是led_controller.v模块,但名称不一样,分别为uut_led_controller_clk12m5、uut_led_controller_clk25m、uut_led_controller_clk50m、uut_led_controller_clk100m。这样的定义方式最终实现效果不同于软件的函数调用,软件的函数调用只有一个函数,分时复用;而FPGA的这种代码例化却会实现4个完全一样的硬件逻辑。当然了,这4个模块还略有不同,就是两个名称中间的“#(n)”,n有23、24、25和26,这个是输入到led_controller.v模块的一个参数,大家别急,后面我们马上就会提到。

//-------------------------------------

//12.5MHz时钟进行分频闪烁,计数器为23位                                                         

led_controller  #(23)       uut_led_controller_clk12m5(

.clk(clk_12m5),    //时钟信号

.rst_n(sys_rst_n), //复位信号,低电平有效

.sled(led[0])      //LED指示灯接口   

);

//-------------------------------------

//25MHz时钟进行分频闪烁,计数器为24位                                                           

led_controller  #(24)       uut_led_controller_clk25m(

.clk(clk_25m),     //时钟信号

.rst_n(sys_rst_n), //复位信号,低电平有效

.sled(led[1])      //LED指示灯接口   

);

//-------------------------------------

//25MHz时钟进行分频闪烁,计数器为25位                                                           

led_controller  #(25)       uut_led_controller_clk50m(

.clk(clk_50m),     //时钟信号

.rst_n(sys_rst_n), //复位信号,低电平有效

.sled(led[2])      //LED指示灯接口   

);

//-------------------------------------

//25MHz时钟进行分频闪烁,计数器为26位                                                           

led_controller  #(26)       uut_led_controller_clk100m(

.clk(clk_100m),    //时钟信号

.rst_n(sys_rst_n), //复位信号,低电平有效

.sled(led[3])      //LED指示灯接口   

);      

//-------------------------------------                           

//高4位LED指示灯关闭                        

assign led[7:4] = 4'b1111;         

endModule

led_controller.v模块代码解析

led_controller.v模块代码如下,这里重点注意我们上面刚刚提到的输入参数。在代码中,有“paRAMeter CNT_HIGH = 24;”这样的定义,若是例化这个模块的上层接口中不定义“#(n)”,则表示“paRAMeter CNT_HIGH = 24;”语句生效,若是定义的“#(n)”中的n值与代码中定义的24不同,那么以n为最终值。

module led_controller(

input clk,      //时钟信号

input rst_n,    //复位信号,低电平有效

output sled     //LED指示灯接口   

);                                                

parameter CNT_HIGH = 24;   //计数器最高位

//-------------------------------------

reg[(CNT_HIGH-1):0] cnt;       //24位计数器      

//cnt计数器进行循环计数

always @ (posedge clk or negedge rst_n)                                   

if(!rst_n) cnt <= 0;                                          

else cnt <= cnt+1'b1;                                         

assign sled = cnt[CNT_HIGH-1];         

endmodule

猜您喜欢


选择灯管时,电容是个重要的配件。电容在灯管中起到平衡电流的作用。正确选择电容很关键。下面我们就来看看怎么选用电容。确定灯管类型灯管有很多种。比如,LED灯管和荧...
2025-04-12 20:01:12
激光吸收光谱(LAS)技术由于具有高定量性和操作直接的优势而成为目前最为广泛使用的激光光谱气体检测技术。作为最重要的性能指标之一,气体传感的动态范围在诸如大海拔...
2023-10-31 10:11:00
安规电容是电子元件。主要用于电气设备中,确保安全。很多人对不是很了解。本文将详细介绍安规电容的相关知识。 安规电容的定义安规电容是特殊电容。设计用于防止电击。能...
2025-04-02 03:30:34
汽车电子领域,对元器件的可靠性要求极高,车规级贴片电阻也不例外。选择合适的品牌很重要。以下列举一些主流的车规级贴片电阻品牌,排名不分先后:Vishay (威世)...
2024-11-29 10:26:01
电阻作为基础且关键的元件,应用于各种电子电路中。ROHM(罗姆)作为日本知名的半导体和电子元器件制造商,其插件电阻以很好的品质和技术优势,赢得了众多客户的青睐。...
2012-07-22 03:26:23
1r1贴片电阻,乍一看可能让人摸不着头脑,其实代表的是电阻值为1.1欧姆。字母r在这里替代了小数点,这是电子元件标识中的一种常见表达方式。 所以,下次看到类似2...
2024-11-29 10:25:49
SSM(日本)金属膜电阻因其出色的稳定性和可靠性而受到青睐。本文将详细介绍SSM金属膜电阻的参数及其知名品牌,帮助读者更好地了解和选择这一关键电子元件。1. 电...
2017-01-20 06:46:30
现代电子设备中,连接器的选择非常重要。TERMINAL_19.85X12.5MM作为高性能连接器,独特的设计和很好的性能,成为电子行业中不可少的部分。本文将深入...
2025-04-22 21:01:47
四端子电阻因其高精度和稳定性,应用于精密测量和工业控制领域。作为行业知名品牌,华润电阻(CR)在四端子电阻领域表现突出,提供了多种型号以满足不同需求。本文将全面...
2018-02-05 13:07:30
保险丝是保障电路安全的重要元件。一次性保险丝作为常见的过载保护装置,因其结构简单、成本低廉、使用方便等优点,被应用于各种电子产品中。本文将围绕“LseLe一次性...
2022-04-24 14:45:30