FPGA入门(七):实现4路LED不同频率独立闪烁
FPGA入门文章目录FPGA入门前言一、整体设计思路二、完整代码2.1 底层单路LED闪烁模块 led_twinkle.v2.2 顶层4路不同频率闪烁模块led_twinkle_4.v三、频率与参数的关系四、重点精讲Verilog两种Parameter参数修改方式4.1 实例化 # 直接传参最好4.2 defparam 后置重定义old school五、工程核心知识点总结前言本篇博文基于Verilog HDL 实现4路LED不同频率独立闪烁工程。核心不只是实现LED闪烁效果更重点讲解Verilog中模块Parameter参数的两种修改方式是FPGA模块化设计、代码复用的核心基础知识点超级适合新手入门学习。一、整体设计思路本工程采用底层通用模块顶层调用模块的分层设计思想底层基础模块 led_twinkle设计一个可配置参数的单路LED闪烁模块通过参数 MCNT 控制闪烁频率预留参数修改接口支持代码复用。顶层模块 led_twinkle_44次例化底层闪烁模块通过两种不同的参数修改方式给4个实例配置不同的计数最大值最终实现4路LED不同频率独立闪烁。二、完整代码2.1 底层单路LED闪烁模块 led_twinkle.v带默认参数的通用闪烁模块可单独使用也可被顶层模块复用。moduleled_twinkle(Clk,Reset_n,Led);input Clk;input Reset_n;output reg Led;reg[24:0]counter;// 默认计数最大值可通过顶层修改parameter MCNT25000000-1;// 计数器循环计数逻辑always(posedge Clk or negedge Reset_n)if(!Reset_n)counter0;elseif(counterMCNT)counter0;elsecountercounter1d1;// 计数溢出LED电平翻转实现闪烁always(posedge Clk or negedge Reset_n)if(!Reset_n)Led1b0;elseif(counterMCNT)Led!Led;endmodule2.2 顶层4路不同频率闪烁模块led_twinkle_4.v多次例化底层模块搭配两种参数配置方式实现差异化频率控制。moduleled_twinkle_4(Clk,Reset_n,Led);input Clk;input Reset_n;output[3:0]Led;// 定义4组不同的计数阈值对应4种闪烁频率parameter MCNT025000000-1;// 最慢parameter MCNT112500000-1;parameter MCNT26250000-1;parameter MCNT32500000-1;// 最快// 方式1defparam 后置参数重定义led_twinkleled_twinkle_inst0(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[0]));defparam led_twinkle_inst0.MCNTMCNT0;// 方式2实例化时 # 直接传参官方推荐写法led_twinkle #(.MCNT(MCNT1))led_twinkle_inst1(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[1]));// 方式1defparam 后置参数重定义led_twinkleled_twinkle_inst2(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[2]));defparam led_twinkle_inst2.MCNTMCNT2;// 方式1defparam 后置参数重定义led_twinkleled_twinkle_inst3(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[3]));defparam led_twinkle_inst3.MCNTMCNT3;endmodule三、频率与参数的关系本工程基于50MHz 系统时钟时钟周期20ns核心逻辑计数器从0计数到MCNT时清零同时翻转LED电平MCNT数值越大计数耗时越长LED闪烁频率越慢。4路LED频率对应关系Led[0]MCNT25000000-1 → 翻转周期0.5s → 闪烁周期1s最慢Led[1]MCNT12500000-1 → 翻转周期0.25s → 闪烁周期0.5sLed[2]MCNT6250000-1 → 翻转周期0.125s → 闪烁周期0.25sLed[3]MCNT2500000-1 → 翻转周期0.05s → 闪烁周期0.1s最快四、重点精讲Verilog两种Parameter参数修改方式这是本文核心干货工程中同时使用了Verilog仅有的两种模块参数重配置方法下面逐行拆解、对比优劣。4.1 实例化 # 直接传参最好led_twinkle #(.MCNT(MCNT1))led_twinkle_inst1(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[1]));逐步解析led_twinkle指定需要调用的底层基础模块。#()Verilog专属参数传递符号代表「本次例化需要重写模块参数」。.MCNT(MCNT1)左侧.MCNT底层模块定义的参数名必须完全一致右侧MCNT1顶层自定义的新参数值替换底层默认值。led_twinkle_inst1模块实例唯一名称用于区分多个复用模块。端口映射绑定时钟、复位、LED输出引脚。优点参数和实例绑定在一起代码可读性极高编译兼容性强是企业开发、项目开发的标准写法。4.2 defparam 后置重定义old school代码片段// 1. 先正常例化模块使用默认参数led_twinkleled_twinkle_inst0(.Clk(Clk),.Reset_n(Reset_n),.Led(Led[0]));// 2. 单独重定义参数defparam led_twinkle_inst0.MCNTMCNT0;逐步解析第一步正常例化创建模块实例此时模块暂时使用内部默认的MCNT参数。defparam关键字全称define parameter作用是强制重定义已实例化模块的参数。led_twinkle_inst0.MCNT精准定位参数位置——指定「某个实例的某个参数」。 MCNT0赋值新参数覆盖模块默认参数实现频率修改。缺点参数配置与模块例化代码分离可读性差部分新仿真工具兼容性一般仅用于兼容老旧项目。五、工程核心知识点总结模块化复用思想将通用功能LED闪烁封装为独立模块多次例化即可重复使用减少冗余代码。Parameter参数化核心parameter定义的模块参数默认值可被顶层覆盖实现一个模块、多种功能。频率控制逻辑计数器阈值MCNT与闪烁频率成反比数值越小闪烁速度越快。独立实例特性4个模块实例完全独立参数互不影响因此4路LED可以实现不同频率独立闪烁。

