当前位置: 首页 > news >正文

FPGA实战篇(按键控制LDE实验)

1.按键简介

        按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开,其内部结构是靠金属弹片受力后发生形变来实现通断的;第二种是自锁按键 ,自锁按键第一次按下后保持接通,即自锁,第二次按下后,开关断开,同时开关按钮 弹出来,开发板上的电源键就是这种开关。
2.实验任务
        本节实验任务是使用底板上的 PL_KEY0 PL_KEY1 按键来控制底板上的 PL_LED0 PL_LED1 两个LED 的闪烁方式。没有按键按下时,两个 LED 保持常亮;如果按键 0 按下,则两个 LED 交替闪烁;如果按键 1 按下,则两个 LED 同时闪烁。
3. 硬件设计
        底板上按键的原理图如下图所示:

        PL 端的按键没有按下时,对应的 IO 端口为高电平;当按键按下时,对应的 IO 端口变为低电平。
        本实验的管脚分配如下表所示:
4.程序设计
        按键控制 LED 系统框图如下图所示:
        计数器对 50MHz 时钟进行计数,从而达到计时的目的。计数器在每次计时到 0.5 秒的时候,就改变 LED 的显示状态,然后清零并重新开始计数。
        然后根据两个按键(KEY0 KEY1 )的状态,在不同的 LED 状态下,分别设置 LED 的显示模式(是同时闪烁,或者交替闪烁)。
        顶层模块代码如下:
