EDA课程设计堆栈设计.doc
《EDA课程设计堆栈设计.doc》由会员分享,可在线阅读,更多相关《EDA课程设计堆栈设计.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-作者xxxx-日期xxxxEDA课程设计堆栈设计【精品文档】信息技术学院可编程逻辑器件原理及应用课程综合设计报告书姓 名: 简忠祥 班 级: B1106 学 号: 0915110603 时 间: 2013年12月31日指导教师: 李海成 设计题目 堆栈设计设计要求和任务设计一个以字节形式组织的的堆栈,长度为8,设有入栈按钮、出栈和读栈按钮,执行相应操作设计过程 堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程的内存实现堆栈访问。其中,POP指令实现出栈
2、操作,PUSH指令实现入栈操作。CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器中保存当前线程的栈底指针。CPU的EIP寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。在本文中,我们设计了堆栈处理器。主要分为如下几个部分:l 数据子系统模块:堆栈存储器:“先进后出”是堆栈处理器的基本功能,故在堆栈处理器设计之前我们首先需要了解入栈(PUSH)和出栈(POP)的3中情况(A、B均满/空和A空B满),及其如何实现该功能的,之后利用VHDL语言把这三种情况的实现编写出来。由于加减模块较为简单,所以可以直接利用VHD
3、L语言,把堆栈处理器的基本操作表达出来。(A、B均满/空,A空B满)。在EDA课程中我们很少用到乘法和除法运算,而且利用语言的形式也很难编写出来,故该模块我们利用现代电子系统设计实验指导书上的调用LPM模块的方式来编写。运算器:由于执行各种运算所需的时间不同,故需要开始和结束信号。数据路径:RAM及寄存器A、B的数据来源。条件与控制点:输出及输出信号显示l 控制子系统:根据数据子系统对堆栈处理器各部分的分析,利用VHDL语言编写程序,下载到FPGA实验板上,验证其功能是否满足设计要求。l 其他:本次课程设计除了满足上述要求外还可以额外的实现错误提示功能,及扩展数据到16位。下面会对此进行简单的
4、分析。关键词:入栈(POP)、出栈(PUSH)、算术运算()、VHDL、FPGA一、任务解析: 本次设计要实现如下功能:a与外部数据线的数据交换符合堆栈要求(先进后出); b对存储的数据能进行算术运算;c数据位数不少于8位;d通过数码管显示操作数据及运算结果。围绕着要实现功能,分析堆栈处理器应该具有哪些输入和输出信号,明确设计要求。1.1 从堆栈角度考虑堆栈的指示信号 堆栈其实是一个能随机存取数据的存储器,它符合先进后出的原则。作为一个存储器,除了工作速度外,它的首要指标是容量,设其字数为aa,每个字N位。表征存取字位置的指示信号时地址,在堆栈中称为指针SP。当指针处于栈顶时,SP=0,对应满
5、栈,应有满栈指示信号FULL=1。设计过程当堆栈空时,指针SP=aa,应有空栈指示信号EMPTY=1。同时规定指针SP始终指向操作之前栈内有内容的位置。图1 堆栈处理器指针堆栈的操作 作为堆栈它的操作只有两项,入栈PUSH和出栈POP。入栈操作PUSH后指针SP(SP-1),出栈操作POP后指针SP(SP+1)。若FULL=1,不能入栈PUSH,若EMPTY=1,不能出栈POP。1.2 从算术运算功能考虑首先应有进行算术运算的指示信号,即输出信号ADD,SUB,MUL和DIV。由于不同的运算所需的时间不同,因此必须有一个启动信号START和一个完成信号READY。堆栈中两个数据进行运算的过程如
6、图所示。地址分别为SP和SP+1的两个数据送入运算器进行运算,运算后将结果送入地址SP+1的字中。当堆栈只有一个字时,不能进行算术运算,因此必须有一个ONE指示。当指针处于栈底时,SP=aa-1,这时堆栈只有一个字,应有指示信号ONE=1。图2 堆栈处理器的运算1.3 功能方框图由以上分析可以得到堆栈处理器的功能框图如下所示。图中所标注的信号时该堆栈处理器和外界应有的交换信号。设计过程 图3 堆栈处理器功能方框图二、系统方案论证由于本系统操作时判断条件很多,用流程图描述时会有很多分支,显得很杂乱,因此在此采用VHDL语言将堆栈处理器对数据的操作方案进行描述。本语言对数字系统的描述不涉及具体实现
7、和具体元件,属于行为处理器的描述语言。但其整个描述过程可以得到下图的框架。在此结构中,将堆栈处理器分为数据子系统和控制子系统两大部分,下面分别设计数据子系统和控制子系统。图4 堆栈处理器结构方框图三、数据子系统模块 数据子系统包括对数据的存储、运算、传输以及和控制子系统之间的条件和控制信号交换几大部分。下面就从这几个方面来设计数据子系统,找出各部分的模块电路和它们之间的联系。 堆栈存储器用一块容量为aaN的随机存取存储器RAM作为堆栈存储器,相应的地址产生器的输出即指针SP,由于对RAM数据的存取必须先对地址操作,然后再对数据操作,这样速度较慢。在计算机中一般都用两个高速寄存器直接和总线进行数
8、据交换,RAM则作为后备,其结构如下图所设计过程示。寄存器A,B和RAM共同组成了堆栈存储器。 图5 堆栈存储器结构堆栈处理器的工作过程规定如下:进栈(PUSH)操作,分三种情况:(a) A,B均空:BDIN。(b) A空B满:ADIN。(c) A,B均满:RAMB,BA,ADIN。图6 堆栈处理器的进栈操作出栈(POP)操作,分三种情况:(a) A,B均满:DOUTA。(b) A空B满:DOUTB。(c) A,B均空:BRAM,DOUTB。图7 堆栈处理器的出栈操作算术运算(OP)操作,分三种情况:设计过程(a)A,B均满:BA(OP)B。(b)A空B满:AB,BRAM,BA(OP)B。(c
9、)A,B均空:BRAM,AB,BRAM,BA(OP)B。 图8 堆栈处理器的运算操作 从以上规定的操作可以看出堆栈处理器的结构特点:l 只有寄存器A,B直接和外部总线进行数据交换,RAM只和寄存器B进行数据交换。l 必须设有标志信号FA和FB,当寄存器A满时FA=1,当寄存器B满时FB=1。l 寄存器A是堆栈存储器的栈顶,寄存器B是次栈顶,B不能在A之前先空。将堆栈处理器的存储器和寄存器归纳如下: RAM。对存储器RAM可以从以下几个方面进行描述:l 容量 若选用aa=1024个字,每个字为16位的RAM,记为M(1024,16)。l 地址 地址产生器MA,其输出值VMA即为指针SP。即为SP
10、= VMA;当满栈时,FULL=1,SP= VMA=0;栈内只有一个字时,ONE=1,SP= VMA=1023=aa-1;当空栈时,EMPTY=1,SP=VMA=1024=aa。由于要置入SP=1024,所以地址线应有11位;对地址产生器的操作有加1,减1和置数=1024(初始化)。l 操作 读RAM的操作是:BM(vMA);将RAM中地址为vMA的字置入寄存器B。 写RAM的操作是: M(vMA) B;将寄存器B中的内容设计过程存入地址为vMA的RAM的字中。RAM的读写操作均需一定的时间,操作完毕后,RAM输出MREADY信号表示结束。 寄存器。共有六个寄存器,它们是三个16位的寄存器A(
11、16)、B(16)、输出寄存器D。(16),一个6位的操作码寄存器ROP(16)和两个标志寄存器FA,FB。操作码寄存器的每一位分别表示PUSH,POP,ADD,SUB,MUL,DIV,对它的操作有置数LD和清零CR。标志寄存器FA和FB是一位的D触发器,它们分别具有置数和清零控制端。3.2 运算器假设已有一块能完成、-、的运算器OP。对应每种运算所需要的时间假设为T(ADD)=T(SUB)=2,T(MUL)=8,T(DIV)=12。由于执行各种运算所需的时间不同,因此必须有一个开始信号OBEGIN和结束信号OREADY。四堆栈处理器源程序及其分析library ieee;use ieee.s
12、td_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity st isgeneric(k:integer:=8;w:integer:=3);port(rst:in std_logic; clk:in std_logic; din1,din2:in std_logic; push,pop:in std_logic; op1,op2,op_en:in std_logic; full,empty,one,ready,FA,FB,error_led:out std_logic; mul_in
13、:in std_logic_vector(15 downto 0); div_quo,div_rem:in std_logic_vector(k-1 downto 0); dispA,dispB,data_bus,data_set:out std_logic_vector(k-1 downto 0); qA,qB:out std_logic_vector(k-1 downto 0); end entity;根据数据子系统的分析我们可以了解到堆栈处理器的各种输出和输入变量,在这部分进行实体及其端口的定义architecture behav of st issubtype word is std_
14、logic_vector(k-1 downto 0);type memory is array(0 to 2*w-1)of word;signal tmp_full,tmp_empty,tmp_one:std_logic;signal count1,count2:std_logic_vector(w downto 0);signal din:std_logic_vector(k-1 downto 0);signal tmp_FA,tmp_FB:std_logic:=0;signal dout:std_logic_vector(k-1 downto 0);设计过程begindata_in:pro
15、cess(rst,din1,din2) begin if(din1event and din1=1)then count1=count1+1; end if;if (din2event and din2=1)then count2=count2+1;end if;din(k-1 downto 4)=count2; din(3 downto 0)=count1; data_set=din; if(rst=1)thencount1=0000;count2=0000;end if;end process;由于一个数码管最多能显示4位16进制数据,且本次课程设计要求其数据位不得少于8位,故需定义两个数
16、据输入端口,高4位和低4位。process(clk,pop,push,op_en)isvariable sram:memory;variable ready1:std_logic;variable sp:integer range 0 to 8;variable A,B:std_logic_vector(k-1 downto 0);beginif(clkevent and clk=1)thenif(rst=1)thensp:=8;tmp_FA=0;tmp_FB=0;tmp_empty=1;tmp_one=0;A:=”00000000”;B:=”00000000”;end if;if(sp=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 堆栈 设计
限制150内