基于微程序控制器(主控存分开)的简单计算机设计与实现.doc
-
资源ID:2884027
资源大小:335.50KB
全文页数:30页
- 资源格式: DOC
下载积分:8金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于微程序控制器(主控存分开)的简单计算机设计与实现.doc
计算机组成原理课程设计说明书题目:基于微程序控制器(主控存分开)的简单计算机设计与实现姓名:靳淑蕉学号:U200915337班级:信息安全0903同组者:潘莹实验台号:49完成日期:2012年1月19日指导老师:王晓兰、周建国、秦磊华华中科技大学计算机科学与技术学院一实验题目1二实验目的1三实验要求1四实验流程2五设计方案21.芯片选择22.设计原理图42.1数据通路42.2增加回存功能52.3增加机器指令部分62.4增加微指令部分83.设计微程序控点104.微指令设计124.1取指公操作134.2取数微指令144.3加法微指令144.4回存微指令144.5停机微指令155.指令周期流程图155.1取指公操作:155.2取数微指令155.3加法运算指令165.4乘2微指令175.5回存微指令186.时序设计187.时序图208.设计接线图21六检查过程23七布线调试时遇到的问题及解决办法23八实现心得体会26九参考文献27一 实验题目基于微程序控制方式的主控存分开的简单计算机系统的设计与实现二 实验目的1. 加深对冯诺依曼体系结构计算机组成及其各部分功能的理解,进一步建立整机的概念。2. 加深对计算机数据通路的理解,加深对计算机指令系统、微指令的认识,并通过时序控制,完整地设计一个简单的计算机系统。3. 锻炼学生初步的计算机系统分析和设计能力。4. 锻炼学生分析、定位和排除故障的能力。三 实验要求1. 利用各单元实验和课堂上所学知识,选择适当的芯片,设计简单的计算机系统。2. 在完成数据通路设计并验证数据通路功能的基础上增加指令和微指令控制的功能。3. 以自己所设计的计算机系统为硬件环境,设计出完成指定功能的各指令周期流程图,并设计出相应的微命令。 4. 以手动方式产生各指令执行过程中所需要的微命令,控制指令的执行。5. 设计控存,并将各指令的微程序存放在CM中,经过适当的时序控制,通过微程序自动控制指令的执行。四 实验流程在课程设计开始前,我们检查了各个芯片是否能正常工作。按照实验指导书上面所给定的各个芯片的功能进行测试,在确定所用的芯片都是好的之后再开始进行接下来的工作。在整个课程设计的过程中,我们依照的是课程设计指导书上面的三步走方法:第一步:打通数据通路,可向存储器6116中存数,向寄存器中打入,用手动实现算术或逻辑运算。第二步:由PC寻址加载机器指令,完成指定算术或逻辑运算;并将结果存入存储器中。第三步:由机器指令的操作码部分加载微指令,由机器指令的地址码部分加载操作数,同时,由它加载的各个微信号,进行运算完成一条机器指令的执行。五 设计方案1. 芯片选择在这次的课程设计中,我们选择的芯片类型及数量如下:74LS2442片74LS3735片1812片74LS1611片74LS1571片74LS3951片61161片28162片关于各个芯片的选择理由如下:74LS244芯片:该芯片具有“选通”和“高阻”两种状态,适合用来作为数据输入或是流通时的闸门,所以我们采用了两片244。一片用来向6116中存入机器指令,另外一片用来控制向6116中回存运算的结果。73LS373芯片:该芯片又称八D锁存器,从它的功能表中也可以看出它具有“选通”和“锁存在已建立的数据电平”两种状态,所以该芯片适合用来作为寄存器。因此我们采用了5片373芯片,其中一片寄存181的运算结果并输出显示,一片作为数据累加器AC,一片作为IR寄存机器指令,剩下两片作为IR存放从控存中读出的微指令。181芯片:181芯片是进行算术或逻辑运算必不可少的芯片,而运算的数据是存放在6116中的,每个单元的数据有8位,因此我们需要两片181并联实现8位数据的运算。74LS161芯片:该芯片又称同步四位计数器,从它的名字就可以看出它具有计数的功能,同时我们在实现中还利用到了它的清零功能。161芯片是用来作为PC使用的,通过它的4位输出一共可以选择到主存6116中的16个地址单元。74LS157芯片:该芯片又称2选1数据选择器,一共有两个输入数据流,每一个数据流是4位的,通过使能端S可以选通其中任意一个数据流,因此该芯片非常适合用来作为主存6116的地址选择控制。当需要机器指令的时候,157选择PC送来的地址;当需要数据的时候157选择IR的低四位送来的数据地址。74LS395芯片:该芯片有两个功能,“清零”和“置数”,我们选择它作为PC。由于在每执行完一条机器指令之后都要再执行取指公操作,因此我们选择将取值公操作存放在控存的0号单元。取指阶段将395清零,执行取指公操作;执行阶段395置数,执行具体功能。6116芯片:该芯片的类型是RAM,我们选择它作为主存。由于主存中需要根据不同的表达式反复写入各种机器指令,而6116的数据存入要相对2816简单一点,因此主存采用的是6116芯片。2816芯片:该芯片的类型是ROM,因此使得它具有断电之后还能保存数据的优势。选择两片2816作为控存,存放微指令。因为微指令只需要在设计好了之后,一次性的打入,以后都不需要再修改了,所以2816无疑是最好的选择。此外还有若干逻辑门 2. 设计原理图在原理图的设计过程中,我们是分步走的。首先是从最基本的数据通路开始,然后再一点点的像垒积木一样的往上添加各种芯片逐步实现各个功能。现在将该过程做一个详细的介绍如下:2.1 数据通路数据通路部分我们是按照组成原理实验指导书实验五的参考电路一的方案去做的,只是在上面做了两点改动:1.将两片395芯片换成了一片373芯片。因为395需要脉冲触发,较373来说略显麻烦,因此进行了这样的替换。2.将6116输入到181的数据由A输入端改成了B输入端。因为在做减法时是A-B,为了能正确进行连续的减法运算就必须将AC存放的数据从A端输入,而将从主存中取出来的数据从B端输入。最后设计的数据通路电路图如下:图1按照该电路连接之后,能够手动实现各种基本的数据运算。具体的步骤为:将数据事先存放到存储器的某些单元中,再通过手动选择地址选中数据,手动调节运算指令,手动操作各个芯片的使能端,从而能够进行连续的算术或逻辑运算,并将结果显示。2.2 增加回存功能在按照2.1中设计的电路连接之后,我们发现所设计的数据通路没有回存功能,因此我们需要在原来的电路上进行一些改进。我们认为回存和开始的时候向主存6116中打入数据其实是同样的原理,不过就是要能够控制回存的时机,也即需要回存的时候才将运算结果回存到主存的某一个单元,其余时候不会影响到主存中存放的数据。因此我们仍然采用244芯片,以A寄存器的结果为输入,输出连到6116的输入/输出端,然后通过手动选择244的使能端来控制回存的时机。这样设计的电路如下:图22.3 增加机器指令部分在完成了数据通路,并多次测试确认无误的基础上,我们开始在上面实现机器指令。此时的机器指令的意思就是能够通过PC选址加载8位的机器指令到指令寄存器IR中。这8位机器指令得到高4位是操作码,由这4位操作码直接连到181运算器的S3-S0端,去控制各种运算类型;8位机器指令的低4位则是地址码,会回到主存6116中去选择运算需要的数据。按照这样的需求,我们增加了一片373作为指令寄存器IR,增加了一片157用于在4位地址码和PC输出的地址中做二路选择。这样设计出来的电路如下:图32.4 增加微指令部分从这里开始,就到了整个实验的关键部分了。所谓增加微指令也就是通过一系列的设计,把之前的那些需要我们手动控制的各个芯片的使能端全部都通过微指令的0、1状态控制起来。之前2.3中实现的只是控制到了181的S3-S0这4个使能端,现在各个芯片,比如181的M端、Cn非端、各个373的使能G端都要用微指令来控制。我们统计了一下,这个需要控制的点超过了8个,因此我们需要两片373作为微指令寄存器IR,这样就可以设计16位的微指令(实际上用不到16位)。微指令是存放在控存中的,对于控存我们选用的是2816。之所以选择2816主要是看中了它是ROM类型的存储器,能够在断电之后依然保存所存储的数据,而恰好微指令也只需要在设计完毕之后一次性的存入,以后一般这样就可以免除了我们多次写控存的工作。PC我们选用的是395芯片,主要是因为该芯片有一个清零功能。我们在每个机器指令执行前我们需要先执行取指公操作,然后再执行具体功能的微指令。这样395的清零功能就为我们提供了很大的便利,我们只需要将取指微指令放在控存的0号单元,然后在每个指令周期的开头将PC清零,就可以进行取指操作了。综上所述,我们在机器指令的基础上添加了一片395.两片2816和两片373,最后设计出的电路如下所示:图43. 设计微程序控点在设计微指令之前,我们先分析整个电路中的各个芯片的控点,其中有些是需要控制的;有些是不需要变动的,始终接到一个电位就行了。首先是不需要控制的控点:输入244芯片:OEa非和0Eb非控点并接,然后接到一个开关上,只在写机器指令的时候选0,写完后一直为1。这个由手动控制,不需要微指令控制。主存6116芯片:CE非始终接0,OE非始终接0(我们选用WE非为0,OE非为0的那个写功能)。多余的地址线接到一起,始终接0(或者接1也可以)。PC 161芯片:MR非端接开关,只在开机的时候手动置0,清零之后再置1。但是后来发现其实可以将start非接到MR非端实现自动清零,因为start非端也是只在开机的时候为0,其余时候一直为1。157芯片:使能端E非始终为0。DR373、AC373、IR373、IR373:输出控制始终接0。控存2816芯片:CE非始终接0,WE非始终接1,OE非始终接0。(因为控存始终是读状态)。多余的地址线接到一起,始终接0(或者接1也可以)。PC 395芯片:PE始终接1,OE非始终接0。接下来是需要控制的控点:6116芯片:WE非157芯片:SPC 161芯片:CPPC 395芯片:MR非、CP非IR373、IR373、DR373、AC373:使能G回存244芯片:OEa非、OEb非并接在一起控制根据那些需要控制的控点,我们设计出来的微指令的每一个控点的状态及其所表示的意义如下表所示:微指令控点意义表 取值控点01C14运行停机C13清零置数C12-C9181的S3-S0控制端C8181有进位181无进位C7算术运算逻辑运算C6IR不变IR置数C5DR不变DR置数C4AC不变AC置数C3回存244无效回存244有效C2主存写主存读C1157地址选PC157地址选地址码C0PC不变PC加1现在对这15个微指令控点做一一的解释如下:C14:该位直接连到时序部分的STOP端口,平时该位一直为0,只有当最后需要停机时才将该位置为1。通过该位可以实现自动停机。C13:该位会连到作为PC的395的清零端MR非和CP非,配合时序来控制PC的置数和清零。通过将该位置0,来使得PC清零,通过将该位置1,来使得PC置数。通过该位,可以让PC在恰当的时候置数取到相应的微指令,在恰当的时候又可以清零执行取指公操作。C12-C9:这四个控制位会直接连到181的S3-S0四个控制端口,通过这四个控制位的0/1状态来进行不同的运算。C8:该位会直接连到低位181的低位进位端,然后低位181的向高位的进位端再连到高位181的低位进位端。通过选择该位为1表示没有进位,而通过选择该位为0表示有进位。该位的设置主要是为了实现减法运算,因为181只有A-B-1的运算,为了正确的实现减法,就用一位进位来抵消。该位平时一直置1,只有减法运算的时候才置为0。C7:该位直接连到181芯片的M端,这样可以控制进行的是算术运算还是逻辑运算。C6:该位是控制作为IR的373芯片的选通和保持状态的,当该位为1时IR选通,存放在主存中的机器指令会送到IR中去;当该位为0时IR会保持当前的输出不变,也就相当于此事的输入端无效。之所以要设置该位是因为从主存中读到的数既有机器指令又有运算数据,因此从主存输出的数据不是每一次都可以读到IR中去的,因此需要控制IR何时有效。C5:该位是控制作为DR的373芯片的,DR是存放181的运算结果的,当该位为0时,DR处于不选通状态,而只有当该位置1时DR才选通,181的运算结果才能存放到DR中去。C4:该位是控制作为AC的373芯片的,AC是累加器,用来存放上一次运算为止的运算结果,通过AC实现连续运算的功能。C3:该位控制作为回存的244芯片。回存功能只有在最后运算全部完毕的时候,才将最后的运算结果送回到主存中去,而其余时候是不会向主存输入数据的。因此通过选择该位为0,则将244选通,此时可以回存数据;通过选择该位为1,则将244置为高阻状态,即没有输出。C2:该位直接连到主存6116芯片的WE非端。当该位为1时主存读数据,该位为0时主存写入数据。该位的设置主要是为了配合完成回存功能,一般情况下主存都是处于读数据状态,只有当回存时主存才会写入数据。C1:该位直接连到157芯片的输入选择S端,该位为1时选择的是I1端口的输入有效,也即IR中存放的机器指令的低4位地址码有效;该位为0时选择的是I0端口的输入有效,也即PC的地址有效。之所以要设置该位是因为,在主存中存放的有两种数据,一种是机器指令,它的地址是根据PC来选择的;另外一种是进行运算所需的数据,它的地址是根据机器指令的地址码部分来选择的。通过该位即可控制主存中各种数据的正确取得。4. 微指令设计根据上面设计出来的微指令的控点,我们开始设计具体的微指令。先将每一条微指令列举如下:微指令C15C14C13C12C11C10C9C8C7C6C5C4C3C2C1C0空停机PCS3S2S1S0Cn非MIRDRAC回存主存157PC取指0010000101001101取数0001010110111110加0001001100111110与非0000100110111110减0000110000111110乘20001100100111110异或0000110110111110或非0000001110111110非0000000110111110与0001011110111110回存0000000100110010停机0100000100001100现在对上述微指令的设计设计过程做一一的介绍如下:(其中各种算术/逻辑运算指令就选取加法指令为代表)4.1 取指公操作取指公操作阶段,显然系统还在运行,故C14位设为0。此时PC应该置数,置数的内容为IR中存放的机器指令的高4位操作码,然后才能根据PC所置的数到控存中去取对应的微指令,故C13位置1。取指阶段不涉及到运算器的功能,故C12-C9、C8、C7的取值任意,我们设为0000、1、0。指令寄存器此时应该选通,因为要读取机器指令进来,故C6位置1。同样的此时没有涉及到运算功能,故DR、AC应该保持当前的输出不变,C5和C4设为11。不涉及到回存,回存244设为高阻,内存为读状态,故C3和C2设为11。此时157应该选择PC的输入,根据PC的输入选取机器指令,故C1位置0。取值阶段的最后PC的值要自动加一,以便下一次取指能取到下一条机器指令,故C0位置1。4.2 取数微指令所谓取数微指令,也就是进行了一次逻辑运算“F=B”。此时不用停机,C14置0。PC需要在取数指令执行的最后清零,以便后面执行取值公操作,故C13置0。根据F=B的运算,相应的置C12-C9为1010。进位端C8任意,我们设为1。运算类型为逻辑运算,C7置为1。机器指令已经在取指阶段取到,此时IR无效,C6置0。运算的结果要存放到DR和AC中,故DR、AC都要选通,C5和C4置为11。此时不涉及到回存,故回存244高阻,主存为读,C3和C2设为11。157应该选择IR输入的地址码,到内存中去取运算需要的数据,故C1设为1。没有取机器指令,PC的值不变,C0为0。4.3 加法微指令加法指令的设计主要是在运算器部分。不用停机,C14为0。P需要在加法指令执行的最后清零,以便后面执行取指公操作,故C13为0。根据加法运算,设置C12-C9为1001;无进位,C8为1;算术运算,C7为0。IR保持当前输出不变,C6为0。DR、AC都要选通,故C5和C4设为11。不涉及到回存,主存处于读状态,故C3和C2设为11。157选择IR输入的地址码,到内存中去取数,故C1设为1。没有取新的机器指令,PC的值不变,故C0为0。4.4 回存微指令回存指令设计的重点在于回存244芯片和主存的状态。系统仍在运行,停机位C14为0。回存指令的最后需要将PC清零,以便后面执行取指公操作,故C13为0。回存不涉及到运算功能,故C12-C9、C8、C7的值任意,我们设为0000、1、0。IR保持当前输出不变,C6为0。DR、AC、回存的244芯片都应该选通,故C5、C4、C3分别为1、1、0。主存应该为写入状态,故C2为0。回存的地址由回存机器指令的低4位地址码给出,控制157的C1为1。PC不变,C0为0。4.5 停机微指令停机微指令的设计重点在于停机位C14,只要在这时才会被设为1。PC会在最后清零,故C13为0。不涉及到运算,同样C12-C9、C8、C7的取值任意,我们设为默认值0000、1、0。此时IR、DR、AC、回存244、主存、157芯片、PC都不再有效,因此接下来的C6-C0我们设为0001100。5. 指令周期流程图每一条机器指令的执行都分为两个阶段:取指阶段、执行阶段。每一条微指令的执行流程图如下所示:5.1 取指公操作:所以设计出来的取指微指令为0010 0001 0100 11015.2 取数微指令所以设计出来的取数微指令为0001 0101 1011 11105.3 加法运算指令(其余双目算术/逻辑运算指令同此)所以设计出来的加法微指令为0001 0011 0011 1110同理:减法微指令为0000 1100 0011 1110与非微指令为0000 1001 1011 1110异或微指令为0000 1101 1011 1110或非微指令为0000 0011 1011 1110与微指令为0001 0111 1011 11105.4 乘2微指令(其余单目算术/逻辑运算指令同此)所以设计出来的乘2微指令为0001 1001 0011 1110同理:非微指令为0000 0001 1011 11105.5 回存微指令所以设计出来的回存微指令为0000 0001 0011 00106. 时序设计在设计了微指令各个控制位的0/1状态之后还需要配合时序来完成整个的系统的自动运行。时序设计的基础是手动操作一定要熟练掌握,对于先控制哪个芯片,后控制哪个芯片自己心中要做到非常的熟悉。接下就是将这些有先后次序的人工作业转换为各个T时间内的作业。开机前,手动将PC、PC清零。开机时,控存取到0号单元存放的取指微指令,然后接下来不断取到后面的指令去执行,直到停机指令。现在对于各个芯片的控制端的时序设计解释如下:PC 395芯片:PC在每条指令执行完毕后,也即下一条指令执行的开始清零,执行取值公操作,故清零端MR非=T0·C13。取指微指令发出之后,PC就应该置数,故CP非=T1·C13。IR 373芯片:IR会在两个时候置数,一个是PC清零时取到取指微指令,另外一个是PC置数后取到具体的执行的微指令。由于T0时刻PC清零,T1时刻置数,故IR的使能G端=T0·C13+T2·C0。控存2816:控存始终处于读状态,WE非置1,OE非置0,CE非置0。IR 373芯片:IR用来存放从主存中读出的机器指令,只有在取指微指令发出之后IR才能选通。由于PC在T0时刻清零,故IR在T1时刻选通,使能G端=T1·C6。157芯片:157芯片负责从PC和IR两个输入端选择地址,不需要时序控制合适有效,输入选择S直接接IR的输出控制位。181芯片:181芯片的使能端有S3-S0、Cn非、M,这六个使能端都不需要用时序来控制,直接从IR的输出端连过来。DR 373芯片:DR会在181运算完毕后选通,使得运算结果存放到DR中去。T2时刻控存的微指令才到达IR,故我们让DR在T3时刻选通,其使能G端=T3·C5。AC 373芯片:在数据存放到DR之后,AC才能选通,数据从DR到AC。DR在T3时刻存放数据,故AC在T4时刻选通,其使能G端=T4·C4。主存 6116芯片:主存平时一直为读状态,只有在回存时才处于写入状态。因此其WE非端=T4非·C2。回存244芯片:回存功能是在最后将运算的结果写入到主存中,由于在T3时刻运算结果才寄存到DR中,因此回存功能放在T4时刻实现。其OEa非/OEb非=T4非·C3PC 161芯片:PC在指令执行过程的最后加1,故放在T4时刻进行,CP=T4·C0。7. 时序图我们设计的每条机器指令的执行包含两个阶段,第一个是取指阶段,第二个是执行阶段。如下图所示:指令在各个T时间内的操作如下表所示:指令在各个T的操作表指令T0T1T2T3T4取指PC清零CM->IRMM->IRIR.op->PCCM->IRNULLPC+1取数NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC加NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC与非NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC减NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC乘2NILLMM->IRIR.op->PCCM->IRAC->181181->DRDR->AC异或NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC或非NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC非NULLMM->IRIR.op->PCCM->IRAC->181181->DRDR->AC与NULLMM->IRIR.op->PCCM->IRMM、AC->181181->DRDR->AC回存NULLMM->IRIR.op->PCCM->IRNULL回存244打开主存写入 8. 设计接线图根据设计出的电路图:图4我们设计最后的接线图如下:图5六 检查过程在检查时老师给我们的表达式是:(3 Å 4)或非8×2+7取非内存存放的内容为:地址内容解释000010110取3101100111异或4201111000或非8301010000乘2400101001加7510000000取非60000001137000001004800001000890000011171010110000停机按照上述内容写好主存之后,将PC、PC清零,按下START的脉冲,开始运行最后结果正确。七 布线调试时遇到的问题及解决办法在整个课程设计的过程中,我们碰到了各种各样的问题。这些问题有一些确实很麻烦,但是也有一些问题在现在看来觉得非常的低级但是当时也困扰了我们很久。不管如何,这些问题在每一个同学进行课程设计的过程中都或多或少会碰到一些,现在我将这些问题以及它们的解决办法一一叙述如下,希望能对以后进行组原课设的同学一点参考的价值:1. VCC1和VCC2没有的接地端没有短接。问题的解决过程:在课设第一天我们的工作是检查芯片。由于对各种设备还不太熟悉,准备工作做得不充分,导致VCC1和VCC2的接地端没有短接到一起,后来检查时出现了一些非常奇怪的现象。后来我们跑去找老师,说我们的芯片坏了,老师一看就发现了问题,并且要我们看指导书的第4面,我们这才知道原来是因为我们的准备工作没有做好,顿时觉得非常不好意思。这个错误都要归结于我们没有好好阅读实验台的使用说明。2. 244输入控制没有高阻,导致其和6116输出冲突。问题的解决过程:这个问题是我们在测试6116芯片时发现的,我们当时是把0号单元存0,1号单元存1,依次类推。全部存好后我们开始回过头来读,看数据有没有存放正确,但是却发现结果很不对,有些灯也是花的。现在要我检查,我当然很清楚这是由于244的输出没有高阻导致的冲突,但是当时我完全没有意识到这个问题,后来也是老师帮我么看了后,就发现了244的问题。3. 如何测试数据通路的正确性?问题的解决过程:数据通路连接好后,我们开始测试数据通路是否连接正确,我记得这个是在实验第一天的晚上进行的,当时我们对于各种芯片的操作非常的不熟悉,对于整个数据通路的工作流程也不是很清楚。所以当我们照着指导书实验五的参考电路一连线完毕后,一下子不知道要如何操作。刚开始我们测试最简单的F=A+B的运算,但是结果却总是不正确,后来我们一直纠结到晚上也没弄出个结果。晚上回到寝室之后,我仔细得回想觉得我们的电路连接的绝对不会用问题,因为我每次选通DR,输出的结果都会变化,只是结果不对,问题应该是出现在我们测试的方法上面了,现在看来确实是这样的。当时有DR和AC的使能端需要我们控制,DR先选通然后立即锁住,AC后选通同样也要立即锁住。但是当时我们对于这些使能端可以说不知道如何操作,打开了之后有时候锁住了有时候又忘了锁,导致结果十分不稳定。后来我们找出了问题,并且知道了如何去操控这些使能端,以及它们的先后次序。4. 坏开关导致结果异常。问题的解决过程:在连接好数据通路后,测试181的减法运算的过程中,我们让S3-S0为0110,Cn非为0,M为0,A为1111,B为0001,运算的正确结果应该是1110但是我们得到的结果却是0110,由于开始时对于如何检查错误还没有经验,我一下子被卡在这里,不知道如何去检查。后来找来老师,听完我们描述的问题之后,只见老师拿着一根导线接到了一个灯,然后导线的另外一端对着各个孔一个个的检查,并且教我们自己辨别这些灯的电位高低,最终检查发现原来时候一个输入的开关坏了。之前我们只检查了芯片,还没有检查开关,所以接下来我们又检查了所有的开关发现9、14号开关都是坏的。检查完了我们的问题之后,老师还教我们说要学会他的检查方法,首先自己要对每个点的电位十分清楚,然后再拿着一根导线去一个一个孔的去检查、排错,逐渐将问题的范围缩小,最终发现问题。这个方法对我后来的查错很有帮助,我也慢慢的学会了这种查错技巧。5. 161芯片的1、7、9、10引脚没有接高。问题的解决过程:后来我们在手动测试回存功能的时候,给了PC脉冲,但是发现主存的输出没有变化,因此我们怀疑是161芯片给的地址不对,用逐个孔检查的方法一一检查之后发现确实问题出在161芯片,但是我们所接的线都会正确的,这是我们突然发现161芯片的1、7、9、10孔是空的,没有接任何东西,回过头去翻书才发现原来老师讲过161芯片的1、7、9、10引脚要接高,果然我们这样做了之后之前的问题没有了。6. 395芯片OE非没有接低。问题的解决过程:我们在实现微指令阶段加了一块395芯片作为PC,在检查芯片的时候发现给了脉冲但是395不能置数,我们当时只注意到了MR非、CP非、PE三个使能端,没有注意到OE非使能端的作用,以为这个使能端不用管。所以我们很确定是芯片坏了,后来换了一个新芯片之后问题依然存在,所以我们去询问老师,老师来后检查了一下,看我OE非原来没有接低。照着老师说的去做了之后,395芯片工作正常了。7. 2816不能写入数据。问题的解决过程:我们在编写完微指令之后,准备将微指令写入控存CM,控存我们选用的是2816,因为它断电之后仍然可以保存数据。经过询问同学我们得知2816的使用方法和6116一样,所以我们就开始放心的去写2816,可是写了再回过头来读,发现每个单元都没有写进去,还是默认的全1状态。后来我又去问一个已经写好了控存的同学,他告诉我一个经验:2816的WE非、OE非在写入数据的时候打成低、高,然后再把两个都打成高、高,再读才能写入数据。我照着他的指点去写控存,果然数据都写进去了,看来这2816在写数据时还有这么一点和6116不相同的地方,如果不是那位同学指点我恐怕弄一天也弄不好了。8. 回存功能我们在数据通路阶段设计的回存功能能够正确实现,但是最后在微指令阶段加入回存不能实现功能。由于时间问题,我们最后没有实现自动的回存功能,只能手动回存。八 实现心得体会这次实验让我收到了很多知识,加深了对“冯·诺依曼”体系计算机的理解,以及“存储程序,程序控制”这句话的体会。但是在这次课程设计的过程中,我也收获到了很多课堂上无法学到的知识。首先,这次组成原理的课程设计让我体会到了一句话,就是磨刀不误砍柴工。在实验的时候,先不要急着去连那一根一根的导线,而是要设计好每一根导线如何去连。等到自己在图纸上有了清晰的设计后,再按照图纸去连接那些导线其实花不了多少时间。其次,我还学会了遇到问题要冷静思考。在平时我们编写程序时,无论经过怎样的深思熟虑编写出来的代码,编译连接时难免会报错,组原课设也是一样。无论在图纸上设计得多么精细,等到连线完毕,测试时难免会有出现一些和预想不一样的情况,而如何去应对这些问题则需要冷静的去分析、查错。由于这次组原课设恰逢考试周,因此我刚开始想着快点把课程设计做完了,可以去复习考试。恰恰就是这种急躁的心态,导致我刚开始遇到问题不能静下心来认真的去检查错误,而是变得十分急躁,结果却是越急越没有效率。后来我认识到这个实验需要的是细心、耐心和冷静分析问题的能力,于是我遇到问题开始静下来认真检查各种错误,一个孔一个孔,一条线一条线的排查,缩小错误范围,最终锁定错误。再其次,我还懂得了遇到问题要善于向同学们请教。刚开始我遇到问题总是自己一个闷人着想,后来这样效率很低,效果也不好。后来我发现其实周围的同学可能很多遇到过和我相同的问题,我于是学着去请教其他组的同学,尤其是那些做得比较快的同学,有时候往往就能够寻找到满意的解决方案。比如我写控存2816的时候,数据总是写不进去,后来同学告诉我说写完后,WE非、OE非全部置高再读。照着他告诉我的方法,我试验了一下,果然数据就解决进去了。这样的经验如果不是同学们互相交流,恐怕我很难发现。最后,我还学会了一个道理就是:做实验的时候没有所谓的难与不难。刚开始做实验的时候,我对于整个实验其实没有一个很明晰的概念。我开始只是想选一个最简单的方法,快一点做完这个课程设计。我听很多身边的同学都推荐说硬布线的方法最简单,连线最少等等,所以我开始就决定要采用硬布线的方案。可是我后来跟几个做微指令的同学交流了一下,决定微指令的方案也没有很复杂,于是我又开始有点犹豫了。最后经过认真的思索我决定采用主控存分开的微指令方案,然后就开始了接下来的一系列设计。虽然当时做实验也碰到了很多困扰我很久的问题,也很苦恼,可是后来这一个个的问题最终都还是被解决了。当最后试验结果成功的时候,我再回过头去看,觉得世界上其实没有难与不难,关键是要自己去做。有时候我们都是自己在私底下想觉得会难,然后就被自己的心理的那一丝丝畏惧给说服了,其实自己并没有真正的去尝试过何谓难何谓不难。所以,要做一个行动者,要多多去尝试,去实践,这样得到的收获往往是最大的!以上就是我在组原课设的这段日子中得到的感悟,这次课设是一次很有意义的磨砺,让我们收获,让我们成长,让我们学习!九 参考文献1.计算机组成原理实验指导书作者:王晓兰、周建国、吴秀敏、管军2.计算机组成原理作者:秦磊华、吴非、莫正坤