00:00
嗯,好了啊,那咱下边就开始准备这个上课,那么在这个昨天呢,讲了什么呢?昨呢主要是给大家讲解了,这个叫做一种思维啊,什么思维呢,主要什么?主要是说就是大家呢,在遇到这个设计的问题的时候呢,对吧,就是说呢,呃,如果说咱们可以这样来想啊,也就是说呢,我们为了去缩短这个就是整个一个设计的一个开发时间的话呢,啊,那么我们怎么做呢?我们并不是说所有的东西都要从头开始做,也就是说呢,有没有一些这个就是别人做好的东西,我们哪来能直接用的啊这样的一个想法啊,有这样的想法,那么这是第一个啊,那么第二个的话呢,在这个ipga啊内部的话呢,它放了很多很多个就是已经经过验证啊,并且呢,也是非常通用的啊。
01:01
这样的一堆模块啊,那么这一堆模块的话呢,它呢能够加快我们的开发的进度,那么同时呢,呃,也为我们这个这个做很多设计呢,提供了很多的方便,那么我们呢,首先呢,我们先不管在别的地方这个IP什么意思啊,反正在我们ipg业界内啊,叫做IP盒或叫做IP电路啊,那么这样的一个IP什么意思呢?也就是说啊,并不一定非是iac啊,有可能是别人用vrlo代码写好的一个东西拿过来给咱们用,我们也可以称之为是个IP啊,就这样的一段电路啊,我们称之叫做IP啊,那么也有可能是iic,也有可能是别人写好的代码啊,这个我一再的强调啊,是这样的。那么请大家一定要注意啊,这个IP呢是什么是呢?呃有收费的啊,有收费的,当然也有不收费的啊,当然有不收费的,所以在这儿的话呢,我们给大家讲的呢,都是什么,都是一些啊不收费的啊,相对来说比较通用的啊这样的一些东西啊,那么后边的这个大家呢,在在经过不断的学习也好,或者说以后去这个公司当中呢,去进行这个叫做设计开发也好,那么大家呢,会不断的去接触到呃各类的IP啊,各类的IP,然后呢,去这个加强或者加快我们的一些设计啊,那么呃,我们今天的话呢,呃讲第二个IP啊什么呢,我们来呢,重点去再来关注一部分东西啊呃,我们昨天讲了什么呢?我们昨天讲了第一个叫什么叫做,呃锁向环啊,叫锁向环,那么对于我们的这个叫。
02:47
做所向环来说的话呢,我估计大家呢,昨天的话呢,呃,这个代码啊,如果要真的去做,可能也就是五六分钟就能做完,或十来分钟就能做完,因为我连讲我在写也就十分钟左右就完事了,对吧,就相对来说呢,会比较的呃简单一些啊,那么呃,今天的话呢,我们来讲第二部分IP什么呢,也就是给大家强调比较多的,就是说在我们ipg的内部还有什么呢?还有的就是有一堆啊叫什么叫做。
03:19
啊啊,就是说呢,我们。啊考虑啊,就是说在我们的这个IP内部啊,放了一堆啊叫什么呢?叫做块儿状的存储器啊叫块状的存储器,什么叫块状的呢?就说白了就是人家是一块一块儿的啊,那么针对于块状的存储器来说,那么另外一个什么呢?就是飞块状的,那或者用另外一个就就是什么,就是这个不是一块就是分散的对不对,所以呢,有的时候呢,我们也会什么,就比如说用什么用我们的叫做ipg内部的一些寄存器呀,或者一些这个L呀,来构成一些存储器,当然我说过了,构成这个存储器的话呢,它的这个叫做容量啊,并不是或叫密度啊,不是特别的大啊,不是特别大,但是也可以,那那个叫什么呢?那个一般情况下在A2这边的话呢,呃,最起码在咱们当前所使用这个版本选择器件当中的话呢,它的一般不提啊,那么在304里边提的比较多,叫什么叫分布式的啊,什。
04:24
这分布就是说碎的,就是用一些这个逻辑块所构成的啊,是这样的,好了再让我们简单看一下啊。呃,塞克龙四的这个叫做器件呢是吧?哎,赛克龙四的这个器件呢啊,它呢,里边有一些嵌入式的一些memory的结构啊,Memory一些结构,那么这些结构是什么呢?啊,我们可以说就是通过地址来去控制的一些存储器啊,通过地址来去控制的,那么呃,什么叫通过地址呢?那么在这儿的话呢,我们给大家呢,也来简单的来说一下啊,是这样的。
05:02
呃,比如说呢,呃,对于我们来说啊,对于我们来说的话呢,存储器到底是个什么样子呢?其实我们在讲最开始的时候,我们来讲什么,我们来讲四输入查找表的时候,我们就是说了一个叫类似于存储器,存储器是什么?存储器其实这样的,也就是说呢,这个地方呢,有什么这个地方呢?它有这个叫做一块叫存储阵列啊,就是专门素来存数的啊叫存储阵列,那么这个存储阵列的话呢,有什么作用呢?对于我们目前来说啊,一种简便的存储器来说什么呢?它就只有什么叫只有深度,就是说它有多少个这样的小房间,我们称之为叫做深度啊深度啊,那么一个房间里面能存多少比特呢?我们称之叫什么叫做宽度啊叫做宽度,所以呢,这个这个叫做么?叫做深度乘以宽度等于什么?就等于整个的一个容量啊,深度乘以宽度整个的容量,那好了,那么碳。
06:03
能不能够存储器能不能够同时输出两个地址里边的数呢?我就是两个小格的数呢,注意啊,它做不到,因为它为了把密度去加深啊,密度去加大,所以呢,他做什么,他做了这样一件事儿,什么呢?就是说这边呢,你可以认为什么,就是说它所有的诶这边的输出只有一个宽度,比如它的宽度是八,那这就只有一个八的宽度,那到底选择哪一个八位作为输出呢?它前面呢,还有个地址控制器。啊,叫做地址控制器,也就是什么,也就是说你给一个八,你给一个地址啊,当然了,呃,地址的话呢,不一定有几位,比如地址有N位,好吧,你给一个N位的地址,然后呢,这一个编译器呢,或者说这样的一个驱动器,它会自动的寻找到,诶到底对应的是哪一个模块,然后呢,把这个模块呢,进行做输出啊是这样的,那当然了,还有什么,有可能是写入对不对,比如数据哎,可以写到这个里边去啊,读出的时候就从这个里边把它读出来,写的就写进去,所以呢,现行的存储器来说。
07:07
大多数都是什么,大多数都是对于单地址啊,大多数都是对于单地址的这样的一个读入啊,这样一个写入,这样的一个读出啊,不能够对这个多个地址进行同时的写入或者读出,但是呢,大家有没有发现一个问题,什么问题呢?如果说我用IP。比如说呢,我写了一个什么,比如我写了一个这个叫做REG3到零的DATE1REG3~0DATA2RG3~0DATA3RG4,那么我就说这个呢,是一个四的,然后深度呢,有零到四有五,五个,我就是深度是五,哎,然后呢,宽度是四比特的,这样存储器可不可以,当然也可以了,当然也可以了,但是呢,你有没有发觉一个事儿,如果说要是这么写的话,他们是不是可以同时赋值,他们是不是也可以同时拿出来给别人赋值,那这样的话是不是认为这个呢,这个是不是有一些什么呢?就是说他可以干什么,它可以同时被赋值,也可以同时拿出来。
08:12
给别人复制,所以呢,你会发现什么呢?它有一些呃,块状存储器所不具有的一些特性啊,那么当然了,也就是说它所占用的资源就会越多,所以它的密度呢,做不大啊,当然它也不是做这个的,对吧?好了,那么嵌入式的存储器啊,嵌入式的存储器它呢,什么是一块,一块叫什么叫M9K,什么叫M9K呢?我们下边的介绍啊,先不要着急啊,就是M9K的这样一个存储器,然后呢,我们可以配置这个提供的这样的一些叫做什么,就是这个M9K配置成一些什么,就是各种各样的一些啊memory的类型,那么这个存储器都有哪些类型呢?啊存储器呢,有这个RAM,那么我们完整的介绍什么RAM啊,就是说还有这个叫做啊一位计算器啊,还有我们的ROM,以及我们的啊啊这个这个这个first in first out的这样的一个缓冲器,那么呃,至于就目前这上面。
09:13
这这些东西呢,我们都会给大家来讲到啊,都会给大家讲到,好了,下面来看一下啊,那么这个M9K都有哪些特性呢?首先第一个M9K为什么叫M9K呢?注意它是一个9K比特的一个。存储器注意是一个9K比特,所以叫M9K,那么后面我们看什么,后边我们看到叫做这个M什么什么144啊,什么各种各样的一些其他的一些块,就这块儿可能会更大,但是要注意啊,M9K是它的啊这样一个,那么对于我们来说,我们关不关系的到底是多大呢?其实有的时候呢,对于我们现在来开发来说,我们可以不关心它是多大,因为呢,它可以被配置,为什么呢?它可以被配置为任的什么叫做任意的宽度,任意的深度的一个。
10:01
这样的一个,呃,Memory啊,就是一个存储器都是可以的啊,都是可以的,有人说它不是一个9K的嘛,那如果说我想要一个10K比特的,那他怎么办?对啊,它会连啊。它也会系连的,所以呢,这是很简单的一个道理啊,很简单一个道理,那么在这儿的话呢,这些特性的话呢,我们就不再去讲了,然后后边在用的过程当中,我们会慢慢慢慢给大家去说啊,那么这就是说M9K的一些特性啊特性,那么呃,我们来慢慢慢的就给大家来去讲啊,那么在今天的话呢,我们就会涉及到这样一个东西叫什么叫时序图啊,今天我们就会开始来讲时序图,那么就从今天开始,我们往后啊,都会给大家呢,不断的来去强调什么呢叫做时序。啊,那么在前边第一个月期间之内的话呢,我只剩大家干什么,就指着大家就是说,哎,当你写出代码以后干什么啊,写出代码以后去看波形,就是看model SIM生成的波形对不对,然后呢,大家可能还不太清楚啊,就是说哎,写这个代码形成这个波形,然后呢,经过大家一个月的学习,可能能看出来啊,这个波形是对的,这个波形是不对,或者这个波形是我想要的,这个形不是我想要的,对不对,是这样的,那好了,那么从今天开始,我会给大家不断的讲波形,讲什么意思呢?也就是说现在啊,你只要实现这种波形,你就可以满足,实现不了就是不就是不对的,也就是说我们提前会把正确的波形给大家拉出来。
11:31
啊,这就是时序啊,后边的话呢,我们会啊,贯穿咱们整个的一个设计啊,都会存在,好了,那么下边的话呢,我们就来讲解一下。就是我们啊,Ipg片内的存储器啊,片内的存储器啊,应该啊这么回事,那么今天首先呢,我们给大家来讲叫做。第一个。
12:00
啊,就是用我们片内的存储器啊所构成的,呃,这个这个这个这个第一个啊,今天我们要讲的。啊啊,那么今天我们要讲什么,今天我们要讲的是啊叫做ROM啊叫做ROM,那么我们啊,在讲这个ROM的时候呢,我们会给大家呢,去呃,着重再去讲解一些其他的啊首先呢,第一个。啊,就是说呢,呃,CYCL4的器件啊,这个里边呢,有这个嵌入式的一些内存结构,然后呢,我们就可以使用这个M9K的内存块呢,呃,去实现一些功能啊那么呃,我们的这个芯片里边有多少个呢?注意啊,我们是这个啊,因为我们因为我新做了一块板子,用的是这个芯片啊,现在我们用的是这个是吧?里边有414K比特啊,那好了,那么呃,那么什么是这个叫做ROM呢?那什么是ROM呢?在这我们解释一下叫O什么意思,就是只读存储器。
13:35
啊,从名字上就可以知道啊,有一个存储器啊,存储什么叫存储器,就是存数的呗,对不对,那存数的,然后呢,这个存数这个呢,它指的干什么,他只能读啊,它只能读不能写啊,只能读哎,就是不能够往里去写入,只能往外读诶有些人说。哪有这样的存储器,那要这个存储器还有什么用啊,只能往外读,都不能写,比如你买了个U盘,然后这个U盘干什么,这个U盘只能往外读信息,不能往里写,那我要这U盘有啥用啊,对不对,那好了,那我反过来想,其实大家买过没有,其实大家都买过,或者说或者说这个这个我感觉他对或者对于我这个年纪来说,都买过什么呢?比如我小时候啊,这个比较流行的动画片,呃,这个叫做什么?这个叫做这个奥特曼啊,或者说这个叫做这个这个这个葫芦娃。
14:28
那个时候啊,我买了很多光盘。啊,包括后边,呃,在这个零零年的时候啊,就是说199几年的时候啊,可能流行这个家里买这个VCDDVD都会什么都会带这个光盘,那么对于这个光盘来说,我们叫CD,对吧?那么对于这个光盘来说,它什么,它其实就是一种只读存储器,你会发现什么,你只能把上边的歌啊,电影啊,游戏啊,只能干什么,只能往外复制,但是你能往里写吗?或者你只能往外读,你能往里走吗?你走不进去,所以这就叫什么,这就叫只读存储器,所它的应用呢,也是蛮多的啊,叫ROM,叫只读存储器,那么只读存储器它既然不支持写,只能够往外读,那它里边最开始有的数是怎么回事呢?说白了,它最开始有的数什么是在这个存储器建造的时候就已经造进去了。
15:23
啊,我们可以理解为就是造的时候就已经造进去了啊,一旦造进去就不能改变了啊,就不能改变了,那么ROM呢,能实现什么,能够实现掉电不丢失啊,比如说咱们现在的所有的咱们的这个电脑里的硬盘,还有咱们所谓的U盘,还有咱们的SD卡啊这些东西什么这些都是掉电不丢失的,就虽然它是一个芯片,但是可以做掉电不丢失,那光盘大家也可以做什么呢?掉电不丢失对不对啊,都是这样的,所以呢,这叫什么,这叫ROM啊叫ROM,有人说这个这个这个我的U盘是能能读能写的,对啊,能读能写的,它也是RO,只不过什么后边我们会讲到啊,它的一系列发展,ROM是怎么做到?哎,又能读又能写,然后还能对联丢失,那么和其他一些东西有什么区别,这个慢慢的介绍,我们首先介绍第一个叫ROM,它能够实现掉电不丢失的功能,那么掉电不丢失的功能的优势一下就体现出来了。
16:23
什么呢?诶这个就很简单,那就很简单啊,你比如说咱们的在讲课的时候讲这个ipga,我们ipga是不是掉电就丢失了,那么我们为了能够每次上电还能够去使用怎么办?所以我们在旁边放了什么,我们在旁边放了一个flash,对不对,叫闪存,对吧?那么对于flash来说,其实它的内部结构什么,就是一种ROM,但是呢,这个ROM呢,我们只能说它的后缀是ROM啊,能够实现这个丢失,但是它呢是可以被写入的啊,到时候我们再来讲这个原理好了,那么。我们ipg片内有ROM吗?注意没有RPG内部是啊,就或者说我们现在的片子里边是没有ROM的,那是没有ROM的,那么我们是用什么,我们是用啊这个叫做啊这个ipga内部的块状M9K的资源,然后者存储器资源来构成了ROM,所以呢啊这个这个M9K是掉电丢失的,所以呢,这个ROM呢也掉电就会丢失了。
17:29
啊,也掉电就会丢失了啊,所以这个呢是很正常的一件事情啊,这个是很正常一件事情,所以呢,我们只是说模拟了ROM在一些时序上的一些操作,但并不能模拟真正的ROM掉点不丢失,那丢研不丢失好了,那么下面我们再看啊RO妈是ROM什么ROM是一种叫做存储器啊,这种存储器所所以说的话呢,我们今天呢,要干什么呢?要让大家去做啊,一个这样的,比如说它的深度是256,也就是说呢,它会有256个小格,对不对,然后呢,每一个小格啊,每一个小格里边放多少呢?每一个小格里边我们放八个比特。
18:14
也就是说深度是256,宽度呢是八啊,宽度是八,那由于什么?那由于啊,由于这个这个深度是256,那么也就是说呢,我们会有256个地址空间,那么由于你有256个地址空间,那么这个地址应该是多少位的呢?所以地址是八位的。啊,地址是八位的,所以希望大家一定要知道啊,地址只和深度有关系啊,地址只和深度有关系啊,那么对于输出来说是多少位的?是和什么是和我们每一个地址里边所存储的这个叫做这个这个这个这个这个这个这个这个呃这个呃比特数是有关系的,所以那是输出啊,所以在这的话,我们有个要求,什么要求呢?我们说建立一个深度为256,宽度为八的ROM。
19:03
啊,当然大家都知道什么地址也是八位的啊,然后数据的这个这个这个这个宽度也是八位的,那么有要求什么,在不同的地址中放入与地址值大小相等的数据啥意思呢?就是说零地址放零,一地址放一,二地址放二,三地址放三,25地址放25 255地址放255就结束了,那就这样好了,那么在这的话呢,我们来说,对于ROM来说,因为它只能读不能写,所以呢,在建造ROM之前必须要做好,什么叫做MF文件,什么叫MF文件呢?就叫做memory初始化啊文件。啊,存储器初始化文件啊,那么这呢是一个什么?这是一个我们可以称之为叫做这个cor默认的一个初始化文件啊,默认的一个初始化文件啊,是这样的。啊,请大家一定要知道,那么就好像什么,就好像说这个说我现在呢,有一首歌啊,我唱了一首歌,我想把它刻录到光盘上啊,那你去刻录光盘了,你是不是提前应该把歌准备好,你不能说哎,你把光盘刻好,你给我给我之后,然后我再往上弄歌,那肯定不行,应该说呢,在建造之前,你就应该把你要存的东西,你先给我,然后呢,我给你往上刻录,刻录完之后结束了,对不对,所以应该提前去准备啊这样的一个初始化文件,那当然了,你准备的初始化文件,那肯定你的文件里边算什么存在就是256个八位宽的一个,呃,数据了对不对,因为呢,人家的存储器就是这么大,所以你准备的数只能要比它,跟它一样大,对不对,你也可以比它少,但是呢,你最好跟它一模一样,对不对,其他位置都是零对吧?嗯,那么对于我们来说,我们首先要准备的就是m if的文件好了,那么下边的话呢,我们来去呃,讲解一下是吧。
20:58
我们新建。
21:00
ROM_test。ROM。找doc。RTL。Msm。和QPR键好,那么下边的话呢,我们来去新建工程。
22:37
好了,那么在这我们来想一下,对于ROM来说的话啊,对于我们的ROM来说的话,那么根据我们自己的想象,它就是一个存储器,对不对?那么这个存储器怎么做,这个存储器是不是就是说按照我们刚才讲的就是我给你个地址,然后你给我个数,我给你个地址,你给我一个数,也就是说我给你个地址,然后你干什么,你把你这个地址里边所对应的数给我,对吧?那么我们来想象一下啊,如果要让我们来写的话,是应该什么样子,是不是应该这个样子的,我们也来分析啊,输入有什么呢?输入应该有一个叫做七到零的一个地址,注意这个地址只和深度有关系,输出呢,有一个叫做。
23:24
七到零的数据,比如说我们称之叫r date,是不是就是这样,你给我一个ADDL,我给你一个数据,你给我1ADDL给你一个数据吗?这不就是一个叫做一个一个一个什么呢?叫做一个,这个叫做呃,我们所想象的一个ROM嘛,对不对,哎,我们所想象的一个ROM就是一个只读存储器嘛,对不对,好了,那好了,那么下面的话呢,我们来去做file新建,新建什么呢?现在新建第一个叫memory file,那memory file里边有两种,第一种叫英特尔格式的file,第二种呢,叫做这个memory啊,初始化的这样的一个文件,那么我们选择if这个文件啊,选择这个我们点击OK。
24:07
好,那么在这儿的话呢,就会让你选择说呢,你到底有多少个字节,其实这个并不对啊,其实这个并不叫字节啊,呃,所以很多人说这是字节,这不是字节,也就是说它有很它这是什么意思呢?就这个就问你说你有多少个格,就多少个存储空间,我们有256个,那么每一个存储空间里边你准备放几比特,我们放巴比特,所以这个就是深度,这个就是宽度,明白了吧,然后点击OK。然后呢,在这个界面就变成这样一个界面了啊,就是有些小格格,好了,首先我们养成好习惯,第一件事儿就是对这个东西进行file另存为。存到哪去呢?啊,我们还是保持我们上一次那个传统,在QPR街里边新建一个文件夹叫IP扣,在IP扣里边新建一个文件夹叫ROM_MY然后在这个里新建一个ROM啊啊就是说ROMM的一个,它后缀就是点这个点点MF啊,愿意去写也行,不愿意写也行,因为它默认就是点MF啊,所以一般情况下我就不写啊就这样,因为我一会儿建造ROM的时候,我就会给ROM就会放到这个里边去,并且呢,我建造ROM的名字的时候,就会叫ROM下划线慢啊,点击保存好,保存了以后呢,我们再来看一下,对于这个里边的话呢,它是一种什么样的方式呢?它是这样一种,你看这个地址呢,是零八,为什么零八呢?因为零,然后零加零,零加一,零加二,零加三,零加一直到零加七。
25:47
七零加七不就是七嘛,所以到这就是八九十,所以它是这么排的,因为呢,如果他要从这儿往下排,一直排到下边,如果要排256个,这个就太长了,所以它呢,横着排了一部分,也就是这样一部分所在,但是呢,在我们这个里边说法有的时候呢,就是呃,就是这个,包括到后边我们给大家讲CPU也好,或者讲很多东西也好,就会讲这样的一个概念,什么呢?就是说一般情况,我们把第一数列的这个值称什么呢?称之为叫做。
26:13
叫做基地值。啊,叫做基地址啊,叫做基地址啊,比如这是40对不对,这个这个呢就是基地址,这个呢,哎,就是基地址40,偏移地址是三,所以呢,这个就是43啊,我们称之为基地址和偏移地址啊,后边这个我们会慢慢慢慢来讲好了,那么这是第一个,所以从这儿呢到这儿一共是256个格,那好了,那么这个格就是零地址能存的数,这个就是一地址存的数啊,不是这个就是这个叫做十地址存的数啊,这个就是48加五地址存的数,那么这个存的数怎么往里放呢?我们就可以选中,然后呢,往里写147回车。看不着是吧,放那里。这样的话,是不是就是这个叫做20地址里边放了个147啊,啊,放了147,那好了,那在这儿呢,我也这地址留下放一个369回车,他不让放了,他说这个369太长了,369也不长啊,注意长不长不是说看它有几位的,或者说并不是在这儿看它十进制有几位的,而要看什么,而要看的是它的二进制有几位,因为我们每一个小格里能放的二进制的位宽是多少位呢?也就只有八位对不对,八位能够表示多少,最大就是255对不对?所以呢,你放256都放不下,比如说369了,所以这个369不合理,那么比如说我们放255回车,这就可以。
27:37
啊,这就可以的好了,那么在这儿的话呢,有人说有的时候我想放16进制,比如说我想放FDFD,然后回车,他就告诉你呢,说这个FD必须是无符号位十进制的FD不是,那为什么呢?在这儿的话呢,我们可以在这个地址的这个偏移地址上边选个右键啊,这有什么?这有一个叫做memory的进制,也就是说此时memory进制是无符号的十进制,当然了也有16进制,也有二进制,也有八进制,也有带符号的十进制啊,这都是可以的,所以在这我们它默认的是这个五符号十进制,我不知道你们默认什么,因为我这个经常调,所以我也不知道你们默认什么,所以你记住啊,我们到这儿先选成这个无符号的十进制,在这儿的话呢,我们就可以正常去写数了,那么按照我们的原则,或者按照我们的设计理论啊,或者按照我们设计方法来说,我们要零地址放零,一地址放一,二地址放二,三地址放三,地址放四,如果这样的话呢,一。
28:37
二三。啊,这不是,这是这个应该是二。然后呢,这个应该是三,那如果要这么写的话,写到最后一直放到255,那就头疼大了,对不对,所以怎么办呢?所以呢,呃,很简单一个问题啊,就是说这个叫做是什么呢?叫做这个这个这个呃啊,或者说这个叫做这个英特尔公司呢,为咱们考虑的还是蛮多的,就是说有的时候呢,我们为了方便去测试一下啊,为了方便我们去测试一下,那么我们可以怎么做呢?我们可以说有规律的去填充时候是可以的,比如说我们选中任何一个地方都可以选中右键。
29:15
这有一个叫做填充,就是定制填充啊,我们选一下,那么这个定制填充的时候呢,比如说我们初始地址啊,就是说这个起始地址写成零啊。中始地址写成这个。255啊,因为起始地址就是零嘛,初始地址255,那么填啥呢?我们选择这个就是递增或者递减,我们初始值写成零,然后选择为递增,然后步进为一,你想啊,从零地址里边放零,然后呢步步进为一,就是每次增加一,所以这样的话呢,是不是到最后就是零地址放零,一地址放一二点址放二啊所以我们点击OK,大家就可以看到了啊,0123456789是吧,然后一直到最后看一下最后数是不是255呢?我也不知道帮大家看一下。
30:03
是不是255对吧,所以呢,就证明什么,证明我们说对应的地址里边呢,我们放入了跟地址值大小一样的这样的一个叫做。Memory啊,或者这样的一个一个一种情况,对吧,是这样的,那好了,那么对于我们来说。也就是说我们想存的歌已经录完了,下边干什么,下边就该找这个光盘了,对吧,或者前下边就该造这个光盘了对吧?那怎么造呢?所以我们先把这个线关掉啊,怎么造呢?我们来新这个这个IP盒,因为它也是IP盒,对不对?在哪呢?Memory。之前我们讲锁向环呢,在这个里边,对吧,在这个clock里边,锁向环art PR,那么我们这个在哪呢?我们在这个片上memory啊打开,然后里边有什么呢?里边有这个ROM啊啊,但是ROM有两个啊,ROM有两个,那么这两个呢,呃,是我们今天要讲的内容啊,所以呢,我们今天先讲第一个,不着急啊,今天先讲第一个,先讲这个ROM one port的就一个端口的啊,一个端口的我们来双击启动一下,然后呢,我们给他选一个位置。
31:16
Ipq ROM是吧?在这起个名字叫RO,下划线,然后点击保存。好,然后第一题OK。然后呢,他就会啊,跟我们昨天讲的叫什么呢,跟我们昨天讲的这个叫做。呃,这个这个这个锁向环的界面一样,对吧,大家看什么,大家也可以说在这去找一下这个。比如说这个这个这个手册啊,塞这个ROM的一个一个这个memory的一个使用手册啊,你也可以点一下,然后呢,它就会自动跳到这个呃官方的网站上,然后去找这个就是ROM的一个,呃这个这个这个这个手册,然后大家可以到时候自己去找一下啊嗯,有的时候可能会找不着啊,可能会出一些呃找不着的问题啊,如果找不着什么东西,大家可以来找我,然后呢,我来给你看一看啊,因为有的时候呢,可能呃这个就是他这个这个写的时候啊,因为被这个英特尔收购以后啊,很多的文档可能就经过更新啊或什么之类的,可能就有的可能找不着,包括304那边也是有的时候也会出现这种情况啊,找不着的话,到时候可以来找我啊好了,那么这个呢,我们就不再谈了,那么第二个我们来说一下啊,在这的话呢,可明显可以看到啊,地址是七到零的啊,Q是七到零的,那么是什么呢?就这个问题啊,就是啊这个Q就是什么,就是宽度。
32:44
我们可以自己阉八位对吧,八位,那么在这儿的话呢,它的最大的宽度多少呢?最大宽度就是256,或者说最大宽度少位,比如是64~72了,比如说我就想写宽度65怎么办?那没有怎么办,没有就手写呗,它也是允许的啊,它也是允许的,所以你看我这写65,所以它这变什么变成了64到零嘛,对不对,所以呢,也就是说哎,你所写的单个地址的宽度啊,叫做什么叫做叫做这个这个单个地址的啊,这样里边能存多少位,这叫宽度啊,当然了,我们现在是八对不对,那好了,在这呢,说你有多少个八位呢?那有多少个八位呢?在这我们说的是有256个,所以呢,你这个256的话,你可以写成这个,比如说你写成1000。
33:33
啊,这个1110,所以呢,这个一千百一什么意思呢?他只去更改地址的宽度啊,他只去更改地址的宽度,他呢不去干什么,他呢不去更改这个Q,因为这个Q呢为宽干什么,他只是说一个地址里边放多少个比特的这个这个宽度,而地址呢,地址是决定选择哪一个小方格,对不对,在这儿我们有256个啊。
34:00
好了,那么呃,采用哪一种呢,我们。就选择自动就可以了啊,或者你选M9K其实一样啊,因为我们这里边只有一个M9K,我们也没有这个M144K对吧?好了,那么下边的话,这个地方就什么就有一个时钟的选择,有人说这跟时钟有什么关系呢。这跟时钟有什么关系呢?所以在这啊,我们来说一下,对于存储器来说,我们呢,一般情况下,或者说呃,现在的这种情况下呢,都是什么,都是默认的,都必须要带时钟的,都必须带时钟的,那么带时钟的话呢,就有了一个问题,就是说比如说地址啊,在这来看的话呢,就是时钟以来把地址进去。然后呢,这个地址进去以后查出来数以后,再要经过时钟再打一排作为输出。啊,再打ipad作为输出,那么很多人可能就不理解了,那么他为什么要这么做呢?呃,首先呢,他可能也是为了这个叫做时序上的一些考虑啊,时序上的一些考虑啊,就是说加了一些啊这个寄存器,那当然就会有什么,当然就会有失钟了,对不对,那好了,在这的话呢。
35:09
他呢有说你到底是使用哪种方法,比如说单时钟,单钟就是输入和输出是同一个时钟,那么你也可以使用双时钟,就是输入时钟和输入时钟不一样,一般情况下呢,单时钟用的比较多一些,那么如果在某些特殊情况下,你可以用双时钟啊,都可以啊。好,那么在这儿呢,我先选择单是中了好吧。下一步。这个界面的话呢,就是说哎,你想让哪一个端口被寄存,比如说这个address端口不想被寄存了,那能取消掉吗?注意它是灰色的,去不掉,但是我这个Q不想被寄存了,可不可以,这个确实可以的啊,就是你选择和不选择,就是有没有这个寄存器,比如现在呢,我们先呢加上啊,就是有这个寄存器外边我们先加上有这个寄存器好了,那么在这的话呢,就下边还有一些特殊的一些信号,比如说呢啊,对于这个信号来说叫clock enable,就是说clock的一个使能端啊这个呢,我们就不做了,那么这有什么叫做异步清除端,注意那么这个清除端它能够把ROM内部的东西都清除了吗?注意它不能啊,这标注了这个清除只能什么?这个清除只能清除端口的寄存器啊,这个清除只能清除端口的寄存器,那么在这儿的话呢,我们也不要它。
36:24
我们想想这个。叫r den,就什么叫读使能啊,什么叫读史能呢?以后咱们会多次讲啊,什么叫读史能呢?一般情况下,如果说你要不选它,就是你给个地址,它出个数,你给个地址它出个数,那什么情况,那就意味什么,意味着说这个读使能呢,是永远有效的,就无论你什么时候给我地址,我都会给你读,对不对?那么这个rdn呢,叫读势能,就是说你光给我地址了还不行。啊,你光给我地址了还不行,你给我地址也没有用,我也这个rdn无效的时候,我也不准备给你读,那么一般情况下呢,这个的话呢,你愿意选就选,不愿意选也行啊,但是我建议大家呢,把它给选上,就是说如果要读的时候,我们给个读势能给个地址,他就能把对应的这个地址里的数给读出来了,那么好再下一步。
37:14
这个地方什么呢?就是说你是不是要去指明这个初始化文件,比如说我不想指明。你是一个ROM,你又不能往里写,你只能往外读,那你能不指定吗?那肯定不能啊,必须要指定,所以呢,不能指定这个地方呢,就是黑的点不了必须指定,那必须指定,怎么指定呢?就是它是吧,我们点击。他去找到谁呢?去找到我们的MF文件,比如说我就保存这为什么没有呢?注意看文件类型不对啊,文件类型它默认的是第hex文件,我们要换成MF文件就有了ROM下划线啊,MMY.mf然后点击open。出来了,出来以后呢,下边这个我们先不讲啊,下面先不讲,然后点击下一步到这个界面了,点击下一步找到RST,点击finish,在点finish之前我希望大家看明白,就是它的端口有输入的,有时钟。
38:10
输入有读,使能输入的有地址,那当然这个地址也就是读地址了,因为它只能读对不对,然后输出有一个Q啊,所以在这我们来finish。好那么点S,所以在这的话呢,我们还要把我们的设计呢,要经过一部分的修改,比如说输入呢有适中,然后呢,输呢还有什么,还有就是读能。好,那么下边的话呢,我们把它呢进行啊绿化过来对吧,打开。IP他nst。然后点个CC。
39:03
好,那么下面来写下适中。地址啊rdn和我们的QQ叫r date。好,下边我们进行一个综合分析,也就是说呢,我们现在的话呢,去实现的这样的一个存储器的话呢,它呢干什么,它用的呢,也不是我们的这个逻辑资源,用的不是我们的I用的什么?用的就是我们的这个叫做呃,块状的memory啊,这个我们也可以从报告当中看得到,一会儿我们可以看一下啊。好,你看啊,我们只用了两个I,一个寄存器,再加上这个2048个memory,我们布局布线,然后我们去这个叫做呃,芯片规划器里边,我们也瞅一眼。
40:20
好用的哪个呢?它其实用的就是这一块。啊,它其实用的就是这一块啊,就是这一块的一个叫做memory啊,这一块的这样的一块叫memory啊好了,那么这个的话呢,我们就不再去看了,好吧。好了,那么既然用的是这块memory,那下面我们干什么对它进行一部分的仿真对吧?所新建lo。另存为。
42:10
好,那么下面我们下面做个连线。那么在这儿的话呢,我们直接就给这个50万。我们的RN等于这个随机值。呃,我们的这个地址啊,我们也给个随机值。
43:03
啊,地址的话就256了,对吧,因为它是随机八位的对吧。好。那么这样的话呢,我们来呢,去做一下设置啊,然后呢,我们去做这个仿真啊,在这过程当中的话呢,可能会出现很多问题啊,然后呢,我们一步一步的去给大家来解释。啊,所以在这的话呢,呃,大家呢,一定要知道很多的问题,很多人在做这个钮就可能啊,就很有可能会出现呃很多的问题,然后呢,自己还不懂怎么来解决啊,或者说也不知道为什么啊在这的话呢,这个里边我们可能就会遇见这个软件会有bug,那它会有bug,那么我们怎么来解决呢?到时候我们给大家来去呃讲解啊,给大家来去讲解。
44:42
好,那么在这儿的话呢,我们就看到了一些问题,什么问题呢?比如我们把这个地址呢,改成这个无符号位。我们把地址改成无复号位,把地址改成无复号位之后呢,我们就发现什么呢?比如说上边的钟呢,对吧?哎,上边的时钟啊,也在发生改变啊,上边的时钟在发生改变,然后呢,我们发现什么问题呢?然后我们发现r denn是不是和时钟上升沿啊,它没有和中上沿,它和这个时钟的下降沿对齐的,对吧?啊时钟下降沿对齐了,那么为什么呢?其实呢,这就是我们在做的时候呢,可能做的一个呃,小的失误啊,什么失误呢?就是我们说过是不是在这儿的时候,哎在等在这的时候,我们要求我们所有的变化都不要与时钟上沿对齐啊,那么在这儿我们这种方式呢,正好没有与时钟沿对齐,为什么呢?因为时钟上升沿正好是在座上呢,正好是在这个N倍的20加十的位置上,也就是十二十,不是十三十,50 80,而我们的所有的变化呢,都是在20 40 60,所以呢,我们所有的变化干什么。
45:52
啊,都会在下降沿发生改变,而不是上升沿,所以这第一个我们呢,没有与上升对齐,这是OK的,第二个我们再来看r den呢,也确实在。
46:05
为幺也为零过,为零也为幺过,没问题,地址也在发生改变,但是呢,R date是全零。R一直是全零,从来没有动过,那么这是什么问题呢?所以大家一旦出现这种问题的时候,就说这是怎么回事呢,对吧,所以很多人就出现问题,那怎么办呢?不要着急啊,一步步找原因,比如第一步先找这边,看这边有没有报错啊,来看一下。这有个警告,警告什么呢?警告说他呢,呃,这个打不开啊MF文件,然后呢,这还有个报告错误,说不能够读这个MF,他打不开这个读模式,那么呃,说没有这样的文件在这个位置报错了,也就是说呢,说白了。为什么输出不出数呢?原因就是因为model SIM,它找不到我们所谓的这个MF,那么也就什么,也就是说我们没有初始化上,但是我们真的没有初始化上吗?其实并不是的,如果没有初始化上的话,这个叫什么,这个这个叫做都会给我们报错的,那么为什么会出这个问题呢?也就是说呢,我们可以称之为这不能说是一个bug,就只能说什么,只能说这两个软件再去认为某一个地址的时候,可能是不一样的啊,可能会出现了这个纰漏啊,什么纰漏呢,就是说。
47:26
在cors里边啊,它会给予一个地址,这个地址呢是个相对路径啊,这个地址是个相对路径,其实什么叫相对路径呢?其实之前在给大家讲度文件的时候就给大家说了,但是那一天的话呢,讲的也比较快,可能大家不太清楚,那么我在这来今天在给大说一下什么叫相对路径,什么叫绝对路径啊,听明白了啊,首先相对路径什么叫绝对路径,第一个什么叫相对路径呢?就比如说我来说一下什么呢,比如说你看,假如说呢,咱们两个人啊,咱们两个人在一块儿走啊,咱们两个人在一块走,那好了,有一个人啊,或者说另外一个人就问说那个人在,那个人在哪儿啊,那我怎么报告呢?我只是说哎呀在我从我这边开始看啊,我这边开始看往西走三米。
48:16
就就就是那个人,所以呢,你来看一下,那我现在报告的你的位置怎么报告的,是根据我的位置往西三米报的,所以呢,我报给报去的位置什么呢?我爆出去的位置就是什么,就是以我的位置为基准。报出去的,所以呢,你的地址城主们其实就是一个相对地址往西三米。从哪儿往西呢?是相对于我来说,这叫相,这叫什么?这叫这个这个这个这个这个我们定为叫相对地质。啊,这样的一个相对地址,那么对于我们这样的一个这个叫做这个这个相对地址来说的话呢,有什么好处吗?啊,你比如说在qua里边啊,或者说在现在的各个软件里边,它基本上都是采用这个相对地址,这样的比较多一些,那么相对地址有什么好处吗?相对地质有一个特别大的好处什么呢?就是方便移植。
49:12
什么叫方便移植呢?就比如说我在这儿站着什么呢,说你是在我西边三米,但是咱俩绑定了个,但是咱俩绑定了个整体,说有哪一天呢,把咱俩都换到别的地方去了,那好了。你的位置还是在我的西三米不变。啊西三米不变,也就是说只要找到我就可以找到你,所以这样方便方便咱们所有的文件换地方都不会报错,就是相对地址啊相对地址,那么相对地址就有了一个很重要的一个问题,什么问题呢?就是假如说相对地址那个那个那个那个相对的那个玩意儿。他一旦不对了,那所有东西就不对了。啊,所有东西都就不对了啊,是这样的啊,这是第一个,那什么叫绝对地值呢?绝对地址就是没有相对那一说了就直接就是说,哎呀你在哪儿啊啊你在哪儿,我看你在哪儿呢?啊,你在这个北纬36度啊,东京一一一百二十八度。
50:14
也就是说直接跟任何人没有关系,就直接在这个这个这个这个所有的地方给你了个定位,那么就像咱们在这个电脑上什么就我们就不说,它是以这个文件往上走两步,往下走两步的这个文件夹里边,而什么直接就是说C盘什么什么直接就从盘符开始了,这叫什么,这叫绝对路径。啊,这叫绝对路径,那么绝对路径的话呢,他呢,无论在哪一个软件当中,他所认为的东西都是这一个是完全可以的,但是就会出现一个问题,什么问题就叫不方便移植啊,叫不方便移植,为什么不方便移植呢?很简单,比如说你现在选了工程在C盘,然后你里边引用了一些文件,都已经都在C盘好了,做完了,然后呢,你突然有一天呢,就比如说你的哥们儿为了把你这个把你这个这个这个工程给要走了,你发给他了,然后他呢,拿到之后干什么,他呢,放到了他的地盘了,然后呢,他一说你打开一编译所有的全错,为什么?因为你的所有的里边包含的东西在哪,都认为还在C盘呢。
51:18
但是他C盘又没有,所以就报错了,所以呢,这就是绝对路径和相对路径他们的优缺点啊,那么无论怎么说,我希望大家呢,呃,知道这个问题就可以了啊,知道问题了,那么为什么找不到呢?一般情况下啊。有人说他打不开。注意啊,对于软件来说,除非这个文件损坏了,打不开,一般情况下不会出现的,那么但凡出现打不开的都是找不着。都是找不着在哪儿,或者就就是没有,那怎么办呢?就在这我们来看一下啊,我们来看一下,那我们来说现在怎么办呢?在这儿教给大家一个方法,什么方法呢?大家可以点打开。
52:00
IPROM里边有个什么?里边有一个ROM,这个卖点V就是我们生成的IP盒的点V,你可以点打开。但是你点这个打开的时候呢,他看什么,他就可能会这个到这个界面上,下一步下一步。他的文件在这儿啊,他的文件在这儿,那么此时这个呢,我们就有的时候就显得就非常的无力,那怎么办呢?我们用另外一种方法。QPR接啊,然后呢,IP Co,然后呢它然后呢,找到它,然后用我们的编译器把它打开,那么这个是什么呢?这个其实就是一个叫做这个这个这个呃,Cor所生成的一个IP盒的一个点位,那么这个点位我们也可以看一下啊,点位也可以看一下,那么在这个点位当中的话呢,我们这有一个参数,就重新定义参数,这给大家讲过是吧?重新定义参数好了,那么这个重新定义参数里边就有一项叫重新定义的初始化文件,所以这个就是初始化文件。
53:04
啊,这就初始化文件,那么我们给他这个位置什么,给他这个位置他找不到,给他这个位置他找不到,那怎么办呢?所以在这儿啊,我给大家一个建议,什么建议呢?就是我们在这儿写成什么,我们在这儿写成绝对路径。啊,我们在这儿写成绝对路径,有人说写成绝对路径之后再移植了还对吗?不对,在移植了之后肯定报错,为什么呢?因为位置不一样了,对吧,因为你因为拿到你的那个电脑上,你的这个位置不一定有这个文件,所以呢,我们现在不说这是个bug,我们就只讲他的解决方法,什么方法呢?方法就是他找不到这个玩意儿,因为你给的是个绝对路径,那么这个绝对路径的时候,他认为。因为两个人的起点,或者说叫quarters和model STEM的起点可能不一样,所以干脆为了让你的起点一样,我就不要行为路径了,要什么要绝对路径?那好了,我们现在就把这个这个ROM的卖的MF文件的绝对路径给它找出来就行了。
54:03
在哪儿呢?不就在这儿嘛,所以把这个路径右键复制一下啊,右键复制一下不就在这儿嘛,对不对。我来改一下就行了啊,直接就改这个文件,从这开始。粘贴就直接从盘符开始了,对吧,那么在这儿的话有一个问题,什么问题呢?大家有没有发现啊,就是在我们的系统里边,它默认的下一级这个这个斜杠是往这边斜,从这也可以看得到往这边斜的,但是在qua里边或者在models里边,他们认为的斜杠必须往这边斜,如果你斜的方向反了,他不认为这是下一级啊,所以这个就有点。Bug,好吧。好了,那么如果是这样的话,就是说把我们的初始的这个路径改成这样,那么就可以干什么,就可以比较方便的啊去找到了,但是这样我说过啊,这所带来的问题就是无论采用哪个软件进行仿真,这一定不会报错,但是一定会出现的问题就是只要你移植必报错啊,必报错,但是呢,希望大家一定要知道,就是呃呃,不用说啊,如果说有的人说啊,移植之后报错了,或者怎么怎么地啊,报错就报错呗,我们要的不是不出错,而是说出错了之后,你知道为什么,怎么来修改就OK了啊。
55:24
好,那么这样的话呢,我们在这儿。到这儿找到他。呃,找到这些文件重新编译一下。编译成功以后,我们再来一个。然后run out。好了,那么r data呢,就开始出现了什么,出现了数据。啊,R就出现了数据,那好了,在这边呢,也就没有再去报什么,他就没有再去报这个,没有找到这个文件的这样的一个错误啊,为什么,因为我们给指定那个什么呢,叫做绝对的路径啊,绝对路径啊是这样的,所以呢,今天给大家说了这个问题啊,什么问题呢?就比如说我今天上完课之后。
56:09
啊,有同学说老师这个我不会做,你把这个右键给我打个包给我呗,注意我把这个东西右键打个包发给你,你弄到电脑上一定不对,为什么呢?除非除非能有一件事能做对什么,就是你真的也在你的电脑E盘里边放一个ipg杠,20200518,然后呢,你把我这个放到这个里边,你再打开就能对,为什么呢?因为你的路径跟我的路径一样就能对,只要你放在别的盘了,只要你放的位置不一样,就一定会报错,还是找不到这个文件。所以在这的话,希望大家一定要明白这个问题啊,好了,那么这是第一个啊,就是类似于叫做bug,好吧,这是第一个,第二个我来讲。来看第一个上升沿,在这个上升沿的时候踩到的r de等于零,注意我们都是上升线采样,所以在这儿踩到的r de等于零,采到的地址是129,那么我们都知道按照我们的所做的设计的话,应该什么?应该是在对应的地址里啊,在对应的地址里,或者叫在地址里放入了与地址值大小相等的数,用人话说就是零地址放零,一地址放一,二地址放二,那也就说白了,在129地址。
57:22
应该放的数是129,那么也就是说当我给了个129地址,应该输出129,对不对?但它没有输出,为什么?因为r de等于零,所以r de是一个高电平有效的读势能,所以它不会出出的,在这来看下个声音,在这个声音的时候。R de等于一,D值等于99。那好了,按照我们来说,此时应该输出99了吧,没有,他在这儿输出了99。那么在这踩到141,在这数是141,在这踩到18,在这数入18,在这踩到13,在这数是13,在这踩到61,没有输出61,保证13不变了,为什么?因为R。
58:02
等于。这个零了,在这踩到140,在这输入140,那来分析一下。其实这个就是持续性的问题,你说他错了吗?他肯定没有错,但是为什么说在这儿踩到了99地址,而在这儿才输出99地址呢?在这就踩到99了,对不对,在这儿为什么才输出190,在这才为什么才输出呢?为什么呢。啊,为什么呢?所以今天我们就来给大家去讲什么去讲时序啊,就来讲时序啊,这是我们啊,这个叫做呃上课的,或者叫做今天上课,或者说是是我们以后上课的重点,也就是学ipd的人不懂时序,天天的就在那补的那个代码,你永远都学不好啊,因为你根本就不理解这个整个的叫什么,就设计的一个什么叫做本质啊,因为我们呃,这个叫做无论是做什么,无论是做这个,只要是做底层的,一定对应的都是波形啊,就是你对波形一定要熟啊,对波形一定要熟好了,那么下边的话呢,我们来这样吧,我们也不看课件了,我们我直接用手给大家画吧,这样我觉得。
59:15
能够。这个亲切一点,或者说大家能够看得更清楚一点。好OK,那好,下面我们来讲课啊,首先呢,第一个啊,大家还记不记得,大家还记不记得,我们再去做这个什么呢?我们再去做这个叫做呃,这个这个这个呃时区当中啊,我们先来讲几个什么问题呢?首先我们先来讲这个第一个问题。就是这个叫做,呃,这个在建造这个ROM的时候啊,在建造ROM,大家是不是看到这样的,就是说中间呢,是一块什么,中间是一块ROM,然后的话呢,这是地址的输入。
60:04
然后呢,首先呢,被寄存了一下,也就是说这是个寄存器对不对,然后呢给到他,然后呢,这是一个r den对不对,然后呢,也被寄存了一下给到他,然后呢,输出的时候呢,是不是也被寄了一下给到输出了,是不是这样呢?这个没问题吧,这个呢应该在哪呢?这个应该在我们这个叫做在这个ROM的这个叫做时序图当中啊,或者说在这个叫做这个这个它的这样的一个结构化的这个位置呢,就能够看得到,对吧?哎,是有这样的好了,那么如果是这样的一种结构的话,那么它所对应的波形图应该什么样子呢?这个波形图是什么样子的,这现在已经这个这个这个不重要了,我们来说,我们来分析它是什么样子的,比如说rdn呢,现在我们先不做考虑,而rdn我们先不做考虑,我们只只做这个考虑,比如说这个呢,我称之为叫做a DR re,而这个呢,我称为叫做ad DR re,而这个呢,我称之为叫做Q,或者这个呢称来这个叫Q啊,我们的一直叫。
61:04
R对吧,那么这个呢,我称之叫做R。零好吧,那好了,下面我们来逐渐的去画各个波形,那么比如第一个我们来画时钟。好,那么下面来画地址,因为地址是外部的输入,对不对?好了,那么根据我们的产生不是什么,我们这个地址是什么,我们的地址应该是在下限点发生改变,对吧,那我们就在下限发生改变。比如说在这个位置。好,比如这个地址呢,称之为叫XYZ好吧,三个地址,好那么下面来看一下,那么首先呢,这是这个叫做ADDR对不对,那好了,那对于ADDR1呢,那ADDR1是什么?ADDR很明显是ADDR干什么?ADDR被寄存了一拍之后的值对不对?所以呢,ADDRR1。
62:12
的值应该多少呢?应该是从这个位置开始,因为上升沿会踩到嘛,对不对,所以应该是这个位置开始。也就说这个地方会是X,这个地方会是Y,这个地方会是Z,对不对,是不是应该是这样的,也就是说呢,上升也踩到X嘛,A drre是是这样的,好了,那么对于r date0呢?那好了,R date0应该什么?R date0中间经过了一个它,那么对于它来说它是什么?我们就认为它是组合逻辑,所以这个信号经过组合逻辑得到阿尔特零,那么中间是没有任何时序上的延时的,所以我们认为它和。阿尔零和ADR1是完全同步的,那就是为什么数还是这个,因为我们呃对应地址里放的数和地址是一样的嘛,所以出的数也是它好了,那么再往下阿尔IT0有了,那阿date呢,是不是又是尔DATE0往后继存了一排,所以呢,阿尔date应该什么?应该是上升沿上升沿,上升沿采样,那好了,这个升沿采样踩到什么?踩到就是X对不对,虽然它是对齐的,但是它踩到是前面的X对不对?所以呢,R。
63:25
Date所产生的时序就应该是。XYZ。对不对,所以呢,如果说大家要把r date和a drl如果要放到一起的话,是不是就变成了什么在我们可以称之为啊,就比如说在上升沿为一的位置采样到。X。对不对,上二为一的X好了,那么也就是说会在。上升沿为二的时候。输出X对不对,也就是说在这儿踩到X,在这儿才能输出X,也就是从这个位置才开始输出的,对吧?所以咱们下面我们来看一下。
64:10
是不是在这个上车沿踩到的99,这没问题吧,所以在这个上车沿才输出99对吧,在这个沿踩到的141,在这个眼会输出141没问题吧,所以也就是说这种设计是完全符合什么,完全符合啊,我们的这个叫做什么,就是这个这个这个这个设计规则的啊,完全是符合我们的呃,设计理论的,那么下面呢,我们来做这样一件事,什么事呢?就是我们可以认为另外的一个问题啊,我们现在这么做。我现在呢,打开这个IP盒。啊,打开这个IP盒,然后呢,我点这个下一步我把这个Q给取消掉。那按道理说,我把这个Q取消掉的话。啊,我把这个就是Q的寄存器给取消掉的话,那是不是也就是说什么,也就是说我把这个寄存器是不是给拿掉了,这个寄存器你拿掉以后的话,是不是说我最终的输出其实就是这个对不对,那就是意味着吧,上升也踩到X,就应该输出X了,对不对,就不会再晚一拍了,对吧?那好了,下边我们来验证一下,所以这个呢,就在不断的学习时序,在这我们点击finish。
65:25
好,再点finish。然后回到这个当中,在这个当中的话呢,哎,在这儿的话,其实呢,那个点位都已经被更新了啊,点位经被更新了,那么在这我们也可以打开这个看一下,它会问你是已经更新了,是不是要重新点试一点试的话呢,这个位置又变成这样了。也就是他到时候仿真还是会报错,所以呢,就只要是你重新修改IP盒了,那么这个位置它都会被改变啊,这个位置它都会被改变啊,那怎么办呢?是在这儿的话呢,我们还要再一次的去修改一下什么呢?修改一下这个路径。
66:02
啊,所以在这的话再修改一下这个路径,要不然还得报错啊,要不然还得报错,所以希望大家一定要知道。好。完事以后呢,我们来去做一个编译。好,编译成功以后我们再来restart。软二。好,我们再来看一看。是不是现在就变成了在这个位置踩到99就立刻输出是什么,是不是就立刻输出了99啊。对不对,所以在这踩到在这就输出了,那为什么呢?就因为中间少了一个什么,中间少了一个寄存器,所以希望大家一定要知道,中间加寄存器也好,不加寄存器也好,没有对,就是在很多时候是没有对错之说的。
67:03
加上又怎么样,不加又怎么上?没有对错之说,那没有对错之说,那就有个什么问题呢?那就是说加上之后有什么影响,不加有什么影响?所以加上就岩石一派,不加就。不延时这一拍呗,所以加个寄存器相当就是什么,就是延时了一拍啊,延时的一个一拍,但是在很多地方的时候呢,就要必须加上,很多时候就要不加,为什么呢?就是为了去保证什么,保证我们所要的时序应该是个什么样子的啊,就谁和谁必须对齐的时候啊,这个就是比较的重要啊,比较重要好了,那么这就是我们所谓的个什么呢?所谓的一个叫做ROM的讲解。啊,就是说在生态园踩到的啊61,但是没有输出,为什么呢?因为r de等于低电平啊,在这儿踩到的叫做这个RN,那什么rdn就等于幺啊产的是140,所以呢,输出的就是140,对不对,注意啊,不是说采一百四输出一百四啊因为正好什么,因为正好我们的MF文件里边放的值什么放的值呢?就是跟地址值一样吗?呃,为什么这么做呢?这么做的原因是什么?这么做的原因就是因为就是大家去做验证的时候比较方便啊,验证的时候比较方便。
68:21
好了,那么这就是今天讲的这个叫做ROM,那么呃,什么叫单端口的ROM呢?哎,或者叫什么叫这个这个这个既然说出单端口了,刚才我们建IP口,这里有什么,也有人在看到什么叫做双端口的ROM,对不对,是不是还有个双端口的ROM嘛,所以在这儿的话呢,我们给大家呢,也去简单的来说一下。那么有人说对于存储器来说啊,对于存储器来说,比如说对于存储器,哎,我这给个地址输出这个数,这不就完事了吗?对不对,那什么叫双端口呢。
69:00
是这样的啊,就是说比如说我们这儿有一块存储器,对不对。然后呢,我给个地址,比如说我这个是给地址,比如这个地址叫什么,我这个地址叫ADDRRA,在这我们叫A啊ADDRRA好了,我给个地址,然后呢,我再给你个RDNA,再给你个使能,然后呢,我再给你个clock a好吧。比如说刚才的所有端口都变成A了,然后呢,这输入什么输出的就叫做date a或者叫做QA对不对,然后呢,下边呢,它会有一个叫做RD什么呢。R deb clock badb,还有什么,还输出一个QB,那么这样的话呢,就是什么?就是上边是一套端口,下边呢也是一套端口,但是呢,这套端口有什么作用呢?这套端口它们两个共用同一段存储器。也就是说一个存储器啊,或者叫做一段存储空间上被安了什么,被安了两个端口。
70:04
啊,被安了两个端口啊,就是这样的啊,就是这样的,那么呃,相当于什么意思呢?嗯,这个例子可能不太恰当,但是我们来说一下什么意思呢?就比如说啊,我这个房间里边住了八个人。啊,我这房间里边住了八个人,然后呢,有一个人过来检查,看我这八个人是谁,然后呢,比如说对着哎,我想看一下这个这个开门啊,我想看一下这个这个305房间里面住的是谁啊,住的是张三李四啊零五是吧,那么这边也有一个端口,什么意思,就好比说这一个房间干什么,这一个房间啊,不光左边有窗户,右边也有窗户,就是人家可以通过左右两边的窗户都可以看到当前存储器里边存的是什么,也就是说注意它不是两个存储器啊,它没有任何变,没有存储器没有变任何的样子,就只是说端口多了一套。啊,端口多了一套,那么叫双端口啊,这就是一个双端口的一个一个一个模样啊,那么在咱们的这个什么呢?在咱们IG内部,其实呢,呃,他们的都是双端口的,大家来想啊,比如说为什么都是双端口的呢?其实很简单,比如说我的内部的这个存储器都是双端口的的话,那么你想配置成单端口的话,是不是只要把一个端口不要,是不是就完事了。
71:27
你想是不是一个端口不用,你不就是端端口吗?所以呢,对于我们来说干什么,对于我们来说啊,就是内部都是双端口的,要想配置成端端口,就是一个端口不要就可以了,那么是这样的吗?所以下边的话呢,我来给大家呢,来去呃看一下,但是呢,我就不再干什么呢,我就不再去做仿真了啊,就不再去做仿真了,因为这跟这个是一样的啊。
72:02
IP盒。啊,两个端口的ROM啊,两个端口的ROM双击。这个就交给大家自己去验证了啊,比如我在这写一个叫做RO下划线,下划线2POT啊,叫做端口对吧。好,大家来看在这个位置的候,是不是变成了,是不是变成了,就是说它呢是一段啊这样的存储器啊,一个存储,但是呢,有两个端口,比如地址A地址B啊输出的是QA和QB对不对,咱家看简来看一下啊,这儿说你想怎么指定存储器的大小啊,是用比特来指定呢?还是用这个叫做这这个这个这个这个这个这个这个叫做字节,或者做一一块一块来叫做这个什么一个存储空间,一个存空间来指定呢?在这儿我们选择什么一个存储空间,一个存储空间来指定的,一般情况下就是这个啊,然后你有多少个巴比特呢?哎在这儿,哎先说它是基比特,比如说我是16比特的,我是64比特的,你看这儿QA和QB都变成64比特了,对吧,比如说我是巴比特的,好,我就巴比特,那么多少个巴比特呢,有32个,比如我是有256个,对不对,所以Q它就变成它了,然后这的话呢,也是啊,我们来去选择这个下一步。
73:28
啊,是不是单时钟输入和输出都是同一个时钟,那在这儿的话呢,时钟的格式就多了,就不光有输入输出了,比如这叫单时钟,这个呢叫做输入时钟和输出时钟,比如什么?比如你看所有的A。所有的这个地址输入都是。这个输入时钟输的输出都是什么?输出时钟,那在这儿我们还有呢,双时钟,什么叫双时钟呢?就是说什么,就是说这个叫做双钟,有两种,一种是分输入输出,另外一种呢是分A和B,你看A端口是clock AB端口是clock b就是共用同一段存储器,但是我们可以用不同的时钟速率啊,那么呃,为什么会有这样的一些,呃操作呢,其实也很简单啊,因为呢什么呢?呃,大家学到现在的时候呢,其实我们在前边讲过一个问题,叫什么叫跨市中域啊,就是说大家还记不记得,我们再去讲这个叫做按键处理的时候,我们干什么,我们要把按键进行打两拍,为什么打两拍呢?就因为我们也不知道那个信号过来的时候,是不是符合我们的建立保持时间对不对,也就是说我们不知道它是什么时候来的,当然了,如果说两个时钟,比如说哎,你是30兆的,我是100兆的,然后你给我发了个数,那我直接去采样数等于多少,其实对不对的,其实从某种意义上来说是不对的,为什么呢?因为我也不知道你啥时候给我发,因为咱们俩的相位在十。
74:47
发生的改变,所以这对我来说也是跨市中域的一种数据,这个数据呢,我们可以认为呢,也是一种不一定会满足,所以到时候我们会想办法啊来处理啊,所以这个就是什么,就是分析啊,A端口和B端口的时钟,那么这个是什么呢?这个就是说哎,去产生A的读势能和B的读势能啊,AB的都势能下一步。
75:11
问你QA和QB是不是要干什么叫寄存,所以跟这个是一样的,对不对,那么。嗯,再往下的话呢,问你是不是要初始化文件,这不也是一样的,对吧,也就是你去找一个初始化文件,然后点下一步啊,然后呢,点下一步,然后呢选择上,然后分离式就可以了,在这他不让我分离值,原因什么原因就是说我没有去指定一个初始化文件,因为ROM你不初始化文件建造完没有意义,对不对,在这的话,他不让我初始化啊,就立刻返到这了,那么这个呢,我就不再讲,大家可以把大家可以自己去做这个呃,考虑啊,大家可以自己去做考虑,也就是说呢,这个叫做这个这个呃。呃,就是如何啊去把这个做个仿真啊,那当然了,这个呢和那个仿真其实是一模一样的,只不过就是在就是把我们刚才写的端口改成A是吧,然后呢,又添到端口改成什么,改成B,然后呢,去做这样的一些呃操作啊这样一些操作,然后你就可以看得到的话呢,无论你用哪个端口去读都可以得到想要的数,但是注意啊,这两个端口干什么,这两个端口当然是可以干什么,当然是可以去给不同的地址了啊,如果你要只给相同的地址,那没意义了,对吧,就肯定看可以给出啊不同的地址啊,可以给出不同的地址啊,希望大家一定要知道啊好了,那么呃,再往下边的话呢,这个的这个两个端口的这个设计呢,就干什么,就交给大家了啊,就给大家了好了,那么这是我们的呃。
76:41
这个好了,那么呃,下边的话呢,我来给大家讲一种。思想,什么思想呢?其实这个思想从哪来的呢?其实这个思想呢,是从这个叫做这个呃叫做什么叫做这个这个这个这个这个呃,这个这个这个Lu当中来的,大家都知道Lu是什么呢?就叫查找表,对不对?那么查招表为什么可以等效中各种逻辑呢?其实很简单,为什么呢?因为各种逻辑的话呢,它说白了也就是一种逻辑,而这个逻辑它一定能对应真知表,而只要你能对应真值表,那就简单了,我就把输入当成地址,把输入什么,把输出当成这个叫做这个这个。
77:26
这个这个呃,这个叫做这个呃呃,输出当成这个这个存储的数啊,是不是就可以当成这个Lu就输出了,对吧?这是很显然的一个问题,那么我们今天学了ROM以后啊,我们能不能用ROM来当或者说来去实现某些功能呢?其实呢,这是在很多时候我们都可以实现的啊,都可以实现的啊,来举个例子,比如说我想做一个四位乘四位的。
78:00
乘法器怎么做?有人说我也不会写乘法器呀,我哪会写乘法器呀,我也不会呀,对不对,那你不会写乘法器,那怎么办呢。那就很简单啊,今天学了ROM以后就很简单了,为什么呢?因为我们是可以自己人为的写查找表的,也就是说我们可以把结果算出来,比如说怎么算呢?大家来大家来看一下啊,你说我可不可以这样干呢?我们把它打开好,那么这是不是,这是不是这个存储空间对吧?哎,就是说这是一个ROM对不对,这是一个ROM,比如说我乘法机不会做,但是我还想实现乘法的功能,那怎么做呢?所以现在我们就给大家来讲这个想法啊,讲这个想法好什么意思呢?是这样的啊,大家来想一想是不是这样的,你看啊,呃,我们现在是不是做了一个256的深度乘以八的这样的一个ROM嘛,这是好音对吧?那好了,那么这个是什么?这个就是这样对不对,就这有一个。
79:15
存储器啊,中间呢,被分成了。这个256格。然后呢,每一格里边呢,有八个比特,对不对。那好了,那每一根有八个弦,因为深度有256,对不对?深度是不是有256,那深度如果有256的话,那么对于我们来说,它的地址应该是几位的?这地址是不是也是八位的呀?地址是不是八位的,如果地址是八位的话啊,如果地址是八位的话,那现在我想怎么做呢?我想给他做这样一件事,比如说我把地址分成高四位。和第四位。啊,我把它分成高四位和低四位,然后呢,它俩拼到一起是不是还是八位的地址啊,比如说我说高地址是不是就是。
80:08
第一地址是不是就是第四位啊,好了,那现在来想,高四位的零到15和低四位的零到15,它是不是都可以拼到一起去啊。那好了,那比如说高地址是0011,低地址是0101。那它对应地址多少,它对应地址是不是就是0011和0101啊。这是不是就很简单了,对不对,那然后呢,这个是不是肯定就是一个八位的地址啊,这个八位的地址是不是里边肯定会对应一个数啊。那么这个数我写几呢?这个数我就直接写。高四位乘以低四位的数,我就放进去。啊,我我自己算好啊,我自己算好把它放进去,我自己算好把它放进去是不是就可以了。这是不是就很简单了,我自己算好把它放进去,那如果说我自己算好把它放进去的话,大家想啊,我自己算好把它放进去的话,那是不是一会儿我只要给这个地址,那是不是他就能够直接给我输出来这个结果了。
81:11
对不对,所以呢,这叫什么,这就是一种特殊的方法啊,这就是什么?就是说我们可用什么,我们可以用ROM去计算一些复杂的计算,但是这个计算呢,就是不让ipg来算了,就是我们提前算好给他存进去,然后呢,他根据什么,他根据我们外部的输入,直接去查找出对应的结果就可以了,不要他算,就是我们把结果算好放进去。啊,我们把结果算好放进去,那来想一想啊,那大家来想一想,那应该怎么做呢?那是不是就变成这样了,是不是首先的话呢,我们是不是就变成这样了,我们来看一下啊。嗯。在这我们把这个地址,因为是高四位和低四位对不对,怎么办呢?我们把这个地址调成什么,把地址调成16进制啊,把地址调成这个16进制。
82:03
嗯,是不是调错了。啊,地址调成了16进制啊,但是这个好像不太好看,嗯。哦,我想一想啊,那我们这样吧,因为在这的话呢,确实啊,就是因为它的地址呢,是这个叫做,呃,这个这个在这全是十进制,它是16进制,可能也不太好看,那当然我们知道什么,比如说零地址,就是高四位是零,低四位是零,比如说这个呢,这个什么,这个是11地址,11啊,这个是11地址,那么11地址,什么11地址就是高四位是零,最后低四位什么低四位是11嘛,对不对,低十位是11啊,所以是这样的,那么我们可以做什么一件事呢?我们其实就可以去考虑往里去写了,比如说高四位是零,低四位呢。是零,所以结果等于零,高四位是零,所以第四位是一,乘完之后还是零,所以它也是零,它还是零,它也是零,诶很简单,就这一片都是零。
83:05
为什么呢?因为它的高四位都是零对吧,高四位都是零的话,那还谈什么对不对,是不是这些都是全是零啊。啊,这就全是零了啊,这是毫无疑问的对吧?哎,这是全都是零啊,全都是零啊,全都是零,全都是零,好了,那么我经算完了吧,那么这个呢,变什么?变成高四位就变成一了。啊,高四位就变成一了,那好了,那这个的低四位是零,所以就是零,那那这个呢就是一,这个就是二,这个就是三个就是。这个就是我。这个就是六。这就是七。这就是八,这就九,这就是十啊,这就是11啊,就是12,就是说你要干什么,你要把这个都写完啊,这是14,这是15好了,那到这儿的时候呢,高四位就是二了啊,高位就是二了,所以二乘零等于零,二乘一就等于24681直往后写,所以它是这样的,那么对于我们来说,如果我们要这么来做这个,这么来写这个的话呢,那很多时候呢。
84:23
那就相当相当费劲了,那就太费劲了,对吧,你让我这么干,那就真的很费劲很费劲,所以今天的话呢,我们来怎么做呢,我们大家来教大家啊,去用一种叫做新的方法来去做什么呢。所以大家还记不记得我们在昨天啊,给大家上课的时候说了什么,我们说了这个叫做。这个我们有很多的操,或者说我们在这个这个这个很多很长时间想的时候,我们说我们说在做这个分配管角的时候,我们是不是可以在这边用这个图形画的方式,我们往里分配,那还有一种什么方式,我们是不是可以直接呃把那个对应的那个画啊,写到这个QSF里边一编译是不是就可以了,所以今天也是这样的,比如说我们下面的去研究一下M文件是怎么回事呢?今天我们来研究一下m if文件怎么回事啊。
85:19
往下面打开。我们把MF呢,用一个文件打开好了,那么在MF里边呢,注意啊,这两个横杠啊,代表注释啊代表注释,这对是注释,那好了,你看if文件呢,它是什么?它无异于也是这种格式,比如说他认为宽度是八,深度是256,地址的进制是无符号位,数据的进制是无符号位,然后它的内容是content begin,然后它是什么?它就是零到16地址都是零,然后17地址是一,18地址是二,也就是说呢,在这儿就是多少地址,这是地址,这是数,比如说现在你看啊,这是是零到16地址都是零啊,比如说我在这改零到16地址,我都选择100。
86:11
啊,我都写成100啊,我都写成100好了,我把它保存一下放到这边来,然后我再把这个MF打开。大家来看是不是前16个都变成100了,也就是说呢,你在这儿写数跟什么跟你在这儿直接用手动的去修改这个文件是一样的啊,是一样的,那么这个就是它的格式啊,在这儿的话呢,就是说因为我改的前边的16个都一样了,所以它就变成这个样子了啊,就变成这个样子,就是说它会统一简化,那么它会呢,正常是吧?它正常应该是这样的啊,正常就是零,但里边是100,然后呢,后边是一的里边是多少啊,然后呢,比如一的里边是101。然后二的里面是多少,二的里边是123啊,三的里面多少在这我就不写了,我就直接呃,就写成这个三点点16是吧,然后写成这个214。
87:08
好,那么我们下面再来看一下啊。啊,你看一百一百零一一百二十三全剩下全是214对不对,所以说的话呢,也就是说对于我们来说,我们可以直接操作这个,那么直接可以操作这种方式有什么好处呢?就比如说下边我想实现一个什么呢?我想实现一个叫做呃高四位和低四位的这样的一个什么这样的一个呃这个这个把它们当成两个呃乘法器的乘数,然后呢,得到结果,那对于我们来说,如果说我们想用这个ROM来实现等效的这种方案的话呢,那怎么做呢?对于我们来怎么做,对于我们来说,其实呢,就是说只要去建造一个ROM啊,建造一个RO,然后呢,把它的地址的八位分成高四位和低四位,高四位哎是一个数,低四位是另外一个数,然后呢,把它拼成一个八位的,然后呢,在这个对应的地址里放入什么,放入与它们值大这个相乘的一个结果就可以了,那有些来说。
88:12
除了花里胡哨的,不跟刚才讲的是一模一样的吗?所以别着急啊,我们今天。来给大家个什么呢?来给大家呢,去做一个什么呢,就是我直接给大家来做个什么,我给大家来做一个叫做这个,这个就是等效的四比特的乘法器,好吧。我们叫呃mut_四比特下划线ROM,我们用ROM来等效出来一个四比特的惩罚器啊,大家来看一下啊,应该怎么来做。新建第一个doc。啊,仿真。
89:02
RTL,好了,那么下面的话呢,我们来去。呃,新建一个。文件夹啊,新建一个这个这个叫做这个工程。哦,256是吧。
90:05
好,我新建lo OK file另存为。好,那么代码是什么呢?代码就应该是。输入呢,有这个适中啊,这个我们已经知道了,对吧?然后呢,因为我们做的是四比特乘法器,所以输入呢,肯定有什么三到零的啊,三零什么就是说比如说我们的操作数A啊,然后呢,输入再有一个啊到零的B啊,那当然了,结果什么,因为三到零的嘛,就是三位不是四位乘四位的结果应该是这个这个八位的嘛,不就是这样嘛,对不对,那按照我们如果要知道我们写代码是不是就是这个大来求,就always括号,然后呢,什么什么位怎么S,然后等于A乘B是不是就结束了,当然了,呃,我们意思就是说,假如说我不能用乘号啊,我也不会写乘法器啊,那怎么办呢?我要用ROM来实现,那怎么实现呢?所以首先第一步怎么办呢?是不是去建造一个MF文件,然后干什么,然后呢,去这个叫做呃,这个这个这个这个这个把这个MF文件里边啊,放入这个。
91:24
这个这个这个对应值相等的这样的一个M对吧?哎,就是说这个A乘B啊当成地址啊,把A乘BA和B拼接起来当成地址,然后干什么,然后呢,去算出结果放到MF里边,当然如果我们手动去写的呢,太费劲了,对不对,所以那怎么办呢?啊那怎么办呢?所以在这儿啊,我们去做另外一件事,去什么事呢?比如说我们在这个里边新建叫。MATLAB啊,我们新建一个文件夹叫MATLAB,然后呢,把MATLAB这个路径复制一下。
92:02
然后去启动我们的B。之前让大家装了啊,没装的同学赶快装一下啊。这个软件也比较大,启动起来可能也比较慢。本来打算今天不讲这个的,那今天打算讲RAM的,后来想了想,还是把这个给大家讲了吧,因为后边的话呢,呃,因为在讲这个里边的时候,呃,很多人可能在后边练习的时候可能就会想到啊,我想实现某些东西怎么来做啊,今天我们就尽量讲了,我们就把它讲了,然后我们把RAM的讲的过程呢,呃,不是讲的这个,这个东西呢,放到咱们下一周讲好吧。好了,那么到这的时候呢,我们在这个位置呢,呃,还是老规矩啊,我不愿意去给大家讲哪个是干什么用的,我只是讲什么,我只是讲我用到哪一部分,我跟大家说哪一部分,首先第一件事呢,就是切换路径啊,就是说这边有个路径嘛,点一下CTRLV一下,因为咱们不是切换我们的路径嘛,点一下回车,这就已经切换到我们当前的路径里边了,这是第一件事儿,第二件事儿,这是一个命令行窗口,这个窗口我们不用,我们直接点什么新建脚本。
93:29
啊,点新建脚本。啊,它就会出现一个没有命名的一个脚本啊,没有命名的一个脚本,然后呢,我们干什么老规矩。另存为。它会默认到我们这个里边,比如说我们默认什么呢?就现在我们是这个要做的是乘法器,对吧?比如说我们叫做这个GN产生啊下划线啊,这个叫做UT_四比特下划线MF就是产生一个四比特乘法器的MF啊,就然后呢,就是点M啊,因为MATLAB的后缀是点M点保存。
94:06
好了有了啊,就是说在这儿就会产生一个点M文件,我们在这也可以看出来,在我们这里边就会产生一个点M文件啊,下面来写代码啊,那么malab代码呢,其实也不需要特殊的学,很多时候我也不会,不会干什么百度呗啊,不会就百度呗,那么今天我们来给大家来讲几个。简单的MATLAB的一些,呃,一些东西啊什么呢,比如现在现在的话,我们先不在这个里边讲,我们先在这儿讲,在这个下边讲,我们来讲几个特殊的东西,比如说A等于三回车,这就是A就会等于三,然后你写B等于五回车,这就是A等于三,B等于五,那么A等于三,B等于五,在这比如你写A加B回车,它就会等于八,但是呢,你会发现在这的话,会有这个在工作区里边啊,在这个工作区里边就会出现三个值,第一个叫A。啊,就是我们命名的A,第二个叫B,就是我们命名的B,那么as什么as就是一个叫做实时变量,就是实时变,你比如说你在写这个叫做A减B,然后回车,然后NS什么as就变成了一个负二,还是N,所以NS刚才什么刚才等于A加B,后边等于A减B,所以说它呢,就你可以认为就是一个实时的值,就是说什么,就是说你算的某些情况,你没有给它命名的时候,它就会直接就等于NS了,这是第一个,第二个我们来去说什么呢?就是工作区给大家介绍一下,就是这里边的变量,第二个介绍个命令叫clc。
95:33
CRC什么意思呢?CRC叫清屏,你1.crc呢,也就是说这个命令窗口里边所有的什么,所有的命令都没了。但是有个问题,CRC只是清楚命令,并不清楚值,比如说CRC以后,A还是等于三,B还是等于五,比如你在这写B,它还会出现等于五的,那么什么能够把这个里边的职业给清了呢?叫clear,你一运行clear这个命令的时候,这里边全都没了,你再点B回车,呃,其实就报错,为什么?因为告诉你没有定义B。
96:08
啊,没有deb,所以呢,在这我们先讲了这样的两个,呃,命令啊,就是说这个叫做clear和我们的CRC,所以一般情况下的很多时候哈,我们在写这个代码的时候都会先写个什么呢?我我的个人习惯,我都会先写一个clear,一般情况都会写clear啊,然后clc,就是把啊外边所有的中间值全给清掉啊,就是说我们就重新开始了,那么有的时候不需要怎么办,就注释呗,那么在vload里边注释是两个斜线注释对吧?那么在我们这注释呢,是百分号。百分号是注释,百分号是注释,希望大家知道百分号是注释,那么注释一大堆的时候,没有必要去挨个前面加,怎么办呢?你就选一下这有个百分号嘛。对不对,点一下就出现了,然后再选中啊,再点这个叉就就没了,对吧,很简单啊好,那么下边的话呢,我们为什么新建脚本,我不想在这个这个里边写呢?因为这个里边的话呢,比如说我们写代码,我们一写代码的时候干什么就愿意去按回车,而在这个命令行窗口里边呢,你写哪一句话,只要点回车就会执行,而在这个里边呢,写完之后不执行,我们可以写完之后再执行啊,可以写完之后再执行好了,那么现在我们来讲的什么?现在我们来讲就是说如何来去使用MATLAB来产生一个MF文件,对不对。
97:30
是不是是不是现在又开始讲这个了,对吧?好了,那么下边我来讲clear c RC好,那下边干什么呢?下边其实这个呢,就和我们的C也好,或者和我们之前讲的就一模一样了,什么呢?大在这看一下啊,第一件事儿,既然你要去新建一个,或者用maclab来给你建立一个MF,那怎么做?那你是不是应该等于先打开一个MF啊,怎么打开呢?就是fid等于f open,注意在这里边没有Dollar啊,叫f open括号啊,然后呢,单引号谁呢?我们就是有一个,比如说我们的就叫做什么呢?呃,比如说我们就叫做这个ROM啊下划线ullt_四比特。
98:16
一会儿我们的ROM就叫这个名字好吧,那然后呢,点MF。比如说我们就新建这个文件,然后呢,以写的形式打开,其实这一句话什么意思呢?就是说啊,我以的形式打开了这样的一个点MF的文件就完事了。啊,以写的形式啊,打开了这样的一个文件,那么呃,这个呢,就是它的指针了啊,这个就是它的指针了,那么当然了,如果说呢,你没有这个文件,他就给你新建一下啊,没有的话就新建一下好,那么这是第一件事儿,第二件事干什么,第二件事是不是就往里去写中写数啊好在这儿我们来写一下,比如说怎么向这个文件里写数呢?就很简单啊,就是print print。
99:02
哎,Printt啊,那么print的叫什么叫做print f print f啊,应该是我看一下忘了。Printt。嗯,看一下啊。就是你一点它,它就会告诉你啊写文件啊,到这个里边去是吧,我看一下格式啊,因为具体的格式我都忘了。看一下。这有这有这个,呃,叫做这个。啊,这有这个,他会给咱这个叫什么,给咱这个这个这个。
100:00
这个。历程简单,瞅一眼就可以了。啊,怎么写的,这么写了嘛,对吧,F print f啊这个你看它是以写的形式打开了一个TST是吧?然后呢,呃,在这这个我们我们我们不要这个这个返回量,我们只要它啊f print f啊然后呢,Ffid,然后呢单引号,它后边是数字啊就这样是吧,这个比较简单,我们就明白了,对吧,那对于我们来说就是f print f,然后呢,它然后呢就是fid。然后呢是单引号,我们往里打什么呢,打什么呢,就看MF什么格式喽。在这不有格式吗?对不对啊打什么呢?就打这个呗,啊打这个是吧。好,就拿这个等于八,然后它是不是呃,然后呢,我们这个打完之后呢,后边加个回车啊,加个回车啊,因为呃,这个FF的话呢,它不会出现什么,它不会出现这个,这个叫做跟咱们的再有这个回车的是吧,往下呃再往下什么,再往下是这个。
101:16
这堆注释我们不打啊,你愿意打你也可以打,比如说比如说你愿意打你也可以啊在这我们。啊打印啊两行,然后呢,比如说啊,这个里面谁写的,比如说郝旭帅啊写的啊,你可以随便写,你愿意开始写,反正就是注释掉就OK了啊,那么这是深呃,宽度等于八深度,深度等于多少?深度等于256对不对,就在这再抄一下。深度等于256。深度等于256啊,要一个分号,那么有的时候呢,就会怎么做呢,有的时候就会这么来做啊,就是说先自己固定好,就是比如说是这个深度啊depth,然后等于256啊,然后呢宽度width,然后呢等于八,然后怎么做呢?然后就在这儿就打印什么打印这个时候就等于百分号D。
102:13
然后呢,把后边给一个这个叫做宽度。啊,这给一个逗号给了他。然后呢,这个的话呢,也是一样的,也是一个百分号D,然后后边呢,跟一个这个叫做。呃,深度一样啊。诶,逗号跑前面去了是吧,好OK,好,所以这样的话也可以啊,一样的好,那么下边还有两句话要打哪两句话呢?咱们就按照抄是吧,就这两句就是打印这个地址的进制和这个数据的进制是吧。打印一下啊好,那么这两句话是什么呢?复制一下就行了,无二位啊,地址是无福二位的。
103:10
地址是无法的。然后再打一句话是这个数据的禁制也是无而的。再加一句复制也是负二位的,那么这个就不要了是吧,删除好删除好了,那么在这就打完了,打完之后下面还有啥呢。还有这个content对吧,这这打印。呃,接着抄,复制粘贴就能不自己写的我都不自己写。Begin,好,这个这个内容的这个后边是没有分号的,一定要注意啊,大家都有回车好,再往下边该打什么,再往下边是不是按照我们的想法该打什么,是不是该打印,诶是不是该打印的,就是地址冒号后边跟的地址里面存的数,然后有个分号啊对吧,是不是就是这样的,那好了,对我们来说的话呢,我们怎么做呢?我们这么来做。
104:16
嗯。我用这么来写啊,怎么写呢?我们现在不是有两个,呃两个数吗?就是一个,就是一个乘数是A,一个乘数是B,对不对?那好了,我们来想,比如说我们把A放到前边啊,我们把A放到前边,把B放到后边啊,把A放到前边,把B放到后边的话,那么因为他们都是四位,所以他们都是什么,都是零到15的一个中间一个数对不对?那么对于我们来说,我们是要把所有的十,所有的数都要给它有上,怎么做呢?就for循环for等于零到15是不是,然后呢,End for2循环BA等于零到15,好N。
105:03
好了,写完了,那么对于我们来说,写完以后啊,那怎么做呢?是不是就该打印了,那打印的时候我们来看一下,对于A来说,对于B来说,那么A什么A是地址的高思维,B呢是地址的低思维,对不对?所以对于地址来说,那么在这儿我们来一步来写,比如说我打印的时候应该怎么打印呢?按照我们的格式啊,按照我们的格式来说的话,首先第一个啊,按照格式来说,打印的第一个应该是地址,那么这个地址应该等于多少呢?这个地址的话。比如说我们写成百分号D啊,那么这个地址冒号后边该说后边该是个数,那么数也是百分号D,然后呢,后边有个分号,然后就结束了是吧?是一个反斜杠N对不对?哎,反斜杠N就可以了,那好了,那么对于我们来说地址等于多少呢?地址是不是A,就是高位四位是A,低四位是B啊,那么对于我们来说的话啊,对于我们来说的话,比如地址ad drr ad drr等于多少呢?它是不是就应该等于的是A乘以16加上B啊。
106:19
因为A是高四高四位嘛,所以它的基础值应该是16的多少倍,那对于B来说,B是低四位嘛,所以就应该是B在这边就可以了是吧,或者说呢,就是一个16进制,哎,给这边理解,然后呢,在这写个逗号ad drr,那么它所对应的值应该等于多少呢?它就应该等于A乘以B,不就是对应的结果嘛,对不对,所以把A乘以B放到这儿好可以了,就一直打印的是吧,就是这个无限循环完是吧,也就是说他把这种256种情况循环完事之后,然后怎么做呢?然后呢,最后就是说这一堆零到255,慢慢啊对255都打印完事以后,最后呢,有一个N的啊分号好了,那么下边的话呢,我们再去。
107:05
复制它打印的是N的分号,对吧。And。然后呢,是。And,分号好了,OK,最后打印完之后呢,记得把人家给关闭了对吧?F closefid,好搞定了。好,那么搞定了以后呢,就这个文件我们就写完了,对吧,是不是写完了好了,我们点一个运行就保存一下啊注意没事就按currents保存一下,然后点运行。好,你一点运行这个地方就多了一个MF文件啊,并且这多了一堆纸对吧,多了一堆纸好了,那么下边我们来看一下,在我们的这个文件夹下呢,是不是就多了一个点MF文件呀,然后我们把它右键,用我们的编辑器把它打开,打开以后看一下是不是是不是多了一个注释深度啊,宽度是八,深度是它,然后呢,零里边放零,1:1里边放零,像我们所想的啊,前16个全是零,后边就是123456789,然后呢,02468,然后呢0369啊为什么呢?这个相信大家也能明白是吧,高四位和低四位的值啊在这摆着呢,好了,那么下边我们来去验证一下它到底到底对不对呢?我们也不知道对不对,所以别着急,我们在这儿啊,把这个叫做。
108:22
它打开啊,新建啊,不是应该说建IP核了是吧,工具。嗯,IP。呃,基础功能偏上。ROM。嗯,然后那个打开。IP。呃,然后我们这个叫做mut_四比特下发线,哎,好像是ROM开头的是吧。我们就要起一样的名字啊,这个名字是吧,复制一下。
109:04
重命名。好保存。好,OK。好,那么在这的话呢,就是8256不用动,下一步啊,这个我们愿意加上rdn就加上,不加也行,因为这次用的是个乘法器,所以呢,AB只要有值了,S就一定有,也就是说呢,这个我们可以不要直接默认是一就可以啊,下一步这个地方选一下。然后选成选到哪儿呢?在这个叫做MATLAB里边的MF文件。啊,Ma MF文件,然后点击啊这个finish,然后把ST选出来啊,这个愿要要上啊,然后点击finish。添加里边,然后呢点打开。IP盒他ST。ATE。粘贴。
110:00
好,那么对于这个里边是没有r din的,对吧?没有就没有吧,无所谓啊好了,那么对于我们来说的话呢,这个时钟啊,就是这个时中啊,这个Q就是这个S,那么这个地址呢,是什么地址是八位的,因为我们说了高位在前,低位在后,对吧,就是说A是高四位,B是低四位,所以就完事了啊就完事了,那么下边的话呢,我们进行一个综合分析。啊,每节课综合分析。那么综合分析,呃,以后呢,我们干什么,我们其实就可以去做这个仿真了,但是我们做仿真之前,我们也知道,因为我们用了ROM对不对,所以要干什么,要重点去关注一下什么,关注一下它的Mo if的初始化的位置,是不是别到时候呢,就是说你去仿真还是不对,所以怎么办呢?在这儿我们还是啊,只要用到ROM的时候,我们都尽量去给它改一下这个这个叫做这个这个这个呃,这个MF的位置啊,也不难是吧。
111:01
他。IP盒它,然后我们把它打开。嗯,打开以后呢,我们找到这个位置是吧。嗯,然后呢,我们去找到我们的。他的位置是吧,复制一下。粘贴,然后呢,把这个反一下是吧。好,返完之后呢,我们来保存一下,保存完了之后呢,我们可以在这个里边啊,可以再次运行一下啊,你可以看一看,它也不会报错的,因为绝对路径的话呢,是肯定没有错的啊。他还是可以找得到的啊,不是说他自己产生的东西,我们给他改了路径,他就找不到了啊,我因为我们给他绝对路径,所以他肯定还是可以找得到的啊。
112:02
嗯。诶,这好像有一个问题,等会儿啊。啊,OK啊,没有问题啊,这两个叫的名字不一样啊,我以为叫的名字一样了。叫做。下划线TB。
113:14
好,那么十周。呃,A啊,A是四位的是吧。B。S。时钟,ABS时钟。我们给个100个。
114:08
A等于。当然了,我们也用说这个Dollar r16啊,因为它是这个这个这个四位的是吧,任意的四位值啊,B也是一样的16,呃,然后呢,延时20,这样的话正好与下也是对齐,对吧,Dollar stop。好了,那么这样的话呢,我们其实就可以结束了,是吧,但是呢,我们来做一个另外一件事儿啊,什么事儿呢,在这儿我们来定义几个呃东西,比如第一个我们来定一个where,叫做七到零的呃,7B-S,呃,然后呢,再定一个where啊,七到零的这个叫做。TB杠二,然后呢,我们再定一个这个是的,这个是的到的这个叫做TB-S-R,然后呢。
115:12
啊,TB-S等于A乘以啊,然后呢,Always a时中,然后呢,TB-SR就等于TB-S啊,因为呢,我们你要说去让我去算这个几乘几等于多少,我也不知道,那怎么办呢?我就直接我也不算了,我就让这个他帮我去算啊,就是说因为我们都知道啊,A和B给完之后啊,A和B给完之后,其实呢,两拍之后啊才能够出现S,所以在这的话呢,我也是直接说在这用了个它,然后又打了两拍之后出现它,所以到最后我们就看TB-SRR是不是和S一样就OK了,对吧。
116:51
嗯,关于这个MATLAB这一堆东西啊,大家这个呃,最基本的东西还是要学一学的啊,就是产生文件啊,现在我们在产生这个文件对吧,后边我们去这种方式来产生TST啊,然后读写文件啊,这是我们呃要求大家所必须啊会的啊,要不然后边的话很多东西可能都做不了。
117:14
啊,来看这儿啊,初始化上了没问题对吧,来看这个问题啊,这些东西对不对呢?这谁知道对吧,来看一下就知道了啊。无符号位对吧。好分析一下是吧。呃,一乘四啊,三乘93乘13,二乘五,一乘十三十三乘六对吧,对不对呢?不知道,好把S拿过来和这个TBS-RR比427,一百六十九十,13 78,就最后两个是吧,是不是都是一样的啊,为什么呢?其实很简单嘛,对吧,因为它呢,就是打了两拍之后的值,所以我们在做设计的时候,哎,也就是说你都把你做所有东西的时序啊,以及值所都就搞明白了啊,这就搞明白了啊,那当然肯定也是对的是吧?比如一乘四在这儿踩到的是一乘四,所以在这儿输入的就是四啊,在这采到的是三乘九,在这儿输入的就是27,对不对,27,所以说呢,我们通过这样的一种方式可以干什么,就实现了,我们用ROM来实了我们的乘法器的这样的一种叫什么,就是说这个叫做这个这个乘法器,那么很多人可能会说啊老师你讲这个玩意儿没有用这些乘法器,我就写个乘号,它它不好吗。
118:27
对不对,它也可以实现对吧?注意啊,在这儿我只是给大家举了这样一个例子而已啊,只是给大家举了这样一个例子而已,然后呢,大家在后边去应用的时候呢,还可以用很多其他方法,比如说一些很复杂的设计呢,对于一些很复杂的设计的时候,因为我们后边就会讲到。比如现在干什么呢?比如现在我让你算一个这个125等多少。啊,我就让你去算个什么,我就让你去算一个这个叫做什么叫做sin的这个这个125等于多少,你说等于多少。
119:01
你怎么算?有人说那我就在IP里边就写个三不认识,那怎么办?所以有的时候你就要想办法了,对不对?还有的人算什么,比如让你算这个,就是这个三倍的E的X次幂,然后X呢等于多少?X等于123456789,一直到256,或者一直到255,那怎么办?你怎么算,比如说那我就直接用IP算呗。啊,那么次幂怎么写你知道吗?就我们先不知道他有没有,我就问你次幂在这个代码怎么写,你知道吗?你也不知道,那你不知道怎么办。所以当你不知道的时候,你是不是得想办法去想办法要能够把它算出来,那怎么算呢?所以我们今天就给大家一种方案,什么方案呢?你可以把X当成地址对不对,当成地址对吧?然后呢,你自己用MATLAB把这个数算出来等于多少对不对,然后把这值干什么,把这值写到这个叫做这个这个这个这个这个这个room里边对不对,然后呢,根据给个X值输出个结果,就是说我们不用。
120:00
这个lo来算,或者我不用IP来算了,我自己算好把数存起来,然后呢,你来之后直接查就行,那么这种方法在一些。特定的一些复杂运算里边啊,我们基本上呢,就为了方便什么,为了方便这个这个我们电路的实现啊,或者说这个得出结果,我们一般上都会这么做,有人说你这么做不更费劲了吗?还不让IP给你算呢,注意啊,我们始终做的时候呢,是站在什么让电路如何能跑得更快,跑得更稳的上面去做的啊,不是说所有事儿都给他做。另外希望大家要知道这个。好了,那么这个就是今天要讲的内容了,大家来看一看有没有什么问题。啊,有问题的话可以说一下啊,今天讲的好像也不是特别难啊,然后呢,这个明天休息,然后大家把这个呢去做一做好吧,呃,今天周六是吧,为了补一下咱们那个端午节的课啊,然后呢,我们明天周日明天休息一天,然后后天周一我们接着往下讲,然后后天周一讲的时候,我们讲RM了就好吧,讲RAMRAM就不讲了啊,所以给大家留的作业就是这个,呃,学一些东西啊,学一些东西啊,关于MATLAB也好啊,关于这个等效的思想也好呀,啊,关于MF怎么产生啊,关于各种各样一些东西啊,大家一定要学会好了,大家看有没有问题啊,没有问题的话,咱们就。
121:24
呃,下周见好吧。好,那咱就下周见好吧。
我来说两句