FPGA按一下按键,对应端口输出单个脉冲
对于FPGA的verilog语言,,,规定一个变量不能在多个always中被赋值.但是可以在多个alway块中做判断--结合状态机思想
module state(key,led,clk);
input key;//输入按键
input clk;//输入时钟48M output reg led;//输出led reg state=;//记录按钮状态
reg[:] cnt=;//计数器 always@(*)
begin
if(key == )//按下了
state = ; //状态置一
else if(cnt==)//到了计数值
state = ;//状态复位
end always@(posedge clk)
begin
if(state == )//如果状态置一
cnt<=cnt+'b1;//开始计数
else
cnt<=;//松开或没有按下,清零
end always@(posedge clk)
begin
if(state == )//如果状态置一
led <=;//灯亮
else
led <=;
end endmodule
按下按键灯就会亮,如果一直按着灯就会一直亮(
if(key == 0)//按下了
state = 1; //状态置一
else if(cnt==48000000)//到了计数值
state = 0;//状态复位
),可以改变一下代码,变成按下松开灯亮一秒后灭,就是加一个松手检测,或者做别的修改...
一开始请教的群里的大神给的代码--状态机思想
module relay(input clk,//输入时钟
input rst,//输入复位
input a, //输入信号
output reg b//输出
); reg[:] current_state=,next_state=;//现在的状态,下一个状态
reg[:] state_cnt=;//状态计数 localparam sIdle_state=;//空闲
localparam sInput_high=;//输入高
localparam sInput_low=;//输入低
localparam sOutput_pluse=;//输出 always@(posedge clk or negedge rst)
begin
if(~rst)
current_state <= sIdle_state;//复位空闲
else
current_state <= next_state;//把下一个状态给它
end always@(*)
begin
case(current_state)
sIdle_state://空闲态
begin
if(a==)//输入为高
next_state <= sInput_high;//赋为输入高
else
next_state <= current_state;//赋为空闲
end sInput_high://输入高
begin
if(a==)
next_state = sInput_low;//赋为输入低
else
next_state = current_state;//赋为空
end sInput_low://输入低
begin
next_state = sOutput_pluse;//赋为端口输出模式
end sOutput_pluse:
begin
if(state_cnt == )
next_state = sIdle_state;
else
next_state = current_state;//现在的状态
end default: next_state = sIdle_state; endcase
end always@(posedge clk or negedge rst)
begin
if(~rst)
begin
b<=;
end
else
begin
case(next_state)
sIdle_state://如果是空闲状态
begin end
sOutput_pluse://如果是输出状态
b<=;//输出高
default:
b<=; endcase
end
end always@(posedge clk or negedge rst)
begin
if(~rst)
state_cnt <= ;
else if(next_state != current_state)//如果上一个状态和现在的不一样
state_cnt<=;
else
state_cnt<=state_cnt+'b1; end endmodule
FPGA按一下按键,对应端口输出单个脉冲的更多相关文章
- C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符
在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过的用于格式控制的成员 ...
- Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词
日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...
- futuba R70085SB 接收机 只有SBus端口有输出其他端口输出不变
接收机能收到遥控器信号,且Sbus端口有输出,其他端口输出没有变化,这时你要看一下接收机的模式了,肯定是遥控器的通道跟输出端口的通道不匹配.参考Futuba T14SG遥控器的说明书,如下图
- 作业题:输出单个字符 输入单个字符 scanf printf
输出单个字符用putchar() #include <iostream> using namespace std; int main(){ char x='B'; char y='O'; ...
- STM32 精确输出PWM脉冲数控制电机(转)
STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...
- FPGA低级建模---按键去抖动
FPGA低级建模,原则上一个模块一个功能,如按键去抖动建模中,有两个模块. 1.detect_module 这个是按键检测模块,主要检测按键的高低电平变化,现在按键是按下还是释放. 2.delay_m ...
- C语言输出单个汉字字符
#include "stdio.h" #include "windows.h" int main() { ] = { "多字节字符串!OK!" ...
- fpga该驱动器调试dev_dbg 无输出
近期需要调试fpga驾驶,整个是非常蛋疼.dev_dbg 我想用这个作为没有成功调试输出,它已被彻底打垮! 反射... 现在基于以下设置是不相关的打印,和网上说的有些出入,问题还得研究下. 驱动程序调 ...
- fpga Verilog hdl 按键消抖 部分程序讲解
module debounce(clk_in,rst_in,key_in,key_pulse,key_state); input clk_in;//system clock input rst_in; ...
随机推荐
- VS C#文件的复制
/// <summary> /// 复制目录 /// </summary> /// <param name="OldDirectoryPath"> ...
- PHP中类和对象的相关函数
class_exists 判断一个类是否存在,参数为一个名字! interface_exists 判断一个接口是否存在,参数也是为一个名字! method_exists 判断一个方法是否存在! 需要两 ...
- Available to Promise (ATP) in SAP-SD
One short note before we start off the subject: Availability refers to the projections of future mat ...
- C#与java中的AES加解密互解算法
一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string va ...
- Java虚拟机(三)垃圾标记算法与Java对象的生命周期
前言 这一节我们来简单的介绍垃圾收集器,并学习垃圾标记的算法:引用计数算法和根搜索算法,为了更好的理解根搜索算法,会在文章的最后介绍Java对象在虚拟机中的生命周期. 1.垃圾收集器概述 垃圾收集器( ...
- jquery 绑定事件 获取方式 --------------data event 获取
//绑定事件 bind event $("body").on("click",function(){ console.log("in") } ...
- AJAX四种跨域处理方法
同源策略 同源策略 同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互.这是一个用于隔离潜在恶意文件的关键的安全机制. 具体定义是:一段脚本向后台请求数据,只能读取属于同一协议名. ...
- 将 HPC 作业从本地计算机提交到部署在 Azure 中的 HPC Pack 群集
Note Azure 具有用于创建和处理资源的两个不同的部署模型:Resource Manager 和经典. 这篇文章介绍了如何使用这两种模型,但 Azure 建议大多数最新部署使用 Resource ...
- 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机
Azure 虚拟机使用 Azure 网络进行内部和外部网络通信. 本教程介绍了如何在虚拟网络中创建多个虚拟机 (VM),以及如何在虚拟机之间配置网络连接. 你将学习如何执行以下操作: 创建虚拟网络 创 ...
- 使用postman给servlet传各种参数
web开发中经常会使用到postman软件,常用的方法涉及到get和post方法去获取对应json数据,get方法直接传url就可以,返回对应json数据.但是post请求就需要json数据提交,而且 ...