EDA课程设计报告堆栈设计.doc

上传人:夺命阿水 文档编号:9368 上传时间:2022-06-23 格式:DOC 页数:30 大小:233.50KB
返回 下载 相关 举报
EDA课程设计报告堆栈设计.doc_第1页
第1页 / 共30页
EDA课程设计报告堆栈设计.doc_第2页
第2页 / 共30页
EDA课程设计报告堆栈设计.doc_第3页
第3页 / 共30页
EDA课程设计报告堆栈设计.doc_第4页
第4页 / 共30页
EDA课程设计报告堆栈设计.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《EDA课程设计报告堆栈设计.doc》由会员分享,可在线阅读,更多相关《EDA课程设计报告堆栈设计.doc(30页珍藏版)》请在课桌文档上搜索。

1、-可编程逻辑器件原理及应用?课程综合设计报告书设计题目 堆栈设计设计要求和任务设计一个以字节形式组织的的堆栈,长度为8,设有入栈按钮、出栈和读栈按钮,执行相应操作设计过程堆栈是一种简单的数据构造,是一种只允许在其一端进展插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程的存实现堆栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。CPU的ESP存放器存放当前线程的栈顶指针,EBP存放器中保存当前线程的栈底指针。CPU的EIP存放器存放下一个CPU指令存放的存地址,当CPU执行完当前的指令后,从

2、EIP存放器中读取下一条指令的存地址,然后继续执行。在本文中,我们设计了堆栈处理器。主要分为如下几个局部:l 数据子系统模块:堆栈存储器:“先进后出是堆栈处理器的根本功能,故在堆栈处理器设计之前我们首先需要了解入栈PUSH和出栈POP的3中情况A、B均满/空和A空B满,及其如何实现该功能的,之后利用VHDL语言把这三种情况的实现编写出来。由于加减模块较为简单,所以可以直接利用VHDL语言,把堆栈处理器的根本操作表达出来。A、B均满/空,A空B满。在EDA课程中我们很少用到乘法和除法运算,而且利用语言的形式也很难编写出来,故该模块我们利用?现代电子系统设计实验指导书?上的调用LPM模块的方式来编

3、写。运算器:由于执行各种运算所需的时间不同,故需要开场和完毕信号。数据路径:RAM及存放器A、B的数据来源。条件与控制点:输出及输出信号显示l 控制子系统:根据数据子系统对堆栈处理器各局部的分析,利用VHDL语言编写程序,下载到FPGA实验板上,验证其功能是否满足设计要求。l 其他:本次课程设计除了满足上述要求外还可以额外的实现错误提示功能,及扩展数据到16位。下面会对此进展简单的分析。关键词:入栈POP、出栈PUSH、算术运算、VHDL、FPGA一、任务解析: 本次设计要实现如下功能:a与外部数据线的数据交换符合堆栈要求先进后出; b对存储的数据能进展算术运算;c数据位数不少于8位;d通过数

4、码管显示操作数据及运算结果。围绕着要实现功能,分析堆栈处理器应该具有哪些输入和输出信号,明确设计要求。1.1 从堆栈角度考虑堆栈的指示信号 堆栈其实是一个能随机存取数据的存储器,它符合先进后出的原则。作为一个存储器,除了工作速度外,它的首要指标是容量,设其字数为aa,每个字N位。表征存取字位置的指示信号时地址,在堆栈中称为指针SP。当指针处于栈顶时,SP=0,对应满栈,应有满栈指示信号FULL=1。设计过程当堆栈空时,指针SP=aa,应有空栈指示信号EMPTY=1。同时规定指针SP始终指向操作之前栈有容的位置。图1 堆栈处理器指针堆栈的操作 作为堆栈它的操作只有两项,入栈PUSH和出栈POP。

