VHDL与数字系统课程设计报告简单处理器设计

上传人:hm****62 文档编号:68311167 上传时间:2022-04-02 格式:DOC 页数:19 大小:96KB
收藏 版权申诉 举报 下载
VHDL与数字系统课程设计报告简单处理器设计_第1页
第1页 / 共19页
VHDL与数字系统课程设计报告简单处理器设计_第2页
第2页 / 共19页
VHDL与数字系统课程设计报告简单处理器设计_第3页
第3页 / 共19页
资源描述:

《VHDL与数字系统课程设计报告简单处理器设计》由会员分享,可在线阅读,更多相关《VHDL与数字系统课程设计报告简单处理器设计(19页珍藏版)》请在装配图网上搜索。

1、.课程设计报告实践课题: VHDL与数字系统课程设计 学 生:*指导教师:*、*系 别: 电子信息与电气工程系 专 业:电子科学与技术 班 级:*学 号:*一、设计任务用VHDL设计一个简单的处理器,并完成相关的仿真测试。.设计要求:图1是一个处理器的原理图,它包含了一定数量的存放器、一个复用器、一个加法/减法器Addsub,一个计数器和一个控制单元。图1 简单处理器的电路图数据传输实现过程:16位数据从DIN输入到系统中,可以通过复用器分配给R0R7和A,复用器也允许数据从一个存放器传通过Bus送到另外一个存放器。加法和减法的实现过程:复用器先将一个数据通过总线放到存放器A中,然后将另一个数

2、据放到总线上,加法/减法器对这两个数据进展运算,运算结果存入存放器G中,G中的数据又可根据要求通过复用器转存到其他存放器中。下表是该处理所支持的指令。操作功能mv R*, Rymvi R*, #Dadd R*, Rysub R*, RyR* RyR* DataR* R* + RyR* R* - Ry1) R* Ry :将存放器Ry中的容复制到R*;2) Mvi R*,#D :将立即数存入存放器R*中去。 所有指令都按9位编码取自DIN的高9位存储在指令存储器IR中,编编码规则为III*YYY,III表示指令,*表示R*存放器,YYY表示Ry存放器。立即数#D是在mvi指令存储到IR中之后,通过

3、16位DIN输入的。 有一些指令,如加法指令和减法指令,需要在总线上屡次传输数据,因此需要多个时钟周期才能完成。控制单元使用了一个两位计数器来区分这些指令执行的每一个阶段。当Run信号置位时,处理器开场执行DIN输入指令。当指令执行完毕后,Done信号置位,下表列出四个指令在执行过程中每一个时间段置位的控制信号。时间指令T0T1T2T3(mv):I0(mvi):I1(add):I2(sub):I3IRinIRinIRinIRinRYout,R*in,DoneDINout,R*in,DoneR*out,AinR*out,Ain-RYout,Gin,AddsubRYout,Gin,Addsub-G

4、out,R*in,DoneGout,R*in,Done二、实现功能说明2.1 mv R*,Ry实现的功能:将存放器R*的值赋给存放器Ry以mv R0, R5为例1 计数器为00时,指令存放器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。置位的控制信号如图3加粗黑线所示。图32计数器为01时,首先控制单元根据设计器为00时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R5的值输出到总线上,然后控制单元控制存放器R0将总线上的值锁存,完成整个存放器对存放器的赋值过程。置位的控制信号和数据流如图4加粗黑线所示。图42.2 mvi R*,#D实现的功能:将的立即数

5、#D赋给存放器R*以mv R0, #D为例1计数器为00时,指令存放器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。置位的控制信号如图5加粗黑线所示。图52计数器为01时,首先控制单元根据设计器为00时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让DIN的值输出到总线上,然后控制单元控制存放器R0将总线上的值锁存,完成整个立即数对存放器的赋值过程。置位的控制信号和数据流如图6加粗黑线所示。图62.3 add R*,Ry和sub R*,Ry实现的功能:将存放器Ry的值加上/减去存放器R*的值并赋给存放器R*以add/sub R0,R1为例。1计数器为00时,

