00:04
有声音吗?你听到声音吗?可以是吧,呃,等会儿我共享一下屏幕啊。好,OK。屏幕也没问题吧?好啊,那就是有声音有画面咱就OK啊,然后这个。其他人的话呢,我们稍微等一下啊,大家来看一看咱们昨天的讲的这个内容啊,大家有没有什么问题啊,因为这个昨天的就是这个就是讲的这个东西啊,它比较的多啊,比较的多,所以呢,咱们只讲了这个设计,到最后呢,为了验证下下版对不对啊,所以我赶快去下了个版啊,因为都是现场写的啊,并不是像别人的这个这个在网上讲课也好,或者他们也好,都拿现成的代码啊去直接给大家来展示,那么那样的话呢,我觉得大家可能学不到东西,对吧,直接就是现成的,我也不知道你是这个怎么样给我编出来了对不对,所以那样的话我就学不到东西,所以呢,我在这儿呢,都是给大家干什么呢?给大家这个就是从头开始,一步一步设计一个一个代码,一个一个字母去写,这样大家就知道我是怎么写的了,或者说我在写的过程当中呢,发现什么问题,大家都可以知道啊,所以咱们时间比较稍微的叫做长了一些啊,时间稍微长了一些啊,并且呢,这个。
01:38
呃,这个呢,我为了怕我讲的是错误的,影响大家这个一天的学习啊,呃,所以呢,呃,我就赶快下了个板,那么只要下版是正确的话呢,大家这么去做啊,应该是能出来,那么中间有没有什么小问题呢,不太清楚,那怎么办呢?我们今天啊就来教大家呢,就是如何去仿真啊,咱们这个工程啊,我先把这个工程先打开。
02:06
嗯,包括今天呢,呃,我也在网上又查了一下,说这个两个竖线之间到底是一秒钟还是两秒钟,这个我好像还是没有查到一个什么准确的结果啊,所以呢,在这儿的话,经过咱们的这个,呃,只能说经过咱们的实际测试啊,实际测试啊,好像是认为两秒钟比较合适啊,但是呢,无论是咱们认为是两秒也好,还是认为多少也好,咱们都已经学会怎么咱们都已经学会怎么样去这个。调节速度了对吧,到底是1/8秒走一个,还是1/4秒走音符,还是还是1/6秒走音符,咱都多长时间都可以调了,对不对,也就是说咱们可以干什么,咱们可以把咱们的这个叫做这个,呃,音乐分鸣器呢,哎,可以自己去调节这个速度对吧?就是播放这个,这个叫做音乐的速度,咱们是可以自己调的,对不对,那么这样来调的话呢?诶,咱们也算是比较好玩的一个东西啊。那么在咱们这个当中的话呢,我们把咱们的设计报告打开啊,咱们的设计报告在。
03:04
音乐蜂鸣器。就是咱们做前面这东西呢,都应该也有一个什么呢?应该也有一个叫做啊,叫做音乐蜂鸣器这样的一个报告是吧?那么在咱们报告当中的话呢,有什么呢?有四个模块啊,有四个模块,第一个模块是地址控制器,说白了什么,说白了就是说去控制这个叫做,因为这个叫做什么叫做音符输出的一个速度啊,就是地址多九加一对九加一,为什么呢?因为地址加一呢,它就会对应出什么输出音符嘛,因为我们的音符就在这个里边存着的,它就是个存储器嘛,对不对,然后呢,给地址输出数据,给地址输入数据,所以地址变化的速度就是music变化的速度,对不对,所以呢,地址多久变一个呢?我们可以说1/8秒,1/4秒,1/2秒,其实那其实昨天的话,我给大家试了1/8秒是1/16秒和试了1/4秒对不对,大家听了1/4秒的好像很正常对吧,大家也可以自己听一下1/2秒,我不知道大家做了没有啊,听个1/2秒那个就被拉长了啊,就被拉长了,那么地址的速度啊,是比如说咱按照最开始的1/8秒变化。
04:12
那它就是1/8秒变化一个,那它呢,也就是1/8秒变化一个,那它呢,哎,注意它可不是1/8秒变化一个啊,它是什么?它是在我们给的这个频率啊,就是说输出五秒,输出这个这个1/8秒的啊,这个3K赫兹啊,再输出1/8秒的2K赫兹啊,再输出1/8秒的呃,500K啊或者等等之类的,也就是说呢,它是每1/8秒变化一个频率啊,变化一个频率啊,是这样的,那么呃,这就是咱们的三个,那么呃,那么下面就来探讨一个最简单的一个问题,什么问题呢?就是说。很多人就在考虑说这个说这个,如果说呢,我们要去做整个设计是吧,那我们要去做整个的设计的话呢,那么我到最后肯定要仿真对吧,也就是说呢,我到最后得这个,呃,这个仿真一下,然后呢,我得这个看一看对不对啊,或者说呢,哪怕咱就从这个交代任务角度来说,很多人就说这个,那这个呃,那这个我这个这个这个写完这个设计以后啊,我写完这个设计以后,我得干什么呢?我得有个仿真图吧,就往报告上摆了个仿真图,原来仿真图也没有对不对,那好了,所以今天来教它干什么呢?教大家去仿真这个复杂的东西,这个这个东西呢,特别不容易仿真啊,这个呢特别不容易仿真,那么今天我们来教大家把这个一步一步咱们给拿下它,首先呢,我们来去打开这个工程了,是吧,那么在这个工程当中的话呢,我是没有写这个TB的,所以我们在新建malo OK。
05:44
File另存为。然后呢,我们来给一个。它然后呢是TB。下划线TB。
06:09
好,下边呢,我们做个例化啊,就是这些这一些步骤大家都懂啊,大家也都会,那么我慢慢慢慢往下来讲,大家就能够切实的体会到我在最早的时候说的那些话啊,很多人这个是仿真不出来了啊呃,这个包括大家在内,很有可能有一部分人呢,可能把对这个呢,学了这么长时间了,可能你也是仿制不出来,那么为什么可能还不知道,那么在这儿啊,我来给大家慢慢的来去讲解这里边这些东西啊,适中位。BP好时钟。复位。BP好,那么在这的话呢,我们写一个时钟,那么这个时钟呢,我们写的方法又比较多是吧,我在这儿呢,呃,之前是不是给大家讲过这个four了,对吧?啊永远是吧,永远循环,那就是说C2K等于一撇B0延时10CLOCK等于一撇B1延时时,然后呢是它然后呢是复位等于一撇B0延时201,然后复位等于一撇B1,然后我们写完了,那么当写到这之后,一大部分人就已经不知道该怎么办了。
07:36
该怎么办呢?我们都知道,那就仿真啊,但是呢,我们是不是又学过什么,就是说根据我们的想象。啊,根据我们的想法啊,如果说啊,我不去写任何东西的话,这个东西是不是就会无限循环啊,因为它是无限循环的,所以仿制就不会停止,那所以干什么。所以咱们要交了什么,交了一个大家一个任务叫什么叫Dollar stop对不对,那好了,那复位结束多久之后啊,就比如说在这儿我延时这个。
08:10
1000纳秒写个Dollar stop行不行?我延时1万纳秒写个多行不行?很多人行不行?什么叫行,什么叫不行呢?对不对,所以很多人就开始不不知道这写多少了,所以我经常说一件事,什么事呢,叫做就是说如果说不会写TB的人啊,这个在最早之前我就我就说过了,不会写仿真的人有两类人,第一类人。是什么?是我不会写这个代码,就这个代码我不会写,比如说诶你手begin end,呃,这怎么写出这个这个这个这个叫做这个这个这个时钟我都不会,那这种人呢,很好讲,很好教,为什么呢?因为你不会告诉你不行吗?那么第二种人是什么?就是不会写TB。
09:00
那什么不会写呢?你会写时钟这个时钟吗?我会啊,会写复位吗?我会啊,那其他的呢,我不知道,我不知道该怎不知道该怎么给,我不知道给多少。那什么都不知道给多少的人是什么?这种人是吗?就是我去了,就是没学到家啊,就没去到家什么呢?就是我来讲过什么呢,就是TB当中所有选什么是针对于你的设计中来的,对不对,你的设计当中是怎么样,你都不了解。那你就不写TB,如果你对你的设计了解了,你的TB1定会写啊,比如在这延时多少呢?注意你要对你的设计要有了解呀,对不对,什么了解呢?他还记不记得我们是不是有个地址控制器呀。我们的地址控制器当中,是不是每啊在这写1/16秒,我得改改成1/8秒。每1/8秒是不是走个音符啊,是不是每1/8秒走个音符啊,那好了,如果我每1/8秒走一个音符的话,那我一共有多少音符呢?我一共是不是有64个音符啊?按道理说我是有64个音符,对不对?那也就是说我需要走几秒钟呢?我需要走八秒钟,也就是说我需要走八秒钟才能够看得到什么,才能够看得到我的所有的整个谱子输出完,对不对?
10:18
这个没问题吧,所以在这怎么办?所以你在这儿要去仿真八秒钟啊,八秒钟啊,八秒多少呢?就是八_123。456。789,因为它的单位什么,因为它单位是皮秒嘛,对不对,也就是说需要干什么,需要仿真八秒钟才够,这是八秒钟嘛,那好了,那么我们为了看一圈多一点点,我们给个九秒钟啊,所以这个数你可以随意写,但是你得随意的,你得有点章法,对不对?好了,那下边我们来去做仿真,其实这个仿真啊,我们一做大家就会发现啊,我们这么做不合理。啊,其实在最早之前给大家已经讲过了什么呢?大家记不记得我们做这个流水灯也好,或者我们去做这个呼吸灯也好,我们是不是做过,我们一坐发现什么。
11:12
发现的就是这个。别说八秒钟了,比如说九秒钟了,就连一秒钟的仿真。它都需要很长很长时间出不来,所以怎么办?所以我们一般你把参数给干什么,给改小了对不对,我们把参数改小了,而把参数改小了以后,我们是不是就能仿真了,那仿真但是跟实际不一样,对不对,那怎么办?所以我们就说,只要我们能够确保这个计数器的位宽,它能够记录到那么大的情况下,那么我们给它缩小去仿真啊,就证明规则上是对的,那么到时候下半段给它放大,那么也是对的,对吧,到了现在,我现在啊,先不去改参数,我就先改这个。啊,先改这个,然后呢,我来去做一个什么,我来去做一个这个,这个叫做这个仿真啊,我来做个这个仿真,然后呢,大家来看一下。
12:02
他会怎么样?啊,他会怎么样,有人说他会一直执行下去,不会啊,他会报错。有人为什么报错呢?来看一下啊,注意出什么错误了,大家不要着急啊,什么呢,说arrow在这个TB的第31行出现了一个什么呢?现一个错误,什么错误呢?就是这个90000,它超过了默认的范围多少呢?32比特。啊,32比特。啊,那什么意思呢?啊,那也就是说呢,在我们的这个当中啊,就是我们写这个延时啊,他报错了,为什么报错了,因为它超过了32位,那么这个是多少位呢?这个数的话呢,它应该至少得34位或者是33位才够。那么它超过了32位,那怎么办?所以在这儿的话呢,有些人说,那我们不这么办,我们这么办行不行,这不延迟一吗?这不就一秒钟吗?这个数呢,它是在32位之内的啊,Repeat,我给你写个九啊,Begin and,这样可以吗?注意啊,这样就可以了,这样就不报错了啊,这样就不报错了,我们打开它。
13:08
找到library啊,这个给大家讲过是吧,就是不用关掉啊,然后呢,选中TB,你看他都没有编译出TB,那证明TB错了是吧,那么咱们把它关掉吧,又没有。关掉。人家编译TB错了,就证明没有编译到offer库里去啊,这个咱就不管它了啊,给它关掉,然后重新打开一下。啊,这种也是可以的啊,这种也是可以的啊,这个是不会超过32位的啊。那么如果说这样它呢不报错了,那么我们去仿真能得到什么结果吗?其实呢,你想一下,你也不可能仿真九秒钟对吧?啊,是不可能仿真九秒钟的,那么别着急啊,你不可能仿真九秒钟,那我就来,呃,一步一步的,咱们先看一下九秒钟什么情况,然后啊,大家就会不就改参数嘛,我来改啊,我改完之后不就对了吗。
14:04
注意啊,这个。这个仿真没大家想的那么简单啊,没大家想的那么简单啊,因为实际情况的仿真呢,呃,很多时候是相对来说比较复杂的,所以咱们把这个仿真好好给大家来讲一下。这个没错了啊,这个就没错了啊,很明显一看这个就没错了,对吧。也就说明它能够出波形了啊,它能够出波形了,那好了,它没错了,但是它呢,会一直在运行啊,它会一直在运行,并且呢,这个BP呢,也出现了我们所谓的什么呢,也出现了我们所谓的这样的高低高低变的一个波形啊,高低高低变化的一个波形,那么。这样的话,如果你一直要等到仿真的这个叫做这个九秒钟结束,那就需要很晚很晚了,对吧?那怎么办呢?我们给它stop掉啊,就这个我们不这么做了,那怎么做呢?我去给你修改参数去啊,修改参数,因为这个大家已经讲过了,对吧?诶修改参数也就是说干什么呢?我这样来做,就是我把参数给改小一点,比如说DEF啊不是,呃,重新修改参数,谁呢?它这个当中的注意啊,是从这开始寻找啊,它这个当中的谁呢?应该是ADDL控制器当中的注意都用的是实例化的名字啊。
15:27
然后当中的谁呢?是T1秒,因为这个是个参数,这个不是这个是local palm帮你改就改这个。好,那么如果只改这个的话呢,那么我们来把它TB写到这儿,等于多少呢?有人说你随便给,比如给个十不就行了吗?注意你别给十啊,你给十你就做不对了,为什么呢?就证明你还是没学到没没没有掌握好这个,如果这个你要给十的话,那我问你他除八等于几了?它除八是不是就等于一了,也就是说每一个周期变化一个,你这个还怎么玩对不对?啊,还怎么玩,因为一个就变化一个呗,你想你每一个周期,你每一个周期都去让ADR增加一的话,那后边还怎么去做波形的高低,高低变化它就压根就没有了,所以你这么做根本就做不对,所以在这儿怎么做呢?我们做一个比较好一点的,比如说我给你多少呢?我也不去给太少,我给你一个可以除以八除的进的,比如我给你个8000啊,我给你个8000啊,什么意思,也就是说1000个周期啊,1000个周期增长一个音符,1000个周期增长音符,那好了,如果是1000个周期增长一个音符的话,那么我需要多少个周期完事了呢?在这就需要大家自己写啊,就是说。
16:41
1000个音符增长一个64,我们一共64个音符,然后我总共要看两遍,好那么这一个里边呢,应该是一个周期,我这么来写好这么来写的话呢,它的时间呢,就会短很多啊,就会短很多好了,那么我们来啊综合分析一下,然后我们来看一下,有人说那你这么来做不就已经正确了吗?到底正确不正确呢?
17:08
其实啊,这个不得而知啊啊,这个不得而知啊呃,为什么呢?因为很简单,问题后边还会有一大堆的问题出现啊,后边还会有一大堆的问题的出现。啊,这个我们来先看一看啊,不着急。好,下边我们去放针一下。这个应该就能很快就能结束啊,因为它的时间现在这比较短。
18:00
好啊,它在运行是吧,啊,你看很快就结束了啊,它很快就结束了,好了,我们来点一下进去缩放好。有人说你这个是不是仿真结束了,对,仿真结束了,然后你会发现一个问题,它的bep不变了,就只从这儿,就只从低变到高不变了,这也不是我们想要的,比如说一会儿输出200赫兹,一会儿输出300赫兹,一会儿输出500赫兹,你的哆re咪发sola s,你的格呢,就就变化,这一下子线圈就震动,一下子就就完事了。所以很多人这就不对,这怎么不对了,这代码不对,因为你之前不讲过了吗?改变个参数结果还是对的,只不过同比例缩小了而已,你这个是个啥玩意儿,因雷缩小也没缩小,啥也没有,那这就不对了,对不对,就认为什么代码写的不对,那是不是代码写的不对呢?所以在这儿的话呢,就是有的人呢,就是在这儿就看不起,看不明白问题了,那怎么办呢?针对这种情况,咱不要着急啊,咱们一步一步来。所以出现问题,比如出现咱们这个问题了,他是不是波形错了,就是或者我们认为是不是波形错了,那好了,我认为波形错了怎么办,我先把结果删掉,我不要它了。
19:07
啊,然后干什么,然后我根据我所学的原理,原理什么,第一步进入到这个模块里边,我就先看这个模块有没有像我设置的一个一样,1000个周期,让地址增加一。这就是我第一件事儿啊,咱们做设计错了就要这么办,对吧,中。找到找到下边这个打开,找到ADR控制器打开。好,那么我们在restart。Run r一下。好了,结束了,结束了以后我们来看一下。放大放大放大放大这个波形应该能看得清楚是吧?好,那么我把count右键改成无符号位,好来看一下地址呢,我也改成无符号位。零一。23456789递增啊,一直到63啊,到到63啊,63之后再变什么变成一。
20:08
然后呢,再变成23456789啊就一直在变好了,那么那么它多久变化一个呢?我们在这横看到什么,看到它是一个均等的对不对?比如我们就从随便找个数,就从这开始,比如说我的57放大放大放大放大放大放大放大57的位置是零,这地方是999,所以很明显什么很明显是计数器等于999的时候,它变成零,它变成57了,也就是说我们确实是1000个周期加一。那也意味什么?意味着说ad drr的变化确实是1000个周期加一,这没问题,所以在这怎么办呢?我把ad drr放到上面去证明ADDR是对的,我把它删掉,或者我们把ADR删掉也可以啊。然后呢,我们再。选中第二个是music memory,我们把music memory找出来,好,Music memory找出来以后,我们再来一个。
21:04
因为下边干什么呢?因为下边他的地址给了谁了,他的地址呢,给到了谁呢?给到了这个叫做music memory这个里边,那么也就是说呢,我给你一个地址。你就要给我输出一个什么,给我输出一个哆瑞咪发sola西嘛,对不对,好大家看一下我给你的零地址,你给我输出的是这个模块,一地址这个二地址这个三地址这个四地址这个五地址这个六,就是这个70这个80这个对不对呢。很明显,我们可以去对一下代码。因为这个我们是可以对的啊。比如说这样。比如说我们的地址零当中,我给你地址是零,那么你就是三个零,110,后面三个零是这个值,没错,这三个值是一样,所以012就是它三。是这个值啊,三个01013个零没问题,四是这个011啊,三个零一个零两个幺后边三个零五也是这个啊,六是是这个值啊,六是是是这个值,七也是这个值,八呢换成这个值了,七九是这个值,所以你会发现呢,最起码前六个是没错的吧。
22:20
如果前七个是没错的吧,你再往后对都是没错的,那意味什么?那意味着我们输出的music也是没错的。啊,Music也是没错的,那好了,Music如果没错的话,那好了,问题来了。按照我们的设计,Music如果对了,下边应该什么,就是根据music去算出什么去输出频率,对不对,是不是输出频率啊好了,那下边我们来呢,找到。他找到频率,选中它找到这次我这么找啊,找到频率。添加进来。这有频率的,对不对。Restart run all。
23:03
好,我们来看一下。把这个频率呢改成无符号位。八百八七百八十四,695,对不对呢,我也不知道,看看我们的这个,呃,这个这个代码。在我们的代码当中。啊,如果是。中音的六,那就是这个情况,就是八百八没问题,八百八百八,如果是中音的五是784没问题。如果是中音的三,659。659没问题,如果是中音的五,784。也没问题啊,那如果是高音的11050,高音的11050也没问题,也就是说我们对了前八个,它输出的频率也是对的,比如说在这段时间之内,他就要什么,要的就是880赫兹,这一段就是880赫兹,这一段就是880赫兹,这一段呢是784赫兹,这一段呢是695赫兹,没错,这一对呢,是784赫兹,也没问题,那好了,那也就是说。
24:10
我们做的整个的这个设计呢,它到哪儿了,也就是说到这个。输出频率的位置就是这个我给你的频率还是对的,就是我给你的频率还是每1000个周期变化一次,对不对,我给你就是1000个周期变化一对吧,在这我们可以看到对吧,1000个周期啊,1000个周期变化一次,1000个周期变化一次,因为这个地址我们看过了,是1000个周期变化一次,对吧?好了,下面干什么,我们把频率找出来。我们把输出频率叫wave,它找到objects,我只找fiq,呃,不是只找这个波形叫bep,我把BP找出来。好,我找出BP了,好,找出BP我来看。
25:01
在这在这儿啊,应该说在第一个1000个周期里边,我要的是什么,我要的是880赫兹的方波,对不对。你给了什么?你给的我就是一条横线,这能对吗?这肯定不对啊,那就认为什么,就认为我们的什么做错了,我们的波形产生模块做错了,好了,那下边干什么,下面我们来把波形产生模块的所有的信号搞出来。波形产生模块object,好把CNT它它它全搞出来。好,出来以后呢,我们来一步一步来去看一下。啊,这个错错了啊,错了不要紧,但是你要知道怎么来找这个问题啊,那么按照我们的原理,第一步啊,这个叫做频率。没问题,八百八第二部分根据频率要干什么,干我们代码啊,看我们代码根据频率,首先第一件事啊,根据频率要算出来一半是多少,比如我们算什么,我算的是880赫兹,对不对,880赫兹应该是多少呢?我也不知道,来算一下它看一下。
26:19
它那个多少等于2840928409在这等于780等于多少等于三幺八八七六百五十九等于37936对不对,我也不知道啊,那不知道怎么办,计算器算呗。就算一个对不对就行了,因为咱们是公式对吧?啊,咱们就算一个对不对就行了啊,计算器这个找不着是吧?CC。好,那么按照咱们的公式什么,咱们的公式应该是。呃,50兆除以二乘以频率,那我在这里变成25兆除以频率,所以25兆除以频率就是二十五一二三四五六除以频率,频率是880,所以是880等于28409.09,而我取的是28409没问题吧?证明这个数没问题吧,是28409吧。
27:11
好,没问题,来看下边这个这个484,这个784,这个25000000除以784等于31887啊31887也没问题,后边这个呢,不用算了,肯定都是对的,那也就是说呢,我们计算什么,我们计算的这个值还是对的,那好了,那看这是不是下边就要考虑什么,CNT是不是小于T减一,好了,问题来看一下CT。CT是不是得等于28408的时候,这个BP才会翻转对吧?好来看一下。放大。你会发现在这儿呢,从这开始记数,记数,记数,记数,记数记数,记到这儿。啊,应该说记到这儿吧。
28:01
就在这个位置。也就是说它进入到这个位置,它等于多少才等于999呢。为什么到换我都已经要准备换频率了,你才等于999呢,那么很重要,那不就因为什么,不就是因为咱们前边。你给每一个音符的输出时间,人家本身是1/8秒或者是1/4秒,你现在给多少,你现在强行给的是1000对不对,强行给的是1000个周期对不对?而你只是把1000个周期,就是说一个音符数的1000个周期,但是你又没有改变。波形,这个波形是不是还是一个周期啊,就是说在这个这个这个算的是还是880赫兹对不对,你要想一个问题啊,880赫兹什么概念,就是我要输出一个周期,大概得需要1.2毫秒才够。
29:01
你现在就只给了我1000个周期,1000个多少,1000个周期也就才20微秒而已,这怎么可能给你付出啊,对不对?所以呢,从头到尾我们做的所有东西都没错,但就是仿真不出来。啊,这会反弹不出来,没办法,为什么呢?因为很简单,问题就是除非呢,你把你想要的频率也对应缩小1000倍。啊,缩小1000倍啊不,这都不是1000倍了,这倍率好多了啊,因为我们是1/8秒缩成了是这个1000个周期,1000个周期二就20微秒嘛,所以缩小太小了,所以你这缩小就没有办法缩小,所以这个呢,仿真你肯定仿制不出来。那就这么反对,肯定反应不出来啊,因为这个本身应该是1/8秒的,所以你的计数器呢,都还没有记录到28408第一个音符就结束了。这个一不就结束了,对不对,所以这个当中的话呢,他要掺杂这一点,所以很多人就仿真不出来了,那怎么办呢?所以这一段的仿真啊,我们要这么来做,怎么做呢,就是把BP删掉,把CP删掉。
30:03
把这个啊,我们把这一半这个留着好了,就只看这一部分对不对就可以了,说如果说我这一部分算的都是对的的情况下啊,都是对的的情况下,那好了,那我就有理由认为啊,有理由认为什么有理由认为就是如果说我当ADR的增长的是每1/8秒增长一个数的话,那我的刚才的计数器其实是可以记录到2840的。啊,28408的是肯定可以记录到的啊,是肯定可以记录到的,那么记录到以后我就会才让BP翻转啊,所以现在的话呢,你给的时间太短了,我根本记录不到这个时间,比如那我们能不能把这个时间缩小,嗯。那你如果是为了仿真再去缩小它的话,那么你给的代码给的太多了啊,给的太多了,所以这个呢,很多人就学这东西就仿真不明白了,因为出不来啊,在这我来说一下啊,它出不来的原因给大家解释了,就是什么,就是因为你把这一块给缩小了,所以呢,它的计数器根本记录不到。
31:08
28408,所以它怎么翻转,它不能翻转,它翻转它才错了呢。啊,它翻转来错了呢,所以它没翻转是对的啊,它没翻转才是对的,所以呢,这就是我们的一个今天要给大家讲的这个仿真,所以通过这个大家也明白了,如果我要去仿真的话,怎么仿真呢?我就是只给顶层写一个,然后干什么,我就可以把中间所有的型号都调出来,然后呢,一步一步去看哪一个对还是不对。啊,哪个对还是不对,所以在这儿这个仿真呢,我觉得难度固然是有,但是呢,你一定要对你的设计要知道啊,我的地址之前是1/8秒变化,现在呢,我是1000个周期变化一次,那好了,Music主1000个主机变化一次,IQ1000个主机变化一次,那好了,那么这个。这个half也应该是1000个周期变化一次,但是你会发现我的half的值呢,是等于两万多或等于三万多,甚至等于四万多的值,那你1000个周期也记录不到这么大呀,所以这是肯定的,就是因为我们缩小所带来的这个问题啊,缩小带来这个问题,那么怎么可以看到最后的那个变化呢?没有办法看到,怎么都看不到,除非你就真的去仿真什么,真的去仿真一个。
32:19
就是真实的时间,就是说不要什么不要1/8秒啊,不要把就是不要这个把这参数改小,那么在这儿我们可以最开始的我给大家做了是吧,那么现在我再给它改回来,就比如说我改成真实的,真实的就是不改变参数呗,就是它,那么这个的话呢,就是一个呃,这个就不够了是吧,这个应该是一个九啊,这个地方应该延时的是一秒钟啊,我们就延时一秒钟。啊,我们再改一下,然后改完之后的话呢,我来去干什么呢,我来去给大家呢,呃,去让大家看一下,看一下什么呢,就是看一下这个最终的这个结果啊,到底是不是我们想要的注意啊呃,在这儿的话呢,我不仿真太多啊,这报错了TB的第三十五行。
33:11
TB的第三十五行不期望有个N啊,这那就是这我们来给它加个分号就可以了。再看一下。好,没错了,好,下面呢,我们再来一个。呃,这个里边没有啊,也有BPBP在这对吧,我们放到这好了,再来一个。Run,好,此时的话呢,我们再来看一下。然后你就会发现什么呢,你就发现你这个地址啊是零一直都不变,它一直都不变啊,然后你会发现什么这个周期呢,一直在变啊,就BP它一直在变化啊,在仿真在变化。好了,那么我就仿真到这儿吧,呃,我先让他出下一个数吧,出下一个数好像1/8秒得仿真到125毫秒左右才可以出的来啊,仿真到125毫米,因为1/8秒是125毫秒啊,那现在仿真的吧,我先不管它了,我先放那。
34:14
好,再来看一下这个是不是28409啊啊28409那意味什么意思,那是不是就意味着说我们下面这个波形呢,是不是高电平占28409,低电瓶占28409啊,那我来查一下,选中它找到下一个变化,锁定添加光标,诶添加光标我们不去量第一个去啊,我们量后边的,选中它找到它好下一个变化。啊,我这是显示频率了啊,我把这个改回来,不让它显示频率。是0.56818毫秒,这个对不对我也不知道,你再算一下吧。计算器。V0是吧。28409乘以20嘛,等于568180568180的话是多少呢?呃,是568180纳秒,然后呢,是568.18微秒,那就是0.56818毫秒,是不是就是它。
35:24
没问题吧,然后的话呢,我们把这个缩小缩减掉,然后再拿一个光标出来,我们给它放到这个位置,选中它找到下一个变化。我们给它把频率显示出来,它可以显示频率啊,然后点击OK,多少880.003赫兹,就是你要的是880赫兹,我产生的是880.003赫兹,为什么?因为除不尽有小数嘛,对不对?啊,所以这样的话就可以了,因为这个中间的话呢,就是它会有1/8秒很长,你的记录器呢,就可以记录得到28408了,所以就足够反转了,好了,那么现在我来全局缩放一下,看一看票是多少,好啊,这个好像也看不到,因为这个一啊,因为在我们的这个这个歌儿里边好像是钱。
36:12
对,它前三个1/8秒都是一样的,只有到第四个1/8秒才不一样,那也就是要仿真到大概。1/8秒乘以1/42,那就是大概要仿真到五毫秒500毫秒左右才可以出现下一个。在这都二百八了,不着急啊,我们等一下啊,就这一段期间,它的所有的都应该是我们所谓的那个880啊,赫兹的波形才对啊,那么再往后我们不着急啊,来等一下。现在才320,所以你这个要仿真这个的话呢,也不好看,另外到最后你去截图啊,你也截不出来什么,因为太密集了啊,因为它就是这样太密集了啊,所以你也看不出来什么,所以这个呢,大多数就是一部分叫做原理分析呀,这么来做会比较好一点。
37:05
啊,这才三百六啊,好慢。012,其实到三出来一点点,我就可以看了。啊,因为我们的三里边儿是对的啊,三的值是一百一百零一嘛,对不对。应该快出来了,好三已经出来了,好了,你看三的值都已经发生改变了,对吧?放大放大放大看一下啊,三的值已经发生改变了,三的值改变以后,你来看一下,你说这个波形和这不有什么区别吗?好像大眼一看看不出什么,但是你会发现这个呢,这个是31887,这个是28409,那么来看一下是不是31887呢。放到这儿。选中。锁定天涯光标。添加光标。放到这儿,放到这儿。下一个锁定。然后呢,我们给它改成。
38:00
不要他改成那秒吧,这样不用我们去算了,那秒好是637740,那31887乘以20是不是637740呢,我也不知道。算一下。31887乘以20等于637740637740没问题,好,那么下边看频率对不对。频率的话得放到这儿,因为选中一个周期嘛。锁定,然后呢,我们给它改成频率,频率确定784.019赫兹,我们要的什么?我们要的是784,我给出来是784.019,也就是说你要的784赫兹,我给的是784.019赫兹,所以我们这个除不尽所造成的误差,但是这个误差呢,呃,就是对我们的声音影响相对来说比较小啊,没有什么太大影响,所以这就证明什么,就是你看这个和这个赫兹呢,这个是880赫兹,这个784赫兹,如果你真的去看这个长短,我估计你是肯定看不出来啊,那怎么办呢?你只有说那个光标。
39:13
放到这边啊,放到这边选中找到上一个变化。在这儿吧。选中找到下一个变化,然后锁定,然后添加光标。然后选中它找到下一个变化,然后锁定好了,这边是很明显是880点赫兹,再往这边拖一下,这边是784.019赫兹,那这样的情况下呢,你就才可以对比出来啊,我换了一个地址,换了一个音符,换了一个这个音符对应的频率,然后又根据频率算出它的半个周期的值,然后再根据半个率到了就取反,最终我得出来两个值不一样。所以但是你来看这两个差距好像没有多大是吧,没有多大啊,我给他停了啊,要不然他就一直跑。
40:07
啊,那么在这才能看得到对不对,看到也就是这样的话,我们才看到什么,看到下边这个值在变化,但是这个值这个这么变化,我估计你也看不出来什么,比如说如果说要真的想看再看一个,因为这有仿真出来一个,比如这个仿真出来一个四对吧,四这个多少,四这个我就这样吧,我就不再去测它具体多宽了,我就直接给他测频率啊,这个频率是659。选中它,找到它,找到下一个变化,锁定,添加光标。找到这儿选中找到下一个变化,锁定输出的是695.005赫兹,他要的是659,我给的是659.005,所以这样的话呢,对于我们来说,就是我们都可以给出来一个很接近它的频率,但是这个得益于谁呢?这个不得益于我们那个算法啊,这得益于什么呢?这个得益于其实我们要的频率要比50兆要远远小于它,那么这样的话呢,对于我们的误差就会变小啊,误差就会变小,如果你非常接近50兆,其实我们的算法出来之后呢,都是不对的啊,都是不对的啊,因为它的误差就会变大好了,那么这个啊,就是我们今天啊讲的这个仿真里边的一些啊技巧也好,或者说一些啊,让大家能够看得到也好,其实呢,现在我大概仿真了有。
41:35
600吧啊,不是大概有个700或者到800左右的一个毫秒啊,反正到六啊六百五啊,我反到650毫秒,其实这对于唯以我是台式机啊,所以对于我来说,我的仿真可能还算顺利,这个步行爬的还算顺利,我觉得对于大家的笔记本来说啊,如果大家是用笔记本的话,对于大家笔记本来说,仿真到这儿我估计已经很困难了。
42:01
啊,我估计已经很困难了,嗯,我的个人建议是如何来去改变这种现状呢?就是你可以自己偷偷的把第一个音符改成什么,改成另外一个值,比如说在这个叫做。呃,Memory这个位置,你就把第二个音符,比如把这个改成什么,改成101啊,你就别告100,就是你家第一个和第二个不一样,然后你反制出两个,你就可以去测量它的不一样的地方了啊,要不然的话呢,你可能还需要仿真,像我似的,你必须要仿真出四个出来,因为必要仿真到这儿出来,因为上面三个是一样的,你看不出来什么不一样的地方,所以这样的话呢,诶大家就能够明白了,那么今天这个仿真啊,我觉得才是教大家呢去,如果出现错误了,我们应该怎么去分析,然后分析完分来分析去,到底是什么地方不对了啊,我们应该怎么来修改啊等等,这个里边为什么啊,当然了,这所有的一切必须要得益于一件事,就是你对设计要了解,否则的话呢,你就会得不到任何正确的结果啊,因为你不会分析啊,对不对,那么分析的最重要原因就是你要对设计了解啊,你要对设计了解好了,那么这个就是咱们的一个啊,叫做音乐风鸣器啊。
43:17
啊,这就是咱们音乐风器的仿真啊,如果后边的话呢,呃,有同学要去做这个的话呢,那么对于这辈的仿真一定要理解清楚啊,不是说下板对就好了,那么一定要理解清楚,因为后边还有很多我们需要什么,需要我们去仿真的啊,这是我们的这一步啊,这个在我们这一当中啊,在我们这一步当中啊,大家可以呃这个看一下是吧,里边有没有什么样的一些啊问题啊,里边有没有什么一样问题啊,最主要还是对设计的这个了解啊,还是对这个叫做啊设计的这一部分了解啊,这个还是相对来说比较重要的啊,相对说比较重要的好了,那么呃,这是我们的这个值啊,这个是咱们就不再讨论它了,那么呃,今天的话呢,我们对什么呢?我们对这个,呃,咱们前边的很多的设计呢,咱们简单做个总结啊。
44:17
啊,咱们简单做个总结。好了啊,那么咱们大概学到这个27左右啊,就是音乐蜂鸣器的位置上,那么呃,学到这个位置的时候呢,我们现在大家呢,基本上已经学了有将近小一个月了吧,应该说呃,没有一个月也得有二十三四天了,那么呃,在我平常的线下去学习的时候呢,我一般情况下会给出一个呃,就是大家学习能力的一个时间刻度出来啊,什么时间刻度呢,就是说大家大概啊,就跟着我一起来学啊,大概当你学到一个月的时候啊,就是一个月啊,我说的是一个月的时候,那么所有的人啊,要求必须要干什么。
45:17
呃,要求必须要能够做一件事,就是你所写的所有的代码不能够有任何的语法类的错误,必须要会写TB。必须要求能够会写TB,然后去仿真出波形。啊,然后会仿制出波形啊,这个是要求必须的,就所有人必须要毁些TB啊,要会能够实现设计当中没有任何的语法错误都能出波形,至于波形对不对先不说,那好了,那么大家这一个月一定要有这样的一些能力啊,那么紧接着大家还应该去对另外一分能力,因为另外一部能力的话呢,是咱们大家不断去练习,不断去做的一些事情,什么事情呢?第一个就是只要你有想法的话,你能不能够把你的想法用vload代码写出来。
46:11
比如说你的想法是个状态机,就这么来做,这么来走就可以了,那么你能不能够用VR log语言把你的想法写出来,那么这个我会一直在讲,因为这个是可这个叫做什么这个这个这个有这个这个思路,或者说有这个这个这个这个教学的顺序是可以讲到的,那么对于说那个想法怎么来,那只能是大家多练习,多分析,对于某些接口或者对于某些东西应该怎么来做,这个是自己要知道的啊,这是自己要知道的,那好了,那么还有另外一个能力什么呢?就是说当你仿真出波形以后,你自己要明确的知道这个波形对还是不对,以及要能够通过看波形发现自己的代码哪有不对,往回返返到代码哪部对上,不要去看代码对不对,要看什么?要看波形对不对,波形不对了,是代码不对了。
47:04
啊,注意啊,代码没有错的,代码一定是对的,或者说代码和波形之间一定都是一一对应的,所以波形不对了,代码就是不对了啊,要从这样来分析啊。那么对于大家来说的话呢,学了这么长时间。大家呢,一定要认认真真的去做我之前说的所有东西,包括这个自动售货机的,我给大家之前做的一个拓展啊或什么之类的,大家都可以去做啊,大家都可以去做啊,那么呃,从今天开始,我为什么在这儿要给大家。就是说要去这个,呃,这个叫做这个,这个就是就是总结一下呢,因为咱们前边大多数呢,做什么做的是一些基础,然后呢,也做的是一些初级的东西,或者说也大多数做什么做的都是一些输出类的,比如说我们做什么,我们做了流水灯。
48:04
啊,我们做了这个呼吸灯啊,我们做了数码管,我们做了音乐分频器,那意味什么?就是我们做了大部分输出控制类的,那么也就是说从今天开始啊,从今天开始,我会从今天开始我们往下来讲,那么我们下边讲的所有的东西啊,将不再是上边那样,就是说我直接哎要做一个小模块,所以我要怎么怎么样,我要做个小模块,所以我要怎么怎么样不是了,那么从今天开始,我往下讲的所有的东西,我都是会给大家什么呢?就是直接我们要做的就是一个现实当中能够使用的一个东西,然后呢,我们从现实出发,然后一步一步的往里来抠,看怎么样能够实现这个功能。啊,能够怎么样实现这个功能,好了,那么呃,今天。啊,今天我们先来做的第一个啊实验啊,第一个实验叫什么呢?叫按键计数实验啊,叫按键技术实验啊,什么意思呢?呃,在这儿我们来给大家来看一下啊。
49:24
嗯,稍等一会儿啊,我这个好像又出bug了。停止视频,OK。好,那么呃,今天要做什么实验呢?就是说我们开发板上呢,有这样的叫做这么多按键,对不对,比如说这是数码管对吧,那我今天要做的一个实验就是什么?就是说比如说这这两个按这个按键吧,我按一下这个按键。这个数码管的数字就加一。
50:00
我按一下这个按键。这个数码管就加一,我按一下按键,这个数码管就加一。怎么做?啊,这是我们今天要讲的第一件事儿,怎么做这个事儿啊,然后呢,我会把这个实验逐渐去做拓展,有人说那这个摁一下数码尾就加一,摁一下数码尾就加一,那岂不是很简单,那我们就做呗,好了,那么下边我们来做啊,我们就是说我就按根据大家的这个思想,咱们一起啊,一步一步的往前去更新啊,往前去做咱们的这个设计。我先把这些之前讲的给关掉啊。这个就不管了。好,OK。
51:00
好,那么来做啊,按键计数叫keyy_nu啊,我就写了一个,就这个名字啊,叫key-nu啊按键技数好,那么下边来做第一个啊,这是我做的第一个版本啊,我们可以叫做这个key_nu_V1啊,这是咱们做的第一个版本啊,因为我会做好多个版本啊,咱们这个估计可能会做。呃,这个我感觉啊,可能会做这个不下这个,呃,六七个版本啊。Doc。呃,叫做RTL。然后呢叫QPR键,好,下面我们来写。第一个啊,叫做这个,呃,案件案件技术。
52:06
设计报告。啊,那么下边我们来去写这个案件技术的这个设计报告啊,那么一般情况下,今天的话呢,教大家去写一些稍微来说就是正规一点的啊怎么做呢?呃,一般情况我的习惯啊,就是说用宋体是吧,然后呢,写一个文,比如我一般用四号字来表示吧,啊然后呢,我就会往下去打两页啊打两页啊要不然画图不方便,然后呢,在这个第一页的啊,第一页的稍微的正中间的位置啊,然后给它居中一下,写个什么呢?写一个叫做按按键啊技术啊设计报告,然后把这个的话呢,你可以选中,然后CTRLB,然后放大CTR壁纸加粗啊好了,然后呢,在倒数第二行或者倒数第三行吧啊倒数第二吧或倒数第三都可以啊,然后怎么做呢?倒数第三吧。
53:12
到第三,然后居中,居中什么居中是这个啊,这个有快捷键啊,CTRL加E啊,我一般就会用快捷键CTRL加E,直接CTRL加E,然后写个名字,比如说呢,呃,就写我自己的名字是个。写个名字,比如说我这个好去帅,然后呢,在这儿的话呢,我会写入一个什么,写一个地址啊,比如说我会写一个呃地址或者公司对吧,河北呃这个点啊,石家庄点三星智能。好,然后呢,这个地方呢,我会写入一个,呃,插入一个日期啊,然后呢,我们日期选择这个英语的这个吧,我一般用这个比较多一些啊,用这个啊,这就可以自动更新啊,那么也就是说,如果你的报告啊,你每天都会自动去更新啊,就是说你现在自动更新确定这就是2020年6月11号,如果你明天打开它会自动更新成2020年6月12号。
54:12
啊,那么一般情况下我会选择自动更新啊,自动更新,然后自动更新结束,就是我就开始写这个报告,然后呢,我每次去写都打开它都它都会自动更新,因为我可能需要好几天嘛,那么然后呢,等到最后的时候,我记住这一天,然后我来干什么,我就会把这个日期的话呢,生成个PDF,它就不变了啊,生成个PDF就变了。好了,那么在这儿的话呢,第二个在这儿我姓什么呢,叫做。叫版本目录或这个版本说明啊,叫版本说明,那么这个版本说明的话,一般情况下会变成这个一号字体啊,就是不是这个标题一啊,变成标题一啊比较好一些啊,然后的话呢,我们再来在这个位置啊,在这个位置插入一个表格,然后这个表格的话呢,一般情况下我会写这个呃四列啊,至于说有几行都无所谓啊,第一行叫什么叫版本啊,第二行叫作者,作者啊这个呢叫修改啊,这个叫备注,然后第一个呢,比如说我们是V1版本对吧?啊作者啊,写成我名字,然后修改呢,出版啊就是出版啊,出版什么呢,就是说第一版嘛,对吧,然后呢,备注就不用写了,那么再往这个位置的话呢,一般情况会打入一个插入一个分页,就分到下一页去,可能分到下一页有什么好处呢?就是你每次再去这本。
55:38
再加一格,再减一格的时候,它不会影响整个东西,因为这永远是分页的,这这个中间是没有东西的,都给他来用了好了,在这的话干什么呢?啊,再有一个叫引用,你这有个目录啊目录啊,然后呢,你也可以在这儿干什么,就是在这儿插入啊,在这儿开始你自己可以写叫目录,然后把这目录呢,也设置成一号字体,然后在这儿再引用目录,引用自动目录啊,我一般引用自动目录啊,自动目录就可以了。
56:11
啊,自动目录啊,那么这样的话呢,它会自动的版本说明在第二页啊,目录在第三页啊,我们也可以点击视图,只有只有这个文档结构,它这会显示版本目录啊,这个版本说明目录,它这个就会显示在第几页啊,这都是可以的啊,这都是可以的,好了,那么呃,下边的话呢,我们在这个目录的最下边啊,再插入一个分页好了,那么也就是说在这个位置的时候,我们终于可我们写这个标题一了啊,标题一就可以写了,我们写什么呢?啊,我们第一。啊叫设计或者叫做按键技术的设计,设计要求啊,按就是计要求啊,那么在这的话,设计要求有哪些呢?设计啊,设计一款啊,基于FPGA的按键技术功能的电路啊要求。
57:22
啊要求啊,这个呃,叫做这个外部按键按下。一次数码管显示数字增加。一啊,从。零开始增加。增加到啊,这个一九九十啊,我们就随便给个数字啊,就一九九十啊,这个再次啊,按下按键时啊,数字自动清零,也就是说呢,我们相当于写了一个就是能摁200次的一个按键,摁摁摁摁200次又变成零了,按200次又变成零了,对不对,就就就这么一个要求啊,就这么一件事儿啊,怎么来做啊,怎么来做啊,有就人说那这个有什么用吗?其实呢,这个的作用其实还蛮大的啊,这个作用还蛮大,因为有的时候呢,我们可能记录不到这么多,你比如说大家坐飞机的时候,有没有一种就是这个,呃,这个叫做这个空姐是吧,你每次坐飞机坐在那儿,他会起飞之前会有好几个空姐从你身边过,然后他会点头,其实他没有在给你点头,它是在数数,然后他数数有123456789。
58:51
但是他会数吗?他不数他怎么办呢?他手里就有这样一个设备,但是他的设备是机械的,他设备不是电子,是机械的,应该是机,我如果没错,他应该是机械的,他就是看到一个人摁一下,看到一个人摁一下,看到一个人摁一下,到最后看一下手里一共有多少个人啊呃,总共坐了有200个人,好就是200个人啊,他是他不是用数数的啊,他是用摁的,那么这样有什么好处呢?就是说他在查人的时候,你给他说话,他能直接停下来啊,他能直接停下来啊,然后他这个数也不会乱,跟你说话也不会乱啊,它是这样的啊,它我它应该是解,我不知道它是不是电子的,这个咱没有见过啊,没有见过,但是呢,这个功能啊是可以出现的,好了,这是咱的要求嘛,要求比较少是吧,要求好了,那么要求结束以后呢,我们来做这个。
59:37
我们也可以插入一个分页,然后在我们的第二个。啊二啊,比如说我们叫做设计分析啊,也就是说呢,你提出要求了,那我不得分析一下吗?对不对啊分析一下啊,那么在这儿呢,我们说啊该设计啊方案啊采用啊某某某啊,比如采用这个好一帅的FPGA实现来开发版啊,FPGA开发版实现啊然后呢,利用啊这个开发版的啊数码管啊当做显示设备啊,利用啊这个外部按键啊,当做输入设备。
60:31
啊,他们输入设备啊,这就结束了,对吧?啊这就结束了,然后呢,这就是一个简单的分析啊,然后呢,分析这个干什么,就分析这个就是,然后再往下分析什么呢?就是啊该开发板啊该开发板啊的数码管,北动阳极数码管啊,供阳极数码管啊或者供阳极数码管啊然后呢,呃,采用动态驱动啊然后呢,这个呃,开发开发版的晶振为50兆赫兹。
61:14
啊,我是兆赫兹按键按下时为低电平释放室为。干电瓶。喂,钢晶屏好了啊,这就是说我们对整个开发板,我你这有电路图的话,你可以把电路图放到这儿啊,就是说呢,哎,就是做出来这样的一个分析啊,就是说我们根据它提的要求,我们分析了一下啊,我们用什么实现,然后呢,我们实现的话呢,用的是数码管啊,就这个外设,就是这个外设,它的驱动原理是什么?哎,它的这个外设驱动原理是什么都搞明白啊,那么这个外设驱动原理呢,这个呢,其实按道理这应该写蛮多呢啊,这个地方应该写蛮多的,为什么,因为采用动算驱动,什么动态驱动呢?数码管原理是什么呢?咱们之前不是讲了很多嘛,就那堆原理嘛,对不对,好,这个就是它啊,这就是他啊,所以再往下呢,我们在这儿啊,这个地方我就不写了啊。
62:14
插入分页,诶就错了,插错地方了,这个地方分页,然后我们再来说这个。这一项啊,第三叫什么呢?叫做啊这个。呃,架构设计啊,架构设计,那么这个架构的话呢,我们来去分析一下啊,这个架构的话呢,就是啊,根据我们之前呢,根据我们之前所做的一定要知道,比如说啊叫3.1。啊,这是我们的第二个标题3.1啊,叫什么叫顶层。顶,或者叫做这个硬件连接。
63:02
示意图啊,有的时候我也会做这个硬件的一些示意图啊,什么呢,就是我们来画框。叫做FPGA啊,这是我们的一个FPGA芯片嘛,对不对。居中啊,这是IP芯片啊,然后呢,我们除了IP芯片以后呢,我们还有什么,还有就叫做clockck clock。啊,这是我们外部的一个晶振,啊,这是外部的晶振,那么这个晶振呢,是50兆赫兹的。哎,这括号怎么到这儿了,就那就这样啊,50兆赫兹的啊,然后呢,我们这儿呢,还有什么,还有的就是这个按键。啊,当然了,这什么叫做有?
64:10
好低点有效,那么这样的话呢,我们就可以说给他去画。因为是50兆的时钟源嘛,所以你产生的这个晶振肯定是一个50兆的,那么在这儿我们来插入。嗯,啊,单位不能是米是吧。好CK好了,那么根据这个呢,我们再往下边。啊,这个呢,叫什么叫复位,因为我们要用按键模块来提供复位,那么还有一个什么。还有就是我们想要的按键对吧,那么按键由于也是低电平有效的,对不对,我们也写一个K-N啊,这边可能对的不太齐是吧。
65:10
好,这个也可以处理一下。好,那么然后呢,这边呢,这边是数码管模块对吧?那么这个数码管模块的话呢,给大家已经讲过了,对吧?数码管模块或者就数码管电路好了,那么它数码管的话呢,那么它的驱动是什么呢。它的驱动的话呢,我们是不是已经之前已经讲过了,应该是seve_tu be啊,下划线EL-N啊,这个我的输入法都记得啊,我老输入这个值。这个是什么?这个是这个叫做呃未旋端是吧,应该是六个数码管,应该是五套零的。
66:05
好,还有一个啊,是我们的叫做段选段啊,应该是七到零的。好了,那么这个呢,就是我们那个叫做什么叫做硬件连接示意图,就是说我们实现这个功能一共需要什么?一个精振连,就是两个按键中间一个IP芯片,然后再加上一个数网感电路,数码电路就是这样的,那就是硬件连接示意图嘛,对不对,那好了,那么。硬件连接示意图做完以后呢,我们来做这个3.2,那么这个3.2的话呢,我就在这儿直接跟他做了,在这儿没有去解释啊,你在这你也可以去解释一下,比如它是什么,它是什么,它是什么都可以解释一下啊3.2。标题二啊叫什么呢?叫做顶层设计,嗯,啊顶层设计,那么这个顶层设计呢,其实就是什么,其实就是这个呗。
67:04
复制一份出来就行了,其实就是这个,这不就是顶层设计嘛,这因为就是ipg嘛,所以我们叫K_ne um啊,下划线V1啊,就我们做第一个版本啊,我们可以叫唯一也可以不叫唯一啊,都可以,或我们就不叫唯一了啊就这样。好了,那么这就是我们的顶层嘛,对不对,这就是我们的顶层,那好了,那么根据我们的顶层啊,有了之后干什么,我下面干什么,该去写这个叫做它的这个,呃,架构啊,我们在这。的题二叫3.3啊,叫架构设计,架构设计,那么根据我们的想法的话啊,根据我们的想法的话,我们来想象一个问题啊。首先让你去做按键技术,你会怎么做呢?是不是首先有个什么,是不是以前有个计数模块啊,计数模块啊,就是它呢,能够干什么,能够把数字给记录得住,对不对啊,就是计数模块,我们在这写个计数reco record number,我们叫record这个那啊这个模块,然后的话呢,这个模块呢,它要给谁呢?他要给了叫做数码管驱动模块,大家还记不记得我们的数码管驱动模块,其实我们已经写完了。
68:32
啊,我们的数码管驱动模块,其实我们已经写完了啊,我们已经写完了啊,那好了,那么在这儿的话呢,我们来去搞两个。
69:04
我们给它往外移一下,好,那么这个record的模块,它是记录记录数字的对不对,是不是记录数字的,那好了,现在的话呢,他记录数字能记录多少呢?记录数字是不是就是记录这个,按照我们所说的就记录这个叫做零到199啊,那么零到199的话,这个数字应该什么,这个数字应该是。呃,八位就够了对吧,因为八位的话能够表示的下是255啊,七位能表示到129,所以八位就够了,好,那如果八位的话呢,那是不是对于我们来说,是不是它就会输出一个八位的数字,对吧?是不是给了模块啊,好,我们来给了他。所位的数字,八位数字,我们然后呢是到。
70:06
啊,那么大家都知道什么?大家都知道是对于我们的数码管模块来说啊,大家如果要是还清楚的话,我们当初写的数码管模块是什么?是一个数码管可以点亮任意的四位二进制啊,一个数码管可以点亮任意的四位二进制,那么对于我们说上有六个对吧?六个方点少点量是八位,不是量是这个四六二十四位对吧?那么我们一共只有八位对吧?那怎么办?是不是还差16位啊,那么这16位我们接什么?这16位我们直接接个零就好了啊。比如它的16位,我们直接接零就好了啊,所以在这啊,我们还要再输入一个。叫做16撇地零啊,就是我们还会输入16撇地零,就是给他凑成一个24位啊,这个是咱们是知道的啊,啊这是咱们知道的。
71:01
好,那么这个是复位。这个是,那么最后边呢,他要出的就是这。好,他要输出的就是这两个啊,就输出一个,呃,未选一个选。好,然后呢,我们把它置于这个。哎,选错了。放到这个底层,然后给它呢换一个颜色好OK啊,那么这个呢,就是什么?这个就是我们的一个设计的一个模块,我们把它呢放到这叫做K_ne nu好了,那么对于这个设计来说的话呢,我们这个数码管驱动模块其实早就已经写完了,对吧?那对于这个来说的话呢,对于这个是不是就是说外部的按键只要按下它就干什么,它就加一对不对,是不是只要按下就加一啊,那么什么叫按下呢?根据我们的分析的话,是不是K-N。
72:35
为低电瓶就是按下呀,这就是我们想的对吧,因为K电瓶K高温的话呢,它的高电瓶是释放,低电瓶是按下吗?这就是根据我们的设计原理不写了吗。对不对,按下是低电瓶,释放是高电平嘛,所以干什么,所以我们按下啊,所以我们按下就是低电平嘛,所以我在这模块题不很简单嘛,就是检测到它为低电瓶,就让那么加一,否则。
73:03
就让他们不变。对不对,或者说检测到它为低电平,我就判断,那么是不是小于199小于六加一,否则就清零对不对,是不是因为它等于零就是按下嘛,对不对,所以这就检测什么检测它是不是按下对吧?好了,那么这么来做对不对呢?我们觉得是对的对吧?那好了,下边我们来分析一下。我们就把整个代码给大家写,写出来啊。这是咱们设计报告就做完了嘛,因为这个就是等于零就加一嘛,所以这个这个就比较简单了,对吧,所以这个就不用写了,或者在这儿你要愿意写一下就可以啊叫什么呢?叫做这个三,呃,不是3.4啊,叫做呃。哎,我这三是啥来着,三是架构设计是吧,那我再再再再搞一个出来。
74:06
插入分页在这儿啊,我们搞个第四个啊四。啊四啊,然后呢,就是具体实现啊,那么具体实现的话,我们4.14.1啊四一应该是标题二啊4.14.1什么呢,就是具体时间,什么叫做这个record re Co,诶,Re COD record,那啊设计与实现好了,那么这个模怎么实现呢?这个模块就是根据我们的设计就是什么,就是这个呃判断啊K-N啊是否为D电瓶啊弱为低电平则。断,判断nu是否为。
75:03
啊是是否小于199啊,小于199则加一啊等于199则轻零啊若为,如果为啊高电平则那保持不变好了,搞定了,这就是咱们的一个设计嘛,对不对啊然后呢,这个针对于这个4.2,然后呢,关于这个叫做呃seven下划线啊下划线诶下划线tu_div divrive啊设计与实现,那么这个模块设计实验的原理我就不再讲了啊这个咱们最开始之前已经讲过了,对吧?这咱不再讲了,那么写了这么多对吧,还没有写了十多页了是吧,虽然没。
76:03
这几个字啊,但是大多数都被我省略了,点一下更新目录,更新整个目录确定。啊,目录就出来了啊,这个到时候你们写论文肯定管用啊,就是更新一下目录就出来了啊,然后呢,这个还是在最开头啊,因为这一定要加分页,这不加分页你一点更新这个地方就被顶下去了啊,加分页之后就不会了,好了,那么下边的话呢,我们来干什么呢?我们来去做这个这个设计。过了。KV衣。QPR。在这呢,其实我们不叫这个卫衣啊,我们在这给它删了我们就就可以了。
77:29
好,新建lo OK另存为。RTL。Na,好了,那么就按照什么,就按照设计报告写代码呗,设计报告里边第一个看这个顶层设计啊,这个点一下别的位置是吧,按一下这个。输入时钟有效复位按键有效,输出C2杠有效六五到零啊C杠七到零啊,这写大家代码就可以了啊,输入的话有失周,输入的话有复位,然后啊输入的话还有我们的key-N,然输出的话有我们的五到零的。
78:41
EL-N,然后还有我们的七到零的SE的SE感好了。综合分析一下,看一下跟我们写的是不是一样啊,五到零的四杠N,七到零的C-N啊,输入时钟复位和按键都是K,都是感恩的,好,OK,没问题啊,这就证明咱们的这个顶层做完了,那下面干什么?顶层做完了以后,该下一个就是架构设计呗,第一个叫record number这个模块的话呢,呃,我们要。
79:21
自己去写,因为没有嘛,对不对。所以新建lo OK。File另存为。RTL叫Co。RD。好,那么输入有这个十周,输入有这个数位,然后输入呢有这个K-N,然后输出呢,有一个是八位的number是吧?好像是啊,看一下时钟复位黑万杠输出有一个NUMBER7到零啊七到零。
80:19
我是不是写的零好,OK,没问题。绿化粘贴。好,连线十周。复位。
81:00
嗯,K杆和我们的叫做。这个是到的好了诶。好,综合分析一下好了,那么下边的模块是什么?下边的模块应该是我们的数码管模块,这个模块我们已经写过了,对吧?所以我们已经写过了,那怎么办呢?既然我们设计过了,所以我们就可以直接去找我们的代码了啊。所以七段数码管的驱动打开找到RTL啊,我们最终版应该是这个啊,最终版应该是这个,把它右键复制一下,复制到我们的key name-V-RTL这个里边去粘贴。好,然后呢,我们把它呢,给这个添加到工程里边。
82:13
好进来了,进来以后呢,我们要对它干什么,要对它进行一个替换。啊,在进行绿化,所以呢,大家要干什么,就是说,呃,如果说我们是做项目开发的话呢,你会发现有的时候呢,我们会用得上之前大家已经开发过的东西,那么你就必须要对你开发过的东西呢,可能要相对来说熟知一些,如果不熟知怎么样,那也无所谓啊,回去再看呗,那么此时看什么就只看接口就行了,也就说我也不知道我以前写的啥玩意儿,那怎么办?那就证明你以前写那东西没有报告啊,没有没有好的设计报告啊,你要有好的设计报告你肯定都知道啊,因为设计报告里边都会清楚的记得每个端口是干什么的,它的时序是什么样子的啊,都要去换啊,都要去做好,那么按照我们的规定是吧,中位。
83:13
啊,Date是24位的对吧,那么在这写个微拼接啊,多少呢,就是16撇D0,这是我们的规定是吧?Nu,那因为说前面的四位数码管显示全零就完事了,对不对,后边的数码管显示什么才显示的是,那对吧?好了,那么就是C-N。和我们的S感恩。好写完了,写完之后呢,我们进行一个综合分析。啊,这个的话呢,我们来呢,就是说这个都呃无所谓的事情嘛,对不对,诶就是说呢,我们可以这个呃直接去做这个事情就可以了,那么在这个当中,关于数码管的话呢,数码管这不是还有一个叫做呃一毫秒嘛,其实我们仿真的时候可能仿真不了这么长时间,那怎么办?由于这个拈是个成熟的模块,所以呢,我就基本上不会再去仿真它了,那我仿真谁呢?我就会仿真那对不对啊,这个好像复制粘贴多了,在这啊我就会仿真这个nu对不对啊,只要这个呃,这个number啊um值是对的,那我就有理由认为这个是对的,因为这个我们已经做过了,对不对,我们已经尝试过给它什么值,它就会显示什么值,这个我们之前是做过的,所以现在的话呢,我仿真其实我也不看这两个东西,我也只看中间变量nu对不对,只要对我就认为是对的,Nu不对我就认为就不对了。
84:46
啊,这个就这个就是我们啊对之前模块的一个叫做啊调用啊调用好了,那么下边的话,咱们来干什么,做个仿真呗。看一下RT吧。
85:03
啊呃,确实跟我们想的一样是吧,前面时钟复位啊,这个复位,然后呢,这个按键输入产生一个七到零的值,然后呢,这又接了一堆D,然后凑成了24位,然后给到他,他做输出对吧。这个跟我们画的可能有点不一样,因为我这是没有说没有画那种D是吧,直接给的零啊,这是一样的啊好了,那么下边的话我们干什么去做一个仿真。啊,不能做仿真是吧,我们的record还没写是吧,我这还没写代码来着,那么这个代码呢,我们怎么写,按照我们的设计报告,或者说按照我们设计原理是什么来着啊,判断K是不是为低电平,如果为D判断那是不是小199啊,小一就加一,否则就性零嘛,对不对,如果高电平就保持不变啊,那就写呗。呃,Always eight,括号适中复位。
86:00
Begin end判断复位期间它等于八撇D0L判断括号K-N是不是等于一撇B0吧?因为等于零是按下是吧?所以先先写按下的啊,先写按下的等于零,如果它等于零怎么办?它等于零就判断括号um m是不是小于多少199是吧?这是我们的规定的值啊,比如说是八撇D199是的话,Um就等于nu加上一撇B1,然后else,好,Nu等于啊,八撇D0,然后如果是为高电平呢?那就um等于um就可以了。对不对,好了,写完了把它改成RG类型的,综合分析一下。
87:03
啊,这就是我们原理吗?大家不是,大家刚才分析就是说,如果它等于零,就是按下嘛,等于零按下,那就那就看一下它是不是在199嘛,因为我们只要它在零到199之间循环,对吧?所以呢,呃,我看一下它是不是在199之间啊,小于199,如果小于那就简单了是吧,加一对吧,如果它要是不小于,那就等于了呗,等于就清零啊这是我们的一个要求嘛,对不对。好了,搞定搞定下面的仿真新建vlo OK。File。另存为它下划线TB。好,然后呢,我们把这个绿化一下。
88:05
啊,这个我来说一下啊,这个呢,就是啊我们啊这个,呃,因为这个什么,因为这个是这个数码管这个模块啊,是已经什么是已经成熟的模块,也就是说我们已经经过验证,它不会出错,他肯定对的一个模块,那么如果说我们在用到这个模块的时候呢,我们干什么,我们一般情况下不会轻易去怀疑它,也就是说我们都认为他是对的,那我们仿真的时候看什么,我们一般情况去看什么,就会看我们给他的呃值对不对,呃有的人可能不太理解,那我来举个例子啊,比如说比如说你买了一个,呃,这个叫做DVD啊或者VCD啊,然后呢,你买回来这VCD呢,这个是新的,对吧,然后干什么,然后呢,你往里放了一张光盘,然后呢,我们就开始准备看电影了,听歌了,但是你把光盘放进去以后,你发现。
89:06
那个歌唱的磕磕绊绊的,你是什么感觉?你的感觉是这个VVCD换了吗?肯定不是,你的感觉什么,就是我输入给VCD的是不是有问题,因为我们觉得VCD呢,给他什么它就会亮什么,给他什么他就会唱什么,对不对,那好了,那是不是我给他的不对啊,所以大家一般就会把光盘拿出来看看是不是放的不对,或者是个光盘是不是脏了,擦一擦再放进去。一擦一擦之后好了,这个这个光盘脏了对不对,如果我擦一擦还翻进去还不对。啊,然后呢,还在怀疑这光盘,再换一张新的光盘往里一放,还是不对,那怎么办,那就可能就怀疑就是什么,就是这个。这个VD是不是有问题啊,所以一般情况下,我们首先要怀疑这个成熟的模块,我们一般不会去怀疑它有没有什么问题啊,我们一般比较怀疑比较多的就是说我们给成熟模块的值对不对啊,所以在这的话呢,我虽然把它写出来了,但是我可能到后边也不看啊,就像我所说的,我我只会去关心什么,关心给他的那个八位的值对不对啊。
90:20
好,那么下边的话呢,我们来写一下啊,十周。好,那么下面呢,我们来写这个复位。嗯,那么在复位期间呢,我们的K杠也要有个值,在这给多少呢?注意啊,因为你模仿的是按键对不对,所以在复位期间应该给的是一撇B啊,不要上来什么都给零啊,你是按键嘛,对不对,你的按键不摁的时候么,按键不摁的时候不就是一嘛,所以很多人在这给零,那就直接就错了。
91:11
啊,这个就错了,所以你还是没明白整个的设计原理啊,或者设计的规划应该为什么,就平常的时候为什么,因为我们什么都不按,它不就是一吗?我摁的时候在零等于零,是不是我在复位期间我按那个零干啥,没有意义对吧。好,复位结束以后,我们延时200好了,下边问题来了,再来考虑一下,你说你的K-NN多久呢?也就是说下面我们是不是要按,根据真实情况,就是手啊,就是我的手把这个按键按下去啊,然后再放开,我能按多久呢。我等多久啊?那么这个很简单啊,首先第一个。大家是不是一个小孩儿,是不是一个成年人,你比如说很简单问题啊,我就觉得小孩儿可能就比较毛躁一些,摁个按键啊,就嘎嘣摁下去就行了,比如你要像成年人啊,像这个不能是成年人,应该说这个中年人叭较老成持重,摁一下就是一下啊,那就是摁的会比较慢,摁的会比较死,时间稍微长一点,这叫摁瞎是吧,然后呢,就这样,所以有人摁的快,有人摁的慢,但是呢,我们来说,无论你摁的快也好,无论你摁的慢也好啊,你摁的再快再快,它们两个是不是有,就是你摁下这个就是这个,这个K刚才是不是变成零啊,那么它变成零的最短时间是多少呢?啊,这个我来说一下啊,基本上会在什么?基本上会在这个呃,100毫秒,甚至在200毫秒以上,就是它的接触的时间会在200毫秒以上啊,就哪怕你摁的太N一下啊,这个时间啊,可能也会在100毫秒以上,就是说他的接触时间呢,因为一秒钟太短了,对吧,另外还有就。
92:55
是在实际生活当中啊,呃,我们也没有必要去那么测试,因为我们正常去按某个按键,我们就按一下,然后放手摁一下,放手大家也可以去摁的键盘,你敲键盘敲的再快,所以你也是摁下去,然后放起来,按下去放放起来对吧?所以说呢,它的时间软都是在百毫秒级别啊,那么最快也是几十毫秒级别啊,基本上不能,呃,不能再再多快了,对吧?哎,不能再多快了啊,所以呢,这就是一个这个这个这个级别是吧?啊这个级别啊,那么我不知道大家小时候有没有玩过,比如我们我小时候好像玩过一个就是谁有那个电子手表可以秒表计时是吧,我们就测试谁手快,就是开始停,开始暂停到达。
93:37
啊,一般情况谁能摁到这个0.1秒以下就手就不得了了,对吧,0.1秒其实也是100毫秒了,对吧?啊100毫秒了啊,那当然这个跟接触时间没关系啊,我就只是说人的反应啊,其实算什么都是在如果真的要摁的话,都是在几百毫秒或者100毫秒以上的,那么在这儿我们就为了模拟真实嘛,对不对,所以要干什么要去按几百毫秒以上,那好了,那么在这我们K-N。
94:02
等于一撇B0,那么孩儿刚才说不同的人摁的时间不一样,对吧,那好了,我们按多久呢?我们在这儿摁个,比如我们按个这个,这个呃,叫做这个。100毫秒吧,那就100。啊,这就是100毫秒啊,100毫秒,然后K-N等于一撇B1。那么在这儿的话呢,我们为了不和我们所有的时钟沿对齐,所以在这儿的话呢,我们往后打一个周期啊,延时二啊,我们统一以后附信号都要这么复,就是在每一个信号的前边都加上这么一个开头啊,就保证这个信号的变化不会以声上线对齐好了,那么这下先什么相当于按了一个按键,按了多久呢?摁了100毫秒,然后呢,我们中间呢再歇个。这么长吗?这个大概是不是也是100毫秒啊。
95:03
这是一秒钟了啊,这样吧,歇100毫秒吧,然后歇够100毫秒以后怎么办呢?我再去摁个100毫秒,或者说呢,我换一个这个人呢,手比较快,他按50毫秒,好吧,按50毫秒啊,然后呢,我到最后呢,再给他再停留100毫秒,然后呢,再给个Dollar stop,就是说我一共模拟按了两次摁第一次摁了100毫秒,然后提,然后放开手100毫秒,然后呢,我又摁下了500,呃,不是按下了50毫秒,然后又写了100毫秒,也就是说我总共按下了两次,那么按照咱们的设计规则来说的话,我摁下两次,那是不是说这个nu应该等于什么?那么是因为等于二啊啊这这怎么又把这个又复制下来了。因为我按了两次对吧,我按了两次,我按第一次这个,那么应该等于一啊,我按第二次应该等于几,那应该等于二对不对。
96:07
那我们来看一下它会不会是我们呃想要的这种。呃,情况呢,然后我们来分析啊,到底为什么。下面我们来仿真啊,那么这个仿真的话呢,我们进去之后就直接点暂停就行,因为它呢,呃,在这个顶层当中啊,它并没有把我想要看的这个叫做。呃,这个信号呢,给我引出来,所以呢,我。
97:02
怎么直接暂停了看一下啊。嗯,没问题啊。是不是刚才点什么点错了,我再打开一遍。好,我直接点暂停了啊。好,为什么呢?因为这个当中的话呢,呃,它没有我想要的这个什么呢?它没有我想要的这个number信号,对吧,这两个信号我就不想看它对吧?这两个信号我就不想看它,我看它干什么没有什么意义,对吧?因为我们都知道我给你的数对不对啊,我给你的值是几,你就会显示是几,这个咱们已经确定过了对吧?已经确定过了,那好了,在这的话呢,我们选中它。
98:05
找到它到有一个选拿过来放到这这个直过来,然后好,那么很明显的话呢,我们发现什么呢?就在最开始的时候,我们是K-N是没摁的,对不对,在这我们是不是就按下了,因为低电瓶嘛,在这就按下了,然后按下以后呢,我们就一直在按着没放手,对吧?因为一直要什么,因为一直要按到大概要100毫秒左右是吧,我们才到40毫秒左右,对吧?那好了,其实在这儿的时候,大家就已经发现,就已经错了,为什么呢?你来看一下你的呢number值,就是说你会发现什么,你会发现当你的number值的话呢,我要求什么,我要求是按下一次只加一对不对,你来看一下你的number值什么,你的number值就是你一摁下的时候就干什么,就已经开始加一了,并且变成123456789开始加了,那这。
99:05
这不对呀,我都我摁下去,我都没有抬起来的时候,那么你就开始123456789了,那你这对吗?你这就不对了呀,因为什么呀,我要求是摁下一次只能加一对不对,无论是老年人也好,还是小孩也好,你不能说根据你摁的时间的长短去加几,因为我要求摁一下只能加一对不对,那么现在是出现什么问题,现在是只要是摁下的时间就一个时钟周距加一,一个时加一,一个时钟加一。是不是这样的呀,他是不是每个收入都在加一啊,那好了,那么现在呢,他应该就快停了,因为到200了,我自己给他停了吧。你在这儿,你看已经抬起来对吧,啊,在这又摁下了对吧。这个这个好难。
100:04
好,那么在这大家也看到了是吧?啊,这个我所摁下的时间啊,摁完之后它等于一,其实这个数不对啊,这个数是赶巧了啊,这个数它不一定会等于一啊,因为咱们给的时间啊,可能正好在这儿,呃,它变成了一,但其实并不是啊,因为中间的时间啊,中间的值啊,中间的指啊,它呢,每过一个声音就加一,每过声就加一啊,这就很明显就已经不对了啊,那么呃,大家刚才看到一个很。尴尬的一个问题,或者说一个是一个很凑巧的问题,就是在这儿的时候,它正等于什么,它正好等于一了啊,就说这不就对了吗?注意它不是对了啊,我们放大看一下。因为什么?因为我们给的摁下去的时间啊,它正好是让这个值加加加加到这刚好等于零,然后你一放手刚好等于一啊,因为我们给的摁下的时间刚好在这,那如果说我按下的时间再少给两个周期呢,它是不是就会这个值就会等于多少,这时就会等于198就不变了,对吧,对不对?所以在这的话呢,它和你按下的时间还有关系,也就是说呢,它并不是说摁下一次加一,而是什么,而是你按下的每一个时钟周期都在加一,为什么呢?
101:20
所以在这儿就要希望大家去深刻理解这一句话了,这一句话什么意思呢?这个电路什么意思呢?这个电路有人说什么说这不就是它等于零的时候就加一吗?它等于零的时候就加一吗?这没问题啊,等于零不就是按下吗?那这个此时你要这么一想,那么这个问题就错了,为什么错了呢?你说的你说的没错,确实是等于零的时候加一,确实是等于零的时候是按下,但是我来问一下,这一段电路多久刷新一次啊?这一段电路是不是每一个时钟沿都会刷新一次啊?对不对,那好了,那如果它每一个时钟沿都刷新一次的话,那就有问题了,为什么?因为我们摁下的时间可是好多个时钟沿啊。
102:12
对不对,就好像什么意思呢,在这我画个图,这是时钟。然后呢,你每个时钟人来了你都会加一,比如说我摁的,我是从这儿开始摁的。那这个上升员一来一看到我是零,加了个一,这个上升员一来一看我觉得还是一,这个上升员一来看到我还在加个一,这个上升员一来我还是零,因为我摁的时间比较长啊,你管我摁多久,哪怕我摁三年呢,我也只摁了一次,对不对,你也只能加一对不对,所以呢,这样的话就出错了,就是说它每个生间都检测一次,每个时间检测一次啊,这是它就是这个电路就这么来运行的,每个时间都要检测一次,但是啊,对于我们来说,它不符合我们的要求,为什么呢?因为它每个时钟沿都加一的话,那么将不符合我们的设计啊,为什么呢?因为我们按下的时候时间也会很长啊,这个再举个例子,比如说很简单问题就是我是一个路口收费的。
103:11
啊,路口收费,我说了过一次路口啊,过一个人过去一次路口,然后呢,我收一块钱,但是呢,你的行动比较缓慢,你过去一趟需要用两分钟,那对于你不是你是你是老年人要两分钟,那我年轻人可能就可能就30秒,对于我来说,我怎么做,我的想想就是每十秒钟我回一下头,每十秒钟我回一下头,看到谁谁就要交钱,看谁谁就要交钱,那你想你这个老年人过去,你是不是交好好几块钱啊。对不对,但是我们规定啊,每过去一个人只交一回钱就够了,对不对,你不能因为这走的慢,你就让人多交钱啊,那这个也是一个道理啊,就是说你每个时钟啊,你每个时钟沿来的时候。都会判断到我等于地面平,你都会加一,这就不对了,因为我要求什么,因为我要求啊,无论我按多久,那么你只能加一对不对。
104:06
啊,只能加一对不对,所以这个问题在这儿啊,也就是说这个出现了这个问题了,那么我们怎么来去解决这个问题呢?所以下边我们来去讲第二个问题。说也有人说,那能不能这样啊。说你把TB改了。怎么呢,就是说为啥我摁下一次你会加好几次呢?原因就是什么原因就是说我上升一下,一来你这锂电瓶我上升一下,一来电瓶你就不能够控制一下你的低电瓶吗?让你的低电瓶的长度是多少呢?是一个周期,举个例子,比如说。这样你摁下一次。就这样,就是你摁一次就离你的低电瓶只有一个上沿,这个上沿踩值低加一,这个上一踩不是底的,变成高电平了,那你还加什么一是不是就不加了,那干什么,你要这么说的话,那就是你对外边那个人啊,那个手摁按键的速度啊,你要求太苛刻了,你得要求他嗯呢,还只能嗯。
105:10
这么一点,还只能要求他按下这段时间的里边只有一个是那样,这不存在啊,做不到,我们说了,无论你按多久,无论你怎么按,那么要求什么要求只能加一,那怎么办?所以它摁的呢,一定是从这儿变成低电瓶,这个时间呢,指不定有多长,可能会有两秒钟,可能会有三秒钟,可能会有0.5秒钟,你这个时间是随意的,但是呢,你不能够让人控制时间。那么这样的话呢,我们怎么能够实现?这个功能呢啊,怎么能够时间这么长,就无论按多久都只加一呢,所以现在的问题来了,那现在问题来了,怎么做呢?我们来分析,第一个我来分析一下啊,其实我们刚才就已经分析出来了,什么呢?什么情况下这个计数器加一呢?是不是说上升沿遇到有效就加一,那好了,如果说我真的摁下一次。
106:07
就只有这么一个电平值,或者是。低电平有效的电平值,只如果说我摁下一次只有这样的一段高电平,或者只有这样的一段低电平,是不是下一次它就加个,就只能加一,因为这个沿不加,这个沿也不加,是不是就只能加一了?当然那摁下一次有这样的波形吗?不是,为什么,因为它是很长很长很长很长,所以我们要做的一个工作什么?就是说怎么样通过某种方式,我们的计数器不要直接对。这个很长很长的低平做技术要做什么,要我们要想想办法,把很长很长这个玩意儿,我能不能够利用某些某些东西把它干什么,把它弄成。只有一个使用周期的低电瓶,或者只有一个使用周期的高电瓶,像这种我们称之为叫负脉冲,这种称之叫正脉冲,我一般采用正脉冲,也就是说我们能不能够。
107:06
根据这个波形产生一个这个波形。产生它以后啊,产生它以后,然后用它做计数,因为它那里边呢,只有一个时钟周期的什么呢?高电平对吧,那好了,那我们怎么样来产生这个波形呢?所以在这儿我们来讲一下。啊,那么这样。好,那么怎么来产生它呢?我们来看一下啊,就是说无论你的按键按了多久啊,无论你的按键按了多久,那么你在这个当中是不是只有个下沿,是不是只有一个上升沿啊。是不是只有一个线压沿,只有一个生成沿,对不对,那我们可以怎么做,所以我们今天要讲的电路叫什么?叫做边边沿检测电路啊,叫边沿检测电路,就是说如何来检测一个信号的上升沿,或者来检测一个信号什么呢?叫下降沿,怎么检测呢?
108:11
怎么来检测上升沿,怎么来检测下降沿呢?这是我们今天要考虑的第一个问题啊,如果它有,比如像我们之前讲的检测序列,怎么来检测序列呢?当我检测到这个序列的时候啊,当我检测到这个序列的时候。啊,当我检测到这个序列的时候,我就输出一个高脉冲,那好了,现在我怎么做,当我检测到里边有下降沿的时候,我产生一个脉冲,或者说我检测到里边有上升音的时候,我产生一个脉冲。那么这个脉冲呢,我称这个检测出下沿产生,这个脉冲检测出上升沿呢,我让另外一个脉冲产生,那么这样的话,你计数的时候,你可以用上升沿计数,你也呃不是你也可以用下降沿的脉冲计数,你也可以用上升沿脉冲计数,那有什么区别呢?如果你要用下降沿的脉冲去计数的话,那就是按下就有反应,那如果你要用上升沿的去计数呢,那就是摁下去没反应,放手的时候才有反应,因为摁下去只能带来线跳沿,释放的时候就能带来上升沿。
109:11
对不对,好了,那么。问题。就在这儿了,怎么来检测下降沿,怎么来检测上升呢?啊,怎么来检测上升沿,怎么来检测下降沿呢?其实这个的话呢,好像很难的样子是吧,但是呢,大家来想象一个问题啊,就是怎么来检测上升沿,怎么来检测腺炎沿呢?什么叫上升沿,什么象沿呢?是不是说以前为腰,现在为零了,或者说现在为。幺。过一会儿之后变成零了,或者现在为零,过一会儿之后变成幺了,那么现在为幺,过一会儿变成零了,是不是就是中间肯定有个线象眼啊?如果说现在为零,过一会儿为幺了,是不是就会有个上乘眼啊?但是我来问个问题啊,你如何能够知道未来的值呢?比如你怎么能够知道明天?
110:05
下不下雨,你明天你你怎么能够知道明天的事情呢?你无论如何你不能知道,因为你是信号嘛,不可预期的,对不对,所以那怎么办呢?所以我们是不可能知道未来的事情的。啊,就像大家所学信号似的,如果说你的信号是和以前的信号有关系,你这是个因果系统,你能做出来啊,如果说你做的这个系统呢,它和你未来的信号有关系,那对不起,你这个系统做不出来,因为你怎么可能知道未来的信号等于多少呢?所以就做不出来了,比如说那你这个不就做不出来了吗?注意咱们换个角度来说。什么呢?就是我现在不讨论这个,我现在是幺,未来是零,我这样,我来讨论这样的事,就什么就是我现在是零,我过去是幺,那是不是就现在样啊,我只讨论我的过去和现在,我不讨论未来,我只讨论什么过去,我现在是零,我过去是一,就是这这样,那对于这个来说的话呢,就是我现在是一,我过去是零。
111:08
那不就好了吗?对不对,那就OK了,对吧,这个就非常简单啊,这个就非常简单啊,那么我们能不能够知道未来的值呢?其实我们不知道,但是我们只能这么,我们只能知道过去的值啊,我们只能知道过去的值,未来的值我们不能知道啊。那么有人说我们可不可以用状态机实现呢?是可以的,比如说我要检测现在人了,怎么检测呢?如果是一,就在本状态待着,一直在本状待,如果是零,就跳到下个状态成功了。然后就输出个脉冲,这就可以了,就这么简单啊,就两个状态就可以了,那么在这的话呢,我们就不用装待机啊,我们用什么呢?我们用这样一个方式。什么方式呢?在这给大家讲一个。大家还记不记得有一个我们讲过寄存器,寄存器的什么功能呢?是不是上升沿一来,寄存器就能够把D端的数据更新到Q端上?
112:04
这个没问题吧,然后我经常去给大家说Q端的数据等于几呢?Q端的数据等于几呢?Q端的数据是不是永远等于上一个时钟力采样的D的值啊?想想这个问题是不是?Q端的值一定是等于上一个时钟沿采样的D的值对不对?那好了,那我来问个问题,Q,是不是以前的某一个D啊?就Q的值是以前的某一个D呀,所以如果我们站在一个时间角度上来说,如果说我们说D的值是现在的话,而Q的值是什么?Q是什么?Q的值呢?就是过去。过去多久呢,也没多久,就是过去了一个石龙芽啊,就是过去的龙芽,那么。
113:01
D是现在的值,Q呢是过去的值,所以当我们有了这个情况下,我们就好了,那当现在的值等于零,过去的值等于一,现在等于零,过去等于一,就有了个线象眼。现在等于一,过去等于零,现在等于一,过去等于零,那就有了一个叫做上升呀。过去等于零,现在等于零,那就是一条低电平,现在等于一,过去等于一,那就是一条高电平,所以就不变,所以呢,只有当这种情况下就是啊,当Q等于一,它等于零的时候啊,是一个什么样,当它等于一,它等于零的时候,它又是个什么样,所以这个是可以分析出来了啊,这个分析出来了好了,那么我们来看一下啊,那么如果说。现在我们来看一下这个问题啊,如果说现在这是一个时钟。比如说D信号是这样的。
114:09
好,那么Q信号是什么呢?Q,信号是不是应该在这个地方也是高电平?还是搞,还是搞,还是搞,只有在这个地方的时候,它变成什么,变成产量低了,输出低。在这的还是低,所以还是低。到这采样为高了,所以输出为高。对不对,这是这是D,这是Q对吧?所以你会发现什么呢?发现Q的信号,其实什么其实就是D呢,往后延时了一下子而已啊,或者说呢,这个Q为什么在这等于低电平呢?因为上一个时钟沿的时候,它是低电平,对不对?那么在这为什么是这个低电平呢?因为在这是低,在这为什么是高了,因为在这是高。啊,因为在这是高,所以就这么简单对不对,不简单那么好了,那么在这我们来看一下啊。那么什么情况下是个山山山沿呢,就是这个山山沿呗,这个呢是个上升沿对不对。
115:03
对不对,那怎么做呢?是在这儿的话,两种方案,第一种方案就是用功能性的语句,什么功能性语句呢,就是说当啊。当Q等于一,D等于零时,有个线电压,什么意思呢?就是现在等于零,过去等于一,就是线电压,那么在这一段期间呢,叫做现在等于一,过去等于零,就有了一个上层眼。啊,现在等于一,过去等于零,有了个上乘眼,那么在这的话呢,我们也可以怎么做呢?我们也可以用与门的方式去做,比如说Q与上飞D。啊,Q与上DC啊,就等于一啊,那么它也会产生一个这样的脉冲。啊,那么这个呢,就是D与上Q飞就会得到这样一个脉冲。啊,因为它只有这一段是符合我们所说的,上面是幺,下面是零的,这一段就变成幺幺了,已经不符合了,所以它只有啊,只有这一段是符合的啊,这个只有这一对符合的,而这一对呢,啊,只有一个时用周期啊就是一个脉冲啊就是个脉冲,那好了,下边的话呢,我们把这个代码呢给大家来写一下,所以第一件事儿。
116:15
不能够直接用外部的技术,那怎么做呢?应该用的什么?应该用的是reg,叫K,下划线杠R,然后我们写个寄存器。K杠啊,然后呢,我们啊,不是应该是clock clock,然后呢,我们的K-R就等于K-N。啊,也就是说呢,也就是说把这一个先给到一个寄存器上好了,那么根据我们刚才的想法啊,根据我们刚才的想法,在这的话呢,我们也可以说直接去写一个脉冲,比如说呢,我们在这定义一个脉冲。
117:02
叫flag下划线,这个呃,叫做这个线下牙外叫flag的一个上升沿,好,那么根据这种情况我们怎么写呢?我们that啊,Flag的下降沿,比如说下沿等于什么?下降沿的话,按照我们来想,什么是现降沿呢?什么是限降呢?应该是现在为零,过去为幺谁是现在呢?啊,就是它啊现在为零就是判断它是不是等于一撇B0。你要等于一撇B0了。啊,并且要与上,过去为幺,下降也是嘛,现在为零,过去为幺嘛,过去就是K1-R是不是等于一撇B1,如果是的话,那么满足我就输出为要不满足我就出为零啊这个,那么其实这一句话等同于什么呢?这一句话其实等同于过去为零啊,就是等于现在为零,那就是括号的非K-N,然后与上啊K。
118:11
杠R,一般情况下我们会这么写的比较多啊,这两句话是一样的,你想一下,只有当它等于零,那它等于一的时候,才会输出为一,剩下求的全是零,那也就是说只有当这个等于零的时候,与上它等于一的时候,才会输出为一,它在语原才是一,否则任何不满足输出都是零嘛,对不对,所以这两个是同样功效啊,那好了,那么还有一个就是上升ER,那么对于上升ER来说的话呢,那么也就是什么?也就是说,呃,上升什么意思?就是现在上升也是嘛,现在为幺过去为零,好,那么如果满足就是一撇B1,否则就是一撇B0,其实这个呢,等同于什么呢?它等同于就是。
119:02
我们的现过就是现在为幺,过去为零。啊,过去好了啊,上升沿嘛,什么是上升沿呢?就是你现在是幺嘛,过去是零嘛,这不就是上升沿吗。好了,那么我们到底是用上升沿计数还是用下沿计数呢?都可以啊,比如我们用下下沿计数,把它改成一啊,把它改成一,那么这样的话呢,我们在这啊,我就不去仿真时间这么长了,我把时间改小一点,比如我改成1000个周期。这个也改成1000个周期,这个改成5000个周期,这个改成。1000个周期,也就是说这个和我们按多久已经没关系了,我们进行综合分析一下。啊,如果说这个当中呢,改成这个样子啊,就咱们改成这个样子,就是说呢,这个计数器就无论你的K-N摁了多久,那么都会啊,只按一次,因为你按下一次只有一个什么,只有一个下下沿,你按一次只有一个上肠沿,对不对,我们把这个讲完啊把这个讲完。
120:22
好,那么下边的话呢,我们再来仿真一下。啊,现在我们用的什么,现在我们用的是线下眼技术,对吧,那么用线压技术就是什么道理呢?就是说只要你按下啊,就会立刻加一,而不是抬起的时候加一啊这个我们到时候可以来,呃,看一下我们的这个波形里边的一些东西。啊,大家来看一下是啊,它是没有这个number的是吧,我们给它删掉啊,在这儿按下这么久,然后释放了一对,然后又摁了这么久,然后在这18对,在这里边你再来看按的可不止一个周期对吧。
121:12
好,我们来看一下,然后我们把这个呢,改成什么,改成这个无二位你来看一下,是不是你一旦按下是不就产生了一个一啊,然后再摁这摁下就是个二,你无论后边再怎么走都不加一了,为什么呢?其实很简单啊,我们可以把这个。这个模块当中的,模块当中的我们的这个这三个信号都给出来。我给大家来看一下。啊,也就是说我们的K-R就是K-N的往后延伸个支撑周期,然后你看是不是在这个位置有一个限价沿啊,所以我的限价沿就有了一个脉冲,这个脉冲呢,就只有一个时用周期啊,因为它只有一个,因为寄存器嘛,它只会最多就延时一个时用周期嘛,所以就是这样,那么这个呢,就是对于他来说啊,就是一个上升沿的脉冲,当然了我们计数没有用上升沿用的什么,用的是下降沿啊,所以在这儿的话呢,就是摁下就会加一,然后这摁下就会加一,那个上沿在这儿啊,在这儿,所以如果说我要用上上沿计数的话,就是什么?就是说就会等释放的时候才会加一啊,按下就是上三页就不用了,在这我们给大家来看一下。
122:34
比如我们改成这个。啊,叫做这个上升沿计数,我们来进行一个仿真啊,这个今天不下板了啊,这个今天就只是理解好,然后明天去做下板。其实这个明天下完之后,结果还是不对啊,先可以告诉大家还是不对,我们还要去做各种各样的各种各样的一些东西啊。好,再来看一下,是不是在这先加沿的时候,数还是零,在这儿上升沿一来变成了一,先样沿没变,上升沿再来变成了二,所以这样的话就证明什么,就证明我们现在做的就是什么,就是一个脉冲啊,这个脉冲的宽度呢?呃,其实如果你要量它不是20啊,要量它不是20啊,但是呢,它只会加一次啊,为什么呢?原因很简单,就是什么,就是因为我这儿多了一个寄存器,也就是说在我们这个图当中。
123:28
什么意思呢,也就是哎,点错了啊,也就是说我们寄存器。D和Q,也就是说,Q只是D的什么,Q是过去。D是什么?D是现在,而它过去只过去了多久呢?其实它只过去了一个时钟上生涯,也就是说如果你有个线下沿的话,我现在是零,你上一个上升沿在这儿,如果说你再过一会儿呢,你就跑这儿了,我就跑这儿了,所以这就两个,就是都是什么,都是这个零了,对不对?所以对于他来说只有这一种情况。
124:11
也就是说只有这一个生用周期能出现这种情况,如果下个使用周期的话呢,我就会变成零了啊,我就变成零了,所以呢,它只会有一个使用周期的延时,那当然了,也就是说这两个之间只会有一个时用周期的不一样啊,只会有一个时用周的不一样啊,因为是这样的,对不对,上至踩到这儿,上身踩到这儿,那好了,那当然了,我第一个生命周期踩到的是一下生,我就会踩到零,因为你变成零了,我就会踩到零,所以呢,我只会有一个生命周期它不一样,上上弦是一样的,所以呢,对于只有一个生周期不一样的话呢,那么当然了,我们去用计数器去给它计数,当然了,我们只会什么呢?只会记录一次啊,只会记录一次,那好了,那么呃,这个呢,就是我们今天要讲的这个VR检测,大家呢,呃,大家可以说去,呃分析分析啊,根据我们的这个设计啊,在这个设计报告当中的话呢,我没写这个,呃,就是这一部分,其实按道理说应该写个什么,应该写一个,呃就是把这个东西。
125:12
全都关了,再写一个VR版本啊,作者是谁?然后VR版本,然后修改什么,哎,修改啊,这个叫做呃,Record number模块啊,为什么呢,在中间增加了啊边缘检测部分啊,备注一下就是如果不加边缘检测部分的话呢,那么它的计数只要按下就会一直的计数,而不是按下一次加一,而现在的话呢,做了边二检测,那么摁下一次只有一个上链沿或只有一个下降沿,那么我用下下沿计数,就是摁下就加一啊,我利用上链下技术,就是放手的时候去加一,那么这个呢,我没有去下板,那么大家呢,可以去做一个下板试一试,就是你摁下是不是就加一,放手是不是呃就不加了,那么如果有上黑眼的话,就是放摁下去不加,释放的时候加,大家这个可以去做,那么这个呢,我明天再来做啊,今天我就不做了。
126:02
好吧,那么呃,今天呢,已经多了多了一段时间了,是吧,那咱们就不讲了好吧。呃,看一看有没有问题啊,看看有没有问题啊,今天这个主要是在这一部分上,呃,用的时间来说多了一点啊,但是呢,我觉得这个呢还是有必要的,希望大家把这个呢好好的去完善一下,写的呃多一些好吧。看有没有问题,有问题说一下,然后咱们给大家解决一下。OK啊,在咱们这个里边的话呢,其实就讲了一个比较重要的一个知识点,就是什么。就是一个,呃,边缘检测啊,边人检测怎么检测的啊,就是说下一个生命周期是零,下一个生用周期是一。
127:00
啊,当然了,我们没有说下个生用周期啊,而是说什么,而是说现在的值是多少,就是D的值嘛,D因为直接接在外边,它就是一直就是现在的值,而Q呢,就是过去的值,它过去多久了,就是过去了一个生周期嘛,所以只有说现在等于零上一个等于一啊,那就是一个这个这个这个叫做现在等于零上去也就现象营嘛,对不对啊,现象营好了,把这个好好分析一下啊,然后呢,咱们今天就到这儿好吧。
我来说两句