FPGA-DFPGL22学习7-gpio

news2024/12/26 0:16:08

系列文章目录

FPGA-DFPGL22学习6-led

文章目录

  • 系列文章目录
  • 前言
  • 一、原理图
    • 1)key
    • 2)beep+touch
    • 端口对应
      • 1)key
      • 2)beep+touch
  • 二、程序设计
    • 1)KEY
    • 2)beep+touch
  • 三、程序编写
    • 1.KEY代码:
    • 2.beep+touch代码:
  • 结论


前言

@和原子哥一起学习FPGA

开发环境:正点原子 ATK-DFPGL22G 开发板

参考书籍:
《ATK-DFPGL22G之FPGA开发指南_V1.1.pdf》

个人学习笔记,欢迎讨论

一、原理图

1)key

开发板上的四个按键未按下时,输出高电平,按下后,输出低电平
在这里插入图片描述

2)beep+touch

beep高电平发出声音
在这里插入图片描述
当前触摸后输出高电平
在这里插入图片描述

端口对应

1)key

![在这里插入图片描述](https://img-blog.csdnimg.cn/ecfd3b308d134694970907148af13f1f.png

define_attribute {p:key[0]} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:key[0]} {PAP_IO_LOC} {F2}
define_attribute {p:key[0]} {PAP_IO_VCCIO} {1.5}
define_attribute {p:key[0]} {PAP_IO_STANDARD} {LVCMOS15}
define_attribute {p:key[0]} {PAP_IO_PULLUP} {TRUE}

define_attribute {p:key[1]} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:key[1]} {PAP_IO_LOC} {H5}
define_attribute {p:key[1]} {PAP_IO_VCCIO} {1.5}
define_attribute {p:key[1]} {PAP_IO_STANDARD} {LVCMOS15}
define_attribute {p:key[1]} {PAP_IO_PULLUP} {TRUE}

define_attribute {p:key[2]} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:key[2]} {PAP_IO_LOC} {H6}
define_attribute {p:key[2]} {PAP_IO_VCCIO} {1.5}
define_attribute {p:key[2]} {PAP_IO_STANDARD} {LVCMOS15}
define_attribute {p:key[2]} {PAP_IO_PULLUP} {TRUE}

define_attribute {p:key[3]} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:key[3]} {PAP_IO_LOC} {G3}
define_attribute {p:key[3]} {PAP_IO_VCCIO} {1.5}
define_attribute {p:key[3]} {PAP_IO_STANDARD} {LVCMOS15}
define_attribute {p:key[3]} {PAP_IO_PULLUP} {TRUE}

2)beep+touch

在这里插入图片描述
在这里插入图片描述

#------------------------------touch-----------------------------------
define_attribute {p:touch} {PAP_IO_DIRECTION} {INPUT}
define_attribute {p:touch} {PAP_IO_LOC} {F1}
define_attribute {p:touch} {PAP_IO_VCCIO} {1.5}
define_attribute {p:touch} {PAP_IO_STANDARD} {LVCMOS15}
define_attribute {p:touch} {PAP_IO_PULLUP} {TRUE}

#-----------------------------------beep-----------------------------------------
define_attribute {p:beep} {PAP_IO_DIRECTION} {OUTPUT}
define_attribute {p:beep} {PAP_IO_LOC} {P3}
define_attribute {p:beep} {PAP_IO_VCCIO} {1.35}
define_attribute {p:beep} {PAP_IO_STANDARD} {LVCMOS15}
define_attribute {p:beep} {PAP_IO_DRIVE} {4}
define_attribute {p:beep} {PAP_IO_PULLUP} {TRUE}
define_attribute {p:beep} {PAP_IO_SLEW} {SLOW}

二、程序设计

1)KEY

想要实现的效果在流水灯的基础上按下一个按键后,对应的LED灯常量
在这里插入图片描述

2)beep+touch

在这里插入图片描述

三、程序编写

1.KEY代码:

代码如下(示例):

module flow_led(
	input        		sys_clk,     //系统时钟
	input        		sys_rst_n,   //系统复位
	output reg [3:0]    led,
	input      [3:0]    key
);

reg [23:0] counter;
reg [3:0]  led_contorl;

//时钟上升沿有效,复位信号下降沿有效
always @(posedge sys_clk or negedge sys_rst_n )begin
	if (!sys_rst_n) 
		counter <= 24'd0;  //非阻塞赋值,同时赋值
	else if (counter < (24'd1000_0000 - 1'b1))
	//else if (counter < (24'd10 - 1'b1))
		counter <= counter + 1'b1;
	else
		counter <= 1'd0;
end


always @(posedge sys_clk or negedge sys_rst_n )begin
	if (!sys_rst_n) 
		led_contorl <= 4'b0001;
	else if (counter == (24'd1000_0000 - 1'b1))
    //else if (counter == (24'd10 - 1'b1))
		led_contorl <= {led_contorl[2:0],led_contorl[3]};
	else
		led_contorl <= led_contorl;
		
