16 、zedboard之纯PL按键实验

2024-03-03 15:08
文章标签 16 实验 按键 pl 之纯 zedboard

本文主要是介绍16 、zedboard之纯PL按键实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验基本目的:实验手册PL的流水灯,基本流程参考手册;

逻辑代码解析:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 03/11/2020 07:37:12 PM
// Design Name: 
// Module Name: PL
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module PL(
clk,
rst_n,
sw,
led);input clk;input rst_n;input [3:0]sw;output [3:0]led;reg [3:0] sw_reg_0;always@(posedge clk or negedge rst_n)if(!rst_n)beginsw_reg_0<=4'b1111;endelsebeginsw_reg_0<=sw;endreg [3:0] sw_reg_1;always@(posedge clk or negedge rst_n)if(!rst_n)beginsw_reg_1<=4'b1111;endelsebeginsw_reg_1<=sw_reg_0;endreg [19:0]cnt; 
wire [3:0]key_an_0;  assign key_an_0= sw_reg_0 &(~sw_reg_1);always@(posedge clk or negedge rst_n)
if (!rst_n)beginend                    // 1/50MHZ=0.02us
else if(cnt==20'h186a0)  //20000us/0.02us=1000000begincnt<=20'h00000;end else if(key_an_0)begincnt<=20'h00000;endelse begincnt<=cnt+1'b1;endreg [3:0] sw_reg_2;always@(posedge clk or negedge rst_n)if (!rst_n)beginsw_reg_2<=4'b1111;end
else if(cnt==20'h186a0)beginsw_reg_2<=sw;endreg [3:0] sw_reg_3;always@(posedge clk or negedge rst_n)if(!rst_n)beginsw_reg_3<=4'b1111;endelsebeginsw_reg_3<=sw_reg_2;end
wire [3:0]key_an_1;   
assign key_an_1= sw_reg_3& (~sw_reg_2);reg [3:0] led_reg;always@(posedge clk or negedge rst_n)
if (!rst_n)
begin
led_reg<=4'b0000;
end
else
begin
if(key_an_1[0]) led_reg[0]<=~led_reg[0];
if(key_an_1[1]) led_reg[1]<=~led_reg[1];
if(key_an_1[2]) led_reg[2]<=~led_reg[2];
if(key_an_1[3]) led_reg[3]<=~led_reg[3];
endassign led= led_reg;
endmodule

主要是按键消除抖动的时间计算

因为 按键会有20~30ms的抖动时间,因此需要在抖动之后在检测,按键是否真的被按下,

因为FPGA的芯片时钟是50MHZ ,也就是脉冲每0.02us变化一次, 因为抖动时间是20~30ms,

[20ms/0.02us,30ms/0.02us]为消除抖动区间[20'h186a0,24'h16e360]

这篇关于16 、zedboard之纯PL按键实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/769993

相关文章

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><

react笔记 8-16 JSX语法 定义数据 数据绑定

1、jsx语法 和vue一样  只能有一个根标签 一行代码写法 return <div>hello world</div> 多行代码返回必须加括号 return (<div><div>hello world</div><div>aaaaaaa</div></div>) 2、定义数据 数据绑定 constructor(){super()this.state={na

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

利用PL/SQL工具如何给指定用户分配权限

选中指定的表--右键--编辑--就出现右边的内容了,选择权限,分配用户某个权限就行了;

PL/SQL工具创建Oracle数据库表,实现id字段的自动递增

通过PL/SQL工具,创建Oracle数据库表,如何实现字段ID自动递增; Oracle的自增需要依靠序列和触发器共同实现 比如:先创建一个表 create table test (id int primary key, name varchar2(10)); 创建一个序列 create sequence test_seq increment by 1 start with 1  min

利用PL/SQL工具连接Oracle数据库的时候,报错:ORA-12638: 身份证明检索失败的解决办法

找到相对应的安装目录:比如:E:\oracle\product\10.2.0\client_1\NETWORK\ADMIN 在里面找到:SQLNET.AUTHENTICATION_SERVICES= (NTS) 将其更改为:SQLNET.AUTHENTICATION_SERVICES= (BEQ,NONE) 或者注释掉:#SQLNET.AUTHENTICATION_SERVICES= (N