5、入栈操作PUSH后指针SP(SP-1),出栈操作POP后指针SP(SP+1)。假设FULL=1,不能入栈PUSH,假设EMPTY=1,不能出栈POP。1.2 从算术运算功能考虑首先应有进展算术运算的指示信号,即输出信号ADD,SUB,MUL和DIV。由于不同的运算所需的时间不同,因此必须有一个启动信号START和一个完成信号READY。堆栈中两个数据进展运算的过程如下图。地址分别为SP和SP+1的两个数据送入运算器进展运算,运算后将结果送入地址SP+1的字中。当堆栈只有一个字时,不能进展算术运算,因此必须有一个ONE指示。当指针处于栈底时,SP=aa-1,这时堆栈只有一个字,应有指示信号ONE

6、=1。图2 堆栈处理器的运算1.3 功能方框图由以上分析可以得到堆栈处理器的功能框图如下所示。图中所标注的信号时该堆栈处理器和外界应有的交换信号。设计过程图3 堆栈处理器功能方框图二、系统方案论证由于本系统操作时判断条件很多,用流程图描述时会有很多分支,显得很杂乱,因此在此采用VHDL语言将堆栈处理器对数据的操作方案进展描述。本语言对数字系统的描述不涉及具体实现和具体元件,属于行为处理器的描述语言。但其整个描述过程可以得到下列图的框架。在此构造中,将堆栈处理器分为数据子系统和控制子系统两大局部,下面分别设计数据子系统和控制子系统。图4 堆栈处理器构造方框图三、数据子系统模块 数据子系统包括对数

7、据的存储、运算、传输以及和控制子系统之间的条件和控制信号交换几大局部。下面就从这几个方面来设计数据子系统,找出各局部的模块电路和它们之间的联系。3.1堆栈存储器用一块容量为aaN的随机存取存储器RAM作为堆栈存储器,相应的地址产生器的输出即指针SP,由于对RAM数据的存取必须先对地址操作,然后再对数据操作,这样速度较慢。在计算机中一般都用两个高速存放器直接和总线进展数据交换,RAM则作为后备,其构造如下列图所设计过程示。存放器A,B和RAM共同组成了堆栈存储器。图5 堆栈存储器构造堆栈处理器的工作过程规定如下:进栈PUSH操作,分三种情况:(a) A,B均空:BDIN。(b) A空B满:ADI

8、N。(c) A,B均满:RAMB,BA,ADIN。图6 堆栈处理器的进栈操作出栈POP操作,分三种情况:(a) A,B均满:DOUTA。(b) A空B满:DOUTB。(c) A,B均空:BRAM,DOUTB。图7 堆栈处理器的出栈操作算术运算OP操作,分三种情况:设计过程aA,B均满:BA(OP)B。bA空B满:AB,BRAM,BA(OP)B。cA,B均空:BRAM,AB,BRAM,BA(OP)B。图8 堆栈处理器的运算操作 从以上规定的操作可以看出堆栈处理器的构造特点:l 只有存放器A,B直接和外部总线进展数据交换,RAM只和存放器B进展数据交换。l 必须设有标志信号FA和FB,当存放器A满

9、时FA=1,当存放器B满时FB=1。l 存放器A是堆栈存储器的栈顶,存放器B是次栈顶,B不能在A之前先空。将堆栈处理器的存储器和存放器归纳如下: RAM。对存储器RAM可以从以下几个方面进展描述:l 容量 假设选用aa=1024个字,每个字为16位的RAM,记为M1024,16。l 地址 地址产生器MA,其输出值VMA即为指针SP。即为SP= VMA;当满栈时,FULL=1,SP= VMA=0;栈只有一个字时,ONE=1,SP= VMA=1023=aa-1;当空栈时,EMPTY=1,SP=VMA=1024=aa。由于要置入SP=1024,所以地址线应有11位;对地址产生器的操作有加1,减1和置

10、数=1024初始化。l 操作 读RAM的操作是:BM(vMA);将RAM中地址为vMA的字置入存放器B。 写RAM的操作是: M(vMA) B;将存放器B中的容设计过程存入地址为vMA的RAM的字中。RAM的读写操作均需一定的时间,操作完毕后,RAM输出MREADY信号表示完毕。 存放器。共有六个存放器,它们是三个16位的存放器A(16)、B(16)、输出存放器D。16,一个6位的操作码存放器ROP16和两个标志存放器FA,FB。操作码存放器的每一位分别表示PUSH,POP,ADD,SUB,MUL,DIV,对它的操作有置数LD和清零CR。标志存放器FA和FB是一位的D触发器,它们分别具有置数和

