1356
新建divider_fsm2s_moore_tb.v。
同样,我从原来两段的米利的testbench,没做成的,它迭代受限的,复制过来。
名字换过来。
做仿真设置。
两段摩尔的Testbench。
1357
仍然是高7低5。
做一次检查。
然后运行仿真。
高7。
低5。
这就做成了。
它是两段摩尔。
1358
在这种情况之下,我们还没有向大家介绍如何来评价它的速度指标。
以后的课程我们会有。
你会看得到,两者差别大着呢。
虽然我们功能上都是一样,但是速度性能上摩尔要优越得多。
下面呢,我们来说,我们今天下午做什么?
今天下午呢,我考虑了一下,流水灯我们放一放吧,我们主要还是今天,把这个状态机有一个认识,能够写一个简单的状态机即可。
所以说我们只要写一个键盘去抖,我们状态机来写。
关于流水灯,它也不难。
但是流水灯呢,摩尔是非常难。
所以说我们放到后续的课程吧。
1359
现在我们来讨论,如何用状态机来写键盘的去抖。
我们首先讨论一下,为什么我昨天做单键的驱动的时候,它会跳字?
为什么会发生键盘的毛刺?
今天呢,我们就用状态机,学到的这些方法来设计一个键盘去抖的逻辑。
之前电路去抖也分布在不同的电路模型之中。
比如说计算器,比如说我要做一个单独控制,我要写一个非常简短的一段代码来去抖。
1400
我们也强调了EDA要把它写成一个专门的、完善的电路,应用的时候直接调用。
Intellectual Property,IP。
这个键盘的去抖,我们首先要来讨论,为什么会导致跳字的那种现象?
有的时候跳一个字,两个、三个,有的时候跳更多。
我们首先看电路上是怎么做的,在印制板上。
用上拉电阻连接到Vcc,VCC我们现在接3.3V。
VCC下面呢接一个开关,我们看到这个开关是不带锁的。
所谓不带锁,是按下去,接触闭合了,抬起手来它就弹起来了。
还有带锁的,我们知道按下去滴答锁住了,再按下滴答弹起来了。
1401
我们用的是不带锁的。
也就是按下去就闭合了,没按下去它就自动地弹起来了。
这个键是正逻辑还是负逻辑呢?
什么时候是真的呢?
低电平是真的,0它就是真值,所以它是个负逻辑。
1是假的,没有按下去。
按下去是0,抬起来是1。
没按下去就是1。
这是它的逻辑状况。
但是这两个触点之间它有一个现象。
1402
按下去以后呢,这两个触点之间原本有空气间隙,空气间隙是绝缘的。
当你用外力作用于它,把它按下去了以后,两个触点粘合在一起,它就由原来的open状态,变成了闭合状态,closed。
1403
但是,你有没有用时间的放大镜来看一看呢?
也就是说,在这两个触点的表面,可能会有很多很多的毛刺,在空间的放大镜下面,看它的触点,上面有很多毛刺。
间隙会有微弱的变化。
另外我们知道,微弱的空气间隙会放电。
然后时间的放大镜呢,当我们用手按下去的时候,你只会感觉到是一瞬间的动作。
1404
在时间的放大镜下,这个间隙的变化,它是一个缓慢的过程。
按下去的这个瞬间,可能是数十毫秒,最快的时候也是数毫秒。
1405
这个过程中会形成放电,放电的过程中,它一会为0,一会为1。
中间有间歇的放电。
