【FPGA开发】FPGA点亮LED灯(增加按键暂停恢复/复位操作)

news2025/3/29 3:46:55

目录

一、VScode下载安装

1.1 官网下载

1.2 安装插件

二、LED流水灯点亮

2.1 任务说明

2.2 新建项目

2.3 创建Verilog文件添加至顶层实体

2.4 引脚分配 

2.5 选择烧录器

2.6 添加烧录文件&下载

2.7 烧录结果

三、增加按键操作

3.1 按键暂停和恢复功能:

3.2 引脚分配:

3.3 完整代码: 

3.4 烧录结果 


一、VScode下载安装

1.1 官网下载

在官网点击进行下载:Visual Studio Code - Code Editing. Redefined

官网速度比较慢,要使用国内镜像,本人之前已经下载安装完成了,所以可以参考博客:

VScode下载安装及使用教程_vscode qq浏览器下载-CSDN博客https://blog.csdn.net/qq_35697978/article/details/120541378?ops_request_misc=%257B%2522request%255Fid%2522%253A%25227296b49de1d5aaed030289223ac2ff33%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=7296b49de1d5aaed030289223ac2ff33&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_positive~default-1-120541378-null-null.nonecase&utm_term=VScode%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4450

1.2 安装插件

在扩展处搜索下载安装 Verilog-HDL/SystemVerilog 插件,实现Verilog代码的语法高亮/自动补全

二、LED流水灯点亮

2.1 任务说明

在DE2-115开发板上,用Verilog设计一个LED流水灯实验:用6个LED完成周期为1秒的跑马灯效果

2.2 新建项目

建立项目工程名

然后一直点击NEXT进入开发板选型界面

最后点击finish

这是创建好的界面

2.3 创建Verilog文件添加至顶层实体

编译代码如下:

module LED_Flow #(parameter CLK_FREQ = 50_000_000, parameter LED_NUM = 6)(
    input               sys_clk,      // 系统时钟 (50 MHz)
    input               sys_rst_n,    // 复位信号,低电平有效
    output reg [5:0]    led           // 6 个 LED 输出
);

    // 定义计数器
    reg [25:0] cnt;                   // 26 位计数器,用于计时 1/6 秒
    wire add_cnt;                     // 计数器使能信号
    wire end_cnt;                     // 计数器结束信号

    // 定义 LED 状态计数器
    reg [2:0] led_state;              // 3 位计数器,用于控制 LED 状态
    wire add_led_state;               // LED 状态计数器使能信号
    wire end_led_state;               // LED 状态计数器结束信号

    // 计算 1/6 秒的计数值
    localparam CNT_MAX = CLK_FREQ / LED_NUM - 1; // 1/6 秒的计数值

    // 主计数器逻辑
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n) begin
            cnt <= 26'b0;            // 复位时清零计数器
        end
        else if (add_cnt) begin
            if (end_cnt) begin
                cnt <= 26'b0;        // 计数达到最大值时清零
            end
            else begin
                cnt <= cnt + 1'b1;   // 计数器加 1
            end
        end
    end

    // LED 状态计数器逻辑
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n) begin
            led_state <= 3'b0;       // 复位时清零 LED 状态计数器
        end
        else if (add_led_state) begin
            if (end_led_state) begin
                led_state <= 3'b0;   // 计数达到最大值时清零
            end
            else begin
                led_state <= led_state + 1'b1; // LED 状态计数器加 1
            end
        end
    end

    // LED 输出逻辑
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if (!sys_rst_n) begin
            led <= 6'b000001;        // 复位时点亮第一个 LED
        end
        else begin
            case (led_state)
                3'b000: led <= 6'b000001; // 第 1 个 LED 点亮
                3'b001: led <= 6'b000010; // 第 2 个 LED 点亮
                3'b010: led <= 6'b000100; // 第 3 个 LED 点亮
                3'b011: led <= 6'b001000; // 第 4 个 LED 点亮
                3'b100: led <= 6'b010000; // 第 5 个 LED 点亮
                3'b101: led <= 6'b100000; // 第 6 个 LED 点亮
                default: led <= 6'b000001; // 默认点亮第 1 个 LED
            endcase
        end
    end

    // 计数器使能信号
    assign add_cnt = 1'b1;            // 计数器始终使能
    assign end_cnt = (cnt == CNT_MAX); // 计数达到 1/6 秒时结束

    // LED 状态计数器使能信号
    assign add_led_state = end_cnt;  // 主计数器结束时,LED 状态计数器加 1
    assign end_led_state = (led_state == LED_NUM - 1); // LED 状态计数器达到最大值时结束

endmodule

另存为.v文件(名称与工程名一致)

选择Files,显示LED.v文件

右键点击文件,将其设置为顶层实体 

进行编译

2.4 引脚分配 

分配引脚如下: 

2.5 选择烧录器

点击选择烧录器

选择USB-Blaster [USB-0]

PS:如果遇到无法识别USB接口的情况,即只显示No-Hardware,可参考一下博客进行解决:

使用Altera综合工具Quartus II下载到FPGA时无法识别USB-Blaster问题_fpga usb blaster 禁止-CSDN博客https://blog.csdn.net/l2563898960/article/details/80309089