11、清零控制端。3.2 运算器假设已有一块能完成、-、的运算器OP。对应每种运算所需要的时间假设为T(ADD)=T(SUB)=2,T(MUL)=8,T(DIV)=12。由于执行各种运算所需的时间不同,因此必须有一个开场信号OBEGIN和完毕信号OREADY。四堆栈处理器源程序及其分析library ieee;use ieee.std_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

12、 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: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:outstd_logic_vector(k

13、-1 downto 0); qA,qB:out std_logic_vector(k-1 downto 0); end entity;根据数据子系统的分析我们可以了解到堆栈处理器的各种输出和输入变量,在这局部进展实体及其端口的定义architecture behav of st issubtype word is std_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_lo

14、gic_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:process(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-

15、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位,故需定义两个数据输入端口,高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:st

16、d_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 and tmp_FA=1 and tmp_FB=1)then tmp_full=1; elsif(sp=8 and tmp_FA=0 and tmp_FB=0)then tmp_empty=1;tmp_one=0; elsif(tmp_FA=0 and tmp_FB=0 and sp

17、=7)then tmp_one=1; elsif(tmp_FA=1 and tmp_FB=0 and sp=8)then tmp_one=1;elsif(tmp_FA=0 and tmp_FB=1 and sp=8)then tmp_one=1;else tmp_one=0;设计过程 tmp_full=0;end if;在进展入栈、出栈及算术运算的时候我们利用指示灯可以观察出来堆栈处理器的存储情况,FULL、ONE、EMPTY、FA、FB。if(push=1 and ready1=1 and tmp_full=0)then -push if(tmp_FA=0 and tmp_FB=0)then

18、 B:=din;tmp_FB=1; elsif(tmp_FA=0 and tmp_FB=1)then A:=din;tmp_FA=1; elsif(tmp_FA=1 and tmp_FB=1)then sram(sp-1):=B; B:=A; A:=din;tmp_FA=1;tmp_FB=1; sp:=sp-1; end if; ready1:=0; tmp_empty=0;end if;if(pop=1 and ready1=1 and tmp_empty=0)then -pop if(tmp_FA=1 and tmp_FB=1)then dout=A;tmp_FA=0;tmp_FB=1;

19、elsif(tmp_FA=0 and tmp_FB=1)then dout=B;tmp_FA=0;tmp_FB=0; elsif(tmp_FA=0 and tmp_FB=0)then sp:=sp+1; B:=sram(sp-1); dout=B; tmp_FA=0;tmp_FB=0; end if; ready1:=0; end if;通过前面对入栈和出栈三种情况A.B均空/满、A空B满的分析,编写程序。if(op_en=1 and ready1=1 and tmp_one=0 and tmp_empty=0)then if(tmp_FA=1 and tmp_FB=1 and op1=0 a

20、nd op2=0)then 加法 B:=B+A;tmp_FA=0; elsif(tmp_FA=0 and tmp_FB=1 and op1=0 and op2=0)thenA:=B;sp:=sp+1;B:=sram(sp-1);B:=A+B; elsif(tmp_FA=0 and tmp_FB=0 and op1=0 and op2=0)then sp:=sp+1;B:=sram(sp-1);A:=B;sp:=sp+1;B:=sram(sp-1);B:=A+B; elsif(tmp_FA=1 and tmp_FB=1 and op1=1 and op2=0)then 减法设计过程 B:=A-B

