OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8026|回复: 4

按键蜂鸣器例程modelsim仿真问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-3-24
在线时间
1 小时
发表于 2019-3-24 21:03:43 | 显示全部楼层 |阅读模式
1金钱

tb程序如下:

tb文件

tb文件


按键消抖程序如下:

按键消抖程序

按键消抖程序


仿真波形:

仿真波形

仿真波形


如仿真图所示,为何在第一次输入按键key发生变化时,key值和存储key值得存储器key_reg同时发生改变,并且计数器还开始计数了?
但是在下一次key发生变化的时候,key_reg又是滞后key一个时钟周期改变?

初学FPGA,希望各位大神指教。

最佳答案

查看完整内容[请看2#楼]

首先你要明白,仿真波形图上的信号key,是按照tb程序中的key的赋值实时变化的;而按键消抖模块中的key_reg,是在时钟的上升沿寄存key的值; 在图中第一个红框标注key信号下降沿的时刻,此时刚好是时钟的上升沿,时钟采到key信号为低电平,key_reg为高电平,此时满足key!=key_reg,所以计数器变化,并且把key的值赋值给key_reg; 而图中第二个红框标注key信号上升沿的时刻,此时是时钟的下降沿,所以key_reg没有变化,当下一个时 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2019-3-24 21:03:44 | 显示全部楼层
首先你要明白,仿真波形图上的信号key,是按照tb程序中的key的赋值实时变化的;而按键消抖模块中的key_reg,是在时钟的上升沿寄存key的值;
在图中第一个红框标注key信号下降沿的时刻,此时刚好是时钟的上升沿,时钟采到key信号为低电平,key_reg为高电平,此时满足key!=key_reg,所以计数器变化,并且把key的值赋值给key_reg;
而图中第二个红框标注key信号上升沿的时刻,此时是时钟的下降沿,所以key_reg没有变化,当下一个时钟的上升沿到来时,key_reg才变化。
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-3-24
在线时间
1 小时
 楼主| 发表于 2019-3-25 18:22:37 | 显示全部楼层
谢谢谢谢,十分感谢。这么一解释就清楚了。
回复

使用道具 举报

30

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2022-10-20
在线时间
31 小时
发表于 2022-10-27 19:23:42 | 显示全部楼层
QinQZ 发表于 2019-3-24 21:03
首先你要明白,仿真波形图上的信号key,是按照tb程序中的key的赋值实时变化的;而按键消抖模块中的key_reg ...

那如果我们在按下板子上的key的时候,刚好也在时钟的上升沿,那会同步变化吗,如果同步变化,那不是和代码写的就不一样了吗
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2022-10-27 20:11:21 | 显示全部楼层
18876729900 发表于 2022-10-27 19:23
那如果我们在按下板子上的key的时候,刚好也在时钟的上升沿,那会同步变化吗,如果同步变化,那不是和代 ...

在输入信号变化的瞬间采集,这个会出现亚稳态,就是不稳定,有可能采到的值是0,也有可能是1。会不会变化取决于当前采到的值是多少
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 04:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表