00:45
能看到吗?能听到吗?能不能看到,有没有声音?
01:04
能是吧,稍等一会儿啊,看他们都在干嘛呢,是吧,然后你们有没有问题啊,有问题的话就可以直接的这个说一下,然后呢,咱们就开始解决解决问题,然后别在这儿空等着他们好吧。咱们这个上一次是吧,再给大家这个讲课的时候讲了什么呢?讲了这个呃叫做这个减法器是吧,还有这个叫做呃加法器啊,还有这个最后呢,呃留了一个叫什么叫做这个呃比较器啊,叫比较器啊,那么呃刚才呢,是吧,就是有人在群里问这个叫做这个呃比较气,这个有点想不明白了是吧,那么呃在这的话呢,咱们也是呃简单的来说一下啊,就是这个呃在原理上呢,我们给大家已经说过这个问题了啊,说过这个问题了,就是说呢,呃比如说呢,我们来举个例子是吧,比如说我们十进的数是吧,两个十进制的数去对比,比如说384和这个834去做对比,那么我们去做对比的时候呢。
02:28
啊,怎么来对比谁大谁小呢?所以我们首先干什么,我们首先要考虑就是从高位开始对比啊,从高位开始对比,我们不用说去考虑,比如四和四相等,是不是结果就是相等啊,其实那不重要,为什么呢?因为很简单,你要考虑到高位,也是他为什么先考虑高位不考虑低位呢?因为即使说你低位84比34大,那又怎么了,你的高位比人家小,那结果还是小,对不对?所以说也就是说高位能够决定一切。对不对,只有在高位啊相等的情况,你的本位才会起到作用,比如说像这个啊,三已经小于八的情况下,那么无论你这个八大不大于三,已经无所谓了,对不对,也就是说呢,只要你高位,哎,比如说你这一对比啊,已经传递出信息了,在这一位对比传递出信息了什么呢?哎,咱的高位比人家的高位小啊,你下边再大也没有用了,所以就不考虑了啊,就不用考虑了,不用考虑这个本位的到底比人大不大了,没意义了,对不对,就要先考虑什么高位啊,先考虑的是高位,所以咱们在做这个设计的时候怎么办,是先从哪,是先从高位开始做的,也就是说高位先对比是不是谁大,然后呢,如果说高位相等,那么再传到下一位啊,这传到下一位啊,告诉下一位啊,上面是相等的,那么你们俩还可以做对比,那么如果说呢,我们一对比高位,说高位就比人大或者比人小了,那就直接告诉下一位,你就不要做对比了,没有意义了,你就不要做对比了啊,你就直接干什么,直接就把这个。
03:56
结果呢,往下传就可以了,再往下传就可以了,所以咱们再去做这个,呃,这个比较器的时候呢,我们来看一下我们的这个,呃,写的这个代码是吧,比较细。
04:10
啊,我写了一个四比特的是吧。啊,我电脑上只装了一个版本啊,所以我就双击打开了。在这我们来简单再分析一下这个小结构啊,简单分一下这个小结构。这可能是我第一今天第一次打开啊,速度比较慢啊,稍微等一下。
05:06
好OK啊,那么在咱们设计当中的话呢,我们是干什么,我写了一个四比特的比较器啊,但是四比特的话呢,分成了两个两比特的,但是在这两个两比特当中也大家也可以看到啊,外部进来的时候呢,是先给到了高粱比特去做对比,然后呢,高粱比特呢,又产生了高梁比特的哎大与小,然后呢,又给到了低良比特去做对比,然后呢,最终产生出出对吧,那么对于良比特来说的话呢,也是一样的是吧,外部的高位的输入先给到了高位做对比,然后它输出呢,诶给到低位的信号,然后低位再去啊根据啊,因为你是一,他是零嘛,所以他零呢认为一是高位嘛,所以说你高位传递给下一位,其实就传递给他的对不对,他接到IB上就认为什么,就认为是高位,是的高还是这么高位,是大还是小,那么在这我们就给大家说了,是吧,I什么意思呢?就是说呢,它代表的是高位是不是大,所以在我们来看一下啊,所以我首先做第一件事就是什。
06:06
啊,就是直接先判断啊,比如说我们对于这个输出信号来说,比如说对于欧比格来说的话,那么来考虑一下什么呢?说这个高位是不是大啊,就高位是不是已经A大于B了,如果高位已经是A大于B了,那好了,你就直接输出A大于B就行了,你就不用去考虑嗯,这个本位的问题了,对吧,那好了,如果高位没有人大,那咱考虑考虑什么,高位是不是啊,高位是不是比人小,如果高位是比人小了,那好了,咱们就什么那就那直接也不用告诉人家这个,这个直接告诉下一位什么告告诉下一位说这个不大啊,就是不大,因为呢,欧只代表这个大于的信息,对不对,那如果说哎高位也不大也不小,那只有相等了,所以那就相等怎么办?现在就要看什么,就要看这个本位啊,是不是一样了,那本位是不是这个这个A要比B大了,那么这样的话呢,只有A等于一,B等于零的时候,它呃才会大,所以呢,我们给出了这样一个方法,那么对于等于来说。
07:06
说哎,高位如果大了,那就不用想了,直接就等于是不可能了,如果高位小了,那么也是等于不可能了,那如果说是哎高位都是相等的情况下,那好了,在这种情况下我们才会发现啊,只有A和B是相等的情况下啊,我们才能够为一,那怎么相等呢?相等应该是同货,就是A同或上B,但是咱们没有同货这符号啊,所以咱怎么办呢?写了个异或写了一个这个,这个取反对吧,哎取反好了,那么对于小来说是一样的,那么呃,这是呢,给大家来讲的,那么有一部分同学啊,他是怎么想,他是这么想的啊,就是说我不知道大家有没有说有人写出这个代码的,这个代码其实不对啊,比如说咱们来说一下,就是这是呃,很大多数人的一个想法,比如什么呢?就判断括号啊,这个I big是不是等于一撇B1,也就是说判断高位是不是大高位,如果大的情况下呢,那我就直接输出为大,然后在else再去判断,判断什么呢?判断。
08:06
这个I啊,小啊,那它是不是小,那如果它小的话呢,所以就O它呢,就等于一撇B1,然后在else else就肯定是相等了,对吧,那相等怎么办呢?所以我们就要判断呢,本位是不是相等对吧?然后呢,去输出什么就是什么o eqq al,然后它呢,呃,就是等于这个取反的括号的A啊这个E或上B,有人可能就会这么写了,我跟大家说啊,你这么写呢,看着是把三个信号写到了一起啊,做输出,但是这么写肯定是不对的,呃,为什么说不对呢?我希望大家一定要能够理解一个问题啊,什么问题呢,就是说。在我们做信号的时候是这样的,比如说我输出一个信号对不对?我输出一个信号呢?这个信号到底为高还是为低呢?我用什么?我用中间的逻辑去做控制,注意信号为高还是为低,是用逻辑来控制的,那什么意思?也就是说当你把这个信号质为高的时候,它就会一直保持着高,不会拉低了。
09:16
啊,一直保持高就不会拉低了,那么你把它制成低,它就会一直保持低,它就不会拉高了,所以并不是大家所想的那样,什么呢?哎什么呢,就是说哎这个信号,然后呢,它平常的时候都是低电平,然后我想输出位高了,我就搬给它拉高,然后呢,当体现不满足,它自动降,降下来了,它会不会自动呢?它不会啊,比如说在这儿I big等于一的时候,它就等于一了,对不对,那什么时候等于零呢?你没写啊,你没写什么时候等于零,你也没有说else的时候,OB big等于零你也没写,你没写就证明什么,就证明说一旦出现了一个I big信号等于一,那么OB big信号就就等于一了,它就一直等于一下不来了。啊,就下不来了啊,是这样的问题啊,它并不是说这个信号来了,它等于一,那这个信号不来呢,按照大家心里想的,不来不就等于零吗?不是的啊,不是的啊,如果像咱们这种事情里边就什么来了等于一不来的,不来怎么办,你得给人说出来。
10:17
啊,不然你得给人说出来这种的,你没有说出来,你没有说出来就有个问题,就是遇到这个信号就拉高,什么时候拉低了没有,那就变成什么,就变成这个信号还有什么,好像是一个拉高的启动信号,它一来就拉高了。啊,他一来就拉高了。啊,那他走了呢,他走了还是高的,因为没有人没有没有一种这个这个语句啊,是告诉他走了之后怎么办呢,所以呢,希望大家一定要知道,我在这举这个例子啊,并不是说什么呢,并不是说哎,我们这儿这个输出信号像个像个这个糖,就像个橡皮筋似的,你来顶起来就变高了,你一走就变低了,那它不是的,它不能这样啊,它不能这样,也就是说呢,它只能什么,你给个信号它变高,这没问题,但是呢,你得告诉我,你这个信号走了以后,我应该怎么办,当你不描述的情况下,我就默认是这个信号来了变成高,这个信号走了我还是高,因为你没有描述你走了之后怎么办。
11:17
啊,所以这个的问题呢,很大啊,所以不要这么来做,所以在这儿的话呢,希望大家以后描述的时候一定要干什么,也就是说呢,做设计的时候一定要考虑清楚啊,你不能干什么,你不能只考虑一半,哎一来就变高,这是对的,这没问题,因为大家默认的就是什么一来变高,那不来就变低呗,这家注意设计的时候恨没有这样,所以就是怎么办呢?咱们左手分成三部分对不对,OB倍伽来考虑,哎,等于先考虑,小于先考虑,那么在这样的话呢,就考虑什么等于Y,不是这个大于Y和大于的时候,就什么它等于一的时候啊,高位大了,我们本位就输出,直接大就行,不对比啊,高位小了,我们就直接输出什么呢?哎,不大,哎然后呢,如果说它俩都不是幺,那就只能只能是说输入为这个这个这个相等为幺,就是高位相等,然后呢,我们就会对比一下这个我们本位是不是一个幺一个零,然后是的话,就输出为幺,所以在这儿的话就是无论出现什么情况,我们的OB值呢,都是我给它情况了,我给它值了,无论什么情况我都给它。
12:17
它值了没有说在一种情况下,我没给值的情况啊,如果说在某一种情况你没给值,那么这个值就是什么,就是保持不变,那保持不变就一定是不对的啊,保持不变呢,在我目前我们来看肯定是不对的啊,你不能说保持不变啊,因为这个信号来或者不来肯定对你来说是有影响的啊,所以是这个问题啊,希望大家呢,一定要呃知道吧,那一定要知道啊,关于这个呢,就是什么给大家来去讲解了一个很重要的一个问题啊,什么问题呢,就是说呢,呃,前面拿这个例子呢,可能就是有点不太好,为什么呢?因为说呢,我们说想去做一个庞大的设计啊,然后呢,这个庞大设计是由前边是或者是由下边好几个模块来构成,但是发现呢,我们在这讲的好几个例子,什么都是这个叫做。
13:02
它是由什么,它是由这个下边好几个模块构成,这个不假,但是这几个模块都一样啊,所以呢,很大部分人呢,可能就是说这个理解起来可能不太好理解,那么我们不着急啊,我们说只要知道啊,大模块是有小模块一步步组起来的,那比如像它是吧,它叫什么呢?它就叫top level叫顶层,而这下边呢,哎叫做底层,哎有什么有两个底层模块来构成了一个,哎这个顶层,比如在举个例子啊,我们在说我们在做这个电路板的时候啊,就是现在我们做电路板啊,我们电路板往往什么,往往不是一个直接把所有元器件都弄到电路板上,而是什么,而是说做这个电路板,这电路板有什么,这个电路板上有很多插槽。可能插槽,然后呢,我们做电路板的时候,把槽留出来,然后呢,其他板子是其他人做,做完之后把其他的板子往上一插就完事儿了,我们也可以认为什么呢,我们这样呢,就做了一个板子,然后这个板子上插了两个模块,所以这两个块,这两个模甚至叫子集模块,当然了子集模块身上可能还会有,再有子集模块就一级机传,所以这在这儿呢,它叫top,就是顶层啊top level啊顶层啊叫实体呢,N起呢,这个呢,大家就只要知道啊实体就是什么实体,就是说这样一个模块就是它的实体啊,就在它实体,那么呃,在这儿的话呢,我们由于没讲什么,没讲VDL,那么在VDL当中的话呢,啊,就说端口啊和这个模块名称叫NT取,那么下边叫什么呢?哎,叫结构体,那么这个呢,我们就呃晚点讲VDL再说啊,现在我们只是给大家呢,呃,先简单来说了一下啊,这个是什么呢?咱们的一个比较器,那么对于16位的比较器的话呢,可以用什么?可以有两个八位的,或者直接就写成。
14:43
四个四位的也可以,但一定要注意比较细,应该什么,应该是先对比高位,把高位的结果给到什么,给到低位上去啊,把高位的结果给到低位上去啊,一定要知道是这样的。而我们所谓的减法器和加法器,什么应该是低位先加,加完之后把它产生的进位给到高位,因为当低位没有算完的时候,高位算的结果也不对,因为他没有得到正确的进位,对吧?所以我们可以认为呢,他不是不算,他也在算,只不是算的结果不对而已,我们未来得到正确我怎么办?所以必须要等低位一步一步一步把它进位呢,传到最高位的时候,然后呢,算出来结果才是正确的啊,所以是这样的,那么呃,这是呢,通过这个加法器和减法器是从低位往高位传,而比较器呢,是从高位往低位传,那么这是什么,这个斯尼思想都是一样的,但是呢,呃,他们的应用场合不一样啊,为什么呢?因为说比较器的话呢,的原理原则啊,或者说它的这个设计方法,比较方法就是先比较高。
15:43
位高位大就是大,高位小就是小啊是这样的规则,而那个呃,这个这个叫做这个加减法呢,都是先从低位开始,然后考虑往高位的借位,或者往高位的进位啊。这是我们呢休息了两天啊,然后呢,上一个周的周五,然后呢,我们给大家讲的这个呃,比较器,加法器和减法器,那么今天的话呢,我们要讲什么呢?今天的话我们呃稍微快一点啊,然后呢,我们讲这个,我们把减乘法器和除法器都讲了啊,这个精争险这个我们就不再讲了啊,因为呢精争冒险给大家已经说过了是吧,就是说都带大家看了,这个就是大家去做后仿真的时候呢,对于这些组合逻辑啊,都有可能会出现一些什么呢?诶出现一些这个错乱值,那怎么办呢?啊,我们只要在错乱值的稳定之后,我们的采样就可以了,那么今天可以给大家呢,看一下这个乘法器或除法器的一个错乱值,那好了,那么呃下边啊,今天呢,我们来讲那个什么呢?乘法器,我们现在讲乘法器,那么对于这个叫做乘法器来说的话呢,我们应该怎么来设计呢?我们还是啊老一套原则,什么原则呢?我们就来这儿考虑个问题啊,比如说呢。
16:57
我们来考虑这个叫做十进制数的相乘啊,比如说呢啊,这个123。
17:05
乘以什么呢?哎,乘以这个,呃,56,那假如例子啊,假如举个例子,就123乘以56,那对于我们来说应该怎么来乘呢?我们是不是都这么乘呢?就是三六一十八。二六一十二一十二啊,这个12就是二,二再加上进的那个一啊就是三,然后呢,一六得六,进的一就是七,得到一个什么呢?现在就得到一个123乘以六的一个结果,就是738往这一放,然后这个五呢,这个五再去乘以123,但是你会发现呢,五乘以123还会跟这对齐写吗?不会了,为什么会往前挪一位,比如说三五一十五就写到这儿。二五一十就会得115得五是吧,就得六,那这样的话就是8886啊,6888啊,那么会得到这样一个值,那会得到这样一个值,那么对于我们来说啊,那么对于我们来说的话呢,那么为什么?
18:08
这个值就要往前挪一位,这个值为什么就不挪呢?这个也非常理解,什么理解呢?我这个呢,就要学什么,就要知道我们的做的一种叫做这个进位规则什么呢,比如说呢,很简单,这叫什么,这叫这个叫做我们可以认为叫叫乘法分配律,什么乘法分配率呢,就是123乘以56可以认为什么,可以认为是乘以50加上123乘以多少乘以六吗?对不对,也就是说先算这个,再算这个。啊,算完之后两个相加,那么好了,那乘以50怎么算呢?哎,乘以50怎么算呢?啊,我们还是老规矩,什么乘以就是乘以50嘛,乘以50怎么办?就可以认为什么乘以十个五嘛,那乘以十个五的话就是什么,就是先乘以五再乘以十呗,那乘以十就是往前什么往前移动了一位对不对,那好了,所以呢,这个地方应该是零对不对,也就是说呢,这个数算完之后应该是123乘以50所得到这个值,那么如果说我们不不看这个零,一般像我们不看这个零对不对,就这为什么认为是往前挪了一下,其实并不是,其实这个数什么,这个数应该是乘以50所得来的。
19:16
啊,随是往前移的,其实并没有移而是什么,而是这个数应该是零才对,那这数应该是零才对啊,那么对于我们来说,乘法器就是这么来做的,怎么做呢?哎,就是非常简单呢,比如说我们来做一个二进制的一个乘法器,二进制法,你比如说幺零,幺零乘以什么呢?乘以101,那怎么做呢?老规矩嘛,这个是幺,那就是什么,就是幺零,幺零是这样的,那么这个是零对不对,这个零干什么,这个零就也要乘对不对,也要乘啊,那乘的话就是什么四个零嘛,但是呢,你会我会直接默认就把四个零写这了,那么最后这个零不写啊,但是其实也是有的啊,对不对,这个一呢,一也是什么,就是说什么就是幺零,幺零,那最后呢,两个零呢没写,为什么?因为它后边还是相当于两个零对不对,是这样啊,它其实就是说这四个数啊,这或者这三个数相加,那这三个数相加啊,所得到最终结果啊,一定要知道,那么对于他来说。
20:16
啊,对于他来说,那这个数怎么来的,这个数应该是这个数乘以上面数所得来的,对不对,那这四位数呢。是这个数乘以这四位得来的,但是呢,一定要注意这个零呢,我们可以说先不管它啊,就是我们知道哎,第二位数乘以它的时候的结果,乘完之后要干什么,要往这边移动一下的,那么这个。这个数怎么来的呢?是由这个一乘以上边的数所得来的,那么最终结果呢,要往这边呢,移动两位啊移动两位对吧?哎,它是这样一个结果,为什么呢?因为很简单啊,对于我们十进制来说,这是个位,这是十位,这是百位,所以呢,我们说十位乘以一个数干什么要往前移动一位是吧?默认就是说乘以了十了,移动一位就是乘以十了嘛,那对于我们二进制来说的话呢,它的什么,它就是2.0次幂,它呢,2.1次幂,它呢2.2次幂,所以往这边移动呢,现在什么,现在就是乘以了一个二嘛,对不对,乘以了一个二,所以是这样一个结果,那么但是在我们哪呢?在我们这个叫做二进制这个乘法当中啊,有一个非常简单的一个规则,什么规则,再来看一下,你看如果这一位是零的情况下。
21:26
啊,如果说某一位是零的情况下,是不是这几位都就变成零了,这是毫无疑问的,对吧,那如果这位是一呢。是在什么,现在是不是就把上面这个什么给照抄下来,对不对,也就是说没有去做乘的过程,其实就是其实就是抄下来对不对,因为它只有零和一,对不对,一乘就是本身嘛,零乘就是全部嘛,就是全零嘛,对不对,所以呢,这样的话怎么办呢?也就是说如果它是一的话,就照抄下来,如果是零的话,就全部都是零,那么我们把这一位啊,这样的一种方式,我们做一个拓展,什么拓展呢?因为我们也不知道这一位到底是幺还是零,而上面这个到底是什么,我们也不知道对不对,所以那怎么办呢?我们来这儿来看一下啊,我们先这样来下说,如果这一位是幺啊,如果这一位是幺,那么就是照抄,如果这位是零,就是全是零,那么我拓展一下,比如说我把这一位呢,称是什么呢?我把这一位称之为叫做X。
22:20
啊称之为叫X,就这一位称之为叫X,而上面这个呢,我称之什么呢,称之为叫做A3。A2 a1和A0。好了,那么下边这个啊,下边就等于什么呢?是不是就等于XX就是说把X写四遍,然后干什么呢?然后他们这个四位数和把X写四遍这个数进行相干什么相与啊,来想一下是不是就是相与啊,也就是相与的话会到什么结果就是X,如果是零,那么得到结果就是零,X如果就是一呢?是不是就是上面的数,因为任何数与上一还是本身对不对,任何数与上一还是本身,因为零与上一还是零,一与上一就是一,对不对,所以说任何数与上一啊,它都是本身啊,它都是本身啊,任何数与上一都是本身啊,那么这样的话呢,也就是说呢,哎,我们哎就非常简单,就是干什么,就是把这个数呢,干什么拓展成啊跟上边啊位宽一样的一个数,就是你是几位,我就拓成几位,然后跟你去相与,就得到结果,就是最终的结果,当然了,如果是第一位拓展完语完的结果,就是它第二位拓展完语完的结。
23:33
过之后你别着急,语完之后也在这儿放着干什么,还要干什么,往前移动一位,因为呢,人家是高位的,对不对,所以那这样的话呢,哎,这就是我们那个乘法,注意我们的乘法器呢,哎,我们的乘法器其实是什么?其实呢,就不能说是像一位啊叭,如做一位乘法器啊,两位乘法器是由两个一位构成的,它不是这样的啊,它不是这样,为什么呢?因为它会出现什么,它不是说数值相加,只有说这一位和这一位有反应,这一位和这位没反应,那不是它是有,它是直接都每一位都相乘的,对不对,所以知道这个规则以后,对于我们来做乘法器来说就比较简单了啊,就比较简单了,好了,那么下边的话呢,我们一起来去做一个什么呢?做一个叫做乘法器啊,那么呃,这个乘法器的话呢,我来做什么,我先来做一个叫做四比特的乘法器啊,然后呢,大家呢,呃,我做完之后呢,大家呢,呃,可以考虑考虑16位的乘法器怎么来做啊,一定要把这个做了,做完之后呢,我们后边呢在后边。
24:33
某些课程当中的话呢,这一部分我们还可能会再次用到啊,所以希望大家一定要知道,那乘法器我们乘法是吧,我们写成叫ullt,那下划线四比特啊,我写成四比特的吧,哎,四比特的乘法器。叫doc啊,那么呃,在doc当中的话呢,干什么,他应该放这个设计的这样的一个叫做这个设计报告,对吧?那么对于我来说,我就不放了,那么希望大家呢,自己把我做的所有的设计的设计报告都给做一下,也就是说呢,大家都要干什么都要说,因为它不就是原理嘛,对不对,我讲那些都是都是原理,你要把原理原理换成文字的形式啊,或者说一些图片描述的方式啊,做到word里啊,方便大家干什么呢?就是说呃,晚点自己去做这个回顾啊,自己做回顾。
25:37
好,那么下边的话呢,我们来把这个呢,我们来做一下。
26:07
啊,我在这呢,就只做一个四比特的啊,然后大家呢,呃,应该能够看得明白,这个到底都是怎么来扩展成16位的啊,也比较简单啊,我们到时候给大家扩展一下就可以。稍等啊。嗯,另存为。Okay。好,那么这个代码我们怎么写呢?首先第一件事呢,是吧,我们还是要写出它的这个model name啊,然后和这个list,那么对于这个list当中的话呢,我们来写一个输入啊,是这个三到零的A啊输入啊有这个三到零的B,那好了。
27:03
那么下边就有一个问题了,对于我们的结果来说,比如S它的位宽应该是多少,还是像我们之前做加法和减法一样,它的结果还是三到零吗?就是说它的这个和前面两个数一样吗?注意啊,肯定不能一样了啊,因为它呢干什么,因为它呢,它的进位啊,它不像说减加这个加法和减法它最多呢,扩展一位,比如说减法啊,它最多不够减,从高位就再借,那么加法它最多就什么就往前只进一位,它多了不进,那么对于乘法来说,它就比较多啊,就比较多,那么大家来想象一下,比如说我们在这来想一个啊,比如说AA,什么A是四位的,A如果是四位的话,它能够表示的最大数字应该什么?应该是零到15,对不对,那零到15的话,那B呢,也能表示零到15,所以呢,S的最大值应该什么?应该等于15乘以15,而15乘以15等于多少呢?等于225所。
28:03
分布需要干什么,就需要考虑一个225用多少位可以表示的下,那么225多少位呢?我所以在这儿呢,希望大家还是要干什么,要记住什么,要记住我们的叫做二的多少次幂啊,他们之间的这个。这个数字等于多少?比如说哎,这个二的零次幂啊,一二的一次幂等于二,二的二次幂等于四啊,二的三次幂等于八,四次幂等于16,哎,五次幂等于32,六等于64,七等于128,八呢256好了,那么在说到这儿的时候呢,就是二的七次幂等于128 2.8次幂呢,等于256,所以就是什么呢?我们表示的最大速度多少是225对不对?所以225应该在什么?应该在128~256之间,所以我们用么要用什么?要用表示256的数字来表示这个二百二二十五啊,那么这样的话呢,干什么?就需要一个就是八位的对不对啊,需要一个八位,所以就是七到零好了,那么乘法器我们应该怎么来做呢?啊,乘法器我们应该怎么来做呢?那么在这儿啊,我们来一步一步的大家来去想这个问题啊,大家想这个问题什么问题呢?首先第一个还记不记得我这标的这个过程啊。
29:20
首先啊,你是一个四位乘以四位的,那是这样对不对,大家看一下啊,四位乘以四位,那是不是这样,就是说首先我要拿出B的最低位。然后把最低位的扩成四个一模一样的,然后呢去和A的这四个相与,得到一个结果,然后呢,我再把B的啊,再把B的第二位拿出来,再扩成什么,再扩成四位啊,再扩成四位,然后呢,再和A进行相与,与完结果之后呢,注意这不是最终要加了结果是吗?而是还要再往干干什么?那么这边再挪一位,乘以二也可以挪一位,挪一位其实也就是乘以二,但是我们就是在做乘法器,对不对?你不能乘二对不对?所以要挪一位,就往这边移动一位就可以了。那么下边同理可得,一共什么呢?会移动出来了四部分对不对?一会移动出来四部分,然后呢,把这干什么,把这四部分进行相加,得到一个最终的结果就可以了。那么对于我们来说,我们来看一下啊,首先呢,我们来一步一步来,一步一步来讲啊,一步来讲,那么首先我们先来说第一个把这个数,就把一个比特的数扩展成四个一模一样的,应该怎么来写啊,应该。
30:31
怎么来写,首先第一个我们来说一下怎么来写呢?呃,大家还记不记得我们给大家讲过什么呢?这个叫什么,这个叫未拼接,是不是就是说叫大括号,那么在我们的malo当中的话呢,首先我们给大家讲过这样一个,第一个作用什么呢?就是说呢,它可以干什么?哎,它可以去做一个叫做哎括上Dollar r以后,可以得到一个非负数的随机值,那么第二个什么叫未拼接,也就是说它可以一位一位拼起来,对不对,所以呢,A,诶,然后呢,就是啊,我们说B是吧,应该说B的第零位,然后逗号B的第零位,然后逗号B的第零位,然后逗号B的第零位,那么也就是说我们这样写完之后,比如说我在定义什么,比如在假如说我在这定义一个where,然后呢,是这个三到零的一个值,比如说我就等于这个这个玩意儿,然后呢,我再写一个Z,然后呢,就上面这个。
31:31
好,就等于它,那么这样的话,大家来看一下,是不是证明我定义这个变量,这个变量的第三位,第二位,第一位,第零位,它都应该是B0啊。对不对,它都应该是B0,那么一旦呢,我们出现什么出现这种就是四个一模一样的时候怎么办呢?我们就可以说用另外一种写法,注意啊,这是另外一种写法什么的,就是删了不写四个了,写一个四,然后再写一个这个微拼接符,然后里边写的B0这个也是可以的,也就是这样的话呢,我们怎么相当于就直接把B0呢,扩了四个放到这儿了,所以跟刚才那种写法是一模一样呢,那么这种小什么好处呢?说白了啊,就是你跟跟这个这个这个叫做这个展开是一样的,那么我们讲这些缩写有什么好处呢?就是避免大家到时候写16位乘法器的时候,或者写128位乘法七的时候,你要写128个太费劲了,对不对,你要写128怎么办?就这写128不就完了吗?一直把它扩成么,扩成128个128位,然后呢,每一位都是B0啊,这是一样的啊,所以大家知道啊,是这样的对不对?好了,那么下边我们来去写一下啊,写什么呢?我们就按照我们。
32:43
从刚才的写,首先它会分成分成四部分啊,首先它会分成四部分,哪四部分呢?就是这一位扩成四位跟它相或呃不是跟它相与得到一个值,然后这一位第二位扩成四位和它相与得到一个结果,但是结果还要移动一位,对不对?那么这所有的我们都会得到四个,然后把这四个干什么呢?相加对吧?那在这的话呢,我们是四部分,那么每一部分用几位来表示呢?注意这一部分呢,其实用四位就可以了,这一部分呢,还有几位啊,应该用五位来表示对不对,因为说它的最终结果是四位,但是这还要往前移动一位,所以不要用四位啊,不须用五位来表示下边那个六位,再往下边呢,诶七位,也就是说呢,你要用更高的位宽去表示它,因为它后边呢,还要往前移动,那么干脆在这儿的话,我们怎么办呢?我们直接给它一个最大位宽,比如说呢,我们最终结果用几位来表示呢?用的是八位对吧?好了,我把这四部分呢,都用八位来表示,那有人说它一共就在四位数,你用八位来表示,那高位是什么呢?注意高位默认是零啊,高位是默认是零。
33:43
是吧,那么我们也可以做一件事儿,什么事儿,就是说你高位不是默位默认是零的嘛,那我我可以不让你默认,我直接给你指定成零,这样的话呢,大家就少了这个到底总是说默认是零还是一了,我可以给他直接指定啊就在这儿我们就分成四部分,那好了,在这儿我们来定义一下Y。
34:05
啊什么呢?比如说是这个七到零的第一部分,我们称之叫part one啊part one我们可以叫PART0ONE啊我们就是0123嘛,啊照1234也可以啊就是定义了这样的四个变量,好那么下边的话呢,我们来去啊,我们一起来考虑一下这个问题,什么问怎么来做呢?啊首先啊第一个问题就是呃短语句是吧,什么呢?PART0等于什么呢?啊PART0等于什么在这儿我们就要知道了是吧?首先呢,我们可以说呢,给个微拼接啊,你给个微拼接有什么好处呢?就是说因为我们知道啊,我们自己就知道知道什么它呢应该什么应该是。B0扩展成四位和A相与,得到四位,放到PART0的最低四位,它的高四位应该什么?应该是全零对吧?所以四撇D0,就是前面先拼四个零,然后干什么,然后是一个非常简单,应该是A,然后雨上,注意此时不能写两个语啊,应要写一个语,因为一一个呢才是按类语对不对,不能写成逻辑好了,然后干什么是四,然后干什么是B0啊应该这样的,不要少写或者多写什么问题了啊,它说零应该是这样对不对?哎,所以说它应该是这样的一个问题,就是A啊与上啊四个B0啊,注意这是一个,哎,四个B0啊,这是一个四个B0,然后呢,它俩相与,因为四位与上四位还是四位对吧?哎,是这样的啊,是这样的,然后呢,会得到一个他,我们一会儿现在这样写,我们看看对不对,不对了,我们再去分析到为什么不对,但是这是最起码是我们是这么来分析的,对吧,那第二个。
35:47
啊PART1对于第一部分来说的话呢,我们就明白了什么明白就是说它前面该三条D0,也就是说它前面应该有三个零了,为什么呢?因为它的结果还是什么,还是四位的,但是呢,它需要干什么,需要往前移动一位,那移动一位。
36:03
那最低位不就空出来,这为什么最低我们都知道补的是零对不对,这怎么办呢?我们把它呢再给它。复制一遍,复制到这个位置来,然后呢,最后边呢,会多了一个一撇B0,也就是说这是我们想要的一个情况,就前面是三个零,中间是它的结果,最后边是一个零好了,那么再往下边的话呢,我估计大家就明白了,对不对啊,这个不应该是B0啊,这个应该是B1啊,这个应该是B1,那么对于PARTDER2来说和PORT3来说,PORTD2来说前面前面就变成两个零了,然后这个地方呢,就应该是啊,应该是B2了,后边呢,就应该是两个零了,那么就写要写成二撇D0啊,如果你要是B的话,就二进制嘛,二进制吧,你要写两个0D的话,就十进制,就全包括啊,全零啊,那么对于他来说的话就是什么,就是B3啊,那B3的话就是什么?就是一撇D0,后边就变成变成三个零,因为它需要往前移动三位啊,如果你要写B,就撇D一个零,如果写B的话,B不是二进制嘛,一个零不能代表三个零,你要写三个零就是这样写啊,就三撇B000,其实你。
37:09
且三撇B0也可以,但只不过我觉得那样描述不太好啊,描述不太好好了,那么这样的话呢,我们就干什么,我们就。完成了这四部分的值,那么这四部分的值我们做完之后干什么?最终结果呢?最终结果是不是就应该干什么?最终结果的S应该等于什么?应该就等于PART0加上一加上二加上三,也就是说呢,会等于这几个值对不对,就等于123好那么大家来想一下啊,这就是我们那个加法器的,就是我们的想法对吧?加把器就应该是这样啊,那么下面我们来进行一个综合分析。
38:14
啊,这个呢,就是我们所做的一个叫做呃,加法器的这样的一个设计啊,那如果说呢,很多人说那老师16位怎么做16位,那你就写PART0到PART16对不对,然后呢,前面有几个零几个零你都可以自己去考虑啊,都可以自己去考虑,这些都是可以知道的,对吧?我们来看一下RTL视图。啊RTL视图,那么在这儿的话呢,啊,全是用这个语,各种一顿语对吧,语完之后呢,就把结果都给啊加起来,其实呢,这一部分就是PART0。啊,这一部分就是PART0,然后这是这一部分PART1,这部分PART2,这一部分PART3,然后呢,得到这个结果,然后进行相加,加起来就得到了一个S,那么我们做这个结果到底是对还是不对呢?呃,我们也不知道对吧,那怎么办呢?我们去做一个仿真。
39:16
啊,大家要明白什么呢?要明白主要是什么,主要是这个射击方法啊,大家你会发现什么呢?就是呃,咱们越到后边越讲的话呢,会陷入一个什么呢?就是说大家的ipga的开发能力啊,基本上呢,都肯定是没有任何问题的,那么最大问题,最大问题就是你不知道这个东西是怎么设计出来的啊这个呢,希望大家呢,一定要知道啊,就是难度不在说写代码身上啊,那当然了,也是要经过大家什么呢,也是要经过大家哎不断的去学习啊,然后呢,才能达到这样的一个能力。好,然后呢,我们来呢去写一下reg,三到零的AG,三到零的BB,还有呢,Wi啊,是我们的一个叫做七到零的一个S,那当然了,我们就会给它再搞一个七到零的啊叫TB-S,然后Z啊TB-S就等于A,你不是做乘法吗?我就直接给你写个乘法啊,我就看我调用这个乘号和你的结果是不是一样,对吧?AB这是S好了,那么下边的话,我们开始干什么,给这个AB的值就好了,对吧,那么AB值的话呢,我们在这呢,还是啊,既然我们学了简单的方法了,我们就用简单的方法来去写,比如说。
41:00
个十,然后呢,Begin end,然后呢,A等于Dollar rh,然后百分号啊,16啊,因为它是什么,因为它是四位的对吧,四位的话最大表示值就是零到15嘛,所以我们给它一个16啊,然后呢,这个是B,然后呢就延时20好了,这我们就做完了对吧,然后做一个设置。好,试试做完了以后,我们做一个综合分析。嗯。做完综合分析以后呢,我们去用这个VESIM啊,然后呢,我们来干什么呢?去仿真一下,然后呢,看一看最终的结果啊,对还是不对啊,其实呢,呃,最开始的大家可能理解不了仿真的含义,比如我们最开始的时候呢,讲这个二手语门,或者讲一个这个叫什么,讲一个这个叫做这个,呃,这个护士问题啊,或者说投裁判问题,也就是说那个电路什么,那个电路就是我们画出来的啊,你比如电路就是我们画出来两个宇门,你说一看就是两个宇门,它怎么可能错呢?但是大家来来这儿看一下,就是如果说我们后边用功能性的语句,或者用很多其他语句来写的时候,你会发现这个电路模型呢,你看不懂了,你看不懂的情况下,那么如何来去分辨它到底对还是不对呢?那么难度就比较大了,那怎么办呢?对于我们来说怎么办,所以我们就是哎只能够啊去做这个功能仿真啊,它呢会给我们哎阐述的比较清楚,然后呢,对于功能仿来说什么,对于功能仿真来说,它就是波形嘛,所以希望大家呢,一定要干什么能掌握到这个叫做。
42:50
这个叫做,呃,去看得懂这样的一个波形的一个能力啊,波形的能力。
43:04
好OK,那么在这的话呢,我们来呢去把它的都变成什么,都变成无符号十进制啊,我们把这四个都变成无符号十进制。好,那么在这一块啊,一乘四得四啊,我们的TPS也是四啊,三九二十,70 33 169,二和五就是11 33 63啊这些没有的情况下,就是什么它没有变化,就跟前面保持一致,63就是七十八十二十三啊,156,六九五十四啊50啊五七三十五,这就结果是对的对吧,就证明咱们这一部分呢,啊,是没有什么问题的啊,是没有什么问题的啊,那么呃,像咱们这一个叫做什么叫做这个逻辑仿真对不对,也就是说呢,大家来看到什么,比如在这里大家看不到,比如12乘以13,对吧,你是。放大你可以看一下,12乘以13就什么,它就会一直都是对的,对吧,12乘以13嘛,等于156,它就是只要你发生改变,它就改变了,但是我们是不是给大家讲过这个竞争冒险这个关系,对吧,也就是说呢啊,他其实呢,是会有什么会有延时的,那么呃,大家还记不记得就是在我们啊最开始的时候嘛,因为我们只有一比特,对不对,在这儿画一下啊。
44:15
我们新建一个啊,比如说呢,我们是什么是这个雨门吧,假如举例子是雨门,A信号呢,就是一直为低电平啊,B信号呢,就为。啊,不是这样吧,A信号一直为高电平啊,B信号一直为低电平,然后突然变高了,是在这个时刻,假如说的A和B呢,接了个什么,接了个雨门,然后呢输出了,那么对于我们来说的话呢,在这一段期间之内的话呢,由于B是低电平,A是高,但是呢,结果就一直什么一直就是低电平,那到这一刻的时候呢,B为高电平,按道理是幺幺得幺,但是呢,我们还会还会拉低一段,就是这一段期间呢,输出什么,输出还是低电瓶,为什么呢?因为这段就是门延时嘛,就是说这个门是有什么是有一定一定延时的,也就是说输入信号,输入信号的逻辑应该是高了,但是呢,它这个门有延时,所以呢还会。
45:06
拉高就是就这叫做什么,延伸一段才会变成腰,那么这什么这叫做移位的情况下啊,觉得是没问题的,但是如果是多位的情况下呢,那么多位的情况下就可以就可能干什么,就会出现一系列叫做不正确的结果,什么叫不正确的结果呢?我们在这儿呢,已经做完了,我们给大家呢做一个后仿真啊叫get level啊,我们来后仿真一下,我们来看一下啊它呃怎么会出现了,就是说我们认为就是不正确的情况啊,不正的情况。好,我们来看一下啊,我们来这看一下啊,我们把它都改成什么,都改成这个无符号位啊,大家发现什么呢?啊,大家发现了一个,呃,很重大的问题,比如说我们TBS呢,我们就不看了啊,TBS我们就不看了,我们只看什么,我们只看这个S,那么这个S你会发现什么一乘以13啊,比如这一乘以13,那么一乘以13得的结果,得的结果是十是什么?十是五乘二的结果是十,但是你会发现呢,在这的话呢,它不等于十了,变成多少了,你再放大看一下,它里边等于11,然后这个里边呢,还有什么,还等于13,还有等于25,还有等于17 21就特别特别多的值,为什么?因为这段都有点叫不确定的情况,什么叫不确定的情况呢?哎,就是说当你的输入信号来了之后啊,由于呢,我也不知道哪一根线早,哪一根线晚,所以很有可能什么很有可能就会出现各种各样的一些结果值啊,各种各样的一些结果值这就来了啊,那么有部分同学听不懂是吧?丁总咱们来简单来说一下。
46:51
啊举个例子啊,假如说呢,假如什么,假如说我们用一个两位数加两位数啊,比如说两位数,两位数,比如说就是A1A0,然后加什么加上B1B0这样的一个数,那么刚开始的时候呢,刚什么刚开始的时候呢,我们算什么算的零加零,假如算的是0000加零,然后呢,突然我要算什么呢?突然我要算一个数,算个什么,算一个,这个叫做一零加。
47:21
这个这个这个呃,加这个幺幺吧,啊,一零加幺幺,那么结果等于什么呢?大家可能就会说,哎,这不有个进位吗?要就等于两个全零对吧,但其实结果一定会等于,直接就会等于全零嘛,其实并不是为什么,假如说举个例子,假如说呢,Ae这根线它跑的是最快的,它的是最快的A0和B1 B0没赶上它,也就是说呢,在。B1B0这两个零还没有变成一的时候,它又先变什么,它先变成了一,那就是什么结果就会先有一个一出来,然后呢,B1信号跑的稍微慢一点,但是它比B0跑得快好了,那结果什么,结果就会出现一个什么呢?结果就会出现一个一零出来。
48:05
啊,结果就会出现一个一零出来啊,然后呢,我们再有B0啊,不是出现一个一一出来啊,然后呢,再有一个B0过来,那就会变成什么零零出来,所以呢,也就是说什么,也就是说呢,你因为不同的信号跑的速度是不一样的,你跑的速度不一样,就是你先跑道的,我就会直接就给你做成逻辑关系就输出了,那么逻辑关系输出呢,可能是不对的啊,逻辑关系输出是不对的啊,所以希望大家一定要知道,有可能就会得到一个错误的结果啊,就得到错误的结果,那么这个呢,呃,还是不明显是吧,来换另外一个值,比如说我们直接用星号来表示啊,比如说是这个A3。A2。A1A0。B3B2。啊,B1B0,那么很多同学可能就想什么这三个数,比如说我们做加法器吧,之前我们做加法器,你说A0加B0,得到一个值S0,然后有一个进位是吧,然后呢,A1加B1加上进位会得到S1,然后以此类推,对不对?那我问个问题啊,因为什么?因为是电路对吧?是电路也就是说呢,A0加B0的时候。
49:15
A3和B3在干嘛?他其实也在做加法,他其实也在做加法,也就是他还会得到一个S3啊,回做S3,但是S3呢,S3是不对的,为什么不对呢?因为A0加B0还没加完呢,加完之后会有近位啊,近位再给到他,也就是说呢,A3和B3此时还没有拿到正确的近位的,他没有拿到正确近位他在干嘛?注意它也会输出,但是输出输出值就不对的啊,他输出的值是不对的啊,输出值是不对的,那怎么办呢?就等着呗,等他拿到正确之后,它输出就是对的了。所以希望大家一定要知道,对于电路实现和对于这个普通的软件实现的不一样的地方在哪,对于软件来说就是什么,就是A0加B0得到结果给到A1加B1,然后再给,再往前给,再往前给,那么A0加B0的时候,A3和B3干嘛在休息,什么都不干,而对于硬件电路来说,A0加B0的同时,A3也在加B3,会得到个什么,会得到一个错误的结果,因为他没有拿到正确进位,所以呢,首先就会出现什么,出现一段时间这个数是错的,然后呢,等到一点。
50:18
一点点往前走,走到把进位正确报上去以后,它就会,它就把这错误的值改成正确的了,所以从这我们就看到什么呢?一乘13等于多少,等于13,那么为什么会在这个中间会有这么多的错误的值呢?是那是同样的道理啊,是同样的道理,他干什么,他就会说,因为呢,某些信号跑得快,某些信号跑得慢啊,然后呢,这是第一个,第二个的话呢,它也有什么,就是说再去做这个计算的时候,他可能说他可是低位先加,哎高位呢,他也在加,但是呢,由于什么,由于它没有先得到低位的正确进位,所以它就会加出个什么,加出一个错误的值出来啊,加出个错误的值出来,所以这样的话呢,就会得到一些错误的值,那么这是什么?我们在这这种呢,我们虽然呃不可以理解为竞争冒险嘛,或者你也可以理解为就是竞争冒险啊,这也没有什么太大的问题啊,因为是门延实所造成的,所以呢,你要得到一乘13正确结果在那等应该是在这儿这个位置啊,这个位置取样才能得到一个正确的结果啊,在这个位置取样才能得到正确的结果,那么在这期间呢,你得不到的。
51:18
啊,你是得不到的啊,所以希望大家一定要知道好了,那么。这是什么?这是一个叫做四比特的一个加法器,那么16比特的我就不再做了,就最多干什么,最多就是在PART0到一直PART15,然后每一个前边应该是放多少个零,后边放多少零,中间放的是什么?怎么回事啊,希望大家一定要知道啊,如果是16位乘以16位的一个乘法器的话,这个结果可能会很大。啊,这个结果可能会很大,对吧,因为16位的乘以16位的对吧?啊,那你需要自己去算输出是多少位的,然后里边需要加多少个零啊,加多少个其他东西你自己去计算一下,所以呢,作为乘法器来说,它的也是比较复杂的啊,比较复杂的好了,那么下边我们讲什么呢?下面来讲这个除法器,那我们来讲除法器,那么对于除法器来说的话呢,我们依然得考虑除法器怎么来做啊,除法器怎么来做,那么我们来还是来看什么呢?还是来看十进制的除法器,比如说说一下啊,328啊除以六。
52:28
328除以六三百二十八除以六,那么怎么算呢?我们会怎么做呢?我们是不是会这么来做一件事啊,啊,大家来考虑一个问题,怎么来做呢?首先第一件事你会干什么?你会拿这个三三是不是大于六呢?啊,三是不是大于六呢?其实三呢不大于六,三不大于六怎么办呢?注意啊,我讲这个可能和你在这个学校或者你的认知可能不太一样,大家可能想就在这写五了,对不对,不不,我们不要这么干啊,我们是这样来做的,跟你的结果是一样,但是你要多理解一步,就是三是不是比六大。
53:04
三不大于六,三不大于六怎么办呢?所以就要商零,就要余三。啊,商零啊,余了一个三,那么余了个三之后干什么呢?然后呢,干什么把后边这个二再拼到这个什么,拼到这个三后边就变什么,变成32了,那32是不是比六大呢?对,是比它大了,那商几呢?商五商五就会得到多少?哎,商五就会得到一个30 30余几呢?余的是二。然后呢二呢,再把这个八拼上。然后呢,干什么就会商一个四就得24,然后得到一个余数就是四,那最后没有数了,好,这个四就是我们除完之后最后的余数,这个就是商,这个就是我们的除数,所以是这样一种结果,也就是干什么呢,也就是说呢,我们首先先拿最高位。拿最高位去和除数相对比,是不是比除数大啊?是不是比除数大?如果比除数大,那好了,这个地方就要考虑到商及,如果这个数比除数小,这个地方干什么?商零,商完零之后干什么?商完零之后干什么?也就是说这会得到一个,得到一个值,而这个值呢,会和后边拼起来,注意我们所谓的拼起来什么意思呢?是不是就是说默认把这数,把这个数的值变成了,就比如这是三,现在32变成它变成了,变成了30,也就是说拼上后边一位,现在相当于他被动的扩大了十倍,对不对?那么对于这上五就得到什么,得到一个了30对不对?然后就是二,那么这商五的话就是五六三十放到这儿,然后一减对吧,一减那好了,那么这是什么?这是一个叫做啊,这个叫做这个十进制的处罚,那么我们来看一下二进制的处罚。
54:48
对二级的处罚,比如幺零,幺零,110除以什么?除以110吧?举个例子,除以110,那好了,问题来了。这个东西怎么来除呢?其实它跟咱们十进制没什么区别啊,所以首先就第一件事儿,我就问第一个幺幺是不是比110大。
55:07
不大,不大怎么办?不大商量呗。第二个。第二,干什么,那再往后就要看这个零对不对,但一定要注意,只是零对比,不是他要干什么,他要把前面那位加上,而前面六位加上怎么就是幺零,幺零是不是比110大还是不大,还是零。101是不是比幺零大还是不大,还是零。1010是不是比110大大。这就大了,那大了之后商几呢?注意在二进制当中,除了商零就是商一啊主商零就是商,那就是商一,只要比你大就商一,那商完一之后怎么办呢?所以就干什么,就要给你写上0110就干什么做减法对不对?一减完之后,这个是零,这个是零,这个是一,这个一借就变成它了,A00 a0干什么A0,就要后边还有数呢,对不对?后边怎么办?后边还有数,就要把这个数呢拼到这儿,就是前面的余数被动扩大两倍,然后接一个,它就看这个数是不是比它大,是好,再上一个一,然后又得到什么0110,然后干什么再减这这是幺,这是幺,这是零,这是零,然后就会再往后再拼一个,然后就看这个是不是比它大,所以呢,这是这样的一种什么?就是除法结果,那么对于我们来说,我们可以精确的来去分析一个,我们不考虑具体值。
56:30
是。呃,A4吧,A4A3A2。A1A0除以什么除以B2B1B0,好,我们就说这样的,因为你也不知道B2是不是零啊,有可能这个只有BB0是一,剩下全是零也没有可能对吧?这个不考虑上坐第二什么,就是先考虑A4是不是会A4就这一位是不是大于B2B1B0,如果要是大于,那么就要商一,如果要是小于就要商零。
57:06
那无论是商一也好,还是商零也好,无论是商一也好,还是商零也好,那我们来问个问题,如果商的是一,那怎么办?如果上的是一怎么办?如果上的是一,那就意味什么?意味着A4要减去B2 B1 B0。然后得到一个值,如果商的是一,那就是减去它,如果商的是零,那就是A4,叫原封不动脱下来还是A4,对不对?然后拖完之后会有么?会有一个我们认为叫做有一个port one port one出来了,那port one出来以后怎么办呢?那么再往后就是看什么?就port one要被动的乘以二,然后呢,拼上这个A3啊就是说白了是乘以二拼上A3,那么我们在这儿呢,乘二没有城市往前移动了一位对吧?往前移动了一位,然后开始拼上一个A3,然后看这个值是不是什么,是不是大于B2B1B0,然后如果大于的话,就在这儿上一,上完一之后干什么?要把这个值要减去B2B1B0,从而得到什么?从而啊得到一个这个商啊,然后得到一个余数啊,是这样一步一步来的,也就是说呢,对于我们做除法来说啊,是这样一位一位一位一位去做比较,然后呢,进而得到前面的值,然后呢,扩大两倍。
58:23
啊,因为实际上是扩大十倍,对于我们来说扩大两倍,然后呢,把上面这个数移下来,其实把上面的数移下来就是对比了,什么对比的就是乘以二嘛,所以在这的话呢,我们给大家呢,来做一个这个除法器。嗯,啊,没没打开错啊,我以为我打开错了。啊叫出法器,叫div下划线,比如我也做一个四比特的吧,然后给大家呢留一个呃问题,然后大家在干什么呢?呃,去做一个这个16比特的啊,大家做16比特的啊,方法是一样的,只不过呢,就是比较复杂一点啊,比较复杂一点。
59:19
啊,刚才那些呢都是原理,所以呢,大家呢,如果把原理都搞明白的话呢,哎,我们现在呢,就可以说去写这个代码啊写的代码。
60:01
好,那么我们新建完以后呢,我们就开始啊去考虑啊,去考虑我们这样的一步一步的啊,我们应该啊怎么来去做啊,这个斯比特的这个除法器啊。好,那么下边的话呢,我们来写一下啊。好,那么对于我们来说啊,输入有这个三到啊三到零的A啊,逗号是逗号A,然后输入呢,有这个叫做三到零的B,然后输出呢。我们还用S来表示啊,我们还用来S来表示,那么还是三到零的,注意啊呃,乘法的时候会把什么会把积的结果给变大,但是除法的时候不会变小啊,因为呢,我们没有说A是一个四位的,然后除以什么,除以0.5,除以0.5是不是就会把这个这个结果给变大了,注意我们没有0.5这数啊,我们全都是整数对吧?我们后边来考虑啊,除法如果有小数怎么办啊,现在我们不考虑只有整数,所以就说呢,我们最多就除个B是谁呢?最多就除个BB就是什么?B就是这个这个这个这个叫做这个一呗,那就除以一最大值就是什么?就是这个A本身呗,那如果B是零怎么办?其实我们现在先不讨论B是零怎么办,一会我们来考虑一下,如果做完之后我们来考虑,如果B是零的话,我们会得到一个什么样的值,好吧,我们得到一个S,那么还有一个什么就是余数对吧?余数的话呢,也是一样的啊,余数的话也是一样的啊,三到零,比如说A,如果是零的A是零那。
61:54
那B呢,呃,这个这个不能说A是零嘛,也就是A是零对吧,那么这个这个这个呃,这个B啊,你是几?那么这个商都是零,余数都是零,那如果说呢,A是一个呃其他值,而B是15呢,B是最大值,那么A就是这个余数对吧?A就是余数啊所以在这的话,我们余数余数用R来表示吧,好,那么在这儿的话呢,我们来写一下,那根据我们刚才的呃。
62:21
考虑来说啊,刚才根据考虑来说,那怎么来做呢?所以首先大家来做第一件是什么,就是说在S的第三位,就是S的最高位,因为我们都是从最高位开始,对不对?哎,最高位开始的,S最高位,什么S的最高位,其实就有一件事,就是判断什么判断A3是不是大于等于B啊,这跟咱们写的这个是一样的啊,这咱们写的是一样的啊取消吧,就是这个就先判断A4这一位是不是大于。前面的值,比如老师怎么可能一位,怎么可能大于四位,注意啊,因为你不知道B等于多少啊,万一B什么万一B是等于零,三个零一个一,而A正好就A3就正好等于一呢?那不就大于等于了吗?对不对啊,所以在这的话呢,你也不知道,那怎么样就得一个什么得到一个S啊,这个S3就是最高位的这个商啊,这个这个商该等于什么,应该等于,就是看这一位是不是比它大,比它大于等于了就是一啊,没有它啊,比它这个小就商零啊,所以在这的话,我们就得到一个S3,那么得到S3以后呢,干什么你要。
63:28
因为你得到S啊,因为你得到S3以后呢,你要干什么?哎,你要说去想要得到S2,而S2是等于多少呢?其实你不知道为什么,因为S2的值呢,会要说根据前边的值要减呀加呀,还有个情况呢,对不对,哎不明白是吧,咱们再来画一下,比如说呢,325除以二好了,再看一下这商几,这商一对不对,一得二是不是,然后这得结果得是12对不对,所以你会发现呢,这一位商几呢?这一位商这个数呢,它不仅仅和这一位有关系,那什么还和前面减完的这个结果,还要和这一位拼起来,对不对,这是才是这一位的结果,对吧?所以对于我们来说,我们就考虑什么,就要考虑的就是哎,你第二部分啊,你第二部分这个值,或者你第一部分的给人,第二部分余下来的值是多少呀,我们也不知道对吧,所以怎么办呢?我们要干什么,要去给他一个余下来的情况,那在这儿呢,我们来写一下,比如说。
64:28
Where,我们一步来写where,就是定义什么呢?哎,我定一个三到零的一个什么呢?叫做port,我们还是按partt_PART0,那PART0等于什么呢?我们就非常简单是吧,PART0 then。Part part,零等于什么?那就等于,如果说啊,如果说啊,如果说S3要等于什么,S3要等于零呢?如果说S3要等于,如果就是这个数上了零了,升了零了之后,你余下这个数是不是跟前面数是一模一样的,所以呢,我们就在这写啊判断S3,嗯,它呢是不是等于一撇B0,也就是说呢,如果S3等于一撇B0的情况下,那PORTD0是什么?那PD0就是一个,非常简单,它就是一个A3嘛,对不对,那如果说啊,那如果什么?那如果说这个S3要是什么,S22等于一呢?N等于一就是什么?证明A3大于B对不对,那怎么办?这个地方干什么,就是要减去它对吧?因为我们十进制的话可以商五商八的,但是二进制呢,只能商对不对,商一的话,那不就是减去它本身嘛,对不对?哎,所以在这的话就是什么A3减去B啊是这样的,那好了,那么第一部分完事了,那么第二部分的话呢,我们就Z一下,那么S2应该等于什么呢?再来想是不是。
65:58
这应该是这样的,也就是说你前边的值,无论商几已经得到了一个什么,也得到这样的一个余数,对不对,也得到一个余数,这个余数干什么?这个余数要跟他拼起来,但是拼不能白拼,还要干什么,要往前移动一位对吧?要往前移动一位,要往前移动一位,移动完之后呢,拼上我这个对吧?哎,移动一位,那么对于十进来说是乘十的对吧?对,二进能,二进能是乘二的对吧?那么对二进来乘二,我们又不乘,那怎么办?就说白就在这个数干什么,在这个数后面拼个零就完了。
66:25
啊,拼个零就完了,那就这么简单啊,拼个零就完了,然后呢,再拼上什么,再拼上A2对吧,所以在这呢写一个,哎,就是说这个叫做微拼接啊微拼接谁呢,就是我们的叫做这个PARTT0。到后边啊,到后边拼了个谁呢?拼了一个B啊,拼了一个叫做A2啊,拼了一个A2,也就是说呢,你在人家屁股后边跟了个A2,其实你跟了个A2相当什么意思,就相当于就是把PORT0呢扩大了二倍啊,然后呢,A0放到了人家后边啊干什么?问这个是不是大于什么,那这个是不是大于B啊,这个如果大于B了啊,那怎么办?那就是S2就会等于什么,就会等于一,如果不大于啊,就是零,那好了,下边的话啊,再再写一个啊port一再往下一步往下递推啊就一,那么对于port一来说的话呢,就很简单对吧?哎,PART1来说跟上面是一样的对吧,那就是PA rt下划线,然后一等于什么呢?它就等于看S2是不是。
67:34
啊,S2啊,就看一下S2啊,它是不是这个一撇B0啊,如果S2是一撇B0的话,证明什么,证明它的结果呢?还是啊,就证明这个结果没有B大,那怎么办?就把这个结果原封不动的拿下来啊,那如果比它大呢,那就是说要把这个结果干什么,要把这个结果要减去B好了啊,这就是一个呃,比较简单的一个问题啊,比较简单问题也就是说呢,就看这个除数,就看这个商是不是等于一,商要是一,那么你这个值就要减去除数得到一个结果啊,如果商要是零,就是把刚才那个值就原封不动往下一拖啊,拖下来之后干什么,就再往后要拼一位了,对不对?哎,所以是这样的,那么对于我们来说的话呢,再往下走是。
68:28
好,我们在这呢,写一个PORT2PORT3,我们都给它写2PORT3好了,再往后那then s1等于什么?哎,根据上边的是吧,大家就明白了是吗?应该是哎这个叫做呃,未拼接的谁呢?应该是哎PORT1这一部分对不对?PORT1逗号后边要跟什么?后边要跟一个A1啊,这个值是不是大于等于B啊,然后a s partt的。
69:04
二啊,等于多少呢?它就等于啊,判断我们这个S1啊,判断我们S1啊,是不是等于一撇B0啊,如果要是的话,那就是把上边拼好那个纸直接拿下来就可以了啊,如果它要是等于啊呃,如果它是等于零给接拿下来,如果等于一干什么?你要把这个值呢?要减去一个B啊再拿下来好了,那么还有一个是吧,在S0等于什么呢?它就等于啊,我们还是未拼接啊把上边那个结果PARTT2的结果,哎,然后呢,拼上一个什么呢?A0啊,拼上一个A0啊后拼上A0以后怎么办呢?哎,就问他,诶是不是大于B啊,如果大于B啊,那就是等于一啊小于B啊大于等于B等于一小于等于小于B就是等于零,那啊就是我们的这个叫做PART4啊,Part这。
70:04
个323等于什么呢?等于啊是一样的,对吧,也就是等于什么,等于这个判断这个S。零啊,是不是等于一撇B0啊,如果是的话怎么办呢?哎,就把这个值原封不动的脱下来啊,否则就要干什么,就要让你这个值啊,要减去B啊,减去B啊是这样的啊,也就是说呢,呃,大家一定要知道啊,就是在这儿为什么都减B呢?对吧?为什么是减B呢?不是说应该减什么,应该减什么应该减去,这个叫做商乘以除数吗?其实很简单啊,如果他要是,如果他要是一的话,商乘以除数,因为你只能商一对不对,你商一乘以除数,除数就是B嘛,所以就是就是它这没问题啊,然后最终啊商做完了,那除那余数呢,其实余数啊R就是谁啊,其实就是三。啊,其实余数就是PORT3啊,余数就是P3嘛,就是最后一位减完除数以后的结果嘛,哎,这就是它好了,那么在这儿我们现在呢,干什么呢?就把这个除法就做完了,希望大家一定要去能够去理解啊,去理解啊什么呢,我们在这儿啊给大家再来说一下是吧,214除以六怎么除呢?注意不要直接去21除,因为二肯定不够除,注意因为当初咱们的是就是未知值对不对,所以你不知道怎么办,那不是零,注意这地方要商零,那商零的话怎么办呢?哎,所以你也要去做数,就是零乘以六等于零。
71:38
就会余下什么呢,就会余下来一个二。对不对,是不是就会余下来一个二啊,所以现在来看一下啊,我们所做的这个代码当中,咱们再对应一下。好,那么这个零就相当于我的S3。啊,零就相当于S3,那P0现在PO0就相当于余下来这个二,啊P0相当于余下来这个二,也就是说呢,我就会判断这个商是不是等于零上它等于零,那我就是把二这余下来对不对?二就直接下来了,如果它要等于一呢?是不是就二减去六了对吧?当然不对了是吧,不是了对吧,好怎么办?那么S2等于什么呢?S2是不是应该是让。
72:19
二和这个二要往前挪一位,和后边这个一拼到一起啊,再来看一下是不是把PO0写到这逗号A2现在什么,现在就是相当于拼拼好了嘛,就在人家后边追了一个A2嘛,对不对?然后看这个纸是不是大于六是怎么办,只要商三,商完三之后好结果有三了,S2有了,S2有了以后怎么办呢?就要得到PORT1对不对,那怎么办呢?就是三六一十八,然后一减就不是变成了,就是变成了三对不对,所以三就是什么,PORTD3就应该是什么,就应该是这个拼到一起,这个减去谁减去商乘以这个这个这个这个除数对不对,那么由于我们是二进制对不对,所以这个数只能是零或者是一对吧,所以说如果商是零,那就是还是把这只原封不动往下一拖,如果商是一呢,就减去一个,谁呢,减去一个,就是拼完之后减去一个B就可以了,所以呢,这是我们说,这是我们最终的一个结论啊,那么一直到最后就得得出一个余数来啊,这是我们的一个结果啊,就。
73:20
比说我们用什么用这样的一种叫做移位啊和减法的四系啊,我们做出做出了一个呃除法,那么对于16位的来说的话呢,其实的话呢,就是你会写这个P0,一直到破破15嘛,然后最终就是你自己把这个呃逻辑关系啊,一定要去想明白啊,一定要想明白啊,就是说啊,它是这个一步一步的,因为它都是从最高位啊先除啊,除法就是从最高位开始出的啊,然后呢,大于就商商一,不大于就伤零,那伤零就是完全往下一拖,但往下一拖你看往后计算怎么办?就是要把你推下来,那个值往前移动一位,然后拼上后边的啊是是这样的,那么如果说呢,哎,那如果说呢,如果上的是一怎么办?我上的是一的话呢,那就不是直接往下拖了,是么?而是你的这一位要减去你的除数,然后呢,得到一个值,然后这个值再往前移动一位拼上后边,所以最终要减不减去,取决于你的本位是不是你的本位和,或者说你的拼接完前面的位数是不是大于人家的除数。
74:20
是这样的,那好了,我们来进行综合分析一下。啊,这就是我们自己做了一个除法器,大家其实你会发现什么呢?就是说我们还在一步往上堆积,也就是大家从这来看一下,就是我们在去做这个除法器的时候,利用什么,用了各种比较器对不对,用了比较器啊,用了各种比较器,而比较器我们上一次做了对吧?代表上一次做了啊好,那么下面来看一下这个RTL视图。好,那么他呢,就是从最开始的时候啊,一步一步的去这个去做各种各样的一些啊操作啊,最终呢,得到一个S和R,那么这个呢,我们其实也看不出来啊,哪跟哪有什么不一样的地方对吧,那怎么办呢?我们还是老规矩啊,去做个仿真。
76:13
好,那么在这的话呢,我们来去写一下这个叫做三到零的A,三到零的B,然后Y,然后是三到零的S啊,然后Y啊是我们的叫做三到零的R,那么当然了还有az啊,没有这个叫做这个TB是吧?Where啊,三到零的叫TB-S啊叫做SWEAR3到零的啊,TB-R,然后呢,我们来直接写Z啊,TB-S就等于A除以ZTB-R就等于AB。
77:11
对B求余啊,就相当于就是什么,相当于就是我就直接用的除号和求余号来得出来A和B之间的商和这个叫做余数,我们来看一下,就是我们啊写的这种方法,然后呢,和什么和人家这种直接调用的这种方法,得到的结果是不是一样的啊对吧?好,那么还是啊repeat啊,那么其实呢,我们知道这个repeat语句以后,还有我们知道随机数这个以后,大家其实就会发现啊,我们之前比如说我们去做仿真对吧,之前怎么做呢?之前都是一说我们给一些固定的值啊,或者说呢,我们给什么,或者说我们去给一个叫做呃呃这个这个这个这个呃全部所有的值全部来一遍,那其实都比较麻烦,对吧,我们来呢,就这样来做就比较简单一些。
78:20
好,我们来编一下。然后呢,我们来看一下这个结果啊,对还是不对,然后一会儿呢,给大家再来说个问题啊,这个里边可能出现了一个警告,大家可能都看到了,但是呢,我们啊在这儿啊,一会儿我们再给大家也再去解释啊,这个到底都是怎么回事儿啊,现在我们先不管它。先去仿真一下啊,看结果对不对。
79:17
好,那么下面我们来看一下这个结果对不对啊。好,那么呃,在这我们来看一下是吧,比如说啊这个呃,这个这个我们把这个S和TBS放到一起,R和T放到一起啊这什么就四除以一嘛。第一个就是四除以一嘛,四除以一啊商是四啊,余数是零啊,九除以三啊商是三啊,余数是零,13除以一啊是不是13除以13啊,然后呢,商是一啊,余数是零,五除以二啊,余数是一啊,商是二,一除以13啊,商是零余一六除以13,商是零,余数是63除以12啊就都是一九除以六商一啊,然后呢,余三五除以十啊,然后呢,商零余五啊,五除以七啊,这个商零余五啊,然后二除以15啊,商零余二啊,一直就是这样,大家都可以看到这全是都是正确的,那么呃,到这个位置的时候啊,到这个位置大家发现什么,发现有了一个零除零。
80:30
啊,大家翻译了,有一个零除零,然后零除零,这边出现一个什么,出现一个全是。红线。啊,全是红线的一个结果,那么呃,为什么全是红线的?注意啊,我们可不说红线啊,大家看零除零得到是什么?我们的我们得到的S是15啊,我们得到的S是15,我们得到余数是零,而什么?而我们用这个叫做除号和求余号得到什么得到两个红线啊,那么为什么呢?因为很简单,因为在whereload当中的话,它默认呢,你除数是零,那么结果就是错误值啊,这是不正确的。但其实对于我们来说,我们来看一下,就是说任何一个数除以零,应该结果应该等于多少,其实对于我们来说,应该就是上过大学你就应该明白,任何数除以零,它的结果应该是无穷大。
81:16
因为零可以认为是无穷小对吧,所以它也是无穷大,那怎么办呢?所以在这经过我们这来做,就是任何一个数除以零的话,会等于什么,会等于最大值,比如说我们用四位来表示它最大值就是15,所以零除以零就会出现15啊,所以就会出现15啊,就是说啊是这样的,我们并没有说规定它是等于零,它是怎么样,那么它会默认等于15的啊,那么这个我们就不再关心了啊好了,在这儿我们最终呢,哎,这个结果是没有任何问题的,到时候大家也可以做验证,那么包括如果大家呢,做一个什么,做一个16位的触发器的时候呢,你会发现呢,呃,写起来会比较的什么,写起来会比较的复杂啊,也比较复杂啊。呃,16位的除法器的话呢,我应该也写了,到时候给大家来,现在给大家来看一下啊。
82:04
啊嗯,关于16的触卡器的话呢,跟之前的这个叫做我给大家讲解的原理是一样的啊,就有什么,就有PORT0到PORT15嘛,就会看到啊Q15啊,这Q来表示的是商啊,Q15就表示A15是不是大于等于B,如果是的话,如果它等于一就减不等于一就原封不动拖下来,然后呢,Q14就等于前面的PART0啊然后呢,进行一个移位啊,然后移位移位往前移一下的,然后最终就一直到最后啊这几其实设计方法是一样的,就看大家呢,能不能理解啊,这整个的一个东西啊,整个的一个东西,那么呃,在这当中有一个警告是吧,我们说了给大家来解决一下,那怎么办呢?我们重新啊双击啊,它这双击其实它不是你双击,因为已经运行完了,但是你双击的时候,它还会出现,就告诉你有一这机已经运行成功了,是不是再运行一遍,我们点试就完事了啊,或者大家直接点右键这个start again就再运行一遍也可以啊。
83:24
好,那么在这会出现一个什么警告呢?会出现一个这样一个警告啊,就是说啊,Vrlo h dl啊这个赋值的时候,在这个第20行二十三二十六是一样的错误对吧?二一样警告对吧?比如20行在这儿来看一下它这个为什么会有个警告呢?你看它有一个叫缩减五位的值去匹配一个四位的,什么叫缩减一个五位的匹配四位的呢?其实是这样的,你看你P0是几位的呢?你P的零其实是一个四位的值,对不对,你四位的值后边又拼了一位,其实变成几位了,就变成五位的对吧?变成五位了啊注意就变成五位了,那么这五位的值要给到一个破的一至四位的上边,它就会干什么,就会有个警告,就告诉你啊,你把一个五位的值给了一个四位了,那是不是就不对了,注意啊,五位的值给四位对不对,取于什么,取决于这个五位的值的最高位是不是什么,它是不是一对不对,如果第五位永远是一的情况下呢,那么你给过去肯定就是错的,那有可能是零,有可能是一呢,你给过去也是错的,那如果肯定是零呢,其实你就。
84:24
直接把第四位给过去啊,是没有任何问题的,因为第五位是零嘛,第五位是零就直接删掉就不要了,对吧,这个是没有任何问题的啊,这个没有任何问题,那么在这儿的话呢,我们可以确认啊,他们的这个拼完之后,或者说它这个剪完之后,这个PORT0 portd1 portd2 port3,它什么它的最高位都是零啊的最高位都是零,有些人说你怎么能确定啊,你怎么能够确定它的这个,呃,就是说它的这个呃,PORT1啊,然后呢,Port的这个这个零,它的最高位啊,都是这个零的啊,因为它因为大家呢,可以自己去分析一下,就从这当中,它都是一步干什么,一步一步减下来的啊,一步一步减下来的啊,它的高位如果是一的话,那么整个除法就做的就不对了啊,整个除法做的就是有问题的啊,这除法做的有问题的,所以希望大家一定要啊知道啊,一定要知道。
85:18
啊,那么呃,在这儿的话呢,我们来呢,就呃不去分析了啊,或者大家要分析也可以自己去分析,你比如说A3对吧?呃,你A3只有一位对吧?A3只有一位,注意啊,A3就只有一位,那你想啊,这个A3这是A3减B,那么它最大就是等于A3对吧?A3什么A3只有一比特对吧?A3如果只有伊比特的话,意味什么?意味着PORTT0的最低位它才有值,也就是PORT0的。一第一位,第二位、第三位都没值,只有第零位有值,那么当你从这儿拼了一下子之后,最多的造成什么?最多的造成就是第零位和第一位有值了,而第二位第三位还是没值的,那么再往前移动的时候,你会发现呢,它移动了一次啊,它前面还是全零,这个呢,前面还是全零,这个呢,前面还是全零,所以呢,它的话呢,对于我们来说,前面都是什么都是全零的,所以你舍掉不要是正确的啊,不要是正确的,那么这个警告的话呢,我们在这儿呢,就先忽略它,只要说能保证我们的逻辑设计啊是没有任何问题的就可以了,如果大家是16位的话,怎么办呢?那大家你就干什么,就写一个16位的啊,16位的就可以了啊,16位就可以了,那么这样会完全保证它没有错误的,那么这是从这分析,那么从哪儿呢?我们也可以说从我们的理论的位置上来分析,你比如说这是一个A3A2 a1a0。
86:45
好了,我呢,呃,我这是B2B1B0,好了,那我们来看一下,它每次往下余数余余就算拼到后边啊,就是把这个数往前一两位拼一个,一两位拼一,一两位拼一个,那你想啊,它能余下来数最大是多少?能余下来最大的数不就是上边是全零吗?都没减,都余下来了,那都余下来多少?都余下来的不就是被除数吗?都余下来的数的最大值就是被除数对不对?所以你想一下,我用了一个和被除数位宽一样大的一个数去接它下边这个数啊,就是接它于就是下边这个,这个计算的中间过程这个值,所以它肯定不会大于被除数的,无论如何,你接的这个值它也不可能大于被除数,对不对,它最多就是跟被除数一样。
87:33
啊。或者呢,就比对数要要小对不对,因为你要不断的去减B对不对,要减B对吧,所以你不能越减越大对吧,肯定要减越减越小,所以这样的话呢,我们用它呢,是没有任何问题的,所以说从这个位置上啊,我们来这儿分析,大家一步步来分析也可以,或者说从这个叫做这个结果上也可以,那么这个就什么,这个我们就可以认为什么认为是一个叫做无关警告啊,就是说我知道高伟是零,那么你不用提醒我了,但是呢,他又不知道是不是,所以他会提醒你,你这个缩减了一位,是不是说就把值给弄错了,所以这就是我在最开始的时候给大家来说呢,有的时候呢,很多警告大家可以忽略,但是呢,呃,跟着我来学习,我会告诉大家呢,呃,大多数的警告是什么意思,然后呢,我们来去分析,他是警告,是告诉我们啊,你这里边儿啊,可能有问题,或者让你关注一下,你把五岁人四了是不是包是不是有问题,所以你看我关注了它没错啊,或者说我们在设计的时候我就知道啊,我设我就知道,因为我要移动嘛,一移动四位就会变成五位了,对吧,那么我就会知道,但是还。
88:35
特别接为什么,因为我知道他肯定没有错误,所以我已经注意到了,但是他还提醒我,所以这种警告呢,我们分析了以后,可以忽略不计它就OK了啊,忽略不计它就可以了啊,这是我们的一个除法器,那么大家来看一下,对于我们这个乘法器也好,对于我们的这个除法器也好,大家来看有什么问题啊。我觉得对于这个乘法来说,对于这个除法来说的话呢,我觉得大家最主要最主要问题什么?就是首先第一个就是大家能不能够理的明白,就是因为大家的举例子什么一举例子就是说固定数,比如325除以三啊,那如果说我来说这个X2X1X0除以这个K1K0,那么当成字母的时候你就不知道了啊,当成字母的时候大家就可能就不太清楚了,因为你也不知道商及对不对,所以呢,我们就只能说全方位去考虑啊,当他是字母的时候怎么办?诶,那就要去考虑到底商零,那有可能商零,有可能商医,那商零怎么办,商医怎么办?所以你会发现商零和商一是一样的,商完零了,只不过减的就是零乘以除数啊,如果商的是一怎么办?那就是减的就是一乘以除数,所以无论商什么结果都应该什么结果都应该是啊,它前面的这个值减去商乘以余数不是。
89:57
商乘以除数,然后得到一个值,然后这个值呢,再跟后边再拼起来,怎么拼呢?就是把前面这个值无形扩大十倍拼上去,那么对于二进制来说就什么就是哎扩大二倍,而扩大两倍对于在二,对于在这个数字电流当中,我们扩大二,没有人去写乘二怎么办?都是在后边直接拼上就可以了,因为你一拼就会什么就会你会自动变成高位嘛,所以数就会自动变大啊是这样的啊,是这样的啊,所以希望大家一定要知道啊,那么刚才的操作可能没给大家讲,是我来说一下,比如说我这个数是110,然后呢,我想把它后边拼个幺怎么办?我是不是可以说让这个数乘以二,然后加一对不对,其实我是不是也可以直接说110,后边直接把这个幺写后边不就完了吗。
90:39
这个结果是一样的啊,这结果是一样的,所以呢,我就直接做了,其实呢,这个数可以分成,这个数可以分成1100加一对吧,加上001对吧,所以你会发现呢,这个是什么?这个数其实就是这个110乘以二嘛,因乘以二就是左移一位对不对啊,乘以二就是左一位,其实是一样的,其实是一样的,好了,那么呃,这个呢,就是我们的一个,呃,这个这个叫做乘法器和除法器啊,大家可以看一看啊,有没有什么呃。
91:08
太多的这样的一个问题是吧,问题好了,那么在大家在考虑这些问题的时候呢,我来给大家呢,呃,把这个叫做什么,把这个咱们前面讲了这么多的组合逻辑啊,我们来去说一下,就是我们前面讲了什么,我们前面讲了这个。呃,这个叫做三三种啊,或者四种啊,或者N多种门电路是吧,然后呢,我们讲什么,就是用门电路啊,用这个叫做化简,这个叫做针织表啊,从而得到什么,从而得到一个叫做这个这个呃,各种各样的电路,然后呢,后边给大家讲什么呢?就是说呃,当这个设计相对来说比较复杂的时候呢,我们干什么,我们可以用一些功能性的一些语句,然后去描述它,然后呢,我们就干什么,就讲了20元多录选测器啊,投票器呀,哎,这个各种译码器,编码器啊,但是这些讲什么,都是讲用一些功能性的语句,然后都是都是一个模块,就一个设计,只有一个模块就构成就OK了,那么再往下讲课的时候干什么,我们就讲了一些复杂的设计,那么这些复杂设计呢,也全部都是组合逻辑,但是我们发现呢,当它比较复杂的时候,如果我们再一次去用功能性语句来描述,好像也不太方便,然后呢,用这个,用这个什么,用这个这个这个门店路去描述,那就更麻烦了,所以怎么办呢?我就考虑个什么,就分模块,就top to down的设计,对吧?也就是说呢,我们从顶层再往下细分细。
92:25
分细分,细分,一直细分到最后,然后这个最后这个呢,能用一些简单的语句把它描述出来就可以了,所以呢,干什么,我们要学会这个什么设计思想,设计方法,那么在这当中呢,我们讲了16个循加器啊,减法器,乘法器,除法器,比较器都是什么,都是一个啊,非常简单的一个叫做组合逻辑啊,非常简单一个组合逻辑,那么这些组合逻辑啊,在设计过程当中呢,哎,我们其实通过这个例子,我觉得大家也明白了一个什么呢,就是它的难处呢,其实我觉得不在哪儿,不在代码上啊,但是对于他来说呢,可能还有一部分在代码上,对吧,但是大家多练习啊,我们最终的代码,只要你有想法,代码就一定能出得来啊,代码就一定能出得来,那么呃,现在呢,我们就不再说这个了,我们来说什么竞争冒险对吧,我刚才说的不再分析的,还简单分析一下什么呢?就是说我们所有的电路啊,所有的电路啊,那么只要是组合逻辑,那么就一定会出现个什么问题呢?就是说输入啊与输出之间有一个。
93:25
一一对应的关系,它有一张表啊,它有一张表,也就是输入发生改变,输出立刻发生改变啊,它的对应关系是一样的啊,中间呢,没有任何什么记忆性单元啊,没有记忆性单元,那么我们为了能够让它记录住电路的啊,整个电路的一个这个叫做这个这个状态啊啊那么有记忆性我们干什么必要选选择用一种叫做什么叫做记忆的原件,那么在书店当中,我们给大家讲讲的寄存器对吧?那么对于在IP当中,我们到底用不用设计寄存器呢?注意不用啊。在IP当中不用设计顿,为什么呢?因为ipg当中呢,就有寄存器,这给大家已经讲过了,对吧,也就说它直接就有寄存器,也就是说我们直接可以调用就可以了,那么我们调用寄存器可以解决什么问题呢?其实呢,在最开始讲书店那就跟大家说了,电销计算器能够解决一个非常好的现象,什么呢?就是我们来说一下,比如前面是什么是组合逻辑,我们称之叫FA啊是组合逻辑好,那么这个组合逻辑的话呢,经过一堆变化之后呢,经过输入值到输出值之后,这个值会,这个值会有竞争冒险,或者说呢,像我们刚才所给大家讲的,乘法七也好,除法七也会,什么,它会有一定的错误值,会有一定的错乱值,那么如果说我这算的就是二乘五,那这会出现一个15,出现一个18,除现个36,这怎么都有可能,那么你最终输入出去的那是不太对的,那怎么办?所以我们可以把这种关系也理解为叫什么叫竞争冒险所带来的一个错误值,那怎么办呢?所以我们在竞争冒险当中的话呢,给了一种方案叫什么叫引入选通脉冲,什么意思呢?就是说当这边稳定了,我给你个脉冲,你把这个稳定的指数。
94:59
数据不就好了吗?那好了,现在我们这样来做,如果在这加个寄存器呢。
95:04
然后呢,我在这儿给一个是CLK,比如CLK呢,就是一个脉冲,我给个生成沿这个值才通过,那好了,这样的话是不是我这给个值,这有乱七八糟一大堆,错了,错了就错了呗,我不管它啊,我不管它,然后呢,上升眼一来把正确的值采走,错误的值就干什么,就打消掉了啊,就是它不会往下传递了啊,注意每一级其实都会产生错误值,但你要注意不让错误值往下产生就可以了,就不下不不让它往下蔓延就可以了,所以这个的话呢,我们就干什么,就讲了一个计算机的功能,它可以干什么,它可以连接上我们的一个组合逻辑啊,能够把组合逻辑的一些毛病啊给去除掉啊,那么当然了,计算器的功能呢,远远不止于泰,它能够存得下一比特,有的人说那他存就能存得下一比特,还能只能存一会儿,对吧?上升眼一来,它的萨格比特就没了,它就会再存一个,那么就只存这一会儿,有没有什么特殊的作用呢?注意啊,这个也很简单啊,我们它。
96:05
更存一会,那如果说我在挖后边再接一个RG呢。那这样呢,那就会得到个什么结果呢?就是这个上升一二,那就是他们俩接同一个时钟啊,上升一二,一来他把值给他了,上升一二,再一来他把他原来的值就给他了,那就意味什么?意味着说这个值永远是上两拍的这个值,这个值永远是上一拍的这个值,那就说我们如果要这么来级炼的话,你会发现呢,我们可以得到什么,就是这个情况的,以前所有的时刻的情况,为什么?因为我就不断去集联去保存不就行了吗?啊集联去保存就可以了啊,这就是一个啊非常简单的一个啊电路,那么对于我们现在所有的电路来说啊,对于我们现在所有电路来说,所有的电路都是由组合逻辑加寄存器来构成啊,有些人说我上网查了,所有的逻辑应该是由组合逻辑或者实际逻辑来构成,注意我们讲了实际逻辑,什么实际逻辑,它就是由合逻辑加上寄存器来构成,所以我们现在就认为什么,就认为现在所有的逻辑就是什么,就是组合逻辑加上时序逻辑器件,但注意实际逻辑器。
97:11
但不一定非要是寄存器啊,有可能是其他的处罚器啊,其他处罚器希以大家一定要知道,那好了,那么呃,我们给大家说了是吧?呃,我们的乘法器呀,加法器呀,比较器啊,其实应该在上一周,我上一周周五的时候应该结束啊,但是我们没结束,所以今天的话呢,呃,现在是讲的稍微快一点啊,然后呢,呃,我只讲了四位的蒸发器,四位的触发器,那么对于大家来说的话呢,大家呢,自己去做出16位的,包括比较器啊,不明白的到时候我们再讨论,那么今天啊,我们来引入第一个就是持续逻辑信间的调用预仿针啊调用预仿针好了,那么下面来讲一下,就是如何在Co当中来做出一个寄存器,注意不是设计啊,叫调用,所以我在这儿呢,就写了一个什么,写了一个调用。啊,写了个调用啊,为什么说调用呢?其实说白了就是在IP里边有那么一会儿,我再用芯片规化器带着大家去看一下里边到底是怎么样子的,好了,那么在这我们来写一下。
98:11
啊,我们在。这个位置是吧。计算器呢,我们叫register对吧,Re啊。呃,GIS啊,下划线啊,伊比特,我们就起个这个名字啊,它就叫做伊比特好。然后呢,我们来写一个叫做doc。那今天的话呢,我们尽量往后讲啊,然后呢,有可能讲不完,那么讲不完我们也不着急,然后我们就呃,一步一步一步一步的往后来说啊,然后呢,大家尽可能都理解了啊,因为今天讲的话呢,呃,今天讲的就是说,按道理说我们来讲的计算器这一部分的话呢,呃,是有很多很多人啊在这个网络上问的一些问题,其实呢,我觉得什么,我觉得就是说前面这个东西呢,他没学好啊,他没学好,所以呢,他在后边就开始犯迷糊了,很多地方都不知道啊,那么这是一个很重要的一个问题啊。
100:01
好,那么对于我们来说的话呢,是吧,对于我们来说啊,就是我们寄存器呢,我会给大家做好多个版本啊,好多个版本出来,那好了,第一个我们的输入呢,有时钟对吧?就有一个CLK对不对?好那么第二个呢,输入会有个什么?输入会有一个D对吧?就是D信号对不对,然后呢,输出呢,会有什么?会有一个Q对吧?啊会有一个Q,好了,这就是一个非常简单的一件事嘛,就是说呢,呃,对于我们来说,我们知道是吧?寄存器是什么?对于寄存器来说就是呃,我们一比特的寄存器是吧?就是说这有一个值,然后这有一个信号称之为做D,这个信号称之为叫做Q,然后呢,上升沿一来,然后呢采样一下D,然后给到Q,然后呢上身而不来。D可以随便变,但是呢,Q不变,Q等于多少?Q就永远等于D的上一个使用沿采样的值啊,Q就等于clock上升沿采的D这个值啊,就这样,所以呢,我们怎么来把就是中间这个就是这个这个功能给描述出来呢?注意这个也没什么好讲的,因为它还是语法规则啊,那么如果要想描述这样的一个这个这个寄存器,那么它只有一种描述方法,叫什么叫就是always啊,它than语句不能够描述啊这个寄存器啊,注意只要描述寄存器必须要用always语句always at括号,那么括号写什么呢?之前的组合了一起什么写的是星,对不对啊,写的是个星,也就是说呢,所有的代表,所有的敏感店面来了之后都会刷新一遍,那么今天我们写什么要写的是时钟的上升牙,注意这个叫啊positive啊这个这个有有人叫这个是吧,叫positive就是这个积极的前三个字母啊,后边这个的。
101:54
DGE叫峰值,所以这个呢,重要叫上升沿,就是clock的上升沿就完了啊,Clock的上升沿,那么这样的话就干什么,就是总是等到时钟的上升沿,然后去做动作,那么其实呢,呃,这么来理解啊,就是说这么来说其实就已经有问题了,我给大家说过啊,其实没有执行啊,代码不执行,执行什么执行是电路啊,执行成电路,所以在这的话呢,我们直接写什么,就是这一句话就代表什么,就是描述了一个寄存器就完事了啊,然后呢干什么。
102:25
然后就写一个什么Q等于D啊啊,写了一个对写的减号啊,Q等于D,就是把D给了Q吧,就商乘下来的时候,把D给了Q就完事了啊就完事了,那么在这儿啊,我给大家呢,先不讲这些为什么,大家先记住,就是说如果说Q是寄存器的情况下,也就是说这个地方是时钟沿的话,这个Q是寄存器,那么寄存器的话呢,我们要求什么?要用小于等于号赋值啊,要用小于等于号赋值啊,要用小于号等于号赋值,也就是说我们用等于号是给组合逻辑,是给组合逻辑赋值的啊,等于号是给组合逻辑赋值的,而小于等于号是给谁呢?是给寄存器赋值的啊,是给寄存器赋值的,注意这是在设计当中啊,在设计当中,我们是小于等于号是给寄存器赋值的,等于号是给我们的组合逻辑就是一一堆线啊,一堆门复制的啊,希望大家一定要知道,那么另外一个规则不变,那。
103:25
什么规则呢,就是说这个。在这个叫做always当中被赋值了,所以Q呢,应该定义成reg的类型啊,Q应该定义成reg的类型,好,那么说到这我们来进行一个综合分析。啊,今天就学了一个叫做石中眼是吧。啊,这就是一种描述什么描述这样的一个叫做哎寄存器的一个方法,就是说上升沿来了,哎,然后呢,Q就能变化了,变化谁呢,就是D给了Q上升下不变的时候呢,Q就保持不变,啊Q保持不变,那么在这儿呢,一定要注意计算器一定要用小于等于号负值,那有人说我觉用等于号负值会不会错,注意啊,现在你来看还不会错,但是后边可能会出现各种各样的错误,现在你先这个我说的先,大家先记住要用小于等于号赋值,那么下面来看一下这个RTL视图。
104:29
好啊,来看一下啊,这是什么?这就是一个非常简单的一个寄存器,也就是说呢,其实我们什么都没干,它就直接就给我们送来个寄存器了,那么下边我们来看一下啊,比如说我们在这儿呢,给它布局布线一下啊,我们给它布局布线一下,然后呢,看一看啊,就是这样的一个,呃,就是一个比特的寄存器啊,它呃是如何在ipg里边实现的,它会不会像是我们学学这个叫什么学这个就是这个叫做书店似的啊,用什么呃所存器啊,什么前集啊后集啊,什么主主处发器啊,从处罚器啊来构成这堆东西,我们来看一下这货是不是啊,看一下在这放大。
105:13
来看一下啊,它呢干什么,它就直接呢,D端信号呢啊D端信号从这进来就一格信号进来,跟它一保持一模一样,然后从这进来,然后给了data in,然后给到D,然后这一个Q输出了,所以呢,这个就什么,这个就是个寄存器,你会发现呢,发现什么,发现你写了一堆代码,这堆代码就是这个代码,这个代码没有做任何设计做什么,就是说把这样的一个寄存器给连上了啊之前组合了,之前组合了是从这个位置直接就说输出了,而现在呢,是从这儿进来,通过它寄存了一下作为输出了啊是这样,所以说这个呢就是个什么,这个就是一个寄存器啊寄存器,那么之前的话,这个我们一直用用的是四输入查找表,再去做功能,从这拉出来啊,从这拉出来,那么这个的话呢,我们也可以去看一下,比如说呢,我们来去看一个复杂的什么呢,我们来去再次打开一个啊,我们再打开一个port啊,Port可以打开好几个啊,我们去看一下我们的除法器吧。
106:08
我们把除法器打开,然后呢,我们除法器呢,去做个布局不限,我们来看一下除法器里边是不是用的都是前面的,而后边全是空白的,它没有用到,就是说像我们这里边,它只用到前面这一数列,后边这数列都没有用到啊,因为这个是寄存器啊寄存器。嗯,等一会儿啊,可能比较慢。好了,那么在这的话,我们给他来个布局布线。
107:22
好了,那么布局布线通过以后呢,我们可以看一下这个芯片规划器,好来看一下啊,他用了这一块这一块这几块你来放大看一下,你看大概放到这个位置的时候,大家就已经能看到了,是吧?你比如这这用的这16个,这用了这13个吧,用的全部都是前面后边没有用到对吧?比如你打开任何一个,他都会发现什么都是从这儿做了一堆逻辑,然后从这做输出了。啊,做了一堆逻辑之后,从这做输出了对吧?所以呢,他没有用上寄存器,为什么?因为大家做的时候就没有去设置这个寄存器,对不对啊,没有或者说没有调用,或者说我们没有说给他一种什么,给他一种就是触发这个叫做呃,寄存器的这样一种功能,那么在这儿的话呢,我们这个就用到了是吧,就是用到了这个叫做,哎,使用上传沿来的时候啊,把D给到Q,注意这就什么用一种叫做时序逻辑赋值的方法啊,这就叫什么这个其实这个就可以称为时际逻辑啊,因为实际逻辑的话,我们说了实际逻辑什么是组合逻辑,加什么加上寄存器对不对,那好了,我们寄存器呢,这就写完了,那有人说,那你这叫只能叫做实际逻辑器件,拿什么叫实际逻辑呢?注意,你来想一下啊,我的前面的组合逻辑其实就可以认为就是一根线了。
108:32
我就只有一根线,就是直接直着就过来了,它没有做任何的变化,其实呢,这个呢也可以称之叫什么叫实习逻辑嘛,可以啊,没问题,或叫实际逻辑器件也都可以啊,那么这个就是一个寄存器,那好了,下边干什么呢?其实下边的话呢,我们可以对它呢,做一部分什么呢?做一部分仿真,那么在这做仿真的时候啊,后边很多人问的问题就在这儿就来了,然后我们来呢,把这个来做一下啊,我们今天就把这个讲完啊就行了啊。
109:01
我们来去做个新建vrlo OK。File另存为。然后我们来保存到MSMMSM当中,然后写个下划线,TB。好,那么下边来做一个理化。Rag c l k RD和warq。好了,那么CRK。
110:12
D和Q,那么下我们来想象一下CLK是什么呢?啊CLK其实就是呢,我们作为作为一个时钟来去做的,那么CLK我们怎么来描述呢?CRK就是什么,其实就是。拉高。拉低,然后拉高,然后拉低,拉高拉低其实就是什么?其实这个就是上唇沿对不对啊,其实这个就是上唇沿啊上唇沿那好在这儿的话呢,我们来呢,就给大家来做一下,比如说我们做个begin n,然后呢,CLK复制成一撇B0,然后呢,D复制成一撇B0啊然后呢,干什么呢?然后我们就给一个就是等一会儿吧,等一个25吧,然后CLK就等于一撇B1。啊,C2K等于一撇B1,那好了,C2K等于一撇B1了,是不是就描述了什么,描述了一个上升沿对吧?啊,就是说因为呢,在最开始的时候,零到25的时候,C2K等于什么等于零嘛,那C2K是等于零的,在25纳秒的时候,CK变成一了,好了,那么再往下边呢,我们在这的话呢,有的人说给成D等于一撇B1,这样好不好呢?注意不要这样来给,为什么这样来给,那这样来给会有什么问题呢?其实它会有一个很大的问题,大家来看一下,就是说你这么一给的话,是不是现在就是这样呢?画画一下这个图啊。
111:30
就是说在零到25的时候,C2K等于零,你的D也等于零,然后呢,C2K在25的时候拉成幺了,而你的D呢,也在这也拉成幺了,是不是这样的话就是两会对齐啊,也就是说呢,有发现什么发现就是说这个寄存器的D端的信号的变化和什么呢?和CK对齐了。那么大家都知道什么呢?大家都知道就是我们在去讲数电的时候,我们是不是给大家讲过,如果说想让D端的信号能够平稳的过渡到Q端,那么有个什么要求呢?要求什么要求这个信号啊,要在CLK上升沿。
112:11
变化的之前和之后要保持一段稳定,就是它必须要稳定,它稳定的时候这个D信号才能够过去啊,你不稳定的时候你就过不去了啊,我们在书店那叫什么叫建立保持时间对不对啊,不知道大家还记不记得啊,然后去前面分析一下,也就什么呢?也就是说在这儿给这个D信号的时候啊,在这给这个地角离这个上升有点远一点,比如说你在这儿再延时一个两纳秒,这样的话就是什么,就是说在。25纳秒的时候,Clock有了个就是CRK有了个上升压,而在27的时候我才把地拉高啊,才把地拉高,也就是说呢,我们在这儿啊,再给个36是吧,然后C2K等于一片B0,然后再延时啊呃,38随便吧,反正你就给C2K等于一撇B1对吧,然后呢,再延时啊98啊,C2K等于一撇B0啊,然后呢,再延时啊二啊,然后呢,你可以把D等成一撇B0,然后呢再延时啊36啊,CK等于一撇B1都行啊,就只要说你别去干什么,你别说一下我刚才说那个就是你别把CLK的变化的上升和D的变化的值写到重合就行,那他们只要错开就可以啊,只要错开就可以啊延时啊98啊这随便啊,愿意写多少写多少啊C2K等于一撇B因为它敏感,敏感是上。
113:41
嘛,对不对啊,再延时啊,再延时个呃,54啊CLKCLK等于一撇B1好了就写到这吧,不写了啊,后边延时个200吧,好结束好了,那么呃,注意啊,在这儿的话呢,你看我前面的延时,后边有的是带分号,有的不带啊,注意这个分号带或者不带都是对的,但一定要注意啊,因为在begin and里边,它最后一个必须要带,这个不带他会认为这个是半句,这个是半句,它们俩合到一起是一句,那么如果说你最后一个不带就直接报错了啊,直接报错了,大家一定要知道。
114:15
好,那么我们来复制一下啊,所以今天教给大家做的第一件事儿是什么?就是在以后我们去复职的时候,所有的情况去赋值的时候,千万千万千万记得一件事儿,就是信号的赋值,千万不要和CRK的上升沿重合,因为一旦和CRK的上升沿重合,就意味着你就已经错了啊,就意味着你就已经错了,为什么呢?因为我们说过信号,什么信号要满足建立和保持时间,你都和人上对齐了,你还满足什么建立时间,保持时间对不对啊,建立时间和保持时间不明白的啊,自己去资料当中查一查啊,什么是建立时间,什么是保持时间,给大家已经之前已经讲过了啊。
115:11
好,我们做个仿真。好,在这我们来看一下是吧。呃,那么首先第一个问题呢,就是说在这个上升沿啊,在这个上升沿啊,在CLK上升沿没来之前啊,Q是零,不是Q是这个不能是零,应该Q是这个红线,因为Q它也不知道它应该等于多少对不对,然后呢,上升沿一来。啊,在这上升沿一来,然后采样谁呢?采样的D等于零对不对,然后呢,Q就在这儿,立刻就变成零了,然后呢,在这一段线间之内呢,就是说当上来人已经过去了,然后呢,D虽然变什么,D变成幺了对吧?D你变成幺了,你变成幺了又怎么样,跟我也没有关系,我输出的还全是零,都不带任何做任何变化的,因为呢,呃,CRK生成页过去以后,D的什么变化都没有作用了,然后就在这儿,诶好了,CRK又来个生成页,然后一采样呢,什么一采样就是D呢,变成什么,变成了这个腰,那然后呢,输入结构就变成幺了,在这儿你来看一下。
116:33
啊,哎。在这的话呢,D呢变成了零啊,在这D变成了零,但是结果呢,还是爻,为什么?因为还是很简单,我们只在什么上升沿采样,也就是只在clock等于上升沿的时候采样一下,谁呢?采样一下D的值给了Q啊注意只在上升沿就是采样D,然后给了Q,至于D在CLK非上升位置的变化,你爱怎么变怎么变跟我没关系啊,我就认为你不存在,那你随便啊,然后呢,呃,这是这样的一个设计,那么在这儿的话呢,我这个呢,可能写的不太明显啊,我为了让它明显一点啊,我给大家呢,搞个什么呢?我给大家搞一个这样的一个变化,比如说呢。
117:19
比如说我把这个叫做它,我给它复制一下,然后我放到这个,呃,这个放到下边吧,放到这儿。延时延时延时延时延时粘贴,然后呢,我给它变成000,好我再来进行综合分析一下啊,也就是说呢,我在这呢,呃,就是延时二变成一,延时二变成零,延时二变成一,延时二变零,就是说在这呢,这个D信号呢,开始无限开始抖了,上下抖上下抖上下抖变成010101,但是你会发现什么呢?Q不会变的,为什么呢?因为你在变。
118:02
你上升沿有没有踩到你的变化,所以你就没有任何作用啊,上升沿踩不到你的变化,你就没有任何的作用啊,我们来可以看一下。啊,希望大家一定要知道这个问题啊,就是上升沿是吧,哎上升沿哎然后呢,就是说哎,只要是哎它能够踩到的值,它就会做给到Q上上升下踩不到的值,你D无论怎么变化啊,它都是不变的,对不对,看一下。在这儿你会发现,你看我这个D呢,在这儿有各种高低高低高低高低高低各种一顿变,但是你会发现Q呢,一点都不变啊,Q一点都不变,为什么呢?因为呢,Q只在上升沿的时候发生改变,就是上升沿的时候踩到的D等于零,就输出零,踩到的D等于一,就输出就是一,比如在这儿踩到的D就是一,所以我输出的就是一,在这儿踩到了D等于零,输出就是零,在这踩到等于零,输出就是零啊在这儿我们不没踩你,你再怎么变跟我没关系啊,这是第一个问题,希望大家一定要知道啊,也就是说呢,我们在这儿呢,把这个寄存器的这个叫做它的一个逻辑功能给大家又演示了一遍是吧,就是上升沿的时候它去采样啊,比如在这儿上升沿一采踩的地是一,所以我就一直保持一,那在这段时间我都保持一,那么在这个升沿一采采什么?采的是零,所以数是零,那这段间呢,其实全是一,那么这一段时间的一是哪来的?其实就是这个上升沿踩的那一刹那的值,踩的是一就会保持一个周期,采的是零也会保持一个周期,然后下一个周期才更新啊。
119:36
这个东西啊,这是我们的一个情况,那么在这当中告诉大家呢,不要与上升弦巨型去重合啊,千万不要与上升弦重合,因为有的时候以上为一重合的情况下,你可能就分辨不清楚了啊,因为它重合了嘛,那你说上沿一踩,踩到了D的上上眼或踩到D的上下沿,那你说他踩的是零还是一呢?你也不知道,那我也不知道,那干脆咱就避免这种情况,那咱们就避免这种情况,咱不要啊,咱不要这种情况啊,咱不要这种情况好了,那么。
120:03
呃,这是这种,那么我们来呢,还要再讲最后一个问题啊,什么呢?就是说在这儿是不是看到什么,看到这个上升沿踩到的什么,上升沿踩到的是零输出就是零,踩到的是一输出就是一,对不对,但是呢,你会发现什么上升沿踩到的是零,输出是零,你会发现什么,发现这个Q的输出啊和这个CRK的输出呢,是对齐的对不对,也就是说呢,这说白了,这还是叫做什么叫做这个叫做功能仿真对吧?也就是没有任何的延时,但其实啊,真实的情况是什么呢?真实的情况呢,我们来写一个后仿真啊什么情况呢?在这我们来可以给大家在这儿简单先画一下,比如什么呢。比如这是我们的CRK型号。好,然后呢,这个是我们的CK,这个是我们的D信号,比如信号呢,在这儿拉高诶。好比如是这样的,那么Q信号呢,按照我们来说,Q线在这儿踩到的什么,在这儿踩到的是零,所以呢,在这儿呢,前面这一段我也不知道是啥,从这开始输出为低电平一直都是低,一直都是低,虽然你拉高了,但是我也不拉高,好在这在这个情况下呢,才到什么踩到为高了,对不对,踩到位高了好了,我在这干什么,我在这就把这个型号拉高。
121:20
一直拉高一直拉高,你这拉低了,我也不管在这儿,诶踩到为低了,所以我在这要拉低。是这样的,就是我踩完之后会是这样的信号,那好了,那么我们来看一下这个拉高的信号是不是跟这圣态是对齐的呀,但是真实情况下其实并不是真实话,真实情况应该是这样。就是它会往后。拖一段,比如这个上面在这儿。那么它真正输出呢,其实在这儿。这个呢,在这儿拉低是在这儿啊,真实性啊是在这儿。所以它有什么作用呢?就是说它也会有个什么,也会有个门延石,但是注意我们这讲的是组合逻辑的门延石,对不对?那么今天讲什么,就是说对于寄存器来说,上升沿来了,其实啊,它的结果呢,在哪是在上升沿之后输出的啊,上升沿之后,那么之后多久呢?哎,之后一段时间吧,我们只能说是之后的一段时间,那么在这儿我们可以来做一个,哎,刚才是不是点的还是前方针。
122:14
呃,看一下啊,我忘了我点的是什么了。啊,我点的好像还是前方阵,呃,关掉重新来。点get level仿真啊门级仿真,然后呢,我们来看一下,就是对于这个实际仿真来说的话呢,它的Q的输出呢,应该在什么?应该在CLK的后边啊,延时一部分啊,但这个大家呢,应该就能理解了,因为门店路都有延时了,你的寄存器不可能没有延时对吧。好,大家来看一下,你看在这个上上线的时候,踩到的D信号就已经等于零了,对不对,但是它输出呢,那下边输出呢,是不是就比这上线呢,要稍微晚了一段时间,至于晚多久,咱们现在不计较,但是他肯定是晚了,对吧,他肯定是晚了,所以呢,对于我们来说啊,所以呢,对于我们来说大家一定要知道啊,就是说CLK呢,哎,在功能仿制当中,CLK啊一采样采到哪,哎采到的是多少输入就多少,但是真实情况下是什么呢?是上一采样,然后呢,是等一会儿在做输出,注意啊,我所说的等一会儿不是真的等了一会儿是什么,而是他是立刻输出了,但只不过什么,只不过中间的门电路,输出电路呢,是有什么,是有延时的,所以造成的真实结果,什么真实的结果其实就是在上页什么之后的啊,这上页之后的,那么这个叫什么,这个叫输出延时啊,叫输出延时有什么叫t Co的一个一个延时变量,那么这个呢,我们就不再纠结它等于多少了啊,注意说它就只是一个值而已啊,那么这个值呢,呃,可能不同。
123:54
的器械当中可能还不一样啊,在这儿的话,我们只知要知道它会有一个延时就可以了,好了,那么这个呢,就是什么,这个就是我们今天讲的一个伊比特的一个什么呢?叫做寄存器,那么这个地方呢,有个什么有红线对吧,这边有红线什么就是说因为你这个,呃,因为什么,因为是啊在这我们来说一下啊,也就是说呢,在我们最开始的时候呢,这个什么呢?就是说我们的CLK啊,就是我们的CLK没来之前,你要做功能仿真的时候,CRK之前什么全都是什么全都是。
124:24
红线,那么当你做实际仿真的时候呢,它有了有了个低电平。啊,它直接默认给了你个Q,就是低电屏啊,它直接默认的就是一个低电屏,所以在这儿的话呢,很多人就会理解为什么就是比如说哎寄存器啊,就是说如果说咱们要没有给它值啊,就是说在没有给它值的情况下,它默认的值等于多少呢?注意它默认的值是等于零的啊从这来看的话呢,我们默认值是等于零的,那么对于真实情况来说的话呢,我们。不予考虑它默认得多少,我们到最后就会考虑,我会给他指定的默认值,这是第一种方案,第二种方案的话呢,哎,我就是说这个默认值是多少,我不关心它是多少,我都能都要都要对啊,那么这是这两种啊,这两种好了,那么呃,这是我们今天要讲的一个寄存器,那么呃,明天的话呢,我们会讲,明天我们会跟着这个寄存器呢,我们会接着向后来讲,比如说我们寄存器呢,还没有加入一些复位信号,然后呢,还要去没有,没有给大家说多位的计存器应该怎么来做啊,多位计了,然后呢,我们在后面讲什么呢?就开始去讲解啊,就是我们的叫做计数器,就是说我们的计数器应该怎么来做,哎,然后呢,我们会把这个仿真呢,再做的再好看一点,然后后边的话呢,我们就。
125:43
约等于就是说干什么呢?就是说我们已经把组合逻辑讲完了啊,然后把计算机讲完了,那么就意味什么?意味着我们就可以实现任意我们想要的逻辑了,然后后边啊,也就是大家来可以看到啊,就是说大概从记录器解束完成以后,后边我们所有的设计基本上就什么,基本上就是说,呃,就是开始去开始一个一个什么,一个一个小历程了,就比如说点流水灯啊呃去做灰灯啊,数码管呀,呃按键处理啊,做各种各样的一些什么呢,就是真真正正的开发板的一些外设了,就前面大家可能觉得有点虚是吧,都是一些,呃感觉好像很不实用,但是呢,它是一些理论,如果你要不知道呢,直接坐后边可能就比较费劲,那么呃关于什么呢?呃,关于在网上很多人买了一个开发板,然后呢,他们给提供的资料大多是什么,因为上来第一个就是什么,就是假流水灯,然后呢,干什么他也没讲,直接把代码往那一贴,大家也不知道为什么,所以呢,有的时候呢,就是说你直接跑一遍他的历程,很多人就什么很多人就是说在跑历程跑。
126:43
出来的可能自己也没有总结好,然后导致什么,导致很多基础的问题都不明白啊,就特别是我今天给大家讲的,就是说在TB当中给信号的时候,不要给,不要给什么,不要给到生产线对齐,为什么?因为你这样你会不符合寄存器的建立和保持时间的,对不对,那么他们给对齐了,然后分析不明白了,分析不出来了。
127:02
啊,然后呢,所以呢,就会有很大很大的一些问题啊,很大很大一些问题,所以在这儿的话呢,我们不这么做啊,我们不这么做,那好了,那么呃,大家来看一下啊,今天啊,还有有没有什么问题啊,包括这个呃停电这同学是吧?然后呢,这个呃,在你没来之前呢,我简单的说了一下,这个叫做这个,呃什么呢,说了一下这个,呃,关于这个16位的这个,这个叫做这个,呃不是16位应该说比较气的那个那个问题啊,你看看啊,还有没有什么问题啊,就是之前文字讲了讲啊,然后呢,讲视频你没在,你看看有什么,有没有什么其他的问题啊,或者其他同学看一看咱们讲的这个乘法器,除法器,包括后边我们又讲了一个伊比特的这样的一个寄存器啊,有没有问题,有问题可以说一下,然后给大家解决一下好吧。
128:00
那OK啊,你要没问题的话,你就可以看看视频,然后看完之后,然后再有问题单独再找我,不行,咱就还是解决不了,咱就明天再上课的时候再给你单独的再说一下都行好吧,OK啊,那么看一看还有没有什么其他的问题,其他人呢?啊,有没有问题啊,有问题就说有问题咱们可以解决,没问题就说个没有问题,然后咱们今天就大概就这样好吧。看看有没有问题啊。没有是吗?多练习啊,在家一定要多练习啊,咱们这个呃,因为呃这个这个对于做设计来说的话呢,还是要呃去多练习多做啊,然后呢,去多分析,多思考,有什么不明白就问啊,没有什么对或者不对的,你不明白就去问嘛,然后呢,多去做一个呃设计上的一些东西,包括啊咱们最近好久没下版了,对吧,我不知道有问同学有分配管教啊,下板啊,固化呀,是不是都快忘完了啊,多做一做,分析分析啊,分析分析好了,那如果没有什么问题的话,咱就。
129:08
明天见好吧,然后呢,大家的话呢,还是明天下午一点半吧,然后问大家有没有什么问题,有问题咱直播解决,没有问题咱就明天七点接着往后讲这个,呃,小设计了,就是讲这个计数器啊,讲一堆其他的了,好吧,那就今天就这样。
我来说两句