2.6 添加烧录文件&下载

点击LED.sof文件,点击open 

 

点击第一项编程与配置,然后开始下载 

 下载成功

2.7 烧录结果

三、增加按键操作

3.1 按键暂停和恢复功能:

按下按键时流水灯停止工作,松开按键流水灯继续工作

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        running <= 1'b1;  // 初始状态为运行
    end else if (pause) begin
        running <= ~running;  // 按键按下时切换运行状态
    end
end

3.2 引脚分配:

3.3 完整代码: 

module led_flow (
    input wire clk,          // 时钟信号
    input wire rst_n,        // 复位信号,低电平有效
    input wire pause,        // 暂停按键,高电平有效
    output reg [5:0] leds    // 6个LED输出
);

    reg [25:0] counter;      // 计数器,用于生成1秒的时钟周期
    reg [2:0] state;         // 状态寄存器,用于控制LED流水灯的状态
    reg running;            // 运行状态标志,1表示运行,0表示暂停

    // 时钟分频,生成1秒周期
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            counter <= 26'd0;
        end else if (running) begin
            if (counter == 26'd49_999_999) begin
                counter <= 26'd0;
            end else begin
                counter <= counter + 1;
            end
        end
    end

    // 状态机控制LED流水灯
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            state <= 3'd0;
            leds <= 6'b000001;  // 初始状态,第一个LED亮
        end else if (running && counter == 26'd49_999_999) begin
            case (state)
                3'd0: begin leds <= 6'b000010; state <= 3'd1; end
                3'd1: begin leds <= 6'b000100; state <= 3'd2; end
                3'd2: begin leds <= 6'b001000; state <= 3'd3; end
                3'd3: begin leds <= 6'b010000; state <= 3'd4; end
                3'd4: begin leds <= 6'b100000; state <= 3'd5; end
                3'd5: begin leds <= 6'b000001; state <= 3'd0; end
                default: begin leds <= 6'b000001; state <= 3'd0; end
            endcase
        end
    end

    // 按键暂停和恢复功能
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            running <= 1'b1;  // 初始状态为运行
        end else if (pause) begin
            running <= ~running;  // 按键按下时切换运行状态
        end
    end

endmodule

3.4 烧录结果 

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

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

相关文章

Spring MVC 执行流程:一个请求在 Spring MVC 中是如何执行的?

当用户发送一个 HTTP 向 Spring MVC 应用&#xff0c;该请求在 Spring MVC 的执行流程如下&#xff1a; 当用户向 Spring MVC 发起一个 HTTP 请求&#xff0c;该请求会被 Dispatcher Servlet&#xff08;前端控制器&#xff09;拦截&#xff1b;DispatcherServlet 调用 Handler…

三主热备架构

1.要求 角色主机名软件IP地址用户client192.168.72.90keepalivedvip192.168.72.100masterserverAkeepalived, nginx192.168.72.30backupserverBkeepalived, nginx192.168.72.31backupserverCkeepalived, nginx192.168.72.32webtomcat1tomcat192.168.72.41webtomcat2tomcat192.1…

JavaScript | 爬虫逆向 | 语法基础| 01

一、摘要 实践是最好的导师 二、环境配置 在开始之前&#xff0c;需要确保你的计算机上已经安装了 Node.js。Node.js 是一个开源的、跨平台的 JavaScript 运行时环境&#xff0c;它允许你在服务器端运行 JavaScript 代码。 1. 下载 安装地址&#xff1a;https://nodejs.org…

字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破

目录 禹棋赢的背景与成就 主要成就 DAPO算法的技术细节 算法优势 禹棋赢的研究历程 关键时间节点 字节跳动的“Top Seed人才计划” 计划特点 小编总结 在大模型时代&#xff0c;经验不再是唯一的衡量标准&#xff0c;好奇心、执行力和对新技术的敏锐洞察力成为推动技术…

前后端+数据库的项目实战:hbu迎新网-较复杂(下)javaweb

目录 十一、实现对内容的富文本编辑&#xff08;换行、图片颜色等等样式&#xff09; &#xff08;1&#xff09;下载富文本编辑器&#xff0c;引入资源 &#xff08;2&#xff09;将原项目的内容部分替换为富文本编辑器 1、替换添加页面 2、替换修改页面&#xff08;和添…

Redis、Memcached应用场景对比

环境 Redis官方网站&#xff1a; Redis - The Real-time Data Platform Redis社区版本下载地址&#xff1a;Install Redis | Docs Memcached官方网站&#xff1a;memcached - a distributed memory object caching system Memcached下载地址&#xff1a;memcached - a dis…

【单片机通信技术应用——学习笔记三】液晶屏显示技术,取模软件的应用

一、液晶显示技术简介 1.RGB信号线 RGB是一种色彩模式&#xff0c;是工业界的一种颜色标准&#xff0c;是通过红&#xff08;R&#xff09;、绿&#xff08;G&#xff09;、蓝&#xff08;B&#xff09;三个颜色通道的变化&#xff0c;以及它们相互之间的叠加来得到各式各样的…

MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇

文章目录 前言一、窗口函数&#xff08;Window Functions&#xff09;1.1 窗口函数概念1.2 常见的窗口函数 二、公用表表达式&#xff08;Common Table Expressions, CTEs&#xff09;2.1 公用表表达式的概念2.2 常见的公用表表达式 三、JSON增强3.1 JSON增强的概念3.2 常见的J…

MySQL 调优:查询慢除了索引还能因为什么?

文章目录 情况一&#xff1a;连接数过小情况二&#xff1a;Buffer Pool 太小 MySQL 查询慢除了索引还能因为什么&#xff1f;MySQL 查询慢&#xff0c;我们一般也会想到是因为索引&#xff0c;但除了索引还有哪些原因会导致数据库查询变慢呢&#xff1f; 以下以 MySQL 中一条 S…

如何在百度搜索上删除与自己名字相关的资料

个人信息的网络足迹如同一张无形的网&#xff0c;将我们与世界的每一个角落紧密相连。然而&#xff0c;当某些与自己名字相关的资料不再希望被公众轻易检索到时&#xff0c;如何在百度搜索中有效“隐身”&#xff0c;成为了一个亟待解决的问题。面对复杂多变的网络环境&#xf…

使用外部事件检测接入 CDH 大数据管理平台告警

CDH 大数据管理平台 CDH&#xff08;Cloudera Distribution Hadoop&#xff09;是一个企业级的大数据平台&#xff0c;由 Cloudera 公司提供&#xff0c;它包含了 Apache Hadoop 生态系统中的多种开源组件&#xff0c;并对其进行了优化和集成&#xff0c;以支持大规模数据存储…

MongoDB(五) - Studio 3T 下载与安装教程

文章目录 前言一、Studio 3T 简介二、下载及安装1. 下载2. 安装 三、使用Studio 3T连接MongoDB 前言 本文旨在全面且深入地为你介绍 Studio 3T。从其丰富的功能特性、跨平台使用的便捷性&#xff0c;到详细的下载安装步骤&#xff0c;以及关键的连接 MongoDB 操作&#xff0c;…

汽车制造MES

一、整体生产工序 整车的车间主要分为4个部分&#xff1a;冲压、焊装、涂装、总装、整车入库 系统架构 二、车间概括 1.冲压车间 2.焊装车间 3.涂装车间 4.总装车间 1.整车装配的部件都要可追溯、数据实时性要求高、涉及分装与总装的协调、物流配送的协调、质量批处理的协调、…

信奥赛CSP-J复赛集训(模拟算法专题)(26):P5412 [YNOI2019] 排队

信奥赛CSP-J复赛集训(模拟算法专题)(26):P5412 [YNOI2019] 排队 题目描述 小明所在的班级要举办一场课外活动,在活动开始之前老师告诉小明:“需要把男女生分成两队,并且每一队都要按照身高从矮到高进行排序”。但是由于小明的马虎,没有把老师的安排转达给同学,导致全…

基于开源模型的微调训练及瘦身打造随身扫描仪方案__用AI把手机变成文字识别小能手

基于开源模型的微调训练及瘦身打造随身扫描仪方案__用AI把手机变成文字识别小能手 一、准备工作&#xff1a;组装你的"数码工具箱" 1. 安装基础工具&#xff08;Python环境&#xff09; 操作步骤&#xff1a; 访问Python官网下载安装包安装时务必勾选Add Python to…

在 Offset Explorer 中配置多节点 Kafka 集群的详细指南

一、是否需要配置 Zookeeper&#xff1f; Kafka 集群的 Zookeeper 依赖性与版本及运行模式相关&#xff1a; Kafka 版本是否需要 Zookeeper说明0.11.x 及更早版本✅ 必须配置Kafka 完全依赖 Zookeeper 管理元数据2.8 及以下版本✅ 必须配置Kafka 依赖外置或内置的 Zookeeper …

STM32基础教程——定时器

前言 TIM定时器&#xff08;Timer&#xff09;:STM32的TIM定时器是一种功能强大的外设模块&#xff0c;通过时基单元&#xff08;包含预分频器、计数器和自动重载寄存器&#xff09;实现精准定时和计数功能。其核心原理是&#xff1a;内部时钟&#xff08;CK_INT&#xff09;或…

深入分析和讲解虚拟化技术原理

随着云计算和大数据技术的飞速发展&#xff0c;虚拟化技术应运而生&#xff0c;成为数据中心和IT基础设施的重要组成部分。本文将深入分析虚拟化的基本原理、主要类型以及在实际应用中的意义。 一、虚拟化技术的定义 虚拟化技术是通过软件将物理硬件资源抽象成虚拟资源的技术&…

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…

同旺科技USB to SPI 适配器 ---- 指令之间延时功能

所需设备&#xff1a; 内附链接 1、同旺科技USB to SPI 适配器 1、指令之间需要延时发送怎么办&#xff1f;循环过程需要延时怎么办&#xff1f;如何定时发送&#xff1f;现在这些都可以轻松解决&#xff1b; 2、只要在 “发送数据” 栏的Delay单元格里面输入相应的延迟时间就…