微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问各路大神 这两句话该怎么理解啊?

请问各路大神 这两句话该怎么理解啊?

时间:10-02 整理:3721RD 点击:
求教
图中的这两句话该怎么理解啊,搞了好久也没懂

wire key_neg = ~keyr[2] & keyr[3];        //有按键被按下       
wire key_pos = keyr[2] & ~keyr[3];        //有按键被释放


特权的代码吧? 写的挺好

就是一个边沿检测,一个检测上升沿,一个检测下降沿

楼上说得对  边沿检测

二楼正解,keyr是信号key的几T延迟,上面两句话是边沿检测。

喜欢这个风格,以前都是一个一个写,又学了一招

边沿检测

论坛消息提醒这个还不太会用,感谢你们的解答

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

按下是0,松开是1,key{3]<=key[2]

key_neg = 1时,有按键被按下,那么此时keyr[2] = 0,keyr[3] = 1, 而keyr[3:0],是key依次从低位输入的,那么key的第一次输入应该是0,经过两个周期,keyr[2] = 0,keyr[3]=1.此时key由于是相乘的结果,按键按下为0,不按下为1,所以,只要有按键按下,key就是0,然后就会产生一个下降沿,如果有上升沿,必须所有按键都释放,才能出现高电平

原代码 keyr 在时钟的驱动下,做了一个移位寄存器  ,就得到了4个时刻的值,便于理解, 如果你把keyr[2]的值当做现在的值,keyr[3]的值当做刚才的值。那么如果检测到下降沿就是:刚才是1 现在是0 ;同理上升沿:刚才是0 现在是1

那这种写法不就是没办法确定被按下的是哪个键了么

你的代码不全,按照常理来说这个是抓边沿的。第一个是抓下降沿,第二个是抓上升沿。我估计下面的代码还有 keyr[2]<=某值;keyr[3]<=keyr[2].这样keyr[3]的值会比keyr[2]延迟一个clk,上述某值一旦变化,你说的式子就能抓取到,你可以自己定义一个初始值,画一下就明白了。

mark

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top