对于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按一下按键,对应端口输出单个脉冲的更多相关文章

  1. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符

    在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过的用于格式控制的成员 ...

  2. Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

    日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: //如下是第一 ...

  3. futuba R70085SB 接收机 只有SBus端口有输出其他端口输出不变

    接收机能收到遥控器信号,且Sbus端口有输出,其他端口输出没有变化,这时你要看一下接收机的模式了,肯定是遥控器的通道跟输出端口的通道不匹配.参考Futuba T14SG遥控器的说明书,如下图

  4. 作业题:输出单个字符 输入单个字符 scanf printf

    输出单个字符用putchar() #include <iostream> using namespace std; int main(){ char x='B'; char y='O'; ...

  5. STM32 精确输出PWM脉冲数控制电机(转)

    STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...

  6. FPGA低级建模---按键去抖动

    FPGA低级建模,原则上一个模块一个功能,如按键去抖动建模中,有两个模块. 1.detect_module 这个是按键检测模块,主要检测按键的高低电平变化,现在按键是按下还是释放. 2.delay_m ...

  7. C语言输出单个汉字字符

    #include "stdio.h" #include "windows.h" int main() { ] = { "多字节字符串!OK!" ...

  8. fpga该驱动器调试dev_dbg 无输出

    近期需要调试fpga驾驶,整个是非常蛋疼.dev_dbg 我想用这个作为没有成功调试输出,它已被彻底打垮! 反射... 现在基于以下设置是不相关的打印,和网上说的有些出入,问题还得研究下. 驱动程序调 ...

  9. fpga Verilog hdl 按键消抖 部分程序讲解

    module debounce(clk_in,rst_in,key_in,key_pulse,key_state); input clk_in;//system clock input rst_in; ...

随机推荐

  1. babel 编译后 this 变成了 undefined

    最近有在用webpack,使用了babel这个模块来编译js jsx文件,但是发现文件编译后this变成了undefined. 源文件 module.exports = React.createCla ...

  2. ubuntu16.4+nginx+uwsgi+Django 部署上线

    Nginx概述 Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡 Nginx优点 高并发连接:官方测试Ngin ...

  3. js-ES6学习笔记-Class(4)

    1.Object.getPrototypeOf方法可以用来从子类上获取父类.因此,可以使用这个方法判断,一个类是否继承了另一个类. 2.super这个关键字,既可以当作函数使用,也可以当作对象使用.在 ...

  4. v-charts使用心得

    前端er经常都会遇到使用echarts的时候,特别是弄后台管理的报表等地方,而v-charts是echarts的vue版本(饿了么写的),基本上能应付普通的图表.传送门 隐藏提示框与图例 v-char ...

  5. <Android 基础(三十四)> TabLayout 从头到脚

    1. 简介 1.TabLayout给我们提供的是一排横向的标签页 2.#newTab()这个方法来创建新的标签页,然后用过#setText()和#setIcon方法分别修改标签页的文本和图标,创建完成 ...

  6. 微信小程序< 1 > ~ Hello 微信小程序

    简介 微信小程序,最近声音比较大,开始慢慢学习一下这个小东西,从安装开发工具开始吧,不会JS,学起来会不会很吃力呢? 注册账号 参考官方网站 开发工具 1.微信Web开发工具 2.官方下载地址,针对自 ...

  7. [原创]数据驱动决策:BI在零售业的数据化管理

    无论是商业智能时代的应用建设,还是当下大数据时代的数据应用/数据产品建设,行业化.角色化与场景化,均是一个重要的趋势. 当下,许多企业逐步开始具备场景化思维,更为注重用户体验,业务运营更多的围绕用户的 ...

  8. openCV 扩图

    1.扩图 import cv2 import numpy as np img=cv2.imread('Test2.jpg',1) width=img.shape[0] height=img.shape ...

  9. C#取得控制台应用程序的根目录方法 判断文件夹是否存在,不存在就创建

    取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.CurrentDomain.BaseDirect ...

  10. 在SQL Server中用好模糊查询指令LIKE (转载)

    like在sql中的使用:在SQL Server中用好模糊查询指令LIKE:查询是SQL Server中重要的功能,而在查询中将Like用上,可以搜索到一些意想不到的结果和效果,like的神奇 一.一 ...