00:20
现在有声音吗?画面有吗?好OK啊,有的话就可以啊呃,然后呢,咱们先简单的这个说一下咱们这个上周五讲的这一部分的呃内容。啊,然后呢,我们,嗯,把这个写,把那个我们上周五做的这个小作业给大家简单去写一下。呃,我们这个上周五的话呢,我们做了一个呃案件的肖斗对吧,这是咱们最后啊给大家这个呃讲解的,呃到这一部分了,对吧,来到这一部分了,呃然后呢,这个我们准备用什么呢?用这个状态机呢,去这个呃实现啊状态机来实现,那么在这儿的话呢,我给出了这样的一个状态转移图,那么对于咱们这个状态转移图来说的话呢,呃,其实它的一共就只有一个原理啊,什么原理呢?呃就是说啊,我们叫什么叫做持续采样啊,不像这个单面机里边我们所说的叫什么叫延时重采样,我们叫什么?我们叫持续采样,也就是说嘛,也就是说只有它这个持续啊的持续的时间啊,不是累计啊叫做持续的时间啊,超过了一定的,这个叫做什么叫做数值啊,我们呢,才认为什么人认为它是按下或者。
01:57
他认为它是台起啊,他们当它呢没有到这个数值的时候呢,我们呢,都认为它保持什么叫上一个状态,对吧,比如说呢,它低电平呢,还没有持续到这个,比如我们说是十毫秒是吧,还没有低电瓶没有持续到十毫秒的时候,那么我们就认为什么认为它没有按下啊,然后呢,对于高电频来说,我们也是一样的,那么在这儿我跟大家已经讲过了,对吧,那么你到底要不要去检测这个高电平持续时间呢?诶你要检测也可以,其实不检测它其实也可以,这个之前给大家已经说过了,对吧,也就是说呢,如果你检测了,那么就说干什么,就高电瓶的持续时间啊,长了以后啊,才认为是什么,才认为是这个叫做啊这个台起啊,那么如果说呢,你不去检测它啊,那么它呢,有没有影响呢?啊,它也没有影响,也就是它一旦抬起就认为是抬起了,那么它中间的抖动呢,就会认为是第二次的摁下,当然了,因为它的抖动也过不去,对吧,所以呢啊,它也是可以的啊。对于在这。
02:57
这个单片机当中啊,它只检测了摁下沉的抖动,它其实没有检测对吧?啊,它也是一直是这么来用的啊,这大家都是这么来用,也没有任何问题啊,对于咱们来说也是一样的,但是呢,今天呢,我们在这儿啊,我们来啊把这个也加上,就是高电平的持续时间,那么当然了啊,没有按下和抖动期间呢,我们认为都是腰啊,呃,按下和这个抬起时的抖动我们认为都是零,也就是零,我们最终还是保持了什么。
03:24
保持了这样的一个叫做按键的一个,呃,一个一个属性,什么就是低电平有效啊,高电平的时候呢,呃,它是这个释放啊是这样的,好了,那么首先呢,在这个当中的话呢,我们给大家已经说了是吧,这是我们做了一个叫做消抖的这样的一个拈啊,那么下边的话呢,我们来呢,把这个代码啊给大家呢,来去呃,写一下。
04:29
啊,那么对于咱们这个呃这个写代码来说是吧?呃经过了大概也就是马上就一个月了是吧,那么经过这一个月的时间呢,就大家的话,只要有这个想法,或者说只要能把这个状态转移图画出来啊,那么对于大家来说写代码来说呢,应该就比较的简单对吧?那么在这呢,我们给大家呢,来去把它呃写一下,呃首先呢,先写这样的一个呃实体那。
05:00
然后呢,输入有适中输入呢,有这个复位。啊,输入还有啥来着啊,输入还有我们的按键啊,叫K-N啊,因为它是低电瓶有效的嘛,对吧,所以在这的话呢,我们来输入叫做K-N啊,那么输出的话呢,我们叫什么名字呢?我们进好啊,我们尽量也跟咱们这个保持一致啊叫OK,感恩。好,那么我们写完之后呢,所以就按照什么,就按照我们这个设计方法去做就可以了,首先呢,第一个问题就是说啊,因为KY-N呢是异步信号,所以呢先进行同步两拍啊,这个咱们再讲过了是吧?处理说亚稳态呀,异步信号呀,这一部分给大家讲过了,所以在这的话呢,我们首先对K-N呢进行打两拍啊,打两拍分别呢叫K-NR和K-N-R2个R对吧,在这首先定义第一个K-N-R啊,第二个KY-N-RR,好always eight括号啊,适中啊,KY-N-R等于KY啊,杠N啊,KY-NRR啊等于K。
06:41
对Y-R啊,也就是说呢,呃,没有R的传递给一个R的,一个R的传递给两个R的,也就是说呢,这个两个R这个呢,是相当于打了两拍之后的这样的一个信号,那好了再往后看啊,那么呃,再往后的话呢,应该就是状态机一共有四个状态对吧?我们分别把这四个状态就先写出来啊,在这给大家已经说过了是吧,也就是说参数区要在上面啊,那么这个参数区呢,分别有什么呢?有这个叫做king off是吧,有key下划线诶叫。
07:15
K_of啊,它呢是等于这个四撇B0000啊1234是吧,第二个叫做这个。啊,叫shake on对吧,叫Sha下划线啊,那么再有一个叫做king on对吧。好,那么最后一个叫做这个啊,Shake off对吧,叫shake off Sha_of f,好,那么它就是1111,好,那么当写完之后是吧,我们就知道啊,我们要定义这个寄存器啊,Re啊,它的是三到零的c state对吧,然后reg,然后是三到零的n state好了,那么下边的话呢,我们来写一下always it。
08:35
一撇B0啊,然后呢,是这个c state,就等于这个king of状态啊,然后呢,是c state,等于啊,什么呢,等于这个叫做n state n state好了,那么呃,再往下边的话呢,该写什么?该写这个叫做状态的转移规律了,是吧,跟的转移条件,那么在这我们来写一下啊,Always it begin and,然后case括号c state end case,然后呢,是这个叫做king of状态,好那么在这个状态当中的话呢,我们来看一下至关转移,首先第一个等于一。
09:35
在本状态啊,等于一,在本状态等于零啊,到Sha on状态啊,等于一在本状态那就判断括号啊,要判断谁呢?要判断要缓存够两拍的啊,缓存够两拍的啊,不要去判断这个这个再输入进来的了啊,那么如果是等于一,那就在本状态待着啊,如果要等于零,那么就要去下一个状态叫shake on对不对?好,那么第二个啊,在这个shake on状态的话。
10:15
啊,在Sha状态的话呢,就有这个呃,几种情况呢,就有这个呃三种情况是吧,第一种是等于一就回来啊,第二种呢是等于这个零啊,但是时间还不到啊,在本状态啊,到时间了啊,那么去这个呃下一状态,那么在这我们说啊先看到就是等于一,等于一去这儿else就等于零了,然后只判断计数器就可以了,对吧?在这后我们这么来写啊,就是先判断KY-NRR是不是等于一撇B1。啊,如果是的话,那n state就等于啊,K off,那好了,如果它等于零呢?就在判断CT是不是小于下划线T10毫秒减去一撇B1啊,如果是的话,那么NT就还在。
11:13
本状态这个待着。那如果到了的话呢,我们就让他去这个下一状态就是啊,当然了,这两个数还没写啊,就这个数没写,这个记录器没写对吧,那么写一下省得忘了啊,那么primemeer要写到local p的上边啊,这样来去写,因为local一般情况下,它只是读取的时候,我们来看一看这参数代表什么意思,而primemeer有的时候呢,我们不光要看什么意思,还有有的时候还要去对它进行修改,对吧,要把这个地方一定要搞明白啊,然后呢,十毫秒对吧?十毫秒它应该是啊,这么多啊,那么记录这么多数值的话呢?啊,记录这么多数值的话呢,应该有多少位呢?啊在这儿呢,我们他呢需要用这个19位啊,他需要用19位的数。
12:12
啊,18到零的啊CT啊,18到零的一个T啊,那么呃,我们先讲这个,讲完之后呢,我给大家呢,教大家一些呃速记的方法啊,这样的话呢,会比较的方便一些啊。嗯,然后呢,我们来看这个叫做呃,Kon状态啊,在kon状态如果等于零,在本身如果等于一啊,去这个shake off状态对吧,那就在这个K啊,在k on状态的话呢,呃,如果要等于零啊,那就在本身啊判断K它啊是不是等于一撇B0啊如果是的话呢,那N。N state就要等于的是这个啊,这写错了,这应该是等于号啊,不是小于等于啊,那么呃,如果等于零呢,就在本身这个待着是吧,如果等于一呢,就去下一个这个状态,下个状态叫这个shake offff,对吧?好,那么我们再来看啊,叫做shake off啊,那么在这个shake off状态的话呢,我们来看一下是吧,如果要等于零就回去了啊,如果要等于一,就看这个时间够不够十毫秒,够的话就回去到这儿,不够的话在这转,所以我们还是啊,跟这个老规矩一样啊,先面来是不是等于零,等于零先走了再说,在判断计,因为的时候呢,认的条件这个K-R就等于一了,所以判断K。
13:59
跟RR是不是等于一撇B0啊,如果是的话呢,那么n state就要等于的是KY啊k on状态,那么else呢?那么再判断CTCT是不是小于T_十毫秒减去一撇B是的话呢,那么n state就要等于的是啊,Shake of状态啊,如果说呢,它要不是的话呢,那么n state是等于的是这个of状态好OK啊,那么这样的话呢,我们就把这个叫做呃,整个的状态的转移就写完了,那写状态输出啊,那么对于状态输出来说的话呢,这当中有两个,一个是CT啊,一个是。
14:59
这个最终的oky-N啊,一共有这三个,呃,不是这两个输出,首先我们先写CNT,那么这个CNT写起来其实也比较简单啊,你看在这个状态里面全是等于零的对不对啊,在这里边全是等于零的,所以在这的话呢,怎么做呢?啊,我们在这儿,呃,就是说我们也可以用直接用case语句去写啊,这样会比较简单,嗯,CT它等于的是19撇,D0,然后else啊,Case括号啊,C state,然后end case,然后比如说在状态的话呢,那么这个CT呢,就会一直等于19撇。
15:51
啊,19撇这个地零啊,这是它的一个,呃,就不动啊,那么在这个状态当中的话呢,呃有三条分支啊,一条往这边走,一条往这边走,一条在这转,那么很明显的话呢,我们写的时候没有必要写三条分支,为什么呢?因为我们要我们做东西的候要要会学会合并,你比如说在这转它等于零,在这转它也等于零,就只有在这的时候,它等于加一是不是,所以我们把这个条件写出来,然后它就等于它加一,否则都等都等于零不就完事了吗?对不对?所在这的话呢,我们来写这个叫做呃,Shake on是吧?对于shake on状态的话啊,判断啊判断什么呢?来看一下啊,判断这个它是不是等于零且小于T10毫秒减一是不是,所以呢,就是这个叫做K1-NRR是不是等于一撇B0且与上啊且与上CT。
16:52
是不是小于T_十毫秒减去一撇B1,如果是的话,那么CT等于CT加上一撇B好else的时候呢,CT都是等于零的啊,有的时候呢,我们呃三条分支啊当中有重合的时候,我们就可以去合并啊,状态就是合并不了,因为呢,他们的三个情况就去了三个状态,对不对,那这个的话呢,就可以是吧,就可以好了,那么再往下的话呢,是这个。
17:25
呃,是在这个状态,那么这个状态的话呢,计数器也都不工作,全是等于零的,所以在这的话呢,我们还是啊等于零叫做k k on状态啊,这个要大写啊K啊k on状态不是前面是不是有小写了呀,为什么会出现小写的这个。啊,没有啊,那就是综合期有问题啊好,那么这样的话呢,在这的话呢,什么都不用动是吧,CT就等于这个19撇D0,好那么还有这个最后一个啊,叫做是个up状态,在是个up状态也是一样的是吧?往这边走CT也是等于零,往这边走CT也等于零,只有在这转的时候才等于加一,所以我们把这个条件写下来,让它加一,Else都清零就完事了,对吧?好那么这样的话呢,我们在这在这个。
18:26
在这个Sha off状态啊,判断啊,K-NR是不等于一撇B1啊,且与上CT是不是小于T_十毫秒减去一撇B1啊,如果是的话呢,那么CT就等于CT加上一撇be啊else的话呢,CNT就等于19撇D0,好,OK搞定,那么default是吧,那么我们就直接就给这个CNT呢,等于个19片D0就可以了,好了,那么CNT写完了,那么CT写完之后呢,我们下面来写always it啊,来写这个输出啊,那么对于输出来说的话呢,叫OK-N啊,这个应该等于一撇B1啊,复位的时候应。
19:26
再等于一啊,一定要知道啊,因为我们做的是按键嘛,按键的话呢,应该在什么?应该在这个,就是别人不摁的时候应该都是一,对不对啊,复位期间我们是不按的,对吧?那么在这的话呢,也非常简单,大家可以干什么?大家可写这个叫做呃,写什么呢?可以写这个叫做呃case语句,那比如说case啊,C state啊,Key offff状态输出一,Shake on态输出一,Key on状态输出零,这个状态输出零也可以,那么这个呢,由于比较简单了是吧?分值条件没有那么多,在这我可以干什么,而我可以写这个if语句就可以了,比如说等于这个状态或等于这个态数是零,其他都属于一就可以啊,这也可以啊,就是判断括号c state是不是等于key k on状态,或者c state是不是等于呃,叫做shake of状态,如果是的话,OKY-N啊,等于一撇B0,然后else的时候呢,OK?
20:27
哎啊杠N啊,就等于一撇be啊就可以了啊,也就是说我们可以这样来写啊,那么这个写完之后呢,我们来去呃,把它加上reg啊,然后呢,我们来去综合分析一下啊,综合分析一下啊。呃,这个当中的话呢,呃,其实呢,也没有什么东西啊,就是说呃,像咱们这种写这种三段式的这种方法啊,写三段式方法也就是说呢,呃,状态的一个寄存对吧,这个呢叫状态的转移的规律啊,这个呢就是状态的输出,当然了,我们输出有两个对吧,所以写了两个啊啊写了两个好了,那么写完之后呢,我们去看一下这个RT的视图啊。
21:15
好,那么这个当中的话呢,由于这个计数器的位宽会比较的大一些啊,所以说的话呢,它里边综合东西会比较多一些,那么当然了,还是综合出来一个这个状态机啊,我们可以双击打开,我们来看一下它有没有给我们综合成咱们的这个想要的状态转移图啊,OK,出现了对吧?啊,那么在这儿的话呢,你看这个条件呢,就非常的长是吧?哎,非常的长啊呃,所以这个的话呢,我们现在就不关心它了是吧?那么看一下这段两头跟咱们长得一不一样啊,大家可以自己去评判一下,这个先从k off应该跳到的是shake on对吧,Shake on跳到on,然后再来回跳啊,那么呃,对于我们来说,我就不再检测这个了啊,那么在这的话呢,我们给大家已经说过了是吧,那么大家要按照这个我这种写法的话呢,呃,就是所有的计数器呢,都带上这种微宽呀,包括这种写法的话呢,一般情况下不会出警告啊,就是说啊,我们基本上都不会出警告啊,这个警告给大家已经说过了是吧,就是一。
22:15
个呃,处理器的一个问题啊,这个我就不再谈了,那么下边的话呢,我们先不仿真的,我们先给大家来讲一下这个问题啊,就这个啊呃,也就是说呢,呃,给大家来说明白,就是这个计数啊,为什么有的时候呢,我能够看一眼就知道用多大位宽,而大家的话呢,可能老是需要用计算器去算,那么就比较的费劲呢,比较费劲,所以在这的话呢,我们给大家呢,来去简单的说一下啊,就是我一直这么来用啊,我觉得这个方法也三轮比较好啊,不用说每次都去判断啊,那么呃,在这的话呢,我们来这个找个纸吧。
23:03
好了啊,那么呃,首先呢,在这我们先来说这个第一个问题啊,就是说这个大家去怎么去记什么,怎么去记多长时间啊,呃,首先呢,呃,比如说第一个啊,像咱们所说的说我现在要记录这个十毫秒,或者我现在要记录一毫秒啊,或者说我现在要去记录的这个这个这个两秒,那么我怎么样去记这数得多大呢?所以首先你要知道第一件事儿,什么事儿呢?就是说我们的晶振是50兆赫兹的,所以50兆赫兹就是50后边123,然后123啊,也就是说呢,会有五零后边三个零一组,三个零一组啊,那么这叫什么,这叫一秒钟对不对?所以呢,我们啊,一定要对这个单位一定要敏感一些,比如说一秒钟就是这么多,对吧,你一毫秒呢,那不就是说五零后边就划掉三个零嘛,对不对,划掉三个零对吧,比如说我们十毫秒呢,那就是说划掉三个零以后再加一个零呗,就是划掉两个零。
24:03
有人说划了两个零,那不就变成这样了吗?后边划了两个吗?所以你不要这么写啊,我们都习惯性的三个一组,所以就500他然后呢,这个我看这个今天啊,这个是张日春晚在问的,说说这个写多少是吧,我看他这个里边好像写的就是说应该是给了个五零,后边好像是给了是四个零。啊,那么我们中国人老这么干啊,就是全世界通用的写代码呢,一般很少这么干啊,因为在这个通用当中的人都是三个一组啊,叫做千啊,然后百万,然后10亿啊这么来比较。多一些啊,只有中国人比较喜欢的是这个万亿,好像这个在在在这个其他的这个这个上面好单位不太多,咱们这个国际通用的好像都是千啊,然后千完之后再乘以1000啊,就是百万,再乘以1000啊,就是10亿啊,这个会比较的呃,用的比较多一些,所以在这儿我们三个一组,三个一组比示数字的时候,那么三个一组和三个一组有什么好处呢?就在这儿给大家经说了。
25:05
啊,如果说要是多少毫秒对吧,那就是比如说25毫秒,那25毫秒的话,那是多少呢?所以你想怎么算都可以啊,你想怎么算都可以啊,就是说你25毫秒,那就是说五零对吧,123,那乘以25,那就看你能不能算的比较快是吧,125啊零,然后000啊也可以,你也可以这么写对吧?来乘以25啊那么呃,在这儿就是说你要明确的知道啊一毫啊这个这个叫做一秒钟是50兆的周期,50兆是怎么写的,然后呢,能够快速的推算出来什么呢?能够推算出来这个一毫秒啊,一微秒啊,然后呢,再乘个数就可以出现啊这是第一个问题,那么第二个问题的话呢,就是什么,就是说呢,呃,我们啊,我随便给你个数,比如说呢,我给你一个叫做这个137258369,我就这个数啊,这个数的话呢,我让你用这个用什么呢?我。
26:05
当然你去用这个这个多少位的计数器能够表示的下呢,怎么算呢?啊怎么算呢,在这儿的话呢,给大家一种就是呃,我一直用的一种方法,因为我觉得这种方法比较快啊,虽然它可能会有一定的出入,但是出入不是很大,什么方法呢,我们这么来做。首先第一件事儿叭,如说你给出这个数以后啊,我为什么会写三个一组,三个一组呢?就是说首先第一件事儿啊,这个数我会看到多少,137258369,那么这个数呢,它就一定是小于多少呢?一定是小于138后边跟六个零的。对不对,就一定是小于138跟六个零的,而138跟六个零呢,就一定可以写成是138乘以十的三次幂乘以十的三次幂的,对不对,这个是没问题的,对吧?那么它呢,一定是小于138乘以十乘以多少呢?乘以1024乘以1024的,因为你的什么,因为你是乘以1000嘛,我乘以1024肯定要小于我对不对?所以呢,它就等于138乘以二的十次幂乘以二的十次幂对不对。
27:17
因为1024是二的十次幂,对不对?所以呢,在这儿的话呢,那么再往后看,那么138呢,我们也要换算成二的多少次幂,所以在这儿的话呢,就希望大家一定要记住,就是二的零次幂到二的十次幂啊,它们一共是等于多少,比如说呢,这个数呢,它就一定是大于多少呢?大于的是128乘以二的20次幂,而小于256乘以二的20次幂,所以呢,128和128是二的七次幂乘以二的20,而后边那个呢,是二的八次幂乘以二的20,当然了,它比这个大,比这个小,所以呢,我们要多少呢?要用二到28次幂,那么也就是说我需要用一个28位的计数器啊去来表示这个数字就可以了。
28:05
啊,所以说在这的话,我都是这么算的,你比如说在这儿我为什么能快快速算出19位呢?其实很简单对吧,也就是说呢,比如说十毫秒对不对,那么这我这一看我就知道是1000,所以我就知道用十位来表示500呢,我一看就知道用512来表示五百一十二十九次幂,所以一共就19位,那所以一共就这个叫做这个19位的一个这个啊计数器对不对,比如说还记不得之前我们所说的50兆对不对,50兆。那为什么上来我就用26位来表示呢?那为什么用26位来表示呢?因为很简单,比如说十位20位啊,64嘛,64的话就是六位,对不对,因为呢,你首先要知道这个数是在哪两个二的多少次幂之间啊,它进行什么,它进行这个存在的,所以在这的话呢,你很明显就知道什么用64来表示,64就是六次幂嘛,对不对。
29:01
那么这种方法。有没有一个就是它的一个不好的地方呢?是有的啊。比如说最简单的问题,我随便写个数,大家就会知道这个数肯定不对。比如说呢。比如说我就记录这么多周期啊,一个一后边啊,你们看不到是吧,一个一后边跟六个零,那么按照咱们刚才的推算呢,就是二的十次米,二的十次幂和这个就用一个二,就二的一次幂就可以,对不对,所以呢,需要需要多少位呢?需要用21位对吧?但其实根本就不用了,为什么呢?因为这个数的话呢,它就肯定是它,它就是等于十的三次幂乘以十的三次幂,对不对,所以它就一定是能用二的十次幂乘以二的十次幂,也就是说20位足够了,但是根据咱们的方法呢,就要用21位了。啊,就需要用21位了,所以在这儿的话呢,我来说这个就是说首先第一个咱们这种方法没有错啊,就是它最多的会多用一个,这是第一个,第二个的话呢,当你遇到这种情况的时候,自己刻意的去想一下啊,那么即使是用21位也无所谓啊,也无所谓IP资源呢,还是相对是比较多的啊,大多数计数器的时候呢,呃,遇到这种情况可能相对比较少一些啊。
30:19
所以这个的话呢,就是希望大家能够知道啊,我不太清楚,就是大家这个,呃,就是之前的时候啊叭,如说咱们讲的这些叫做关于这个关于什么,关于这个叫做这个呃,计数的时候,比如说咱们之前的那个几毫秒啊或两微秒啊,呼吸灯啊,分辨器啊,这些数到底用多少位是吧?那么我给大家之前讲过啊,我说用多少位都不大,用多少位都不小啊,所以这个呢,咱们要经过去计算的,那么怎么来算呢?不能每次都搬出来这个这个叫做这个计算器是不是啊,搬卷算机也比较麻烦啊,所以呢,咱们就尽可能的去哎练出一种什么,就是说你演就知道它有用多少位来表示啊,那么它有可能会比这个呢,就一定能表示的下,这是咱们这种方法,这是第一个,第二个的话呢,有可能会不需要这么大的位宽,但是我给了那么大的位宽,但是呢,我给这个位宽呢,也最多比你实际的位宽呢,就大个一位对不对。
31:19
对啊,所以这个的话呢,我们是可以啊接受的啊,这是这个问题好了,那么呃,下边的话呢,大家能够理解它了,对吧?那好了,理解它以后呢,我们下面呢,给大家做一个仿真,那么这个仿真呢,其实也不是很好做啊,也不是很好做啊,希望大家呢,呃也来啊认真的来看一下啊,就是说啊,因为这里边有很多东西的话呢,很多人啊,呃,比如说这个设计啊做出来了,但是他不会的,不会什么,他不会写仿真啊,就仿真不出来啊,这个是一件很正常的事情啊。但是啊,对于大家学了一个多月以后是吧,或者说学完之后啊,这个再做不出来啊,就不正常了啊。
32:35
好,那么在这儿咱们来定一下这个连线啊,十周啊复位。K-N和咱们的OK-N好,那么在这儿的话呢,有一个这个适中啊,然后还有一个复位啊,还有这个o oky-N啊和这个o oky-N好了,那么大家的话呢,呃,其实写这个适中啊,咱们之前讲过什么,咱们之前讲过repeat,我去写适中,写有限个数的,然后后来我们讲了stop以后呢,我们就弄了一个无限循环,比如弄了一个V1啊,V3呀,V8呀,对不对,然后后边搞了什么,又搞了一个forever对吧,无限循环,那么呃,对于我们来说的话呢,呃,在这儿的话呢,就是大家可能还见得比较多的另外一种写诗中的方法啊,今天在这儿也是一样,它也会无限循环的啊,直接告诉大家啊,呃,适中呢,就给一个初值。
33:47
啊,给一个初值,然后呢,Always延时10CLOCK等于clock的区反,那么也就是说呢,它也会无限循环的啊,它总是延迟十纳秒之后进行克劳区反啊,但是呢,有个初值必须要给个初值啊,也就是说当你不给初值的时候呢,那么这个呢是做不出来的啊,这是做不出来的,好了,那么这个也是无限循环的一个适钟啊,是一样的,好了,那么下边的话呢,我们来去做这个复位啊,那么复位的话呢,等于一撇B0啊,然后呢,OKYOKY-N等于啊应该是叫做K-N的KY-N啊,等于的是一撇B1啊注意负一切要等于一对吧。
34:31
注意不要给错了啊,很多人就给错了,给错了以后呢,你上来就会有各种各样的一些问题,分不明白了对不对啊。延时啊201啊,然后呢,复位的话呢,就等于的是一撇B啊一啊复位结束好,复位结束以后,下边怎么办呢?我是不是就应该去模拟按键的抖动啊,按键抖动什么,按键抖动不就是下去一会儿,上来一会儿,下去一会儿,上来一会儿,那么如果说要按照什么,如果说要按照我们啊什么都不改变的方法去仿真的话,什么?因为我们参数什么参数是十毫秒对不对,如果参数十毫秒的话呢,你的抖动只要你持续时间呢,不超过十毫秒,都认为都是抖动,当然了这个数呢,会比较长对吧?这时间会比较长,所以在这的话我们来来进行修改对吧,也不要忘了这样一些方式啊修改啊,然后呢,它的话等于什么?哎,它的话就等于呃,这个叫做这个,呃,这个里边的T10毫秒啊,我们等于多少呢?比如我们的等于叫做20啊,那么这个等于多少都行啊,但是你要稍微要给大一点,因为你给小了之后,就你还没抖呢,就经。
35:39
检测成功了对吧,那好了,那给二十二十什么意思呢?如果你要给20的话呢,就相当于说呢,也就是电瓶持续的时间啊,等于20个周期啊,也就是400纳秒呗,20个周期就可以了,那么在这儿的话呢,我们就可以抖了,只要说哎,上下上下上下的这个哪一段的长度呢,它都不高于这不不多于这个就是持续时间啊,它不多于400就没问题,有人说那我去写399可不可以啊,我那真正按下我就写401可不可以啊,这个就有点过分了啊,为什么呢?因为很简单的问题,就是我们的用什么,我们用的是这个叫做呃50兆的晶振去采的,所以我们踩一下是20纳秒,再踩下一下就是20纳秒,再踩下下,就是以20纳秒为基准去采的,所以说的话呢,呃,这个对于。
36:29
一纳秒两纳秒的来说,IP来说呢,或者是在我们50兆的这个这个时钟范围之内,我们是踩不到的,所以怎么办呢,希望大家的话呢,就是说呃,不要去这个钻到这个死牛角里出不来了啊,然后怎么办呢,我们在这就是说抖的时候我们呢就干什么。就距离这个这个这个这个叫做这个这个400远一点,比如说我们抖的时候都在300之内抖啊,然后呢,真正按下的时候呢,我们就比400稍微大一点,比如600,比如800啊稍微长一些,对不对啊,这就是非常简单一种方法啊,不是在这儿我们来说一下啊,复位结束以后,先延时个200吧,然后呢,我们啊,注意啊,我们所有的变化呢,都要带到这个变化啊,都要带着它,比如说二啊,然后呢,呃,在这的话呢,我们也可以说直接,还记不记得我们之前讲过一个task对吧,比如说task啊task啊,Task下划线抖动啊,我们就直接写一个抖动的task,这样的话呢,会比较的方便啊task,然后呢begin,然后end啊,然后呢是什么,然后呢,就是这个eight括号啊clock,嗯,然后呢,延时二,比如说呢,把这个K-N。
37:47
啊,让它等于一撇B0啊然后呢延时129,然后呢A括号啊然后时钟,然后延时二,然后呢K-N啊等于一撇B。
38:06
啊,一撇B1,然后呢再延时个这个这个三百二啊,只要离400远一点就没问题啊然后呢再括号,嗯,然后呢延时二,然后呢,我们将K-N呢再制成一撇B0啊然后呢,我们再延时个二百五十八九。然后适中,然后延时个二啊,然后呢,K1-N呢,等于多少,等于一撇B1啊,我们就写到这吧,嗯,我们不再往下写了,好了,那么这样的话,这就是一个抖动对吧?一个抖动的它我们把它选中,然后呢,我们在这儿写抖一次,再抖一次,然后再抖一次啊然后抖完了是吧?抖完之后呢,我们再啊eight括号啊它然后延时二,然后呢,干什么呢?把这个K-N呢制成一撇B0,然后延时多少呢?注意400就是N下来在这我们给稍微长一些,你想啊,你这个抖都抖了。
39:17
抖了这抖了多少,260,呃,300,这就五百八了啊,五百八加130,这就。这就这多少了,五百八加130,就这就这个七百一了,然后710,你想七一你还抖了三回,这就2000多了,所以说它的抖动就占2000多了,所以你真正按下的时间呢,要比这个要长一点,它好看对不对,所以我们给个更长一点,比如给个6000啊,给个6000,然后呢,我们再让他呢,呃,中间呢,再偷偷的抖那么两下啊,中间再偷偷的抖那么下,我们来看下我们能不能把中间那个去掉啊,然后呢,是这样对不对,然后干什么,然后就是抬起式的抖动,对吧,我们把它就是说抖动啊,然后呢,到最后呢,就是真正的抬起对不对。
40:04
所以呢,再给他一个台起啊,就等于一,那么抬起多久是台起呢?在这我们再给一个,比如说我们抬起的时间比较长一些,我们也给个6000啊,然后呢,到这儿就结束了啊,到这儿就结束了,这就是我们的一次的抖动啊,一次的按下抖动好了,那么为了呃,我们的这个这个这个看起来比较能循环一点,所以我在repeat啊,把整个的REPEAT5BEGIN啊,就是说呢,我把个的这个按下,就让这个按键呢按几,让这个按键按五啊,就是说这个抖的这个过程啊,让它按五。好了,那么下边的话呢,就到最后就结束了是吧,我们在这给一个叫做好啊,其实这个TB啊去写起来是很随意啊,但是呢,我一直在说啊呃,随意归随意,但也没有想象的那么随意啊,因为里边还是要有很多的这个。
41:06
呃,这个这个这个呃,规则在啊,很多的规则在。啊,综合分析一下。啊,就在这个当中的话呢,一定要注意啊,修改参数啊,以及呢,不要去钻那个啊这个死牛角是吧,就是说呢,我就距离它非常近啊等等那一系列的东西啊,这个我们就不再讨论了啊,大家有问题然后就直接说就行。
42:02
下面我们来呃,仿真一下啊,来看一看。那么这个TV当中的话呢,我是不是还之前还教过大家呢,就是如何把state的改成这个字母弄出来,对吧,然后等等等等那一系列啊都可以。所以不要忘了啊。好啊,那么在这我们来看一下是吧,啊,横面能看到什么,有一堆抖动,然后我们啊,到这儿拉低啊,又有一堆抖动,我们就视而不见,对不对,在这儿又一堆抖动,我们还是视而不见啊,然后呢,在这儿真正抬起了,我们就抬起了,哎,它有抖动啊,都是一样的,对不对,所以你来看上边那个什么呢?上边那个就是抖动的波形啊,下边那个什么呢?下边那个就是说我们已经这个叫做诶滤丸啊,我们叫做其实这个有的时候呢,就是说叫绿波也行,或者小斗也行啊,是一样,所以我这起个名字叫filter对吧?滤波的那个意思啊,滤波那个意思。
43:02
好了,那么呃,这个当中的话呢,大家呢,要是去看的话呢,呃,可以说把这个呃这个当中的这个CNT啊,K-R啊,State啊,没必要看啊,大家就看这个啊,然后呢。啊,然后呢,把这个都给搞过来。啊,然后呢,再restart,然后一下是吧,然后去看一看这个计数器啊和什么呢?和这个叫做呃,这个状态的关系啊,包括这个状态机是不是啊,我们在这儿的话呢,也没必要就直接这么写吧,因为状态机我们也看不到字母对吧,之前也教给大家怎么去处理这个字母,怎么看是吧?然后呢,大家也可以根据这个计数器的值,然后看一看啊,分析分析对不对,比如在这我们来看一下啊,你看就在这儿的话,一直在这个001状态,就是key off状态,然后到这儿啊然后干什么呢?然后这个检测到这个K-R拉低了,我们看一下啊,我们把它放往上放一放啊在这个上。
44:04
啊,在这个上的沿啊,检测到K-RR拉低了,所以立刻跳入到啊0010状态啊到这个状态以后啊,检测到这状态开始计数12345678啊接到这儿,接到这儿的时候呢,检测到它为高了,那所以立刻就回到了零幺状态,然后清零了,对不对啊然后呢,我们再往后看一个成功的,比如在这儿。到这以后呢,我们来看。啊,0010状态是吧,1234567891直到这一直到19啊到这个19状态以后,那到这19不是到这个19技束之后,然后立刻跳入到0100状态,到了状态以后,计数器立刻清零,然后到这的时候呢,已经到了状态了,所以我们OOK-N的输出为D,然后呢,就一直保持不变了啊一直保持不变了,那么在这儿的话呢,中间又有一波抖动,那么这一波抖动的话呢,我们都呢,呃,它都会啊,这个高电平的长度啊,都不会大于这个19的啊,所以的话呢,在这的话,它都不会啊跳入到这个k off状态啊所以呢,这个分析的话,大家可以到时候自己来分析一下啊,关于计数器啊,哪一点时序啊,不明白了啊都可以啊来问啊,包括截图也好,或者说波形不明白了,都可以说这个这个这个文字叙述也行,然后呢,给大家来解释啊,那么这个就是它的一个,这个叫做呃波形啊,叫做波形,那好了,那呃这个就是咱们的。
45:31
的一个消斗啊,按键消斗的一个设计啊,按键消斗的设计,那么有了这个消斗以后呢,啊,我们的按件计数呢,又可以去进一步了啊当然了,那么呃,很多人可能会考虑一个问题,你比如说呢,现在我们做的,现在我们做的是啊这个按键率这个消斗对不对?那么按键消抖,它消出来的波形呢,就是说抖动都没了,那会干什么,后边干什么,后边该去做这个叫做变压检测对不对?那么呃,对于我们的边缘检测的时候的话呢,我们是不是在最开始的时候给大家讲了一个问题什么呢?比如说你摁的时候呢,正好是在这个石钟沿附近,那么就可能就可能可能会摁不到,对吧,就可能会检测不到啊我们来去看一下我们的。
46:22
呃,叫做他。啊,那么在这个当中的话呢,我们来看一下这个record这个number吧,那么这个record number当中的话呢,们来去呃分析一下啊来去分析一下啊,在这个record number当中的话呢,我们在这呢也给他打几盘呢,打了两拍啊,然后呢,去相当于去啊信号去做同步,然后呢,去做了一个呃,这个处理亚稳态啊,然后呢,这个信号才能用对不对,所以又把它又打了一拍,然后到这儿,所以用这两个信号去做的操作,那么大家来想象一下啊,那么如果说我前边已经做了消斗了,比如我前面已经做完消斗了,我把小斗都做完了,然后呢,你的这个计数器呢,或者说你的这个边缘检测是干什么,你的这个边缘检测是对什么?是对我的已经消完斗之后的波形去做这个边热检测了,那你还有没有必要再去打两拍呢?那很显然的问题就是啊,有没有必要打两拍,那么就在问。
47:27
问一下我们打两拍的原因是什么原因,什么原因?就是这个信号从外部过来,是个异步信号,然后呢,我们也不知道它在什么时候发生改变,所以呢,我们要对它进行打两拍,然后消除亚稳态,并且做了同步,对不对?那好了,现在如果说我的前边已经有了一个安全消毒模块了,那么这个安全消毒模块它给我的就是我们本池中同步过的信号,对不对,就是说那个OK-N呢,它已经是什么,它已经是同步过后的了。那么它如果它已经是同步过后的话,那我还有没有必要再去打两台呢?其实呢,是没有必要了啊,其实是没有必要了,但是呢,就算你打了两拍之后呢,有没有影响呢?其实也没有啊,其实也没有,那么有什么影响呢?很简单,问题就是本身说呢,我一按下啊,在两个使用周期之内就应该加上一了,但是你又打了两排,那么在按下之后呢,就变成四个时用周期之后就加了一了,那么呃这个的话呢,我觉得呃无所谓啊,但是呢,就是说比如像咱们这个世纪无所谓,那么呃到这个呃到这个什么呢?到这个比较精细的一些环节里边啊,精细的一些环节里边,那么这个岩石啊,它能不能这个,呃能不就是能不能这个这个这个还能接受啊,那么这个就呃不太好说了,那不太好说了啊,所以在这儿的话呢,希望大家一定要知道啊,有很多地方可以不打牌的,咱们就不打啊,需要打咱们就打,因为他浪费了资源啊,浪费了一部分资源啊,所以这是这样的,好了,那么我们下边的话呢,我们把我们的。
48:55
按键技术的第二版,我们给大家来做一下,就什么就是先消斗啊,然后呢是边检测,然后是呃利用这个呃边缘检测出来的这个这个这个脉冲去做计数,然后把技术干什么,把技术再给了数码管啊,就是说我们今天来做这个第二个啊版本啊,那么这个第二版本做起来的话呢,呃也是需要的这个时间呢,也是蛮多的,因为他要写什么呢?他要写很多的代码啊,他写很多的代码。
49:24
那么在这儿的话,我先来呢,把这个实习报告的话呢,呃,我们来去这个,呃,完善一下啊,比如说我们在这的话呢,我们再给他写一个。叫做K啊,那杠V2。叫doc好,那么下边的话,我们把这个这个杠一里边的这个设计报告呢,我们给它复制过来啊,我们复制到VR里边去。我们后边给他加个后缀,比如说这个报告叫做V2,这是咱们第二个版本。
50:06
好,那么这个呃,在这的话呢,这个给大家说了是吧,你看我今天打开是6月15号,是6月15号是吧,之前是6月12号做的对吧,那么在这的话就改个V2啊,然后呢,还是我做的对吧。然后呢,这个里面就是这个,呃,增加增加什么呢?增加这个按键啊,斗啊斗啊和边。点R检测啊,也就是说呢,这是我们在这个事情当中增加了按键消毒和BR检测是不是好了,那么在这的话呢,我们来去呃看一下是吧,我们来看一下这个,呃,这个是不用动了是吧?这个也不用动对吧?那么在这的话呢,这个record的话呢,我们也可以考虑不用动,也就说我们现在把number给拆了啊,拆成好几部分啊,在我们number当中的话呢,我们在这写了啊,判断它是否为机电,否则就加一,那么这个实际方法很明显是不对的是吧?很明显是不对的,那么应该怎么做呢?
51:11
所以在这啊,我们就要呃,去把这个的话呢,再来给做一下了啊。那么对于这个来说的话呢,我们已经知道了,所以首先第一步要干什么呢?首第一步的话呢,要去做这个叫做案键的啊,首先第一件事你应该做案键斗啊,就说呢,首先你要做到一种没有抖动的一种波形是不是,然后第二件事儿呢,要把这个波形的干什么去做的就是边缘检测啊,比如说呢,叫做边缘检测,我们叫EDGE下划线啊,E d GE check啊,那么然后的话呢,我们要做第三个就是说利用什么,利用这个BR检测所出现的脉冲去做什么,去做计数啊,去做计数,我们在这的话呢,可以起一个叫做呃,这个呃,Record,我们就叫record了啊,因为我们整个叫record number啊,这个就叫record好了,那么这样的话就有三个模块对不对,那么这三个模块的话呢,哎,对于我们来说。
52:22
复制一个过来就可以了啊。好,那么首先是第一个是吧。然后这个就是这个叫做位位,然后还有一个是这个十中是需要十中复位。啊,还有适中啊,那么呃,这个是带有抖动的波形啊,那么这个呢,是这个消抖拈,所以呢,经过它以后呢,它就会给它一个什么,给它一个不带抖动的一个波形啊,比如这个波形叫什么呢?我们可以称之为叫做V-NV-N啊然后的话呢,我们来去做是吧,它呢还需要什么,它还需要这个时钟。
53:19
啊,然后呢,它需要。复位。啊,需要适钟啊,需要复位,那好了,然后呢,它呢是边缘检测对不对,那么它这个边缘检测的话呢,也就是说边缘检测的话,它会给他提供什么,哎呀,选错了啊,它会给它提供一个叫做脉冲啊脉冲。好在这的话,我们来给一个叫脉冲,比如说我们叫flag啊flag好了,然后的话呢,它呢,其实也需要这个时钟和复位。
54:00
啊啊,那么最终呢,它会输出一个呃,就是技术好的一个叫做number对吧,我们来看一下number number是七到零的啊,我记得当初做事的设计应该是让他记录到零到199,然后再加一就让它清零了,对吧?所以呢,正好是需要有八位对吧?所以在这的话呢,我们就需要有一个叫做呃。啊,叫做nu啊。我们往这边。一下是这个叫做七到零。然后呢,我们再把它放到这边来。啊,所以呢,大家你会发现什么呢?就是说呃,我在这个之前的话呢,就给大家已经说了啊,那么如果说呢,大家这个这个对什么呢?对整个设计啊,也不是很熟悉是吧,也不是很熟悉,然后呢,我这个放下边吧,这样好看啊那么呃。
55:19
我做这个设计的时候呢,有很多时候这个设计呢,需要好多好多。啊,当然了,呃,做虽然做好多遍呢,但是呢,都是在前者的这个基础之上啊,去不断的去去修改啊不断去修改,那么呃。所以呢,就看你什么,就看你知道的多不多,那就是你做的东西多不多啊,或者你了解了解这个原理啊多不多,那么当你在了解这个原理比较多,知道的东西比较多的时候呢,那么你就可以说啊,直接根据你的经验啊,比如说我一做我我就是我做个按键对不对,我就知道这个按键会干什么,我就知道这个按键呢会有这个抖动,所以我第件事就要消抖啊,消完抖之后呢,我就知道啊,它这个波形呢,依然会好长时间,所以呢,我们必须要用B2检测产生脉冲,所以呢在利用脉冲去record计数,那么这很明显就出来了,当然了,如果说你不知道呢,那么你的印象当中什么就是低电瓶,就有效去计数呗,所以呢,你就会发现呢,你整个流程什么就会像我给大家讲课一样,就第一件事儿啊,直接因按键说啊一直在技术不停,为什么呢?因为人家是每一个手机刷新一次,那么你可能得啊痛苦好久啊,仿真好久啊,分析好久能分析出来啊需要一个什么,它原来不能什么原来是不能是说一旦等于低电瓶就进行。
56:37
加一,那怎么办呢?我们说能不能按的时候呢,让它只按一个脉冲,这很明显不能,所以怎么办呢?我们说那能不能把它摁的很长时间的那样的一个值变成一个脉冲呢?所以我们可以干什么去做了一个边缘检测啊,里边有一个生产眼或一个下压沿,做完边缘检测以后,然后呢,我们去下板啊,确实发现它可以每次按一个就记一个了,但是呢,有有的时候会记两三个,记记七八个,然后有的时候呢就不记。
57:03
这为什么呢?我们也不知道,那我们来分析,为什么会记,为什么会不记呢?所以我们就分析啊,发现它中间输入原来不是脉冲啊,不是脉冲,或者不是一个生殖周期的脉冲,它可能会很细很细,有可能会踩不到,所以就不加一了,那怎么办呢?我们讲什么叫亚稳态,什么叫异步信号,什么叫同步啊,然后做完之后发现啊,每次摁都加了,但是呢,有的时候还会一摁,还会加好几个,为什么呢?哎,这个时候就要去考虑外部给的波形是不是跟我们想的不一样,然后就考虑到抖动,所以这就是一个经验性的问题吧。呃,如果说大家去看这个就是别人已经写好的资料,那么大多数什么大多数就告诉你上来先消抖在边人检测在干啥,我觉得那样的话呢,缺少个他缺少了一个就是你为什么需要它的一个过程啊,或者说呢,就强加给你的一种什么,就强加给的一种概念,就是这个东西就是应该这么来做,或者说这个案件就要有抖动,完了之后就要消斗或怎么怎么地,那么这个感觉不。
58:03
是你自己能够实践出来的啊,不是自己实践出来的,或者说呢,当遇到一些其他问题的时候,或者这个东西我没有做过的时候,那么你可能就不会再不会去分析问题了啊,所以咱们在这呢,也锻炼大家一个什么分析问题的一个能力啊,所以这个的话呢,是咱们要做的一个叫做呃,第二个版本啊第二个版本,那么这个的话呢,我们来看一下是吧。它是不变的,是不是它是不变的,那么这个啊也是不变的,对吧,所以在这的话呢,我们record number当中的话呢,变成了三个模块,所以下面的话呢,我们把这个给大家来去实现一下。叫做RTL。啊叫QPRJ啊这个的话呢,我用比较快的方法就能实现啊,因为这个都比较简单啊,呃,首先呢,第一件事是什么,就是说呃,我们所采用的什么,我们所采用的这个数码管啊record number和key,呃,啊他们都是一样的,对不对,所以复制一下就可以了。
59:08
啊,这代码都不用动啊,因为最起码他们顶层是一样的,对吧?啊这些都不用动,然后呢,我们还干什么,然后呢,我们还讲了一个消斗,所以斗当中我们也会用到,所以我们把肖斗也要复制过去。啊,小岛也复制过来好了,OK,有了,那么下边的话呢,我们来去做这个建工程。好,下一步。啊,在这的话呢,我们还是用啊,我们不用啊,这个这个在这大家是不是就没填过东西,今天可以填一下啊。就你就可以在这个。二你可以把现在这个都添加进去啊,都添加进去,然后呢是四。
60:09
好像是2568。好,Finish。好,到这以后的话呢,呃,其实呃,只要他建立完事以后呢,大家就可以看到,大家就可以看到这个当中其实是有文件的啊,其实是有,因为咱们在工程当中已经填过了,比如在这你可以发下看一下里边已经有这么多,其实你也可以综合分析一下,因为呢,这就是原来的代码嘛,所以你原来的代码应该是没有错的,呃,最多它就是跟原来的功能是一模一样,只不过我们要进行啊,对它进行一定的修改啊,但现在的话呢,我们还没有修改啊,就先编译一下,保证自己复制过来的东西呢,是没有任何错误的。
61:01
那么对于复杂的东西来说的话呢?就是重写可能会比较费劲,但是基本上呢,呃,大家不要觉得写代码能浪费多少时间,其实写代码的时间其实都是很短的,那么什么时间比较长呢?就是设计比较长,这是第一个,第二个一旦写完之后发现不对,找问题的时间更长啊,所以呢,大家一定要考虑好啊,怎么来做,这个是比较这个好的一个方式啊。好了,那么这个其实不变,对吧?Record number是不动的啊,这个数码管也是不动的,所以我们就把record number打开啊,在这个record number当中的话,这一部分的话,我们就都不能要了,因为都用没有用了,对吧?好了,那么到这儿的时候,我们首先第一件事呢,就会按照我们的设计报告来做了,什么第一件事要进行什么叫做消抖。啊消斗,所以呢,我们把我们的小斗模块打开啊,把小斗的CTRLC一下。
62:00
拿到这。啊,那么在这儿的话呢,我们就只管去立化就可以了啊,只管去立化就可以了,因为这个呢就已经是对的,那么当做到这儿的时候,有部分人说我还要去仿真啊,我仿真怎么仿?注意啊,你要再仿真这个难度就更大了,因为呢,因为有一个很简单一个问题,就是拈越多仿真起来会越难,因为里边不同的参数啊,你能不能鼓的明白啊,就可能会更难,所以怎么办呢?我在这给大家一个非常简单的一种方法,就什么,就是我们这个模块都在外边写完了,都验证都是对了的啊,验证都是对了的,所以呢,在这儿的话呢,大家就没有必要再去仿真单独的模块了啊,没有必要去仿真整个了,我们到时候去仿真啊,哪个没有仿真过的,仿真一下就可以了。好,那么在这儿的话,我们来看一下是吧,叫V-N啊V-NV-N好,我们把V杠连上。
63:04
那么第二个模块,什么B2个模块是这个叫做呃,B2检测,那么这个B2检测这个模块的话呢,呃,有些人就在这写了啊,所以我不建议大家在这写啊,就是说他是一个逻辑模块,我们就给他一个拈啊,就给他一个拈啊,所以在这的话,我们就自己写一个,比如叫边缘检测是吧,EDGE_E。啊,那么这个呃,边缘检测的话呢啊,边缘检测的话呢,其实我们可以不要复位啊,边缘检测可以不要复位啊,我在那个图里边应该是给了复位了啊边二检测一般情况下呃不写复位会相对来说好一点点啊我们叫V-N啊然后呢,输出的话呢,就是我们可以说呃去输出两个脉冲,比如说是上升牙。
64:01
啊,比如说是这个叫做下降眼,我们都可以输出啊,这没问题啊G好了,然后怎么做呢?注意就reg啊叫V5-N-R啊在这我们就打一排就可以了啊,因为这个信号过来的时候就什么他过来的时候就已经是同步好了的,对不对,所以就是waveve-N好OK好,那么下边的话呢,我们来写呢,就是说按照我们的那个规则来写啊flag现降沿吧,什么是下降沿呢?什么是下降沿呢?啊现在就现在为零,过去为幺呗,对不对,就是下降沿呗,现在谁是现在呢?就是VI5-N呗,所以现在为零啊,那就是这个括号啊,现在为零,过去为幺,那就是杠R的就是过去啊那么对于我们的上升沿来说的话呢,是不是上升页呢?就现在为幺,过去为零。
65:03
好就完事了,是不是那就完事了,然后呢,我们把它呢,进行一个啊化啊化的record number当中啊,不要搞错了啊。好,然后呢,是这个适中。啊,然后呢,是这个VI-N啊,那么在这的话呢,还有什么,还有这个,呃,两个是吧,有一个叫flag杠下降眼和一个叫做flag杠上升眼啊就是脉冲啊,不是上升眼啊下降眼的脉冲啊,上升眼的脉冲好OK好,那么按照我们报告呢,还有一个是吧,叫record的技数输入这个脉冲,那么用哪个沿呢?啊用哪个脉冲呢?我们都可以啊,但是两个脉冲呢,不一样的话呢,它的这个效果是不一样的,一个是按下就变啊,一个是放开手之后再变化,对吧。
66:21
我们在这也在写一个什么呢,再写一个叫做是不是Co。RD。好,那么这个的话呢,就比较简单了是吧。啊,输入的话呢,有这个适中啊,输入的话呢,有这个复位啊输入的话呢,有这个啊脉冲啊输出的话呢。有这个叫做七到零的nu啊,应该没记错,看一下啊,时钟位flag nu7到零好OK,好,那么这个当中的话呢,就是always eight括号适中复位好,复位的时候呢,这个number呢,要等于的是八撇D0,然后else的话要判断判断谁呢?要判断flag是不是等于一撇B,哎,Flag不来,啥都不要动对不对,Flag来了再判断um是不是小于八撇D199啊,如果小于的话,那就它就等于它加上一撇B1啊,如果不是的话呢,那么的话就等于多少呢?等于八撇第零啊,如果flag不等于一的话呢。
67:59
啊不等于的话呢,那么um呢要保持啊不变啊呃,这种对齐方式啊,反正我是比较推荐这种啊,就是说你和谁对齐的啊,就是就是他们就处于同一个等级的啊,这样会比较好记一些好了,Re啊然后呢,我们把它呢进行这个绿化,那绿化到这个record的这个number当中粘贴。
68:40
然后呢,是这个叫做适中。
69:02
啊,户外。啊,脉冲我们用什么,我们用上上页也行,下一页我们先下下降页吧,然后呢,Number是最后输出的啊,那么在这儿可能会报错啊,为什么?因为这个number的话呢,它不是rag了,它应该是where啊,因为它在这个模块当中啊,就是或者直接叫做这个点位当中,没有在这个呃,Always或者initial当中被赋值啊,所以呢,它的话呢,就只能是用VR类型的好了,那么写完了我们来综合分析一下。不一定会有没有错啊,因为都是现场写的,这个当中呢,有错也正常啊。我们看一下。
70:01
好了,我们来瞅一眼啊,是不是我们做错了?首先第一个问题就是什么说这个有一个输出啊,被接电源或者接地了。01234567。啊,看一下啊,这个零啊,就是零到五都接地了,六到七都接电源了,那很明显就是数码管的这个段都没动过啊,然后呢,这有一个什么,这有一个KN,就是说没有任何的输出取决于它,那就证明我们做错了。啊,就是说你们你的这个无论怎么变,输出都不变啊,所以这个的话呢,如果要做就做仿真,那就做错了,那么错哪了呢?我也不知道。啊,我也不知道,那么在这的话呢,我们就可以去做这个,一步一步我们来做一个仿真去看一下,那么在去做仿真之前啊,我给大家一个建议啊,怎么做呢?大家可以去打开这个RTL视图啊,你来看一看你的RTL视图里边是不是有问题。
71:08
打开它看一下啊,KN产生o kn flag,它然后给到它好像没问题啊,那么做做到这怎么办啊,就是说你看我们做完之后呢,它都不变,所以很多人做到这的时候呢,就不仿真值下摆,那么你这就是个死数,就是固定值,其实就显示全零啊,无论怎么摁都不动啊,也就是说如果说你要知道这些的话呢,那么你就可以从这儿就可以看出来啊,从这你就可以看出来好了,那么下边我也不知道错哪儿了,那咱们就干什么,那咱们就去做仿真。新建。Mao OK。File另存为。啊,在这个仿间怎么办呢?我们可以仿真整体的啊,但是我之前说的是不是比较麻烦,好了,在这儿我就直接给大家麻烦一下啊,啊就是说这种复杂的模块啊,那么或者说我们是通过它综合的报告啊,发现了一些蛛丝马迹,那么如果说没有发现呢,那么就是很多人就写完之后也不仿真,因为也不会仿真啊,然后就直接下版呢,下版之后呢,发现呢,永远都是零不动啊,那么这个呢,就问题就比较大了。
72:47
RG是周reg复位,然后RGK-N然后呢,是是这个七到零的。
73:24
C杠恩啊和这个叫做五到零的啊,叫做C啊,这边有这个失中位。啊,可以意外高。和这个C杠和这个C2杆好了,那么在这我们来续写一下,Initial时钟等于零,Always延时时clock等于clock去反好复位等于一撇B0,然后K-N等于一撇B1,然后延时201,然后呢,复位等于一撇B。
74:24
B撇B1好,然后呢,我们就开始干什么,给按键是不是模拟按下,那么模拟按下呢,是不是就是说你要去这个这个,因为这个抖动这个模块啊,从我们来说,我们是已经做完了对吧,或者我们就已经做对了是吧,那好了,那么在这的话呢,就没有必要再去模拟抖动了啊,那么直接就按下就行了,那么按多久呢?就在这你还要去做修改参数啊,那么要不然呢,按的时间太长了啊,谁呢这个模块当中的。谁呢?Record number当中的。
75:03
谁呢?案件萧斗当中的谁呢?T10毫秒啊,等于几呢?那等于10万,也就是说呢,我们又不模拟这个抖动了,对吧?我们就只是说给它一给它按下就可以了,好在这我们来艾括号时钟延时2K-N等于一撇B0按下,按下多久呢?按下十个时用周期,那就是200对不对,那我直接给你500万,那你按下对不对?然后呢,Eight时钟延时呃,这个二,然后呢,K-N等于一撇B1抬起,抬起也不要什么抖动了,再延时多少呢?延时1000,比如说我们摁下了500,延时了1000,那么这个呢,我们在这儿啊,我们等复位呃结束之后200之后再说这个事儿啊repeat,然后呢,我们给个五,比如说我们按五次,按五次。
76:12
好好,那么最后给一个Dollar stop,好,OK,那么这就写完了,写完之后呢,我们去做个仿真。啊,那么这个仿真的话呢,我们有两种方式啊,一种呢,就是说结,不是说结果不对吗?我们可以干什么,我们可以从结果啊,一步一步的呃去这个呃去找啊,就是往前找错哪了,那么另外一种方式呢,就是从头开始,一步一步向后找啊,那么对于我来说,我一般比较喜欢的是从前边一步步来后找啊,并且呢,首先呢,也不是一步一步,就是说先找中间信号,比如说我们很明显啊,我们这个分成两部分,那两部分呢,就是说啊呃这个。
77:02
就我们的按键计数这个key number啊分成两,第一部分叫计数,第一部分叫显示,所以呢,我首先做件事干什么,就是说我去做个仿真,我来看一下,当我按键啊,框兹框兹按了四五下啊,我的这个record,这个number这个模块啊,有没有那个数去加一加一加一,如果我加了。啊,我已经加了,然后呢,我给到数码管模块了,但是数码管模块它没变,就是数码管做错了,那如果说呢,我这框子框子按了四五下是吧,然后呢,这个呃,它呢,也没有去做这个任何的这个数的一个改变啊,就是数都没有改变,那么那就需要去呃考虑考虑啊,就是这个前面啊是不是做错了,好了,那么在这果然是按下按下了,那好了,下面我们来找这个问题啊,比如我们选中它。啊选中它,然后呢,我们来找这个叫做这个呃,Number啊,就是说中间的这个number这个数啊,我们来一下啊,找问题就一步步来。
78:05
好了。我们发现什么呢?我们发现这个这个数。叫。它12345没问题,也就是说呢,这个number这个数呢,是有发生改变的啊,Number这个数是有发生改变的,那谁错了呢,也就是说呢,我们来看一下啊,也就是说在我们的目前所做的这个叫做。这个当中,也就是说呢,这个模块摁一下人家确实输出了什么,人家确实输出了12345的啊,人家确实给你输出了,但是呢,你为什么没有给人家显示呢?那是不是这个模块有可能做错了。啊,这个模块是不是做错了,我们来去分析一下啊,呃,这个模块应该是没有错的啊,这个模块应该是我们的一个。
79:08
已经做好的一个模块是吧。我来瞅一眼,是不是里边有什么?问题。应该是没问题的,Show date,我们这样吧,我们把这个模块啊也给调出来瞅一眼。我们选中它找到啊,这个驱动这个模块也添加进来。我们在restart。Run up。好,那么我们来看一下这个啊。呃,对于这个date而言的话呢,我们来看一下啊,确实有变化啊,0000000,那么这样的话就看不出来了啊,因为我们这个时间没有给它去缩小啊,我们需要把这个时间呢也去缩小一下,然后才能够看得到啊,要不然的话呢,大家还是看不到这个呃数字的啊,看不到这数字的,那么下边的话呢,我来给大家把这个也给缩小一下啊TB。
80:24
嗯,他当中的呃谁呢。他。啊,他叫什么名字呢,叫T。啊,T等于,比如我们也等于十啊,等于十就比较的方便啊,那么呃,这样的话呢,我们还需要把TB再改一下啊,为了看它能不能看得到这个数字的话呢,我们需要把这个TB当中每一个按键的时间稍微加长一些啊,按下500啊立啊这个停止这么多好了,那么这样的话我们只改了TB啊,所以呢,我们把这个。
81:10
呃,TB啊,需要重新的去编一下。把TB重新的编一下就可以了啊。好,成功了以后我们再来。好,我们来看一下啊。好,那么首先呢,这个CL-N啊,我们可以把它改成这个也这个也不用改啊。C1-N呢,确实是像我们的这个写的一样啊,是有这个变化的啊,在这开始的时候啊,这是切换到这个,呃,1111011,应该说是这个第四个管子啊,这是第五个管子,这是最后一个管子,然后最后管子显示的数字是。
82:03
呃,一啊,这个是没问题的啊,然后呢,在这的话呢,切换最后管子显示的是。呃,这还是一啊,这也没问题啊,然后其他都是零啊,那就这个的话呢,应该是呃,没问题的,应该是看不到问题的啊,那么下边的话,他为什么会给我们综合出来这个问题呢。呃,为什么会给我们综合出来这个问题呢?K-N。这样吧,我们来下板桥一下吧,应该是看着应该是没有问题的啊,但是他这个这个综合器竟然给我们报了一个这个问我们再来综合一下,是不是它没有更新过来啊。我们仿真了一下都是对的啊,它这个它这个这个所有的输出啊,应该是根据我们K杠是有变化的啊,但是它综合了一下没有变化呢。
83:13
呃,还是有这个。呃,这样吧,我们我先不管它了,我先这个这个去做一个,那什么我先做个分配管角,然后呢,我再来编译一下,然后呢,我看一看是不是下板之后是不是还不对,然后呢,我们来呃分析一下是不是里边的哪个计数器,呃写小了,然后导致的这个计数可能是记不到那么大啊,这个19位啊,应该是没问题的。这个数码我们上一次应该是仿真过了啊,应该是下板都测过了啊,那这样吧,我们下板测一下吧,看看对不对好吧。呃,分配一个管角。好,那么这个拐角的话呢,我们去找一下啊。
84:16
嗯,管角是。我们把这个放到最大,我们去写这个关角。呃,时钟是我们的E1,呃,然后呢,按键我们用一个M16吧,呃,复位我们是M15,呃,然后呢,数码管往下翻。我在这儿。数码管的话呢,是我们的这个C7应该是我们的A5,呃,六是我们的B8啊,五是我们的。
85:02
A7啊,然后呢,四是我们的。B6啊,然后三是我们的。B5。然后二是我们的。A6啊,然后一是我们的A8,然后零是我们的B7啊,然后呢,这个是A4啊,然后是B4。嗯,然后是A3,嗯然后是B3,嗯,然后是。A2啊,然后是B1好。我们来close下,好,我来这儿这个生成个配置文件啊呃,我感觉这个当中的话呢,可能是有某些问题啊,是不是啊,这儿没写复位。
86:01
啊,这个没写复位,这个复位被我走了是吧,我把它再回来啊,是不是这个原因呢。累了粘回来啊。是不是我当初把它挪走挪走了是吧。嗯,下面我再来去重新综合分析一下啊,看会不会有那个错误啊。输出。他。适中复位这都没接错啊,他没接错,是不是刚才因为那个复位接的不对呢,看一下。啊,应该是那个复位没接啊,应该是我把这个复位给粘走了啊,就是说我把这个复位不是往下边去粘的时候,它粘成这样了啊,应该是这个问题,应该是我把这个复位给粘走了,那么这个我把这个复位粘走了之后,它应该是默认的这个值应该是变成了全零啊,应该是默认变成了一个全零啊,那么他可能就一直在复位啊,那么这个的话呢,我们就给他再粘回来,他好像就不报这个警告了,呃,我看一下这个里边啊。
87:26
这个在在这个这个当中,他好像是。如果说要是不给他复位的话,他好像的初值他应该是给的是腰啊,或者他应该是给的是什么,我来看一下啊。啊,果然是啊,在这儿的话,你看这个副位置值是一直是一个什么,他一直是一个高阻态啊,这个复位值是一直是个高阻态,但是复位是个高阻态的话,它可能就是认为就是高电屏,就是不复位就可以正常去给你做输出了,这是在model SIM当中啊,如果在这个,呃,这个叫做这个这个这个ipg里边呢,这个线不连的话,它默认什么,它默认可能是低电平,那默认低电平这根线呢,可能就会一直就在什么,它一直都在这个复位啊,这是两个不一样的地方啊,为什么仿真对了,这个没对啊,我想了半天啊,没想出来哪有问题啊,在这的话,我们又去检查一遍代码,发现这个地方可能是我从这复位就是仿这粘贴的时候把这个给粘没了啊,现在我们再去综合分析的时候呢,就发现这个。
88:31
啊,这个结果啊,就没有任何问题了啊,可能是我刚才看RTL视图的时候可能没注意啊,这个就是连线的问题啊,呃,应该是我当初没注意看啊,因为在RT度当中应该还是可以看得到这个线没连的。可能是我刚才没注意,那现在就不会出现这个问题了啊,就不会出现说输入啊,有这个输出啊,没有人取决于这个输入啊,我们来看一下。
89:08
大家看一下啊,刚才这个复位可能没接啊,刚才这个复位可能就没接上啊,所以我刚才可能也没注意到,因为他也是从这儿进来的,可能从这下去了,我没注意到这个复位啊,那么无论怎么说吧,就当这个给大家从头到尾又仿真了一遍啊,然后分析了一遍啊,那么这个呢,我们已经做完了是吧,我们来下个版吧。一会儿我晚上回来就是说到到到这个讲完之后,我回来反看一下视频啊,可能在我视频当中看那个的时候,可能就已经是呃,可能就没连上,但是我可能没注意到啊,一般情况下,呃,这个的问题在哪,就是说连线可能连的不对啊,或者是等等其他的啊。
90:05
好了,那么下面我们来做一个下。啊,下面是这个。嗯,这就没有了,没有了需要重新连一下啊,因为这这个下载的话呢,需要有的时候呢,可能就是检测不到,我电脑上一直在插着它可能会呃,偶尔检测不到啊,我来给他上个电重新打开一下。嗯,怎么还是没有。
91:00
OK了啊。好,我们。哎。怎么又没了?好了,那么呃,我们这个就下载完了啊,我们给大家来看一下啊。啊。好,那么这个的话就是我们的一个呃按键啊,然后呢,一个数码管是吧,按一下就变成了一是吧,二就看只看最后一个啊,只看最后一个,这样是看的比较清楚一点。三。啊,然后四啊五六就无论怎么摁的,它不会出现什么,它不会再次去出现,这个就是你摁一次它会加好几,也不会出现什么,也不会出现这个这个这个就是你按了之后,它没反应这种情况啊,就不会出现了啊复位啊就是零啊123456789是吧,都没有任何的这样的一个问题,那好了,那么呃,这样的话呢,其实呢,我们就已经把前边的处理的问题,我们都处理完了,但是大家来考虑一下,我为什么在按按键的时候,我从来就只按到九,或者说我在做的时候永远都没有向上去按过呢。
92:29
其实也是一个另外一个很简单的问题,比如我们在这给大家来按一下,大家来看一看,比如说呢,我来去啊123。四。56789,按照我们来说是不是应该十啊。是它没有出现啊。他出现什么,出现的是A呀,然后是B,然后CDF,然后是一零。
93:00
然后是11213,那这很明显,比如说现在的竖是一串数是一四对不对,那我说我摁了14下吗?那很明显不是14下,那是多少下呢?呃,所以这个呢就有问题了,对不对啊,因为我很明显我都已经数到了14下,对不对,它也不是14啊,那现在它显示是14,那我是多少呢?所以在这我需要干什么,我们需要去研究一下数字表示啊,我们需要去研究一下数字的表示啊,在这儿的话呢,我们来呢,呃,给大家来去,呃说一下就是我们这个啊,它到底又错在哪儿了,就是我们做的还是不对劲儿,让我们做的还是不对啊,在这我们来看一下是吧,我们根据我们的这个设计报告来说啊,我们前边去做计数,也就是说这个number的话呢,按一下加一,按一下加一,按加一已经完全对了,但是呢话呢,好像有个问题,就是我把这个数给到数码管以后,这个数码管好像不是根据我所想的去想去显示的,为什么呢?我们在这来看一下啊,我们来分析一下啊,分析什么呢?首先我们来。
94:00
分析一下,就是我们给数码管的值是什么,数码管又是给我们怎么显示的,那么首先呢,我们先来说第一个问题啊,呃,我们在讲这个数码管的时候是吧,我们在讲这个数码管的时候,我们是不是就给大家已经说了啊,我们什么我们是这个叫做六位一体的一个数码管。而呢,我们在分析的时候呢,是一个数码管,可以点亮任意的四位二进制,对不对,也就是任意的位的这个叫做呃,二进制的这样的一个数字啊,二进数字,所以呢,我们说我们的数码管可以干什么,可以显示任意的24位的一个二进制啊,那么它是怎么显示的,它是这样显示对吧?也就是说呢,你给我的是一个24位的数字是不假,但是呢,你给我的是24位,但是呢,我也会做一件事,什么事呢?就是我会自己给你评判,比如23到20是四位啊,然后呢,19到16是四位。
95:02
啊,然后呢是多少,然后呢是这个15到十二十四位,然后11到84位,七到44位,三到零是四位,然后呢,分别对应的显示在第一个数码管上,第二个数码管上,第三个数码管上,第四个数码管上,第五个数码管上和第六个数码管上,就是这我可以啊这啊这没问题啊,我可以知道呀,那好有个问题那就来了,那么我们来看一下啊,你比如说我们去给数啊,比如说我们去给,现在我们是不是24位啊,现在我就说,我现在就是说前20位都是什么,前20位全是零,那这样的话呢,也就是说前边五个数码管写上全是零对不对,那现在我们就说最后一个数码管,最后数码管是不是要给四位,对吧?那比如说我给的嘛,我给的是000,那么你数码管显示是零,毫无疑问,我给的是100,显示的是八,毫无疑问,那我给的是101。啊,1001,那么啊,那么显示显示九没问题,那如果给你的是幺幺啊,这个这个1010呢,这是多少呢。
96:06
这不就是十吗?那你一个数码管能显示十吗?显示不了,显示你会显示A对不对。是不是你会显示A呀,所以这就有了一个问题,什么问题呢?就比如说我现在给你的是十,对不对,那我给你的是十,你显示A呀。对不对,那这就有问题了,那这就我因为其他人又不知道,还得学一下这个这个这个16进制,对吧,因为显示都是16进制的数,对不对,那还得学一下,比如说呢,哎,你要两个数码管显示的是38,那是38吧,其实并不是应该多少,应该是三乘以16加八,应该是48加八应该等于56,也就是说呢,上面显示的明明是38,但是呢,我还得认为我还得算一下,就是算什么算出来它是一个叫做呃16进制,才能知道它是等于多少,那么这个的话呢,呃,很明显啊,就呃有问题,那很明显就有问题,所以的话,那怎么办呢?我现在就是说我给你的number是多少,你就给我显示多少就好了,比如说呢,现在我们不说最后一个数了,我们说呢,我说什么,我们说现在我给你的啊,比如说我们就像现在来想,比如说我还是后边这两个数,比如说我给你的那么是多少呢?我给你的那么是18。
97:20
我就想让你显示18。但是呢,我给你的18是什么样子呢?注意啊,因为number什么number是二进制的对不对,18应该什么,18应该是00010010,这个是18。对不对啊,这个是这个是16嘛,这个是二嘛,所以16加二等于18对不对,但是我们知道你把这个数直接给了数码管,数码管会亮多少呢?数码管会把这四个变成一组,这四个变成一组显示多少呢?显示就是一二,就说会显示成12啊,但是12是18嘛,其实12是18,为什么呢?因为是16进制的12嘛,对不对,四个A组,四个A组对不对,所以呢,就是12,所以这呢就不对了,对吧,我们就不认识了,对吧?所以怎么办呢?所以我们不能说为了这个就记个数,然后还要还让这个使用者去学一个16进制如何转十进制,那太费劲了,对不对,那么我们怎么办呢?我们就要做一件事,什么事儿呢?就比如说我们那。
98:21
哎,你随便给一个数啊,你随便给个数,比如你给X,你随便给个数,然后呢,我就能够把你X的,因为咱们人类属于属于什么熟悉的叫做这个。呃,这个这个呃是十进制嘛,而属悉十进制,那325,那你就给我显示啊,325就可以了,对不对,你就熟悉325,那你就给我显示325就行了,你别给我显示乱七八糟的玩意儿我也不认识的,二进制你别给我显示你十二进制我更不会算了,对吧,比二进制还啰嗦,那么怎么办呢?所以就很简单,问题就是什么,就是说。那怎么能让数码管上显示325呢?那是不是就是这样的,怎么能显示呢?那是不是就是呃,给的数是什么,给什么就显示325了,四个一组,四个一组就是0011就显示三了,0010就显示二了啊0101就显示五了,对不对?所以呢,也就是说呢,你如果这个X等于325的话呢,那么你就让给我一个这样的数啊,如果你是这个325的话啊,那么你就给我这样一个数,我就能够给你显示出325了,那么来看,那么这个数字什么,这个数字就是一个普通的二进制数字,那么这个数字是什么呢?这个数字的话呢,其实就是什么?其实就很简单,就是啊,大家有没有觉得就是把X数的百位拿出来放到这儿了,十位拿出来放到这儿了,个位拿出来放到这儿了,对不对?那么再往多了说,就什么就是用哎四位的二进制来表示一个什么来表示一个十进制,当。
99:54
当中的个位、十位、百位,或者叫做某一位当中它的数对吧?那么像这种用四位的二进制啊,用四位的二进制去表示十进制当中某一类的这样的一种表示方法,比如它是个位啊,它是十位,它是百位,那么这叫什么?这种表示方法叫什么叫BCD嘛。
100:16
什么叫BD码呢?其实这个在最开始的时候给大家已经讲过了,是吧,B就是二进制啊,C就是code in就是表示的意思啊,然后D呢,就是十进制啊,就是用二进制去表示十进制啊,就是这个意思。而有人说那BD买上BD嘛,就是正好是用四个二进制啊,四个二进制数正好去表示一个十进制的数啊,就是这样,所以在这的话呢,大家学的东西一定要学的灵活一点,不要学死了啊,比如说呢,很简单问题啊说呃,这个1010110,就这数等于多少呢?有人就算这数等于多少呢?这个数就算等于这个86。
101:01
是86呢,对呀,如果你要把它当成普通的二进制来算,它可不就是86,但是的话呢,如果说呢,我告诉你,就是我告诉你这个数呢,它是一个什么,它是一个不地满。啊,告诉你它是个BD嘛,那如果BC满了怎么算呢?那就是四个A组,四个A组就要分了,前面前面是0101,后边后边是0110是不是零二,这个数应该等于56。啊,这数应该等于五六,因为前面是五,后边六嘛,这个代表个位,这个代表十位嘛,对不对,所以呢,一模一样的数字啊,一模一样的数字,那么在不同的认知范围之内,或者说你给它加上不同的定义的话呢,那么它就会得到的值就不一样了。啊,不同值就不一样了,但是呢,在咱们ipg里边的话呢,或者在所有的数字电路当中的话呢,我们大多数啊,默认用的都是普通的二进制啊,都是普通的二进制啊,因为呢,用咱们普通的二进制这种方法的话呢,方便我们去做加减乘除,因为所有的逻辑设计都是根据他们来设计的啊,都是根据他们来设计的,那么为什么会有这种叫做BD码呢?其实有一种非常简单的方法就是什么?就是大家这个B就可以认为就是机器。
102:14
D就是人,所以呢,也就是说机器把他的东西输出来给人看的时候,人看不懂,那怎么办?所以就要转换一下子,所以BCD码在哪用的最多呢?就是说哎,就在哪儿呢,就是说机器内部已经处理完事了。然后呢,要给人来看了,人看不懂,所以机器就要做一件事,就是先把它自己的二进制转成BD给人看,因为BD什么BD就是说告诉你个位知己,十位知己,百位知己是不是就OK了,其实就是这个样子么,所以我们今天呢,要做一件事什么,就是说你不能干什么,你不能够直接把这个number的数直接给了数码管,因为数码管不认识。它这个显示设备对不对,他只能认识四个A组,四个一组,你给他就不对,或者说我们这个设计从开始就不对,为什么大家来想象一下啊。
103:07
我们的设计要求是计数器从零增长到199,然后再加一的时候就清零,对不对?那么也就是什么,也就是说你的计数器会干什么,你的计数器会从零一二三四五一直增到199,它就是会199会占几个数码管呢?一百幺九九或者1101102108就会占几个数码,会占三个数码管对不对?它会占到三个数码管对吧?而按照我们的分析来说,如果你要占到后边的三个数码管的话,那你是不是应该去给的应该是后12位啊。想一想是不是应该给后12位啊,因为是四位对应一个数码管对吧,所以你应该给多少,因为你要占用三个数钱,应该给后12位数对吧,但是你只给了多少,你这给了八位对吧?这很明显是不对劲的。啊,因为呢,这样的话,如果你只给了八位,那么你说到说破大天啊,你也只能控制最后两个数码关,你也不能够去控制倒数后倒数第三个,你只能靠控制倒数第二,倒数第二个对不对,所以在这儿,其实这个设计的话呢,本身就是有问题的啊,那么我们怎么能做对呢?其实就需要干什么,就需要在这个number啊七到零啊,NUMBER7到零啊,这个这个是普通二进制数字啊,你不能够直接给了数码管干什么,你应该呢,经过转换,就是把你的number的百位十位。
104:36
个位都算出来,然后算出来以后呢,这个数干什么,把这个数呢给到数码管,比如你把百位算出来,给到倒数第三个数码管啊,把十位算出来给了倒数第二个数码管,把个位算出来给了倒数第一个数码管。那么分别对应什么,分别就对应的就是说23到零当中的啊,D多少到D多少,D多少到底多少,那这就完事了啊,所以呢,这是一个啊,我们所说的,那么把个位,十位百位都求出来啊,这叫什么,这就是BD对不对?那么这种啊,这种方法叫什么?我们称之为叫做二进制转成什么转BCD。
105:14
啊,我们称之叫做二进制啊,二进制转BCD啊,也就是说呢,我们人和机器呢,就是人,我们可以认为什么比较熟悉的是BD码啊,机器PC或者是输电路比较熟悉的是二进制码,所以呢,也就是说当PC要给人来看的时候,需要什么,就需要将BCD转,不是转边转成BCD,而人啊,而人要给PC的时候,PC就要做什么呢?需要把BCD转成二进制。那么有人说为什么人输入的时候输入的是PD吗?其实是啊,来举个例子,比如大家这个计算器是吧,大家家里都玩过计算器对不对?比如说我让你输入个32加三十六三十二加36,你会怎么输入,你是不是会先按三,然后再按二,再按加号,再按3Z6。
106:14
六然后咱等于,那如果说我就按照你这种写方法,三三什么三就是0011嘛,二呢就是0010嘛,那这个数加起来是32吗。这个数可不是32啊,如果你要计算这个数可不是32,这不等于多少呢,这个数可能这个数等于50啊。啊,因为十,因为这样就有四个一组,四个A组嘛,三二嘛,后面叫做BCD的32嘛,或者个16进制的32嘛,所以呢,真正数等于等于50对不对,所以那怎么办呢?所以说如果说你要往计算机里输的话,你输的三和二代表什么意思,其实是这种数字,也就是三二,而这个什么,这个告诉我们就是你说的三是十位,二是个位,所以呢,你要想做成32应该怎么做,应该是哎,三乘以十加上二乘以一,这个数等于32,然后把这个32啊才是我们真正的二进制,也就是会这个数会等于多少呢?也就是说这个数会等于32嘛,就是这个00100000,这个数就32。
107:24
呃,看不到是吧,这个数等于32啊,这个数等于32。啊,会等于这个,就是拿这个去做计算啊,然后呢,把36也算出来,它等于0010啊36嘛,32加40100这个数,然后他们一加啊等于00100010等于这个数。啊等于这个数,那么呃,那么这个数的话呢,然后干什么,然后把这个数然后去做什么呢?把这个数然后去做这个,呃,这个这个这个这个算完之后啊,把这数算完之后啊,这个去呃去去这个看看它等于多少,这知数等于多少呢?这个数应该等于的是这个。
108:09
呃,应该是六,这个是64啊,64加四应该等于68啊,没问题,是32加36等于68,然后68这个数的话呢,直接输出什么,直接输出的话那也不对了,这输多少,这输出会变成这个44对不对,那怎么办?所以需要把这个数呢?哎,这是普通的二进制对不对,所以要干什么,要把它再转成BD,也就是说转成高位是六,就是0110,低位呢是1001就转成六八,这样再给人输出出来啊,这个没看到是吧。啊,就把这个数呢,转成这边是六,这边是八,转成六八,也就是说呢,人输入给机器的是BCD,所以机器第一件事要把BCD转成二进制,而机器给人输出的时候呢,输出的是二进制,所以人看不懂,所以第一干什么要把二进制转成BCD,所以呢,人机的交互其实呢要有什么,其实就是有这样的一个问题存在,就要有要有相互转化的过程,就好像很简单,就比如说这个,呃,你要写给ipg代码,那么IP就听不懂,那怎么办?所以呢,你要把你的思想告诉电脑,电脑给你转一下转让他们听懂了。
109:18
然后呢,他呢要表示一些信息给你,那怎么表示,所以他呢,要把它的里边的一些东西,通过灯啊,或者通过一些数字啊,通过一些什么方式给你显示出来,那么它也经过一些转换,他给你一些数字,你也不知道那是啥,所以呢,呃,这就是一个转换的一过程,那么呃,今天的话呢,我们现在去讲一个最简单的方法啊,就是二进制转BD的一个最简的方法,那么二进制转BD最简单方法是什么呢?其实刚才已经说过了啊。就是二进制转BD,比如我们叫二进制two BD啊,MATLAB当中一般写two就会写成二啊一样啊,那么什么方法呢?首先啊,你不要管什么方法,你先说二进制转BD什么意思呢?什么二进制呢,就是一个数呗,BD呢,就是用四位二进制去表示它的个位、十位、百位、千位对不对?那怎么办呢?也就是说只要说我能够把这个普通二进制的个位、十位、百位都求出来是不是就可以了,所以的话呢,我们怎么来算一个数的百位,怎么来算一个数的个位呢?比如说X。
110:24
啊,它的个位怎么算呢?所以就是它对十求余。那它对十求余就是个位嘛,对不对,那么怎么去求它的,怎么去求它的这个这个这个这个十位呢,所以在这怎么办呢?所以就是X减去个位。啊,X减去个位,比如说你是123,你减去三是不是变成一百二了。对不对,然后呢,得然后干什么,然后呢,变成一百二之后干什么,然后再除以十,是不是变成12了。然后呢,再对十求余是不是就变成十位了,也就是说呢,我们能够把个位拿出来,那怎么做呢?那我们就把不断的把这个数当中的某一位都干什么,都给它弄成个位上去,那么其实在这用不用减个位呢?比如说有的人说,呃,那123对十求余等于三最简单,然后呢,123。
111:24
然后呢,减去三等于120,然后呢,再除十变成12,然后再对十求余变成了二,这没问题啊,也就是说呢,我们在这儿啊。啊,123啊,对,十求余等于三,这没问题,123减去三除以十等于十二十二,对十求余等于二也没问题,那么这个三到底用不用减呢?我们来看一下,如果我不减三会出现什么情况呢?我不减三是不是就变成了123除以十?等于多少等于12:32点三对十求余,等于多少,等于2.3对吧,那还不是不是二的对吧,变成2.3了对吧?这给大家来说一下啊,那么到底用不用减个位呢?其实不用啊,为什么?因为在ipg类的除法的时候是没有小数的,就是123除完之后就等于12没有那个小数点啊,Ipg是除不出小数的啊,如果说你要想做出小数要干什么,要去做定点或者去做浮点啊,就比较费劲的对吧?所在这儿的话呢,Ipg是做不出来啊,做不上做不出来这个这个这小数的,所以大家呢,不用去操心啊,不用去操心减个位,那怎么做呢?所以就比较简单啊,对于个位来说怎么做呢?哎,对于个位来说就是X对十求余就是个位,然后对于十位呢,就是X除以十,再对十求余就是十位,然后X对除以100,然后对十求余就是百位啊,然后呢,X再除以一。
112:57
千。然后再对十求余,就是千位啊,那么你除以多少对十求余,因为你除以多少就会把你那个本位除到个位上去嘛,没有又没有小数对不对,那么除到个位上以后,再对十求余,这不就把它的这位给取出来了吗。
113:15
那么在ipg里边可不可以这么写呢?可以啊,因为在ipda里边是可以支持用这个百分号的,也就是说vrlo语法是支持百分号的啊,支持百分号的,那么我们这边来写的话呢,就比较容易的把它给做出来了,那好了,在这的话呢,我们啊,就可能会需要给大家呢,再一次去做一个啊,这个叫做。设计报告啊,因为我们设计报告呢,可能就要再多一下是吧。我们把它给关掉啊。
114:07
好,那么什么呢?就是说我们这儿呢,可能还会再多一个叫做呃,K下划线,下划线杠V3好了,那么这样的话呢,我们还会再写一个叫做doc,然后我们把V2给搞过来。啊,我们把VR搞过来,搞过来以后呢,也就是说我们在这啊,给他这个加上啊什么呢,就是现在这个呢,是我们的一个。哎,没改是吧,还是V2是吧,我们给它改成V3。好,我们改成V3以后呢,我们给他这个去修改一下,比如说是V3。
115:02
啊,然后干什是增加了什么呢?增加了或者增加二进制转BCD,那好了,二进转BD转哪去呢?所以二进制转BD呢,就应该是啊在这儿啊,就是这个架构就不对了啊,这个架构就不对了,为什么呢?因为首先这个七到零是普通的二进制,你直接给数码管是不对的,因为数码管显示什么,数码管显示是四个A组,四个A组,其实四个A组四个A组不就是16进制嘛,而16进制当中刨去ABCDEF这六个的话呢,它不就是不基地码吗。所以在这的话呢,需要干什么,需要把这个进行一个啊拓展啊,就把这个架构给修改了啊,这个架构就不对了。啊,这架构就不对了,在这的话呢,我把这个架构呢,我们来修改一下。
116:10
啊,那么这样的话呢,他呢。就是一个七到零的,那么这个的话呢,我们到底用不用时中的其实都可以啊,比如我们二级转BD啊,要不要这个中都可以啊,比如在这我们来做一个组合逻辑的也可以啊,比如是B啊,BCDBBCD。就是他的话,我们就不让他要这个,呃,适中了就做一个组合逻辑的就是几句赞一句不就行了吗?对不对啊,然后的话呢,他的话呢,就是这个。时钟。然后复位。这个的话就不能够这么多零了,应该得这个这个这个就是这个呃。
117:04
12个零啊,也就是说呢,你只能控制前三个数码管是零啊,后边三个数码管呢,就轮不到你控制啊,后边三个数码管就不能他控制,应该谁控制呢?应该是人家。那人家这个模块对不对,就是这个模块的话呢,会输出一个什么呢?会输出一个叫做NUM啊,我们称之叫NUM,才发现BCD,哎,就是说呢,人家会输出一个人家转完的BCD,那BD多少位呢?BCD就转成了叫做12位的一个BCD啊为什么12位呢?因为呃,我们可以从两方面去考虑,第一个呢,我们的number呢,是这个零到199无线循环的,而我用到三个数码管,所以呢,我这三个数码管的话呢,肯定啊会用到这个12位的数字,这是第一个,第二个话呢,我们也可以说从另外的角度来解释,比如说呢,那么是多少呢?是这个八位的啊,八位能表述的是零到255,而零到255的话呢,对应的BD码应该有三个,因为有百位十位和个位啊,现在有三个,那么三个BD码,每个BD码有四位,所以需要有12位啊,这是一样的是吧,好在这儿我们把这个呢往里挪。
118:19
一下。这个。好啊,这个就是因为是硬硬改的,所以就是看起来可能会不太好看啊。好,就先这样吧,我把这个给拿回来。
119:01
好,那么这个就变成什么,这个就变成了我们啊V3的一个叫做试剂架构,那么这个呢,张中伟多了一个什么,多了一个二进转BD啊,多了二进转BD什么方法呢?就是用三句再与句就可以了啊,除以十除以一对十求余是个位,除以十啊对十求余就是个,就是十位啊,除以100啊对十求余就是百位,然后算完之后呢,合并到一起变成了12位,然后给到数码管就可以了,那么这个下板之后呢。就会出现什么,就会出现,就是当你按到九的时候,再加一变多少就会变成这个。的十啊,就是前面数码管会变成一,后边数码变成零,那好了,那么这是一个二进制转这个叫做BD的一个方法啊,那么这个我已经说了,那么大家呢,课下的时候呢,可以抽个时间啊把它给做出来,然后呢也加到我们今天所做的消斗边R检测,呃,然后呢又计数啊,然后呢又去加上数码管,那么再加上什么,再加上今天讲的二级转PD都加进去,然后加进去以后啊,然后去下板试一试,看看它能不能啊,嘎嘣嘎嘣嘎嘣嘎嘣一直摁到这个199,当然了,我这个数呢,速度比较大啊,为什么?因为呃,让大家能够呃知道这个这个咱们这个用的是三个数码管,以及让大家知道这个什么,就是说你所出的数是普通的二进制啊,你想让它显示到这个数码管上,显示出就是咱们普通十进制的话呢,需要转换啊,所以这个大家可以去按啊,那个按键应该按个100多次也没啥问题啊,那么大家呢,其实按到这个。
120:39
九变A啊,其实就已经呃有这个思想了,对吧,所以大家的话呢,也可以去做一个简单的一个变化,比如说呢,把record number改成多少,别让它小199,再再清零,你给他改成呃32或者改成18都可以,但要求啊,你必须得改成大于16以上的数。啊,当成16以上的数啊,最好改成30多啊,这样的话比较好一点啊,然后改,然后把这个加上以后,你发现了么?九完之后就不是A了,就是这个幺零了啊就比较好了,好了,呃,这个呢,就是咱们的这个呃,这个这个呃。
121:16
讲的这个所有的这样的一些问题吧,然后呢,我们今天呢,再给大家留了一个就是一个小的一个作业题啊什么呢,就是这个关于这个b two BD的一个写的方法,其实呢,就那四四句话三句话是吧,给大家已经说完了啊,给大家已经说完了,呃,那么呃。这种方法的话呢,是用的这个除法和求鱼的方式,其实在ipg里边,或者在数字电路当中,呃,向来对除法和求鱼呢,都有一种呃叫做陌生的反感,那就是说这个这个这个不想用你啊,或者就不想见到你啊,见到你就头疼,因为他用的资源确实比较多,然后呢,这个呢,我们放到明天再讲,然后呢,二进转BD呢,还有另外一种方法,那么这个方法呢,我们也放到明天再讲,所以我们明天的重点呢,就是实现二级转BD啊,用刚才那那种除法呀,球鱼啊实现一下。
122:10
然后看一看他用了多少资源,然后呢,我们再来讲另外一种方法啊,然后二进制转BD的,然后呢,它的另外一个方法,那么另外一个方法的话呢,看一看啊,它用的资源啊,速度啊,怎么来对比啊等等这个里边的啊,然后呢,还有一个问题就是说。在这个当中的话呢,我们会穿插用到一系列的呃,MATLAB的一些东西,呃,然后呢,希望大家的话呢,呃,没装那个,我是把链接给大家了啊,然后呢,大家把MATLAB下载一下,然后呢,我们来,呃,到时候回来用一下这个MATLAB,我记得给大家发,那里边应该有那个傻瓜式的安装教程啊,大家这个呃,看着装一下就行,好吧,那咱就今天就讲到这儿,看看有没有什么问题啊,有问题的话可以说一下,然后给大家来解决一下。
123:07
呃,咱们这个,呃,设计报告的话呢,确实啊需要做这个好多遍啊,确实是因为那个大家呢,确实是这个做的比较少嘛。嗯,做的东西比较少,所以呢,如果说我直接上来就给大家说要做按键技术,然后呢,就把这个架构啊,都巴拉巴拉巴拉都给大家可能就体会不到了,那么其实咱们这个啊,就按照我所讲的设计的这个讲课的这样的一个过程啊,呃,其实呢,呃,这个其实也不够啊,这个后边还要再加,呃,还要再加很多东西啊,然后才能够完成我们这样的一个实验啊,才能完成这样实验。啊,好了,可以看一下有没有问题啊,有问题就说一下啊,没有就说个没有,然后咱们就明天再说。
124:00
没有是吧。啊,这个。好好看一看啊,都好好做一做,好了,那就明天再见好吧。
我来说两句