《计算机组成原理堆栈.doc》由会员分享,可在线阅读,更多相关《计算机组成原理堆栈.doc(12页珍藏版)》请在三一办公上搜索。
1、摘 要堆栈是计算机系统中的一个重要概念,也是理解微型计算机组成的一个基础概念。堆栈是一种存储部件,即数据的写入跟读出不需要提供地址,而是根据写入的顺序决定读出的顺序。堆栈也是一种数据结构。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1。这个过程叫做“出栈pop”。如此就实现了后进先出的原则。一般的堆栈存储器由RAM、寄
2、存器A,寄存器B构成。算术运算一般在寄存器A和寄存器B 之间进行,其中的数据可能来自于进栈的输入也可能来自栈堆的出栈。运算结果则会放入寄存器B中以待下步操作。此次的课程设计做出的堆栈处理器,使其能与外部数据总线进行数据交换,且符合堆栈要求(先进后出),并能对存储的数据进行算术运算,且存储的数据的数据位不少于8位,通过数码管显示操作数据及运算结果(只有寄存器A、B直接与外部总线进行数据交换,RAM只和寄存器B进行数据交换)。关键词:堆栈,RAM, PUSH, POP , 寄存器A,寄存器B 目 录一. 任务解析.3二. 系统方案论证.32.1总体方案与比较论证.32.2 设计思路.42.3系统原
3、理与结构.4 2.3.1 系统框图.4 2.3.2 系统结构框图.5 2.3.3堆栈电路图.5三. 设计过程.63.1堆栈存储器的设计.6 3.1.1堆栈存储器设计原理及仿真结果.63.2对数据进行算术运算的设计及仿真.7 3.2.1 对存储器中数据进行加法运算.7 3.2.2 对存储器中数据进行减法运算.8 3.2.3 对存储器中数据进行乘法运算.8 3.2.4 对存储器中数据进行除法运算.9四. 总结.94.1遇到的问题及解决方案.94.2设计心得.104.3参考文献.10一、 任务解析堆栈处理器应能完成两个基本的功能:与外部数据线的数据交换符合堆栈要求(先进后出);对存储的数据能进行算术
4、运算。对整个堆栈处理器有以下要求:1与外部数据线的数据交换符合堆栈要求(先进后出)即实现进栈(PUSH)和出栈(POP)操作; 2对存储的数据能进行算术运算即能进行简单的加减乘除算;3数据位数不少于8位:4能进行简单的判断运算或操作出现错误时会报警提示。根据堆栈处理器实验要求,可画出程序流程图如下图:图1、程序流程图二、 系统方案论证2.1 总体方案与比较论证 方案一、直接用VHDL语言实现其功能,包括对存储器的入栈出栈处理、与数据总线的数据交换,包括对数据的算术运算处理。 此方案可实现其功能,但是由于对于算术运算中乘法器和除法器用VHDL语言来实现会比较繁琐,且不容易实现,故此方案不够理想。
5、 方案二、直接用LPM模块进行定制RAM、乘法器和除法器等器件。 此方案对于RAM、乘法器、除法器的定制比较简单、灵活,但是对于其数据先进后出的控制会比较麻烦。 方案三、用VHDL语言来实现数据的堆栈处理,用LPM模块进行定制乘法器和除法器等器件。 此方案简单且易实现。 综合以上几种方案的优缺点,方案三简单易实现,且其实现的过程比较简单易理解,并且完全可以达到设计要求,故采用第三种方案。2.2设计思路围绕着要实现的功能,分析堆栈处理器应该具有哪些输入输出信号,明确设计要求。1.从堆栈角度考虑(1)堆栈的指示信号:堆栈其实是一个能随机存取数据的存储器,它符合先进后出的原则。作为一个存储器,除工作
6、速度外,它的首要指标是容量,设其字数为aa,每个字N位。表征存取字位置的指示信号是地址,在堆栈中称为指针SP。当指针处于栈顶时,SP=0,对应满栈,应有满栈指示信号FULL=1。当栈空时,指针SP=aa,应有空栈指示信号EMPTY=1。同时规定指针SP始终指向操作之前的栈内有内容的位置。(2)堆栈的操作:作为堆栈它的操作只有两项,入栈(PUSH)和出栈(POP)。入栈操作PUSH后指针SP(SP-1),出栈操作POP后指针SP(SP+1)。若FULL=1,不能入栈(PUSH),若EMPTY=1,不能出栈(POP)。否者出现错误操作信号提示ERROR=1。2.从算术运算功能考虑首先应有进行算术运
7、算的指示信号,即输入信号ADD, SUB, MUL, DIV。由于不同的运算所需的时间不同,因此必须有一个启始信号START和一个完成信号READY。堆栈中两个数据进行算术运算的为地址分别为SP和SP+1的两个数据送入运算器进行运算,运算后将结果送入地址为SP+1的字中。当堆栈只有一个字时,不能进行算术运算,因此必须有一个ONE指示。当指针处于栈底时,SP=aa-1,这时堆栈只有一个字,应有指示信号ONE=1。若此时进行运算操作则要有报错信号ERROR=1.2.3系统原理与结构2.3.1系统框图对本设计分析: 在本设计中要求此堆栈处理器能与外部数据总线进行数据交换,且数据遵循先进后出的堆栈要求
8、,并要求有指示信号,即满栈指示信号full,空栈指示信号empty,满栈时不能入栈(push),空栈时不能出栈(pop),在此设计中要求对存储的数据进行算术运算,故有进行加减乘除的指示信号,add、sub、mul、div, 由于不同运算所需时间不同,所以需有一个启动信号start和一个完成信号ready,当堆栈中只有一个字时不能进行算术运算,故需要一个one指示信号来控制是否可以进行算术运算,由此得到如下系统框图: 图2、系统框图2.3.2系统结构框图通过对设计任务的各个功能实现的具体分析,得到下面的堆栈处理器的结构框图: 图3、结构框图2.3.3堆栈电路图 图4、电路图三、 设计过程3.1
9、堆栈存储器的设计3.1.1 堆栈存储器设计原理及仿真结果 对此设计进行具体分析,首先是对数据的先进后出的堆栈处理: 图5、堆栈存储器结构图堆栈其实是一个能随机存取数据的存储器,它符合先进后出的原则。作为一个存储器,除工作速度外,它的首要指标是容量,设其字数为aa,每个字N位。表征存取字位置的指示信号是地址,在堆栈中称为指针SP。当指针处于栈顶时,SP=0,对应满栈,应有满栈指示信号FULL=1。当栈空时,指针SP=aa,应有空栈指示信号EMPTY=1。同时规定指针SP始终指向操作之前的栈内有内容的位置。设fa、fb为寄存器A、B的指示信号,当fa=1、fb=1时表示A、B中存有数据。当指针处于
10、栈顶即sp=0、fa=1、fb=1时,栈满FULL=1;当指针sp=8、fa=0、fb=0时,栈空EMPTY=1;当sp=7、fa=0、fb=0或sp=8、fa=0、fb=1时,堆栈中只有一个数据,ONE=1。当FULL=1时,不能入栈(push);当EMPTY=1时,不能出栈(pop);当ONE=1时,不能进行算术运算。图6堆栈存储器进栈出栈的仿真图由图6可知,当push=1即高电平时,压入寄存器B的数据为2,而后push为低电平,当其为高电平时压入寄存器A第二个数据3,当pop=1时,数据出栈,此时寄存器A、B均满,将寄存器A中数据输出到数据总线上,输出数据为3。3.2 对数据进行算术运算
11、的设计及仿真在此设计中,对于存储器中数据的运算是,将数据存入寄存器A和寄存器B中进行算术运算之后,再将运算结果存入寄存器B中的过程。3.2.1对存储器中数据进行加法运算: 图7存储器中数据进行加法运算的仿真图由图7可知,依次压入两个数据2、3,压入之后数据2存入寄存器B中,3存入寄存器A中,当start=1,enter2=0且enter1=0时,数据进行加法运算,结果为5,存入B寄存器中。3.2.2对存储器中数据进行减法运算:图8存储器中数据进行减法运算的仿真图由图8可知,依次在寄存器B,A中存入数据2和3,,当start=1,enter2=0且enter1=1时,进行减法运算,结果为1,存入
12、B寄存器中。3.2.3对存储器中数据进行乘法运算: 图9存储器中数据进行乘法运算的仿真图 依次压入数据2、3,此时寄存器A和寄存器B中内容分别是3和2,当start=1,enter2=1且enter1=0时,进行乘法运算,结果为6,存入寄存器B中。此时寄存器A空B满,再压入数据15,压入的数据存入寄存器A中,当start=1,enter2=1且enter1=0时,进行乘法运算(6*15),结果有溢出,error=1,发出报警信号。3.2.4对存储器中数据进行除法运算:图10存储器中数据进行除法运算的仿真图 依次压入数据3、6,此时寄存器A和寄存器B中内容分别是6和3,当start=1,ente
13、r2=1且enter1=1时,进行除法运算(6/3),结果为2,存入寄存器B中。四、 总结4.1 遇到的问题及解决方案为期两周的堆栈处理器课程设计终于完成了,努力终于有了结果,学到了很多有用的知识,其中也遇到了很多的问题。在课程设计开始的时候,我选用VHDL语言编写乘法器和除法器的程序,但在这个问题上思考花费的时间比较长,并且最终也没有得到预期的结果,乘法器的程序刚开始编写的时候就遇到了问题,想到乘法如何实现,怎样实现,多次仿真之后始终得不到满意的结果,到最后经老师指点,顺利编写成功,经过仿真之后结果也比较令人满意,但是在编写除法器的过程中又遇到了很多的问题,编写出来的程序仿真结果一直不正确,
14、最终感觉到自己能力有限,就放弃了这种用VHDL语言实现乘法器和除法器的方案,选择了用LPM模块定制乘法器和除法器的方案来完成设计,最终选定模式5,并且对自己的程序进行了修改,合理安排输入输出,然后下载到试验箱上观察实验结果。最初的开始只有入栈、出栈、加法和减法结果正确,乘法和除法的结果都不正确,通过检查发现是自己在建工程的过程中出现错误,没有把顶层文件名和工程名保持一致,之后只好又重新开始建工程,编译下载,最终在实验板上看到了实验结果,实现了堆栈处理器应能完成两个基本的功能:与外部数据线的数据交换符合堆栈要求(先进后出);对存储的数据能进行算术运算,由此完成了此次对于堆栈处理器的课程设计。4.
15、2 设计心得 整个堆栈设计通过了软件和硬件上的测试,我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升,对于堆栈处理器,其程序结构很简单,但编写起来有些难度,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了自己解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是借鉴书本
16、上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。 这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。其次,这次课程设计过程中,当我们碰到不明白的问题时,齐老师总是耐心耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导,通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。 4.3 参考文献1、侯伯亨,刘凯,顾新.VHDL硬件描述语言数字逻辑电路设计(第三版)西安电子科技大学出版社,20092、何小艇主编 电子系统设计(第四版)浙江大学出版社,20083、齐晶晶主编 现代电子系统设计实验指导书 电工电子实验教学中心 2009.8评 语 成绩: