




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计 算 机 组 成 原 理 课 程 设 计 说 明 书计算机组成原理课 程 设 计 说 明 书基于微程序控制器的简单计算机系统设计与实现(主、控存分开)姓 名: 学 号: 专 业: 班 级: 实验台号: 指导教师: 完成日期: 计算机科学与技术学院目 录一 课程设计目的2二 课程设计要求2三 课程设计具体任务2四 课程设计所需器材3五 课程设计过程41 检测实验台41.1 检测实验台电源41.2 检测开关、脉冲及LED灯41.3 检测芯片42 确定数据通路62.1 构想数据通路62.2 调试数据通路93 添加控制电路104 设计微指令124.1 设计控点124.2 设计指令和微指令格式144.3 设计微指令155 设计时序185.1 微指令时序185.2 控点时序设计206 整体调试23六 课程设计体会25七 附录26 微指令代码表26 所用芯片逻辑图27八 参考文献28一 课程设计目的1. 加深对冯诺依曼体系结构计算机组成及其各部分功能的理解,进一步建立整机的概念;2. 加深对计算机数据通路的理解,加深对计算机指令系统、微指令的认识,并通过时序控制,完整地设计一个简单的计算机系统;3. 锻炼初步的计算机系统分析和设计能力;4. 锻炼分析、定位和排除故障的能力。二 课程设计要求1. 利用各单元实验和课堂上所学知识,选择适当的芯片,设计简单的计算机系统;2. 在完成数据通路设计并验证数据通路功能的基础上增加指令和微指令控制的功能;3. 以手动方式产生各指令执行过程中所需要的微命令,控制指令的执行;4. 以自己所设计的计算机系统为硬件环境,设计出完成指定功能的各指令周期流程图,并设计出相应的微命令;5. 设计时序列电路,产生满足指令周期和指令执行所需要的多级时序信号;6. 采用微程序控制器时,设计控存,将各指令的微程序存放在CM中,经过适当的时序控制,通过微程序自动控制指令的执行;采用硬布线时,设计硬布线控制信号,产生指令执行过程中所需要的控制信号。三 课程设计具体任务1. 设计微程序控制器或硬布线控制器或基于微程序和硬布线相结合方式的CPU控制器;2. 所设计的模型机支持加减法运算等基本的算术运算指令、支持逻辑运算类指令、支持存储器读写指令、支持寄存器间数据传送等几类指令;3. 支持立即数寻址、直接寻址、隐含寻址、间接寻址(寄存器寻址)等几种基本的寻址方式;4. 能支持10条以上的指令;5. 能运行由自己设计的CPU所支持的指令系统构成的一段程序,程序执行功能正确;6. 根据课程设计指导书和本次课程设计的具体要求,制定出设计方案,并确定CPU 的基本结构是采用总线方式还是采用专用通路方式;7. 画出自己所设计计算机系统的原理框图和器件连接图,分析器件连接图中各器件不同引脚的功能,哪些可以固定连接,哪些需要通过微程序来控制,以及这些控制信号的有效形式;8. 画出各指令的指令周期流程图和所需要的控制信号;9. 布线、调试、验收;10. 撰写课程设计报告并总结四 课程设计所需器材JZYL-型计算机组成原理实验仪 1台;74LS157 1片;74LS161 1片;74LS181 2片;74LS244 2片;74LS373 6片;74LS395 1片;74LS08 2片;74LS10 1片;74LS32 1片;6116 1片;2816 2片;导线 若干。五 课程设计过程本次课程设计的过程基本上按照课程设计指导书上的三步走,即:第一步,打通数据通路,可向6116芯片或2816芯片中存数,向寄存器中打入数据,用手动实现算术或逻辑运算;第二步,由PC寻址加载机器指令,完成指定算术或逻辑运算,并将结果存入存储器中;第三步,由机器指令的操作码部分加载微指令,由机器指令地址码部分加载操作数,同时,由它加载的各个微信号控制机器指令的执行。不过刚开始还是要检测的。1 检测实验台1.1 检测实验台电源将实验台连接上电源后,将左边的地和电源接口接到右边相应的地方,并将左边的两个地接口相互连接,此时开机后数码管应正常工作。1.2 检测开关、脉冲及LED灯右半部分正常工作后,用导线连接开关和LED灯,拨动开关,观察灯是否随开关显示红绿,否则是开关或灯坏掉,最好做一下标记,以免影响后续实验。1.3 检测芯片刚开始检测时,我将芯片的所有引脚接了导线,然后再看测试结果,不过发现这个方法很费时,有时也比较容易出错。问过老师后有一个很简单的方法,首先找到芯片的共同点,然后将那些控制端接开关,然后就可以用很少的导线连接输入和输出,拨动开关看结果即可。这个方法也用在了后续的数据通路、控制通路等各种测试中,既节省了时间,更重要的是又学到了和类似芯片的东西打交道的方法!检测74LS157由于74LS157是四个2选1数据选择器,所以可以将157的使能端E(15)和输入选择S(1)接开关,再用两根导线接数据输入,一根导线接相应的输出,拨动相应开关看LED灯显示的结果,并参照下面的151功能表检测它是否损坏。使能端输入选择数据输入输出ESI0I1YHXXXLLHXLLLHXHHLLLXLLLHXH说明:使能端为高时,不管输入什么,输出全0;使能端为低时,输入选择为高,选择I1路 输入选择为低,选择I0路。然后对照课程设计指导书上的芯片使用方法表,用类似的方法检测验证74LS161、74LS244、74LS373、74LS395、74LS08、74LS10、74LS32等芯片的功能,然后用几个算式简单的检测验证了下74LS181芯片。通过此过程,也加深了一些常用芯片的使用方法。检测完并查阅了芯片用法的相关手册,对一些常用芯片的新认识如下表:74LS161 同步四位计数器,有清零、置数和计数功能;置数计数时只在脉冲的上升沿有效。74LS244 三态八位缓冲器,输出有高阻,但不能锁存数据。74LS373 八位锁存器,输出也有高阻;有锁存功能,比244先进(能用244的地方也可以用373,反之不一定)。74LS395 四位寄存器;输出也有高阻;也有清零、置数功能,不过是在脉冲的下降沿有效。74LS181 四位算术逻辑运算芯片,可执行32种算术逻辑运算。74LS08、74LS10、74LS32 分别为逻辑与、逻辑非、逻辑或。6116测试由于6116芯片较复杂,之前设计数据通路时要用6116做内存,所以有必要对它进行检测。6116的检测图如下:八位I/O接灯八位I/O接开关WE6116OECE低四位地址接开关按上图连接好电路后,将6116置成写的状态,然后通过开关选择要写的地址和数据,再将6116置成读的状态,看相应的地址是否为写入的数据。2816测试由于2816和6116类似,所以可以继续按上图进行测试,只是要注意一点,往2816中写数据时,WE负脉冲,不能加电平!(刚开始测试2816时没注意,搞了比较长时间就是写不进去数据,然后问了别人才知道是这个错,所以测试芯片时一定要注意看芯片的使用手册!)小结一下:做课设的第一天主要就是干了测试芯片,虽然后来好像听老师说只要两个小时就行了,不过只有我一个人在做,虽然有些慢,但也学到了不少东西,为后来的工作打了一下基础吧。然后就是要开始打通数据通路了。2 确定数据通路2.1 构想数据通路刚开始时,参考了课程设计指导书上的第三种方案,虽然接线有些麻烦,但为了以后的考虑,还是确定了该方案。加上我自己的体会后的数据通路为:DR2(373)回写到AC181181DR(373)AC(373)三态门(244)DR1(373)244MM(6116)PC(161)几点说明(包括选择芯片的理由及引脚连接情况):1) 本来6116也可以用2816来代替,而且2816断电也不丢失数据,所以刚开始我使用的是2816,不过后来听别人说内存一定要用6116,才改为6116的。该数据通路中,内存容量为16X8位,不过这些也差不多够了。由功能表可知,引脚18即使能端和引脚20可以接地,只需读写控制端就行了;地址的高七位要接地,低四位和161的输出相连;八位I/O端既可接输入也可接输出。2) 和395相比,161有自动计数功能,可以作为程序计数器PC,以便可以自动执行。而且161也有清零功能,在开机时也能初始化。既可以自加1(顺序执行),也可以置数(完成跳转指令)。又功能表可知,引脚3、4、5、6要接开关,即手动选择地址;引脚11、12、13、14为输出;引脚9此时要接开关以便控制置数和计数功能;引脚7、10接电源即可;引脚2即CP接脉冲,不过实验过程中验证知接开关,即电平控制也可以;引脚1须接开关,使之有清零功能。3) 向6116输入数据选择244,是因为244具有三态功能。虽然373这里也可以用,但用244更方便,因为不需要锁存的功能,只需高阻就行了。由功能表可知,八位输入接开关,用来向6116打进数据;八位输出接6116的I/O端;两个使能端可连在一起接开关。4) 对于DR1,这里可将从6116出来的数据进行锁存,也可以置成高阻态,然后6116就可以一直保持读的状态就行了,相当于一个开关,也可以选择244,但为了扩展和系统更稳定,这里选用了373。由功能表及数据通路可知,输出控制和使能端要接开关;八位输入输出接6116和DR相应的输出输入即可。在后续的选择控点时,只需输出控制即可,使能端可以接电源,不过在检测数据通路时还是都要接开关的。5) 对于三态门244,我的理解是作为回写到内存时的过渡,也可以避免6116出现高阻态,不过后来在检查验收时,经老师点拨,原来是我理解错了书中的意思。在这里,三态门244完全不必要的。不过既然接上了也就算了,又有了应验,以后应该考虑的细一些,而且要大胆的去尝试。6) AC作为累加器,可以暂存数据运算的结果,然后选择合适的数据写入内存即可。DR作为数据寄存器,用来存放从内存出来的数据。它们都要有数据暂存的功能,只有373最合适了。它们的输出控制可接地(不过在测试数据通路时最好接开关),使能端接开关,输入输出接相应的芯片即可。7) 执行算术逻辑运算功能的芯片,非181莫属,不过运算时只需选择其中几种即可,由于数据是八位的,所以要用两块181。它们的引脚接线参考实验1即可,不过相应的控制端如S0、S1、S2、S3、M、Cn(高位的)要接开关的。8) 如果不接DR2的话,181的计算结果会立即放到AC中,然后上一次运算的结果继续运算,再放到AC中继续运算如此反复。所以要将181的运算结果锁存,在适当的时候放到AC或内存中,且需要它的高阻功能。所以输出控制和使能端都要接开关,输入输出接相应的芯片即可。至此,按设想中,该数据通路可以完成的功能及相应的控制是:数据从6116正确导入到DR6116置读状态,向DR导入数据,DR1打开,DR锁存,DR2高阻;算术运算和逻辑运算DR2置高阻,把数据从6116导入DR,181调至相应的运算,运算完把DR锁存,DR2导入数据后锁存。(此时AC一直处于锁存状态);计算结果回写AC6116高阻,DR2、DR锁存,向AC导入数据,完成后锁存;计算结果回写内存AC、DR锁存,DR2锁存(有数据输出),6116处于写状态(调到相应的地址)。2.2 调试数据通路数据通路画好后,就要进行调试打通数据通路。我采用了模块化的方法进行调试。第一步:首先接着上面检测6116芯片的电路,并连接上161和244,通过161选择地址,通过244选择数据,并连上显示灯。向6116打入数据后,将244置成高阻态,6116置成读的状态,通过161选择地址,观察LED灯显示的是否为相应地址中的数据。这一步没什么问题,主要是接线时要注意线的接头,因为从后来的过程中发现,如果接头没有插好的话,一方面在扒线找引脚过程中,可能会把接头弄松;另一方面,在已接好线的芯片旁再连接导线时,容易造成导线的扯引,容易使导线断裂。第二步:接第一步,在已无错的模块上添加DR1,并再次检测调试。这一步也没什么问题,只是在已有的模块上添加一个芯片就行了,算是作为过渡吧。第三步:在上一步的基础上,继续添加DR和AC。将数据打进6116后,将6116置成读的状态,并选择相应的地址,使数据进入DR或AC中,并接LED灯显示是否为相应地址中的数据。在这一步过程中,可以将DR和AC相连,以便向AC中导入数据,不过在后续的设计流程中要把该连接去掉。在这两步中,我又将LED灯直接接上了AC、DR或DR1的输出,其实应该也可以用一根导线进行检测的,不过在后来的调试整体框图时使用了该方法,此时,虽然这个方法稍微有些慢,但也有可取之处的,就是可以把之前接在LED灯的导线直接接在下一个芯片上,不怎么容易出错。第四步:在上一步的基础上,添加算术逻辑运算单元181,并将181的输出接LED灯显示。将数据导入到DR和AC后,选择几种常用的运算,观察输出结果是否正确。由于之前的几步走的比较“顺利”,所以这一步的验证很快就通过了,看来还是一步步的走比较稳妥啊。第五步:添加DR2,即完成整个数据通路。验证该通路正确后,手动产生控制信号,执行执行了一串指令(1+2=3):LDAC 0001ADD 0010SAVE 0100LOAC 0100其中,内存6116的0001单元存放数据1,0010单元存放数据2,0010单元存放数据5,按照指令所需的控制信号手动拨动开关,验证每一步结果是否正确。我很顺利,测试每一步输出接灯显示均正确。小结一下:至此数据通路完全打通,完成了系统工作过程的第一步。打通该数据通路可以说比较顺利,不过即使这样,也花费了我一天的时间,虽然中间也遇到了一些问题,如在调试的第三步,AC的一个显示灯不怎么亮,不过可以肯定没有数据冲突的,然后就把该引脚和电源相与后再接入该引脚,显示正常了;再如接线时要看芯片的引脚图,不过指导书上的引脚图不怎么好看,所以我就按照芯片的逻辑功能重新画了一下,这样连线时就方便许多了;像这样的小问题平时注意一下,也没什么大碍,而且也能提搞效率。而且中途在帮助别人的过程中也进一步提高了自己对该通路的认识,为后续的设计打下了基础!还有在连接数据通路时,一定要用胶带把线捆扎在一起,并贴上纸注明这些导线的用途,之所以这样做,一方面可以做到心中有数,另一方面差错排错时也更方便了,而且也使得实验台不是那么乱。最好把一些多余的开关整理一下,只保留一些必备的,即控制电路中的控点,并在开关的下方注明其所在的芯片及用途。然后按照这些控点,再次测试该数据通路,可以确保在由控制电路控制时对数据通路更加的明确。3 添加控制电路由于上学期各方面的原因,组成原理学的不是太好,虽然把数据通路打通了,但到了控制电路这一块,几乎停步不前了,因为不是很清楚控制电路怎么工作的。请教了同学并和同学讨论后得知,控制电路就是将事先存放在控存中的指令输出,并将这些输出接到相应芯片的控制端,进而可以根据时序来控制这些芯片的有序工作,从而完成模型机的自动工作。这方面的准备工作花费了我一下午,不过这一下午却有很大的收获,就是知道了控制电路的工作原理,然后回去后晚上开始构思控制电路。有了这些思想后,再参考指导书上的微程序控制器实验及老师给的一些资料后,控制电路要有控存来存放微指令;还要有微指令计数器,从控存中读取微指令,而且要有指令寄存器,用来存放从内存中读出的微指令的地址;不过从内存中读出的数据不仅要有微指令地址,还要有操作数的地址,因此要有一个二选一的芯片,用来区分指令和操作数的地址。根据这些构思,整合上述数据通路后的整体初步框图如下图所示:MM(6116)DR1(373)三态门(244)AC(373)181181DR2(373)输 出 控 制 信 号CM(2816)CM(2816)PC(395)DR(373)IR(373)244157PC(161)同样的,关于控制电路也作几点说明:1) 控存选择2816是因为2816可以在断电下保存数据,而6116不行,这样就可以节省大量用于写控存的时间,同时也减少了错误的产生。如果自己的台子不怎么好写CM,也可以拿到别人的台子上进行写微指令。由于2816和6116类似,所以同样的由功能表可知,引脚18即使能端可以接地,不过引脚20在写数据时要接脉冲,然后写完后,一定要接地,使2816一直保持读的状态即可;读写控制端即引脚21要接开关,以便控制读写;同时地址的高七位要接地,低四位和395的输出相连(写数据时接开关也行的);八位I/O端接相应的控点。2) PC选择395,是因为395有既有清零功能,也有置数功能,正好可以将操作码(即指令的地址)送入到控存,也可以很容易满足执行完一条机器指令后返回取值公操作。由其功能表可知,清零端即引脚1须接开关;引脚7即PE须接电源,使之可以装入地址;此外引脚9也要接地,防止395出现高阻;四位输入接IR(373)的高地址,四位输出接2816的相应四位低地址;然后其余的引脚不必接导线。3) IR选373,是因为指令寄存器IR需要锁存,且指令长度为8位,373正好满足条件。同样的由其功能表知,输出控制须接地,使能端接开关即可,然后其输出的高四位接395,即指令的地址,输出的低四位接157的输入,即操作数的地址;全部的输入接6116的八位I/O,使内存中的指令进入指令寄存器。4) 到此,内存地址输入需要一个二选一芯片,即供取指令输入地址(PC 输入)和取数据输入地址(从指令的后四位),而具有二选一功能的157可以完成此功能。由其功能表可知,使能端须接地,防止其出现输出清零;输入选择接开关,作为控点;然后四位的输入I0,即输入选择为低时,接161的四位输出;四位的输入I1,即输入选择为高时,接IR的低四位输出。连接完控存后,由于之前已做过检测,所以检测控制电路是否正确时可以整体的测试。给控存写入0001单元写入指令(随便写的一个,此时只是验证控制电路作为一个数据通路是否正确),如0111 0001 0100 0101,将PC清零后,选择地址,观察CM输出是否为上述存入数据。结果正确。小结一下:走到这一步时,时间主要费在这了,因为写控存的时间大大小小加起来差不多有一天半的时间。到第三天,上午再次用整理后的控点检查下数据通路后(要确保其正确,多花费些时间也行),下午连接检测完控制电路的IR、PC、157,已到了快关门的时间,不过还是想快些做完,所以用了大概10分钟把微指令写进了2816,不过没检测就走了。第四天上午到实验室后,检查2816写进去的数据,发现几乎全错了!不得已,只有重新写。可花费了一上午的时间,还是没怎么搞好,不是忘了选地址,就是忘了按脉冲,或者数据的开关扳的不对,看来一个人就是不怎么好弄,还有中间不停的有人问我,我也要帮别人理通,慢慢的一上午就过去了。下午到那后,再次仔细的往2816写数据,结果还是不成功!不过在前几次查看写的结果时,发现有些单元是对的,但有些单元是错的,问了下别人,估计是芯片损坏了,然后要了一块新的芯片,再次仔细的写,结果都对了!不过把控制电路搞定后,这一天也过去了,因为不停帮别人理思路,不过在帮助他人的过程中,我也对整体有了很清晰的认识,这也算是进步吧!4 设计微指令4.1 设计控点在打通数据通路的过程中,在帮助别人的过程中,在请教别人的过程中,根据自己的框图设计的控点如下:芯片所选择的控点控点功能PC(161)CP(引脚2)自加1二选一(157)S(引脚1)控制选择哪一路信号输出MM(6116)WE(引脚21)控制内存的读写DR1(373)输出控制(引脚1)控制高阻三态门(244)OEa、OEb(引脚1和19)控制高阻AC(373)使能端G(引脚11)锁存数据DR(373)使能端G(引脚11)锁存数据181S3、S2、S1、S0、Cn、M实现各种算术及逻辑运算DR2(373)输出控制(引脚1)控制高阻DR2(373)使能端G(引脚11)锁存数据IR(373)使能端G(引脚11)锁存数据PC(395)MR(引脚1)清零功能芯片的其余控制信号默认接电源或地,或接时序。如上所讨论的,AC、DR、IR的输出控制接GND,MM、CM的OE和CE接地,CM的WE接电源。如上表所示,有了17个控点,而CM最多只能产生16个控制信号,所以需要对控制点进行压缩合并。在打通数据通路过程中,发现DR1和DR的输出控制在同一时刻只能有一个打开,否则会发生数据冲突,而且允许在任意时刻都有一个打开;三态门只有在回写MM的时候才需要打开,因此可以与MM的读写控制合并。由此,便有了15个控点,多出的一位,可作为STOP位,即停机位。4.2 设计指令和微指令格式操作码(op)地址码字段(A)由之前学到的知识可知,指令的格式为:指令的长度为8位,其中op的长度为4位,地址码长度为4位,本次设计的寻址方式为直接寻址。由上述对控点的讨论可知,微指令的格式为:C15C14C13C12C11C10C9C8C7C6C5C4C3C2C1C0STOPMRIR(G)DR2DR2(G)DR(G)AC(G)WESCPS3S2S1S0CnM各个控点信号所代表的含义如下:控制信号01C6PC不变PC+1C7157选PC157选IRC8MM处于写状态,三态门244开MM处于读状态,三态门244关C9AC锁存向AC导入数据C10DR锁存向DR导入数据C11DR2锁存向DR2导入数据C12DR2高阻DR2不高阻C13IR锁存向IR导入数据C14PC清零PC置数C15不停机停机,不再产生时序信号C10-C5181的各种算术逻辑运算设计的该指令系统比较简单,每条机器指令对应一条微指令,从而省去了微指令当中的下地址字段。4.3 设计微指令本课程设计设计的微指令主要有:取指令、LDAC、SAVE、ADD、SUB、同或、异或、与、或、乘2、取非、停机等12条指令,具体的指令周期流程图如下。取指令周期流程图:开始PC157157的S置0 MMIRPC+1由此流程图设计出取指令对应的微指令是:0111 0001 0100 0000LDAC的周期流程图:开始IR157157的S置1 MM置读状态 DR1开 MMDR1DR的G置1 DR1DR181置F=B的状态 DR181181置FB状态 DR 的G置H DR 的G置H DR2输出控制置0使能端G置1 181DR2AC的G置1 DR2AC由此流程图设计出LDAC对应的微指令是:0001 1111 1010 1001SAVE的周期流程图:开始IR157157的S置1 AC181181置F=A的状态 DR2输出控制置0使能端G置1 181DR2DR2锁存三态门打开 DR2三态门MM置写的状态 三态门MMDR2锁存 右244开 由此流程图设计出SAVE对应的微指令是:0001 1010 1011 1101ADD的指令周期流程图:开始IR157157的S置1 MM置读状态 DR1开 MMDR1DR的G置1 DR1DRAC、DR181181置算术加的状态 181置FB状态 DR 的G置H DR 的G置H DR2输出控制置0使能端G置1 181DR2DR2ACAC的G置1 由此流程图设计出ADD对应的微指令是:0001 1111 1010 0110跟ADD类似(仅仅只有181的设置不同而已),可以设计出SUB、同或、异或、与、或等二目运算指令对应的微指令是:SUB 0001 1111 1001 1000同或 0001 1111 1010 0111异或 0001 1111 1001 1011与 0001 1111 1010 1111或 0001 1111 1011 1011不同于二目运算,单目运算的流程图有所不同,因为不用从MM导入数据,所以所需要的控制型号就要少的多。乘2的指令周期流程图:开始AC181181置F=A+A的状态 DR2ACAC的G置1 181DR2DR2输出控制置0使能端G置1 由此流程图设计出乘2对应的微指令是:0001 1011 1011 0010同理也可以设计出取非对应的微指令是:0001 1011 1000 0011显而易见,停机的对应的微指令是:1000 0000 0000 0000总结一下,由上述讨论可得到各指令对应的微指令详见附录。小结一下:在设计微指令这一步中,几乎没什么问题,感觉主要还是要参考之前学到的内容,而且要对之前的数据通路怎么走的比较熟悉。在设计微指令的过程中,也为下一步的设计时序做了铺垫。到此进程还算比较顺利吧。5 设计时序由之前的知识可知,指令周期和机器周期的关系如下所示:5.1 微指令时序结合上述讨论的指令周期流程图,各个微指令的时序运行为:1) 取指指令:T1:IR使能端G置高,读出2816控存中的微指令;T2:以PC的输出为地址,读出内存6116中对应的值,传送到IR,PC接受IR传来的操作码;T3:null;T4:PC+;2) LDAC指令T1:IR使能端G置高,读出2816控存中的微指令;T2:以PC的输出为地址,读出内存中对应的值,传送到DR;T3:DR2打开,DR181DR2;T4:AC打开,DR2AC,PC清零;3) SAVE指令T1:IR使能端G置高,读出2816控存中的微指令;T2:内存置写状态,DR2-MM;T3:null;T4:PC清零;4) ADD指令T1:IR使能端G置高,读出2816控存中的微指令;T2:MMDR1DR;T3:DR2打开,AC+DRDR2;T4:AC打开,DR2AC, PC清零;跟ADD类似(仅仅只有181的运算不同而已),可以设计出SUB、同或、异或、与、或等二目运算指令的时序运行流程。不同于二目运算,单目运算的时序流程图有所不同,因为不用从MM导入数据,所以它们的时序运行为:5) 乘2指令T1:IR使能端G置高,读出2816控存中的微指令;T2:null;T3:DR2打开,AC+ACDR2;T4:AC打开,DR2-AC, PC清零;6) 取非指令T1:IR使能端G置高,读出2816控存中的微指令;T2:null;T3:DR2打开,ACDR2;T4:AC打开,DR2-AC, PC清零;7) 停机指令T1:IR使能端G置高,读出2816控存中的微指令;T2:null;T3:给出一停机信号;T4:PC清零;5.2 控点时序设计据以上论述设计出的各控点时序表达式如下论述。开机后,给PC和PC一个清零信号,经过一个时钟周期,控存CM将输出0000地址单元的微指令,即取指公操作的微指令。也就是说,T1用来发出信号,T2到来时,控制信号已经到了各个控点,所以可以把T1专门用来取控制信号。181的M、Cn、S0、S1、S2、S3:可以直接接控制信号,因为有数据就可以计算,只要在适当的时候把正确的计算结果取出即可。161计数器的CP:在取指令操作结束时,需要给一个信号,要让计数器161自加1,而在执行指令的时候,不需要CP信号,故可以把C6T4接CP。157二选一的S:取指令时,157始终选择PC;执行指令时,157始终选择IR。故可以直接把C7接157的S控制。MM的WE:在执行SAVE指令时,需要把MM置成写的状态,且只有到了T4,数据才会到MM;在执行其他指令时,MM必须一直处于读的状态。因此可以把C8+T4送给WE和三态门。注意:这个地方在逻辑上已经是错的了,而且这个错误会导致写数据错误。当我执行SAVE指令时,发现存入MM的数据总是不对,但是AC的输出是对的,MM的地址也是对的,由此问题指向了MM的控制信号,经检测分析,发现控制信号确实有问题,正确的控制信号应该为C8+T4送WE。(调试这个错误花费了将近一个上午,所以在设计时序时要特别的仔细考虑)三态门244:如上述所讨论的,只有在回写内存的时候,该三态门才打开,所以可以将该三态门的使能端直接接在MM的读写控制端。AC:在把计算结果暂存到AC时,结果应在T4时刻到达AC,因而在T4时刻应把AC打开,所以把C9T4接AC的使能G。DR:当有数据要经过DR时,都应在T2到达DR,所以可以把C10T2接DR的使能G。DR1:每次输入数据到DR,在T2时刻能够把数据送到DR,所以可以把C10T2送给DR1的输出控制。(此时出现了错误,因为DR1的输出控制DR的使能端是反相的;且从DR1中输出数据时,C10为1,此时,DR1一直打开;当不从它输出数据时,DR1也是在T2关闭,其余的T也是打开的)。后来检测时发现计算结果出错,检查DR的结果也是正确的,AC的控制也是正确,由此判断有数据冲突,找到DR1,查出了逻辑有错误,并改正为C10T2。DR2:由于在计算时,数据到达DR时,T2已用完(不过即使没用完也不能此时把计算结果导入DR2,因为这样会导致DR的结果跟输入到DR的数据冲突,把破坏掉的数据再次送到181进行计算),所以可以在T3导出数据,把C11T3接DR2的使能端G。而回写到AC和内存时,在T4又需要DR2输出数据,因此可以把C12(T3+T4)接DR2的输出控制。(让同学看过后,发觉此处出错,因DR2的输出控制为H时高阻,所以这个地方应该接C12(T3+T4)。IR:由于在微指令设计中,IR只在取指令时才打开,在执行指令时,保持锁存状态,所以可以直接把C13接在IR的使能端。PC的MR:取指时,需要置1,使下一条指令的操作码能够从395进来;在执行指令时,需要置0,使执行指令完成后回到取指公操作。所以可以将C13+T4送MR,CP接时序的T4。所以控制电路在逻辑上运行过程为:取指令时,取指信号发送到各个控制点,C13=1,T4时置数,把从MM送来的指令操作码送入PC;执行指令时,C13=0,T4一到,CM地址便置0,经过一定的时延,取指信号发出;如此循环。不过在进行检测时,结果是错的!执行指令时,T4一到,控制信号应该变为取指信号,并执行一个CPU周期,但是取指信号维持约一个时钟周期,在此变为执行指令的信号。分析发现,在执行指令的T4时钟周期中,T4尚未结束,取指信号已经散发到各个控点,此时是取指信号,C13=1,T4结束时,下降沿触发PC置数,刚才的执行指令(同一条执行指令)的操作码又被送入到PC,导致CM的输出一直在取指公操作和第一条机器指令的微指令之间循环。解决方案:在CM的输出加上373做寄存器,并把373的使能端G接T1,输出控制接地,然后只有在T1时刻到来时,下一条微指令的信号才能出来,从而避免了在同一条指令执行的CPU周期中,有两条微命令的信号到达过控制点。修改后的电路图,即框图为:输 出 控 制 信 号MM(6116)DR1(373)三态门(244)AC(373)181181DR2(373)寄存器373寄存器373CM(2816)CM(2816)PC(395)DR(373)IR(373)244157PC(161)开机自动清零:PC和PC在开机时需要清零,所以可以把start取非接PC和PC的清零端,但是结果CM输出出错,发现PC 给地址不稳定,测试start信号,发现start在开机时给一个高电位,随后并非没有信号输出,而是一直处于低电位(所以在检测时,一定要把要用到的器件均要检测一下,并熟悉它们的性能),因此需要把start取非后再跟电源相与送161的MR,也要送到PC的MR,因为只有在开机时start信号为1,取非后为0,可以给出清零信号,随后一直为高,与电源相与后,可以在开机时把161和395清零,而且不改变之后的信号控制。运行结束自动停止:将微指令的C15送时序的stop接口,即只有stop微指令的C15为1时,就可以自动停止时序的产生,从而产生停机效果。到此,整体设计结束,也差不多走完了前述的系统工作过程的三步,还差一个整体调试,我也把调试过程中遇到的困难及解决办法放在下面说吧。6 整体调试首先在进行调试之前,幸好再次检查了一下控存2816中的数据,结果没想到又错了!不过之前确实写进去了,难道说是之前在写的过程中,读写控制端带电拔下造成的吗?问过同学后,才知道这个也有可能导致写进去的数据出现问题。有过教训后,开始了又一轮的写微指令。写过之后再检查,发现低地址的芯片中的数据是对的,不过高地址的芯片中有几个单元是错的。有人告诉会不会是线的问题,他们由于一根线的原因,往2816中写数据写了一上午!不过我的是两个芯片一起写的,线不会有什么问题的。我把低地址的芯片的控制线接到电源或地后,再次写高地址的芯片。不过在检查时还是错!不过没有气馁,再次写,再检查,还是错!如此反复三次后,有些想放弃,不过又想到,自己好不容易走到这一步,怎么还想放弃呢!所以就在临近的实验台上写数据,不过在检查时还是那几个单元出现错误,难道是我的操作有误?再次仔细操作后,发现我的操作没错,但数据还是错的,由此判定,该芯片是坏的!当时的心情,真的无法形容,虽然查到了错误,但也耗费了我一上午的时间,本来预定的计划又不得不推后。确定控存没什么问题后,开始往内存中写数据,即写段程序,验证整体的运行结果。由于在之前晚上想好了怎么往6116写数据,即把6116“隔离起来”。不过在往6116中写数据时,一定不要把其他的导线弄松,这也是我之前就说过的要把导线插好的原因。内存中的程序写好后,心情还是有些激动的!希望可以看到正确的结果,但是那些显示灯却大失所望。再次运行,结果还是一样。不过幸运的是第一次取指、LDAC是正确的,不过往后就错了, 然后开始了慢慢的调试。首先查看了各控点的时序表达式和各指令的时序流程图,做到心中有数。然后将实验台上的时序电路部分的CLK接脉冲,手动操作检测中间结果。发现有些时序表达式是错误的,关于这部分在上面已讨论过。然后发现数据通路的一些结果,如DR、AC等是正确的(此处的正确是指在不怎么正确是时序下,即在该时刻执行什么操作),由于是我一个人做的,所以请教别人后,才知道原来是控制电路的时序在取指和执行时混乱了!395的地址刚开始是对的,在取ADD指令时出现错误,和别人讨论后又重新设计了395和IR的时序。下午来到后,按照上午新设计的时序改变了几根线,再次运行。结果还是错的!然后自己再次查看时序表达式和指令流程图,发现没有什么错误。难道说是导线的问题?按照时序表达式重新走了一下各控点的时序连接,发现有根线没接上!莫非就是这根线引起的错误?将这根线插好后,再次重新写内存数据,再次运行,心情没第一次激动了,但结果对了!结果对了之后,为了再次验证,重启后,再次往6116中写入新的程序,再次运行,也是对的!然后把AC、DR、6116的地址及内容、2816的内容等用LED等显示出来让老师验收。6116中的程序代码为(3+5-6):0001 0001 1001 (LDAC)0010 0011 1011 (ADD)0011 0100 1110 (SUB)0100 1011 0000 (STOP)1001 0000 0011 (数据)1011 0000 01011110 0000 0110最左一列为6116的地址,然后接着的八位为相应地址中的数据。不过在验收过程中又出现了问题。老师看过资料后,指出:DR2没必要使之高阻,可以一直的输出,只需锁存即可;三态门也是不必要的(正如在数据通路中提到的)。然后在查看执行指令时的中间结果时,去掉了DR显示,接上了DR2,不过在取指公操作的T3时刻,DR2显示的LED灯总是加1!然后老师看了我的资料,时序也没什么问题,其他的也没什么问题。大概过了一会,老师要再看一下我的微指令,结果发现取指公操作的Cn为0。结果再次查看显示灯结果,发现确实如此,即只在取指公操作的T3时刻,DR2的值总是加1。还需说明一点,执行停机指令后,不能自动的恢复,需要手动恢复,这也是不足的地方。不过由于是我一个人做的,(没找到DR2为什么加1)老师也没怪我。验收也算比较顺利的通过了。 六 课程设计体会在做课程设计时出现的一些错误及排解方法,已经在上述的设计过程中有所讨论,这里再做下补充并写下我的课程设计总结及感想。首先本次课程设计花费了我差不多一个星期的时间,而且几乎是我一个人完成的,虽然比较累,但也收获不少。每天面对着那几块芯片,完全已记住了它们的引脚和用途,如244、373、6116等。通过本次课程设计,真的让我加深了对组成原理课的认识,也为考研稍微作了下准备吧。虽然没有用FPGA进行设计,而是采用了全硬件设计,虽然接线比较多,不过加深了对数据通路的理解,对微指令系统及时序也有了更深的认识。在做课程设计时,不止组成原理,包括以后要做的其他课程设计,特别是与硬件打交道的,一定要首先检查好所用器件,确保没有任何问题,不然到最好总体检测时,如果出现错误真的不好找,所谓的磨刀不误砍柴工。而且也一定要循序渐进,采用螺旋上升或模块的方式一步一步的靠近目标,而不能直接一步往终点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025黑龙江绥化市明水县人民医院招聘中医医生模拟试卷附答案详解
- 2025第五师医院招聘劳务派遣人员(2人)考前自测高频考点模拟试题及完整答案详解
- 红棋专业考试题目及答案
- 菏泽医保考试题库及答案
- 煤矿安全生产智能化-洞察与解读
- 2025国考四川铁路公安局申论公文写作模拟题及答案
- 2025国考北京市金融监管岗位申论预测卷及答案
- 2025国考朝阳市知识产权保护岗位行测题库含答案
- 2025国考阜新市安全生产岗位申论预测卷及答案
- 2025国考上海市出入境管理岗位申论高频考点及答案
- 2025考研政治真题试卷与参考答案
- 工伤预防培训试题(附答案)
- 过渡金属催化机理-洞察及研究
- 军事电子信息技术
- 城镇排水管道检测与评估技术规程
- 药品储存与养护技术
- GB/T 18445-2025水泥基渗透结晶型防水材料
- 成都工勤转管理办法
- 基于深度学习的心电图诊断心律失常的研究
- 物业承接查验表格
- 2024年注安《技术》真题及答案解析
评论
0/150
提交评论