1 module key_led(
2 input sys_clk ,
3 input sys_rst_n ,
4 
5 input [1:0] key ,
6 output reg [1:0] led
7 );
8 
9 //reg define
10 reg [24:0] cnt;
11 reg led_ctrl;
12 
13 //*****************************************************
14 //** main code
15 //*****************************************************
16 
17 //计数器
18 always @ (posedge sys_clk or negedge sys_rst_n) begin
19 if(!sys_rst_n)
20 cnt <= 25'd0;
21 else if(cnt < 25'd2500_0000) //计数 500ms
22 cnt <= cnt + 1'b1;
23 else
24 cnt <= 25'd0;
25 end
26 
27 //每隔 500ms 就更改 LED 的闪烁状态
28 always @ (posedge sys_clk or negedge sys_rst_n) begin
29 if(!sys_rst_n)
30 led_ctrl <= 1'b0;
31 else if(cnt == 25'd2500_0000)
32 led_ctrl <= ~led_ctrl;
33 end
34 
35 //根据按键的状态以及 LED 的闪烁状态来赋值 LED
36 always @ (posedge sys_clk or negedge sys_rst_n) begin
37 if(!sys_rst_n)
38 led <= 2'b11;
39 else case(key)
40 2'b10 : //如果按键 0 按下,则两个 LED 交替闪烁
41 if(led_ctrl == 1'b0)
42 led <= 2'b01;
43 else
44 led <= 2'b10;
45 2'b01 : //如果按键 1 按下,则两个 LED 同时闪烁
46 if(led_ctrl == 1'b0)
47 led <= 2'b11;
48 else
49 led <= 2'b00;
50 2'b11 : //如果两个按键都未按下,则两个 LED 都保持点亮
51 led <= 2'b11;
52 default: ;
53 endcase
54 end
55 
56 endmodule
        代码的第 18 行的 always 块用于产生计数器,计时 500ms 。代码的第 28 行的 always 块功能是每隔 500ms就给出 led 的闪烁状态控制信号。代码第 36 行的 always 块使用了一个 case 语句,来根据当前按键的输入值和 led 闪烁状态控制信号,来进行两个 led 的赋值。如果按键 1 按下,则两个 LED 交替闪烁;如果按键 0按下,则两个 LED 同时亮灭交替;如果两个按键都未按下,则两个 LED 都保持点亮。
5.下载验证
        连接开发板的电源和下载器,并打开电源开关。在工程编译之后,将生成的 bit 文件下载到开发板中。 下载完成之后,底板上两个 PL LED 处于点亮状态。然后按下 PL_KEY0 ,可以看到两个 PL LED 交替闪烁; 按下 PL_KEY1 ,可以看到两个 PL LED 同时闪烁。如下图所示:
由于上篇文章已经详细的给出了创建工程的步骤,本文章不再重复概述。
注意:
1.代码中,led之所以定义为reg变量,是因为要在时序逻辑中赋值,不然就只能用assign来赋值,比较麻烦
2.指定管脚既可以用图形化界面,如上篇文章,也可以直接编写文件。在该处右键,选择增加新文件,再选择约束文件。创建完文件后,打开该文件,在文件中编写约束代码。

相关文章:

FPGA实战篇(按键控制LDE实验)

1.按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。我们的开发板上有两种按键开关&#xff1a;第一种是本实验所使用的轻触式按键开关&#xff0c;简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff…...

在Ubuntu-22.04 [WSL2]中配置Docker

文章目录 0. 进入Ubuntu-22.041. 更新系统软件包2. 安装Docker相关依赖包3. 添加Docker官方GPG密钥4. 添加Docker软件源5. 安装Docker Engine5.1 更新软件包列表5.2 安装Docker相关软件包 6. 验证Docker安装是否成功6.1 查看Docker版本信息6.2 启动Docker6.3 配置镜像加速器6.4…...

ACM:均分纸牌

主要思路 整体思路概述&#xff1a; 本题旨在解决给定N堆纸牌&#xff08;纸牌总数是N的倍数&#xff09;&#xff0c;通过按照特定移牌规则移动纸牌&#xff0c;找出用最少移动次数使每堆纸牌数量相等的方法。程序采用了一种逐步调整的思路&#xff0c;先计算出每堆纸牌应有的…...

ThreadFactory

ThreadFactory 是 Java 中一个用于创建线程的接口&#xff0c;它可以自定义线程的创建过程&#xff0c;例如线程的名称、优先级、是否为守护线程等。它是 java.util.concurrent 包的一部分&#xff0c;通常与线程池&#xff08;ThreadPoolExecutor&#xff09;一起使用。 线程…...

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门

作为一个使用Node.js多年的开发者&#xff0c;我已经习惯于用Node.js写一些web应用来为工作服务&#xff0c;因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能&#xff1a;web路由。&#xff08;观看此文的前提是默认你已经装好nonde.js了&#xf…...

NES游戏机项目制作笔记(未完成)

24年12月1日晚记——在网上找项目学习的时候发现一个有意思的项目&#xff0c;准备靠这个应用一些STM32的高级功能。值得提醒的是——目的在于学习不可贪杯&#xff0c;注意效率 01 根据项目需求分析 为确保充分考虑每一个细节&#xff0c;并且让自己高效的完成项目制作&#…...

云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题

环境的搭建 准备&#xff1a;云服务器&#xff08;本地的linux服务器&#xff08;版本最好不要是老的不然不兼容docker&#xff09;&#xff09; f8x配置docker环境&#xff1a; https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…...

Elasticsearch入门之HTTP基础操作

RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…...

maven聚合项目部署到tomcat上

目录 一.聚合项目 1.检查无误后将项目打包 2.将这四个拷贝到tomcat的webapp下 二.启动tomcat 1.双击startup.bat 2.页面访问http://localhost:8080 3.打开webapp文件夹&#xff0c;发现多了三个文件夹 4.点进去才有要访问的index页面 5.再进行访问 解决&#xff1a; …...

基于Matlab生育模型和年龄别死亡率的未来人口预测与结构动态分析

人口预测在社会经济发展、政策规划以及资源分配中扮演着至关重要的角色&#xff0c;特别是在全球人口老龄化、少子化趋势日益显著的背景下&#xff0c;对人口增长规律及结构变化的研究愈发重要。人口结构的变化不仅直接影响劳动力供给和经济增长潜力&#xff0c;还对医疗、教育…...

公共服务 kkFileView 4.1 文件预览 Docker 一键部署

官方文档 https://kkview.cn/zh-cn/docs/production.html 镜像导入 # 网络环境方便访问docker中央仓库 docker pull keking/kkfileview:4.1.0# 网络环境不方便访问docker中央仓库 wget https://kkview.cn/resource/kkFileView-4.1.0-docker.tar docker load -i kkFileView-4…...

福昕PDF低代码平台

福昕PDF低代码平台简介 福昕PDF 低代码平台是一款创新的工具&#xff0c;旨在简化PDF处理和管理的流程。通过这个平台&#xff0c;用户可以通过简单的拖拽界面上的按钮&#xff0c;轻松完成对Cloud API的调用工作流&#xff0c;而无需编写复杂的代码。这使得即使没有编程经验的…...

Ubuntu环境安装RabbitMQ

1.安装Erlang RabbitMq需要Erlang语⾔的⽀持&#xff0c;在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 : erl 退出命令:halt(). 2. 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 …...

集合ArrayList

黑马程序员Java的个人笔记 BV17F411T7Ao p111~p115 目录 集合存储数据类型的特点 创建对象 ArrayList 成员方法 .add 增加元素 .remove 删除元素 .set 修改元素 .get 查询元素 .size 获取长度 基本数据类型对应的包装类 Character 练习 返回多个数据 集合存储…...

C#怎么判断电脑是否联网

在 C# 中&#xff0c;可以通过几种方法检测计算机是否联网。以下是几种常用的方式&#xff1a; 1. 使用 System.Net.NetworkInformation.Ping 类 通过发送一个 Ping 请求到公共 DNS 服务器&#xff08;如 Google 的 DNS 8.8.8.8&#xff09;来检测是否联网。这是最常见的一种…...

软件体系结构复习-02 软件体系结构定位及构建

软件体系结构复习-02 软件体系结构定位及构建 原文链接&#xff1a;《软件体系结构复习-02 软件体系结构定位及构建》 目录 软件体系结构复习-02 软件体系结构定位及构建 1 什么是软件体系结构 2 软件生命周期中的软件体系结构 2.1 生命周期 2.2 定位与作用 1 规划和需求…...

鸿蒙获取 APP 信息及手机信息

前言&#xff1a;获取 APP 版本信息可以通过 bundleManager.getBundleInfoForSelfSync(bundleFlags) 去获取&#xff0c;获取手机信息可以通过 kit.BasicServicesKit 库去获取&#xff0c;以下是封装好的工具类。 import bundleManager from ohos.bundle.bundleManager; impo…...

Linux-V4L2摄像头应用编程

ALPHA/Mini I.MX6U 开发板配套支持多种不同的摄像头&#xff0c;包括正点原子的 ov5640&#xff08;500W像素&#xff09;、 ov2640&#xff08;200W 像素&#xff09;以及 ov7725&#xff08;不带 FIFO、30W 像素&#xff09;这三款摄像头&#xff0c;在开发板出厂系统上&…...

掌握谈判技巧,达成双赢协议

在当今竞争激烈且合作频繁的社会环境中&#xff0c;谈判成为了我们解决分歧、谋求共同发展的重要手段。无论是商业合作、职场交流&#xff0c;还是国际事务协商&#xff0c;掌握谈判技巧以达成双赢协议都具有极其关键的意义。它不仅能够让各方在利益分配上找到平衡点&#xff0…...

Mysql - 存储引擎

一 MYSQL体系结构简介 MYSQL的体系结构可以分为四个层级&#xff0c;从上往下依次为&#xff1a; 1. 连接层: 最上层为客户端以及一些连接服务&#xff0c;包含连接操作&#xff0c;例如JAVA想要与MYSQL建立连接就需要用到JDBC&#xff0c;PHP语言与Python也可以连接到MYSQL&am…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...