相关新闻

Java二叉树遍历:从递归到迭代,用栈与队列的视角彻底讲透

Java二叉树遍历:从递归到迭代,用栈与队列的视角彻底讲透

1. 二叉树遍历的本质是什么?很多Java开发者第一次接触二叉树遍历时,往往会把注意力集中在代码实现上,却忽略了最核心的问题:我们为什么要用不同的方式遍历同一棵树?这就像用不同的路线逛同一个公园——前序遍历像从正门…

2026/7/15 6:21:35 阅读更多 →
51单片机定时器/计数器:从寄存器配置到精准时钟实战

51单片机定时器/计数器:从寄存器配置到精准时钟实战

1. 51单片机定时器/计数器基础概念第一次接触51单片机的定时器功能时,我盯着TCON、TMOD这些寄存器名称发呆了半小时。后来才明白,这就像给厨房电器定时——只不过我们现在是用代码来控制芯片内部的"电子钟表"。定时器和计数器本质上都是加法器…

2026/7/15 6:17:34 阅读更多 →
C++多线程性能优化实战:从锁竞争到无锁编程的高级技巧

C++多线程性能优化实战:从锁竞争到无锁编程的高级技巧

1. 项目概述:从“能用”到“好用”的C多线程进阶之路最近在社区里看到不少朋友在讨论C多线程编程,尤其是当项目从单线程转向多线程,或者并发量上来之后,各种性能瓶颈和诡异的Bug就冒出来了。我自己在游戏服务器和高频交易系统里摸…

2026/7/15 6:17:34 阅读更多 →

最新新闻

FactoryBluePrints:戴森球计划终极工厂蓝图库的完整使用指南

FactoryBluePrints:戴森球计划终极工厂蓝图库的完整使用指南

FactoryBluePrints:戴森球计划终极工厂蓝图库的完整使用指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 还在为戴森球计划中复杂的工厂布局而烦恼吗&#x…

2026/7/15 7:13:59 阅读更多 →
ClaudeCode实操速成:30分钟构建可运行CLI工具

ClaudeCode实操速成:30分钟构建可运行CLI工具

1. 这不是又一个“AI编程工具介绍”,而是一份能让你30分钟内真正写出来、跑起来、改得动的ClaudeCode实操手记我带过几十个从零开始学AI辅助编程的工程师和产品同学,最常听到的一句话是:“看了三篇教程,还是不知道第一行代码该敲在…

2026/7/15 7:11:57 阅读更多 →
告别繁琐下载:国家中小学智慧教育平台电子课本一键获取终极指南

告别繁琐下载:国家中小学智慧教育平台电子课本一键获取终极指南

告别繁琐下载:国家中小学智慧教育平台电子课本一键获取终极指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 …

2026/7/15 7:09:55 阅读更多 →
WeChatMsg:重新定义你的微信记忆管理方式

WeChatMsg:重新定义你的微信记忆管理方式

WeChatMsg:重新定义你的微信记忆管理方式 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg 你…

2026/7/15 7:07:54 阅读更多 →
ok-ww:鸣潮自动化效率工具终极指南,解放双手的完整解决方案

ok-ww:鸣潮自动化效率工具终极指南,解放双手的完整解决方案

ok-ww:鸣潮自动化效率工具终极指南,解放双手的完整解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves …

2026/7/15 7:05:53 阅读更多 →
火山引擎GLM5.2大模型API接入实战:免费额度使用与优化策略

火山引擎GLM5.2大模型API接入实战:免费额度使用与优化策略

最近在技术社区看到不少开发者讨论大模型API的免费额度问题,特别是火山引擎平台上的智谱GLM5.2模型。作为技术实践者,我理解大家希望低成本体验最新AI能力的想法,但更重要的是掌握正确的接入方法和使用规范。本文将系统介绍GLM5.2的技术特性、…

2026/7/15 7:05:53 阅读更多 →

日新闻

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向红外小目标检测的时空特征融合模块——STFFM,用于增强复杂背景下目标与噪声、杂波的区分能力。该方法通过拼接空间特征与时间/运动特征,并结合通道注意力、空间注意力和残差增强机制,实现对关键语义通道与疑似目标区域的…

2026/7/15 0:01:00 阅读更多 →
YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向复杂背景小目标检测的时空特征融合模块——STFFM。该模块通过空间分支与时间/运动分支的特征拼接,引入通道注意力和空间注意力对融合特征进行自适应筛选,并结合残差增强与通道压缩,突出目标区域、抑制背景噪声。我们将 S…

2026/7/15 0:01:00 阅读更多 →
行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

一、为什么减速以后扭矩会增大 旋转机械的功率、转速和扭矩之间存在以下关系: T 9550 P n 其中: T为扭矩,单位Nm; P为功率,单位kW; n为转速,单位r/min。 在功率基本不变的情况下:…

2026/7/15 0:03:00 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/14 16:53:23 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/14 14:00:13 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