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

上传人:痛*** 文档编号:90416630 上传时间:2022-05-15 格式:DOC 页数:18 大小:88.50KB
返回 下载 相关 举报
VHDL及数字系统课程设计报告简单处理器设计_第1页
第1页 / 共18页
VHDL及数字系统课程设计报告简单处理器设计_第2页
第2页 / 共18页
VHDL及数字系统课程设计报告简单处理器设计_第3页
第3页 / 共18页
点击查看更多>>
资源描述
-课程设计报告实践课题: VHDL与数字系统课程设计 学 生:*指导教师:*、*系 别: 电子信息与电气工程系 专 业:电子科学与技术 班 级:*学 号:*一、设计任务用VHDL设计一个简单的处理器,并完成相关的仿真测试。.设计要求:图1是一个处理器的原理图,它包含了一定数量的存放器、一个复用器、一个加法/减法器Addsub,一个计数器和一个控制单元。图1 简单处理器的电路图数据传输实现过程:16位数据从DIN输入到系统中,可以通过复用器分配给R0R7和A,复用器也允许数据从一个存放器传通过Bus送到另外一个存放器。加法和减法的实现过程:复用器先将一个数据通过总线放到存放器A中,然后将另一个数据放到总线上,加法/减法器对这两个数据进展运算,运算结果存入存放器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中之后,通过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-Gout,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实现的功能:将的立即数*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时,指令存放器的置位控制信号输入端IRin=1有效,将DIN输入的数据的高9位锁存。置位的控制信号如图7加粗黑线所示。图72计数器为“01时,首先控制单元根据设计器为“00时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R0的值输出到总线上,然后控制单元控制存放器A将总线上的值锁存。置位的控制信号和数据流如图8加粗黑线所示。图83计数器为“10时,首先控制单元根据设计器为“00时输入的指令,向复用器发出选通控制信号,复用器根据该控制信号让R1的值输出到总线上,然后控制单元控制加法/减法器addsub将存放器A的值和总线上的值相加/相减并输出,接着存放器G将加法/减法器addsub的计算结果锁存。置位的控制信号和数据流如图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代码:LIBRARY 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; 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 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时,两个数据输入端datain215.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); 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代码:library 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=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 multiple*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(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)=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 00000;end bhv;4.6控制单元control控制单元根据计数器发出的脉冲和DIN输入的操作指令对整个系统的其他模块进展控制,完成指定的操作。控制单元control的VHDL代码:library ieee;use ieee.std_logic_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); 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,run,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; 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=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 irin(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=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=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=00000000; 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 case; 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; r4in=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;r7inr2in=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;r4in=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个数码管,从而观察各存放器值的变化。ledout6.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 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 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);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 - 6 , R5 R3R2 , R5 + R3R5 . 仿真结果如下: 5.3 操作说明Clock 接的是数字时钟 1KHz,DIN15.0管脚分配到开关K1K12、按键S5S8,Resetn管脚分配到按键S1,Run管脚分配到S2,R0R7的低四位值分别显示在led1led8数码管中。将Run改为低电平有效因为按键按下为低电平,如此更好操作。Busout15.0高12位管脚分配到二极管L1L12。1、mvi R0,*D D=5 先将DIN置为“0010 0000 0000 FFFF只与高六位有关即K3向上拨为高电平,其余开关向下拨为低电平,按键都不按,再按一下S2Run键,此时指令已被读到,再将要置的数置入,5=“0000 0000 0000 0101”即所有开关向下拨并按下S5、S7两键,再按一下S2Run键,即可看到了led1R0显示5,其余显示0。 2、mv R1,R0先将DIN置为“0000 0100 0000 FFFF只与高9位有关同上方法操作开关、按键,再按一下S2Run键,即可看到led1、led2R1都显示5,其余显示0。 3、add R1,R0 先将DIN置为“0100 0100 0000 FFFF只与高9位有关同上方法操作开关、按键,再按一下S2Run键,即可看到led1显示5,led2R1显示A,其余显示0。 4、sub R1,R0 先将DIN置为“0110 0100 0000 FFFF只与高9位有关同上方法操作开关、按键,再按一下S2Run键,即可看到led1显示5,led2R1也显示5,其余显示0。 其余操作以此类推!六、实验箱下载及实现功能下载后能从数码管观察到指令mvi R*,*D和mv R*,Ry运行结果且是正确的,但是指令add R*,Ry与sub R*,Ry时数码管是闪烁的显示。 原因:由于Run按一下之后,指令就被存在IR存放器中,并且由于在此处Run只是指令存放器的使能端,这样Run之后就一直重复执行这条指令,这样加、减法指令就成为累加、累减操作了,故数码管值随指令周期一直在变,即数码管是闪烁的。 改良:将Run改为整个处理器的使能端。七、实验总结(1 )总线输入端的命名:比方位宽为8位的DIN输入端,端口名后面跟着中括号 ,中括号中用 *.0 说明位宽位*。图22(2 )本次课程设计要求使用时存放器传输级RTL(Register Transfer Level)设计,按照给出的框架完成简单处理器的功能。RTL存放器传输级的根本功能模块是存放器、计数器、多路复用器和算术逻辑单元(ALU)。RTL设计方法的根本流程如图23所示。图23(3 )把总线分开连接到到独立的信号线的方法:模块输入的是一个4位总线data3.0,现在想把总线的每一位分别与输出的单一的信号线连接起来,给对应要相连接的信号线命同样的名即可,如图24所示。图24(4 )对产生的图形文件进展外形编辑,改变*些端口的位置以方便连线。右键单击要编辑的图形文件,选择Edit Selected Symbol,进入图形文件编辑模式,此时可以根据连线的方便对图形文件中的端口位置进展移动,也可以改变图形文件的形状,编辑完成后点击保存,回到原理图输入模式,右键单击编辑过的图形文件,选择update symbol or block 更新图形文件。图25左边为编辑前的图形文件,右边为编辑后的图形文件。图25八、参考文献EDA技术实用教材-科学-松、黄继业编著-2010年6月九、附录. z.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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