end

always @(posedge sys_clk or negedge sys_rst_n) begin
	if (!sys_rst_n) 
		led <= 4'b0000;
	else if (key != 4'b1111) 
		led <= ~key;
    else
		led <= led_contorl;
end
 

endmodule

2.beep+touch代码:

module top_all(
	input  sys_clk,
	input  sys_rst_n,
	
	input  touch_key,
	output beep
	
   );
   
wire key_flag;

key_module u_key_module(
	.sys_clk   (sys_clk  ),
	.sys_rst_n (sys_rst_n),
	                      
	.touch_key (touch_key), 
	.key_flag  (key_flag)
	); 
   
beep_module u_beep_module(
	.sys_clk   (sys_clk  ),
	.sys_rst_n (sys_rst_n),
	                      
	.beep      (beep), 
	.key_flag  (key_flag)
	); 
endmodule

module key_module(
	input  sys_clk,
	input  sys_rst_n,
	
	input  touch_key,
    output reg    key_flag
	
   );
   
reg        key_reg0;   
reg        key_reg1;  

wire    key_en;

assign key_en = (~key_reg1)&(key_reg0);

always @(posedge sys_clk or negedge  sys_rst_n) begin 
	if (!sys_rst_n) begin
		key_reg0  <= 1'b1;
		key_reg1  <= 1'b1;
	end
	else begin
		key_reg0  <= touch_key; //非阻塞赋值,同时赋值
		key_reg1  <= key_reg0;
	end
	
end
 
always @(posedge sys_clk or negedge  sys_rst_n) begin 
	if (!sys_rst_n) begin
		key_flag  <= 1'b0;

	end
	else begin
		if (key_en) begin
			    key_flag  <= ~key_flag;
		end
	end
	
end
endmodule

module beep_module(
	input  sys_clk,
	input  sys_rst_n,
	
	output reg beep,
	input    key_value,
    input    key_flag
   );
   
always @(posedge sys_clk or negedge  sys_rst_n) begin 
	if (!sys_rst_n) 
		beep  <= 1'b1;
	else if (key_flag)
		beep  <= ~beep;
	
end
endmodule

结论

gpio的基本操作,学习到了如何使用不同文件的实例化

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

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

相关文章

blender 基础材质篇

材质展示 材质背景介绍 什么是PBR&#xff1f; PBR 全称为 Physically Based Rendering&#xff0c;译为基于物理属性的引擎渲染&#xff0c;也就是说会把物质的颜色、粗糙度、高光属性等进行分别处理&#xff0c;使物质体现出更真实的感觉&#xff1b; 什么是BRDF&#xff…

【Linux】初识多线程深入理解进程地址空间

目录 1 多线程的引入 1.1 相关概念 1.2 Linux操作系统理解多线程 特殊的进程结构 创建子进程的过程 创建多线程 进程与线程之间的关系 1.3 对多线程结构的管理 Windows管理多线程 Linux管理多线程 1.4 理解多线程与多进程相比&#xff0c;调度的成本更低 2 深入理…

[JAVAee]volatile关键字

目录 1.volatile的特性 ①保持线程可见性 2.volatile注意事项及适用场景 ①注意事项 ②适用场景 1.volatile的特性 ①保持线程可见性 volatile,译为"易变的". 对此我们就可以这样理解,对于被volatile修饰的变量的数值,是容易变化的. 在之前的线程安全文章中,…

XILINX ZYNQ 7000 AXI总线 (二)

了解了AXI 的大部分内容后&#xff0c;开始做一个实战&#xff0c;就是完成AXI 结构的输入输出搭建。 一.创建一个IP 3. 4. 5. 6.选择AXI FULL&#xff0c;创界主接口和从接口 7. 8.可以看到XILINX AXI FULL 的源代码 二.创建一个新的工程&#xff0c;把IP导入到这个工…

ARP系统的命令行基础

系列文章目录 华为数通学习&#xff08;2&#xff09; 一、基本命令结构 二、命令行视图 设备提供了多样的配置和查询命令&#xff0c;为便于用户使用这些命令&#xff0c;VRP系统按功能分类将命令分别注册在不同的命令行视图下。 2.1&#xff0c;命令行视图介绍 我们接下来…

DevOps系列文章 之GitLabCI模板库的流水线

目录结构&#xff0c;jobs目录用于存放作业模板。templates目录用于存放流水线模板。这次使用​​default-pipeline.yml​​作为所有作业的基础模板。 作业模板 作业分为Build、test、codeanalysis、artifactory、deploy部分&#xff0c;在每个作业中配置了rules功能开关&…

栈和队列 --- C语言实现

本篇文章来详细介绍一下栈和队列&#xff0c;并且通过数组或链表来实现。 目录 1.栈 1.1栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2队列的实现 3.栈和队列面试题 4.相关概念选择题 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff…

项目初始化--uniapp--vscode--vue3--ts

HBuilderX 创建 uni-app 项目 注意开启服务端口 目录结构 ├─pages 业务页面文件存放的目录 │ └─index │ └─index.vue index页面 ├─static 存放应用引用的本地静态资源的目录(注意&#xff1a;静态资源只能存放于此) ├─unpackage …

eclipse中经常遇到的maven相关的问题

maven工程依赖的jar包无法部署到tomcat中 右键maven工程&#xff0c;选择“属性” 将工程在tomcat重新发布即可。 2、Update Project or use Quick Fix maven工程总是提示更新&#xff0c;一更新java版本又回到1.5 在pom.xml添加如下&#xff1a; <build><finalN…

【jenkins】idea+jenkins+docker+dockerfile+compose流水线部署java应用

目录 整体架构 环境准备 安装docker以及docker-compose jenkins安裝 maven安装 portainer面板安装 sonarqube安装 在项目中增加dockerfile和compose.yml脚本 Dockerfile脚本内容 compose.yml脚本内容 jenkins安装必要插件 jenkins增加流水线任务 增加pipeline任务j…

windows下搭建php开发环境

http://wed.xjx100.cn/news/139397.html?actiononClick https://www.bilibili.com/read/cv23429835/ https://www.php.cn/faq/498307.html 安装iis 选择卸载程序 安装php 官网https://www.php.net/下载 选择线程安全 国内地址 下载完成后解压放到想存放的路径 添加p…

【Deviation】50 Matplotlib Visualizations, Python实现,源码可复现

详情请参考博客: Top 50 matplotlib Visualizations 因编译更新问题&#xff0c;本文将稍作更改&#xff0c;以便能够顺利运行。 本文介绍一下5中图示&#xff1a; Diverging Bars Diverging Texts Diverging Dot Plot Diverging Lollipop Chart with Markers Area Chart 1 Di…

OpenCv之车辆统计项目

目录 一、加载视频 二、去除背景 三、通过形态学识别车辆 四、对车辆统计 一、加载视频 代码如下: import cv2 import numpy as np import matplotlib.pyplot as plt# 视频加载 cap cv2.VideoCapture(2.mp4)# 循环读取视频帧 while True:ret,frame cap.read()if ret Tr…

【Vue】day03-VueCli(脚手架)

day03 一、今日目标 1.生命周期 生命周期介绍 生命周期的四个阶段 生命周期钩子 声明周期案例 2.综合案例-小黑记账清单 列表渲染 添加/删除 饼图渲染 3.工程化开发入门 工程化开发和脚手架 项目运行流程 组件化 组件注册 4.综合案例-小兔仙首页 拆分模块-局部…

Java-API简析_java.net.Proxy类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131881661 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

Element Ui 时间组件

很多时候在我们做项目的时候一般都会用到时间组件&#xff0c;其次js中&#xff1a;new dateNow new Date();得到的是Thu Jul 28 2022 15:04:32 GMT0800 (中国标准时间)&#xff0c;都需要去转换自己需要的时间格式。 接下来介绍Element Ui中的一个组件: <el-date-picker…

windows 服务器允许 ping

打开 Widnows 防火墙&#xff0c;高级 – 入站规则 找到以下 4 条规则&#xff0c;一条一条的点击右边的 &#xff1a; 启用规则 文件和打印机共享(回显请求 - ICMPv4-In) 文件和打印机共享(回显请求 - ICMPv6-In) 虚拟机监控(回显请求 - ICMPv6-In) 虚拟机监控(回显请求- IC…

【Linux网络编程】- 认识 ‘’协议‘‘ | 网络版本计算器

目录 一、“协议” 的概念 二、结构化数据的传输 三、序列化和反序列化 序列化和反序列化的目的 四、网络版本计算器 服务端&#xff08;server&#xff09; 协议定制&#xff08;protocal&#xff09; 客户端&#xff08;client&#xff09; 服务器处理请求逻辑&#…

【Unity3D】地面网格特效

1 前言 本文实现了地面网格特效&#xff0c;包含以下两种模式&#xff1a; 实时模式&#xff1a;网格线宽度和间距随相机的高度实时变化&#xff1b;分段模式&#xff1a;将相机高度分段&#xff0c;网格线宽度和间距在每段中对应一个值。 本文完整资源见→Unity3D地面网格特效…

C++ —— 类与对象(上)

前言 由于C在C语言的基础上移植了新的编程理念&#xff0c;所以我们先回顾一下C语言所遵循的旧的理念。一般来说&#xff0c;计算机语言要处理两个概念——数据和算法。数据是程序使用和处理的信息&#xff0c;而算法是程序使用的方法。C语言与当前最主流的语言一样&#xff0…