6、指令存放器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。置位的控制信号如图7加粗黑线所示。图72计数器为01时,首先控制单元根据设计器为00时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R0的值输出到总线上,然后控制单元控制存放器A将总线上的值锁存。置位的控制信号和数据流如图8加粗黑线所示。图83计数器为10时,首先控制单元根据设计器为00时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R1的值输出到总线上,然后控制单元控制加法/减法器addsub将存放器A的值和总线上的值相加/相减并输出,接着存放器G将加法/减法器addsub的计算结果锁

7、存。置位的控制信号和数据流如图9加粗黑线所示。图94计数器为11时,首先控制单元向复用器发出选通控制信号,复用器根据该控制信号让存放器G的值输出到总线上,存放器R0将总线上的值进展锁存,完成整个存放器与对存放器见加减法的运算过程。置位的控制信号和数据流如图10加粗黑线所示。图10三、单元模块设计说明4.1存放器Registe存放器R0R7、存放器A或存放器G : 用于数据的存储。当时钟输入clk的上升沿到来且rin=1时,将数据输入端r*in15.0的数据锁存到存放器中并从数据输出端r*out15.0输出;当rin=0时,输出端保持原来的值不变。存放器Registe的VHDL代码:LIBRAR

8、Y IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY registe isport( clk:in std_logic; rin:in std_logic; r*in:in std_logic_vector(15 downto 0); r*out:out std_logic_vector(15 downto 0);end entity registe;architecture one of registe isbegin process(clk) begin if clkevent and clk=1 then if rin=1 then r*out=r*in;

9、end if; end if; end process;end one;4.2指令存放器IR指令存放器IR用于对输入的16为指令进展处理,取其高9位。当时钟输入clk的上升沿到来且rin=1时,取数据输入端r*in15.0的高9位将其锁存到存放器中并从数据输出端r*out8.0输出;当rin=0时,输出端保持原来的值不变。指令存放器IR的VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY IR isport( clk:in std_logic; rin:in std_logic; r*in:in std_logic_vector(15

10、downto 0); r*out:out std_logic_vector(8 downto 0);end entity IR;architecture one of IR isbegin process(clk) begin if clkevent and clk=1 then if rin=1 then r*out=r*in(15 downto 7); end if; end if; end process;end one;4.3加/减法器addsub加/减法器addsub用于处理两个输入的数据datain215.0 和datain115.0,当控制端Addsub=1时,两个数据输入端da

11、tain215.0 和datain115.0相加并从数据输出端dataout15.0输出;当控制端Addsub=0时,数据输入端datain215.0 减去datain115.0,结果从数据输出端dataout15.0输出。加/减法器addsub的VHDL代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY addsub isport( ain:in std_logic_vector(15 downto 0); bin:in std_logic_vector(15 downto 0)

12、; adsub:in bit; about:out std_logic_vector(15 downto 0);end entity addsub;architecture one of addsub issignal a,b:std_logic_vector(15 downto 0);beginprocess(adsub,ain,bin)beginif adsub=0 then about=ain+bin;elsif adsub=1 then about01101100不断循环;当clear=1时清零端clear有效,对输出Q1.0同步清零,与时钟有关。计数器counter的VHDL代码:l

13、ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport( clk:in std_logic; clear:in std_logic; count:out std_logic_vector(1 downto 0);end counter;architecture one of counter issignal c:std_logic_vector(1 downto 0);beginprocess(clk,clear)begin if clkevent and clk

14、=1 then if(clear=1)then c=00; else c=c+1;end if; end if;end process; count=c;end one;4.5 复用器 multiple*ers复用器根据控制单元的控制信号将指定的输入数据输出到总线上。来自控制单元的控制信号为R0outR7out、Gout、DINout,输入数据位来自存放器R0R7、存放器A、数据输入端DIN,当控制信号的*一位为1时,将其对应的输入数据输出到总线上。复用器 multiple*ers的VHDl代码:library ieee;use ieee.std_logic_1164.all;entity m

15、ultiple*ers isport ( din:in std_logic_vector(15 downto 0); gin:in std_logic_vector(15 downto 0); r0:in std_logic_vector(15 downto 0);r1:in std_logic_vector(15 downto 0);r2:in std_logic_vector(15 downto 0);r3:in std_logic_vector(15 downto 0);r4:in std_logic_vector(15 downto 0);r5:in std_logic_vector(

16、15 downto 0);r6:in std_logic_vector(15 downto 0);r7:in std_logic_vector(15 downto 0); ren:in bit_vector(7 downto 0); gen:in bit; dinen:in bit; dout:out std_logic_vector(15 downto 0);end multiple*ers;architecture bhv of multiple*ers isbegindout=gin when gen=1 else r0 when ren(0)=1 else r1 when ren(1)

17、=1 else r2 when ren(2)=1 else r3 when ren(3)=1 else r4 when ren(4)=1 else r5 when ren(5)=1 else r6 when ren(6)=1 else r7 when ren(7)=1 else din when dinen=1 else 0000000000000000;end bhv;4.6控制单元control控制单元根据计数器发出的脉冲和DIN输入的操作指令对整个系统的其他模块进展控制,完成指定的操作。控制单元control的VHDL代码:library ieee;use ieee.std_logic_

18、1164.all;use ieee.std_logic_unsigned.all;entity control isport( reset:in std_logic; run:in std_logic; clk:in std_logic_vector(1 downto 0); irin:in std_logic_vector(8 downto 0); clear:out std_logic; irout:out std_logic; gout:out std_logic; dinout:out std_logic; rout:out std_logic_vector(7 downto 0);

19、r0in:out std_logic; r1in:out std_logic; r2in:out std_logic; r3in:out std_logic; r4in:out std_logic; r5in:out std_logic; r6in:out std_logic; r7in:out std_logic; ain:out std_logic; addsub:out std_logic; gin:out std_logic; done:out std_logic);end control;architecture one of control isbeginprocess(clk,r

20、un,reset,irin)begin if(reset=0)then clear=1; irout=0; gout=0; dinout=0; rout=00000000; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=0; addsub=0; gin=0; done clear=0; irout=1; gout=0; dinout=1; rout=00000000; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=0

21、; addsub=0; gin=0; done=0; if run=0 then irout=1; else irout if(irin(8 downto 6)=000)then clear=1; irout=0; gout=0; dinout=0; ain=0; addsub=0; gin=0; doner0in=1;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr1in=1;r0in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr2in=1;r0in=0;r1in=0;r3in=0;r4in=0;r5in=

22、0;r6in=0;r7inr3in=1;r0in=0;r1in=0;r2in=0;r4in=0;r5in=0;r6in=0;r7inr4in=1;r0in=0;r1in=0;r2in=0;r3in=0;r5in=0;r6in=0;r7inr5in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r6in=0;r7inr6in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r7inr7in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6innull;end case;case iri

23、n(2 downto 0)is when000=routroutroutroutroutroutroutroutnull;end case; elsif(irin(8 downto 6)=001)then clear=1; irout=0; gout=0; dinout=1; rout=00000000; ain=0; addsub=0; gin=0; doner0in=1;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr1in=1;r0in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr2in=1;r0in=

24、0;r1in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr3in=1;r0in=0;r1in=0;r2in=0;r4in=0;r5in=0;r6in=0;r7inr4in=1;r0in=0;r1in=0;r2in=0;r3in=0;r5in=0;r6in=0;r7inr5in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r6in=0;r7inr6in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r7inr7in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r5in=

25、0;r6innull;end case;elsif(irin(8 downto 6)=010 or irin(8 downto 6)=011)then clear=0; irout=0; gout=0; dinout=0; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=1; addsub=0; gin=0; doneroutroutroutroutroutroutroutroutnull;end case; else clear=1; irout=0; gout=0; dinout=0; rout=000

26、00000; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=0; addsub=0; gin=0; done if(irin(8 downto 6)=010)then clear=0; irout=0; gout=0; dinout=0; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=0; addsub=0; gin=1; doneroutroutroutroutroutroutroutroutnull;end ca

27、se; elsif(irin(8 downto 6)=011)then clear=0; irout=0; gout=0; dinout=0; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=0; addsub=1; gin=1; doneroutroutroutroutroutroutroutroutnull;end case; else clear=1; irout=0; gout=0; dinout=0; rout=00000000; r0in=0; r1in=0; r2in=0; r3in=0; r

28、4in=0; r5in=0; r6in=0; r7in=0; ain=0; addsub=0; gin=0; done if(irin(8 downto 6)=010 or irin(8 downto 6)=011)then clear=0; irout=0; gout=1; dinout=0; rout=00000000; ain=0; addsub=0; gin=0; doner0in=1;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr1in=1;r0in=0;r2in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr2

29、in=1;r0in=0;r1in=0;r3in=0;r4in=0;r5in=0;r6in=0;r7inr3in=1;r0in=0;r1in=0;r2in=0;r4in=0;r5in=0;r6in=0;r7inr4in=1;r0in=0;r1in=0;r2in=0;r3in=0;r5in=0;r6in=0;r7inr5in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r6in=0;r7inr6in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4in=0;r5in=0;r7inr7in=1;r0in=0;r1in=0;r2in=0;r3in=0;r4

30、in=0;r5in=0;r6innull;end case; else clear=0; irout=0; gout=0; dinout=0; rout=00000000; r0in=0; r1in=0; r2in=0; r3in=0; r4in=0; r5in=0; r6in=0; r7in=0; ain=0; addsub=0; gin=0; donenull;end case; end if;end process;end one; 4.7 数码管显示led 采集存放器R0R7的值作为led的输入,将各存放器值的低四位以19、AF分别显示在8个数码管,从而观察各存放器值的变化。ledou

31、t6.0 为数码管段码输出端,control2.0 为第几个数码管有效的数码管选择端输出。数码管显示led的VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity led isport( clk:in std_logic; reg_0:in std_logic_vector(15 downto 0); reg_1:in std_logic_vector(15 downto 0); reg_2:in std_logic_vector(15 downto 0); reg_3:in

32、std_logic_vector(15 downto 0); reg_4:in std_logic_vector(15 downto 0); reg_5:in std_logic_vector(15 downto 0); reg_6:in std_logic_vector(15 downto 0); reg_7:in std_logic_vector(15 downto 0); ledout:out std_logic_vector(6 downto 0); control:out std_logic_vector(2 downto 0);end led;architecture one of

33、 led issignal controls:std_logic_vector(2 downto 0);signal led0,led1,led2,led3,led4,led5,led6,led7,outer:std_logic_vector(3 downto 0);beginled0=reg_0(3 downto 0);led1=reg_1(3 downto 0);led2=reg_2(3 downto 0);led3=reg_3(3 downto 0);led4=reg_4(3 downto 0);led5=reg_5(3 downto 0);led6=reg_6(3 downto 0);

34、led7=reg_7(3 downto 0);process(clk)begin if clkevent and clk=1 then if controls=111 then controls=000; else controls=controls+1; end if;end if;controlouterouterouterouterouterouterouterouterouter ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout ledout=*;end case;end process;end one;四、处理器各个模块的连接采用原理图连接的方法进展各个模块间的连接,连接后的原理图见附录1。五、操作说明及功能、时序仿真效果 5.1 功能仿真将R0- 6 , R0R1 , R0 R1R0 , R0+ R1R0 . 仿真结果如下: 5.2 时序仿真 1、按设计说明书的仿真图中的数据进展设置,仿真结果如下: 2、将R3 - 1 , R5

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!