对于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. grunt搭建自动化的web前端开发环境(转)

    1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过.但是不会熟练使用grunt,那你就真的真的真的out了(三个“真的”重复,表示重点).至于grunt的作用,这里不详细说了, ...

  2. python3爬虫(find_all用法等)

    #read1.html文件 # <html><head><title>The Dormouse's story</title></head> ...

  3. js相关判断

    //正则表达式判断是否为空 /^\s*?$/.test(obj) //批量转换方法 function sort(s){return s.match(/\d/g).sort()+'' } //判断是否相 ...

  4. 反射和动态加载bean 完成 通用servie

    最近我们部门有个小项目,用来管理这个公司所有项目用到的代码表,例如国家代码.行政区划代码等.这个项目的功能其实很少,就是简单的修改.查询.新增和逻辑删除.但是为每张表都写一套增删改查的页面和一套ser ...

  5. 高性能JavaScript(算法和流程控制)

    在大多与编程语言中,代码的执行时间大部分消耗在循环中,是提升性能必须关注的要点之一 循环的类型 for循环(它由四部分组成:初始化.前测条件.后执行体.循环体.) for(var i = 0; i & ...

  6. js 四种调用模式和this的关系总结

    更新: 这篇又简单又明了啊喂 首先看这一篇, 很简单很清楚了,http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascri ...

  7. apt-get update 系列作用

    sudo apt-get update 更新源 sudo apt-get upgrade 更新已安装的包 sudo apt-get dist-upgrade 升级系统 下面摘自知乎用户回答: apt- ...

  8. tilestache

    pip install tilestache -i https://mirrors.ustc.edu.cn/pypi/web/simple python C:/Python27/ArcGIS10.4/ ...

  9. MonkeyRunner进坑——errors importing other modules

    后知后觉,刚知道Android提供了MonkeyRunner这么个东西,能用来干嘛呢,官方文档介绍得很清楚.简单说,可以用Python程序通过API, installs an Android appl ...

  10. 关于innodb mtr模块

    mtr (mini-transaction)微事务 mtr作用 mtr模块主要保证物理操作的一致性和原子性 1 一致性:通过读写锁来保证 2 原子性:涉及到的物理更新,都记入redo日志 mtr何时使 ...