21、;tmp_FA=0; elsif(tmp_FA=0 and tmp_FB=1 and op1=1 and op2=0)then A:=B;sp:=sp+1;B:=sram(sp-1);B:=A-B; elsif(tmp_FA=0 and tmp_FB=0 and op1=1 and op2=0)then sp:=sp+1;B:=sram(sp-1);A:=B;sp:=sp+1;B:=sram(sp-1);B:=A-B; elsif(tmp_FA=1 and tmp_FB=1 and op2=1)then 乘法和除法 qA=A;qB=B; elsif(tmp_FA=0 and tmp_FB=1

22、and op2=1)then A:=B;qA=A;sp:=sp+1;B:=sram(sp-1);qB=B; elsif(tmp_FA=0 and tmp_FB=0 and op2=1)then sp:=sp+1;B:=sram(sp-1);A:=B;qA=A; sp:=sp+1;B:=sram(sp-1);qB=B;end if; ready1:=0;end if; if(op_en=1 and op2=1 and op1=0)then if(mul_in(15 downto 8)/=0)then error_led=1; else B:=mul_in(7 downto 0);tmp_FA=0

23、;tmp_FB=1;error_led=0; end if; elsif(op_en=1 and op1=1 and op2=1)then B:=div_quo;tmp_FA=0;tmp_FB=1; end if; if(push=0 and pop=0 and op_en=0)then ready1:=1;end if;该局部是对算术运算的编写,其中+、-运算可以直接根据存放器之间的转移情况来编写,而乘除运算操作无法直接编写出来,故直接输出,之后可以把其输出端口连接到用LPM模块编写的乘法除法器中进展实现。在进展算术运算乘法的时候有可能导致数据溢出,在此可以利用二极管给出一个溢出显示。rea

24、dy=ready1;dispA=A;dispB=B;FA=tmp_FA;FB=tmp_FB;full=tmp_full;empty=tmp_empty;one=tmp_one;if(push=1 and pop=0)then data_bus=din;elsif(push=0 and pop=1)then设计过程 data_bus=dout;elsif op_en=1 then data_bus=B;else data_bus=00000000;end if;end if;end process;end;本程序主要实现了堆栈处理器的根本功能:8位数据显示、先进后出,及算术运算的+、-操作。利用

25、Quartus生成元件本程序的元件,再调用LPM模块生成乘法和除法器。最后进展电路元件的连接就完成了堆栈处理器的控制局部。3.3 数据路径通过前面的讨论,明确了数据子系统应有的模块及其操作规则。现在就可以按照规定的操作规则添上数据路径。存放器A的数据来源是外部数据线DIN和存放器B,因此在进入A的数据线上必须有一个2选1的数据选择器MU*a。存放器B的数据来源有外部数据线DIN,存放器A,RAM和运算器的运算结果,因此在进入B的数据线上应有一个4选1的数据选择器MU*b。输出存放器D。的数据来源是存放器A和存放器B,用数据选择器MU*d进展选择。RAM的数据来源自B。运算器的数据来源是存放器A

26、和存放器B,运算结果输出到存放器B。3.4 条件与控制点 数据子系统与外部的数据交换是DIN和DOUT。外部输入的控制信号时操作码:PUSH,POP,ADD,SUB,MUL,DIV。数据子系统输出到外部的条件信号是:READY;FULL: SP=0,FA=1,FB=1;EMPTY:SP=aa,FA=0,FB=0;ONE: SP=aa-1,FA=0,FB=0或者SP=aa,FA=0,FB=1数据子系统输出到控制子系统的局部条件信号:操作码 PUSH,POP,OP(ADD+SUB+MUL+DIV)。其中+表示“或存储器信息 FA,FB,MREADY。运算器信息 OREADY四、控制子系统模块本设计

27、采用VHDL语言编写,下载进FPGA实验板上进展操作。故本次设计用高级语言作为其控制子系统的模块。首先是本次课程设计的总设计流程图:4.1 设计流程图设计过程图9 设计流程图4.2设计总电路框图其中MUL和DIV是调用LPM模块生成的乘法和除法器。由于该乘法器的输出为16位,故在程序中设计了溢出显示。设计过程图10设计总电路框图五、错误报警及数据位扩展模块在本次设计的扩展局部由如下要求:a具有错误提示功能;b数据位数不少于16位;c其他。5.1 错误报警堆栈处理器的输出端口主要通过数码管显示和指示灯显示来实现。我们进展入栈操作时有可能操作错误,因此我们可以设置一个报警模块来进展提示,以免进展错

28、误的操作而不知道,最后去找程序的问题。首先最简单的是满栈和溢出报警。由于在上述的方案中只有乘法器是16位的可能会溢出,故只需把溢出指示灯的信号连接到蜂鸣器上即可实现简单的报警。在本次设计的处理器,ram可以存储8个数据,A、设计过程B存放器各一个,当我们输入的数据到达10个时满栈指示FULL将通过指示灯进展显示,同样,我们只需把它连接到蜂鸣器上即可实现错误提示。然后是操作错误报警:在上述程序中我们定义了入栈、出栈和算术运算操作是ready=1,因此当ready=0时我们进展操作给蜂鸣器一个信号即可。如if ready=0and PUSH=1 and POP=1 or OP=1 then spe

29、aker=1或者if ready=0and POP=1 and PUSH=1 or OP=1 then speaker=1或者if ready=0and OP=1 and PUSH=1 or POP=1 then speaker=1。即当OP、POP、PUSH三种操作有两个同时处于高电平时给蜂鸣器一个信号就行了。5.2 数据位扩展由于实验板上只有8个数码管,而数码管显示一般都是显示0F的数据,故16位的数据需要4个数码管和4个按键来控制,这在实验板上是不可能实现的,因此这种方法可以排除。此外就是一个数码管显示一个8位的数据,两个按键分别控制高8位和低8位,其它和上述程序完全一致,但如何使数码管

30、实现超过F的显示,暂时没有头绪,不会做。六、总结6.1仿真结果及错误分析程序仿真波形图设计过程图11程序仿真波形图上述波信号主要表达了减法、入栈和出栈操作。仿真时主要输入了四个数据:1、2、3、4;当输入完这四个数据后我们可以在数码管上看到A上显示的为4,B上显示的为3。进展减法操作时,A-B =? B,故B上的数据为1。之后进展出栈操作,首先是B上的1,如后却出RAM中的数据,基于“先进后出的原则,先显示的是2,最后显示1。对连接好的电路图进展编译调试,完成后进展管脚锁定。由于做的是8位数据显示,故每个数据都需要两个数码管。A、B存放器容显示,数据总线BUS及输出数据显示。按键分别有:复位、

31、算术操作OP_EN,OP2,OP1、入栈、出栈、数据输入。当管脚锁定完成后下载进FPGA实验板就可进展验证了。我验证的过程中特别要注意的是操作错误,也就是说,当要进展算术操作、入栈或者出栈的时候要观察READY指示灯,确保没有其他操作正在进展。我验证的时候就遇到了这样的情况,当进展除法运算的时候,我先输入两个数据,然后op2、op1分别置1,然后按op-en,使其工作,但得到设计过程结得却是A里面的数据将,这让我很迷惑不解,最后才发现是操作错误导致的。心得及体会:经过了这次课程设计,使我对VHDL语言有的更深刻的理解。通过堆栈设计课程设计,使我加深了对VHDL语言设计程序的了解。学会了层次设计

32、概念,将程序分为假设干模块,分别完成各个模块,最后再将各个模块连接起来。通过这次课程设计,对VHDL的语言有了更深刻的认识,对课题设计的根本流程有了一定的认识,同时也是一次把原来所学的书本知识和实践相联系的过程。并通过实践,建立起了学习EDA的浓厚兴趣,根本掌握了这个软件的根本使用方法,并顺利的对程序进展编辑及仿真。为实现预期功能,能够对系统进展快速的调试,并能够对出现的功能故障进展分析,及时修改相关软硬件。对软件编程、排错调试。了解了关于EDA技术及VHDL语言的根本编程形式及原理图的绘制,为今后的学习打好根底。在此之后,我会继续学习关于VHDL语言的运用。我还意识到了我对这门课掌握还有一定的缺乏,还有许多的知识我不了解;有的是一知半解;有的即使原理懂了,但在应用方面却是丝毫不知。所以在今后的学习中,我会更加努力,不仅要学好理论知识,还要把它应用到实践中去,使两者很好的结合起来,互补互助。 同时也特别感谢教师的细心指导,才让我们能顺利的完成我的作业。成绩评定(包括:指导教师评语和课程设计等级). z.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号