计算机系统结构课程设计简单16位CPU设计

上传人:仙*** 文档编号:28172819 上传时间:2021-08-23 格式:DOC 页数:45 大小:1.10MB
收藏 版权申诉 举报 下载
计算机系统结构课程设计简单16位CPU设计_第1页
第1页 / 共45页
计算机系统结构课程设计简单16位CPU设计_第2页
第2页 / 共45页
计算机系统结构课程设计简单16位CPU设计_第3页
第3页 / 共45页
资源描述:

《计算机系统结构课程设计简单16位CPU设计》由会员分享,可在线阅读,更多相关《计算机系统结构课程设计简单16位CPU设计(45页珍藏版)》请在装配图网上搜索。

1、*设 计 性 实 验(报告)题 目: 简单16位CPU设计课 程: 计算机系统结构院 (部): 计算机科学与技术学院专 业: 计算机科学与技术专业班 级: *学生姓名: *学 号: *指导教师: *完成日期: 2010-12-8*计算机科学与技术学院简单16位CPU设计一、实验内容完成从指令系统到CPU的设计,编写测试程序,通过运行测试程序对CPU设计进行正确性评定。具体内容包括:典型指令系统(包括运算类、转移类、访存类)设计;CPU结构设计;CPU的VHDL程序代码编写;规则文件与调试程序设计;CPU调试及测试程序运行。二、实验目的及要求1加深对计算机的基本概念、基本原理和基本结构的理解;2

2、掌握计算机组成与系统结构方面的基本设计、分析与实现方法;3掌握典型16CPU设计方法;4熟练掌握VHDL语言及应用,完成对CPU各功能模块的代码描述,实现各个功能模块部分的连接,从而形成一个完整的CPU体系结构;5学会利用先进的硬件设计工具软件Quartus II对程序进行仿真和调试;6掌握基于“TEC-CA试验教学系统”进行CPU调试的方法。三、 实验仪器设备(1)TEC-CA试验教学系统;(2)虚拟仪器平台;(3)计算机。(4)实验环境四、 实验方案设计(一) 指令系统设计1、 指令系统的作用和地位指令系统是从程序设计者看到的机器的主要属性,是软、硬件的主要界面。指令系统是计算机系统结构的

3、主要组成部分。指令系统是软件与硬件分界面的一个主要标志。指令系统是软件与硬件之间互相沟通的桥梁。2、 指令系统的设计规范设计的原则:支持编译系统能高效、简易地将源程序翻译成目标代码。正交性:指令字段编码相互独立。规整性:相似操作有相同的规定。可扩充性:操作码冗余。对称性:A-B=A;A-B=B,便于编译。3、 CPU中操作数的存储方法CPU中操作数的存储方法是各种指令集结构之间最主要的区别所在,其影响运算器的组织。CPU中用来存储操作数的存储单元主要有:(1)堆栈; (2)累加器;(3)一组寄存器;通用寄存器型指令集结构的主要优点:(1)使编译器有效地使用寄存器;(2)在表达式求值方面,比其它

4、类型指令集结构,具有更大的灵活性;(3)寄存器可以用来存放变量;a.减少存储器的访问量,加快程序的执行速度。(因为寄存器比存储器快)b.可以用更少的地址位来寻址寄存器,从而可以有效改进程序的目标代码大小。由于通用寄存器型指令系统存在诸多的优点因此我们选择通用寄存器型指令结构。4、 指令格式与功能1、 ADD DR,SR0000 DR SR 0000 0111指令编码:功能:DR DR+SR,影响C和Z标志,PC PC+1。2、 INC DR0001 DR SR 0000 0111指令编码:功能:DR DR+1,影响C和Z标志,PC PC+13、 SUB DR,SR0010 DR SR 0000

5、 0111指令编码:功能: DR DR-SR,影响C和Z标志,PC PC+14、 DEC DR0011 DR SR0000 0111指令编码:功能:DR DR-1,影响C和Z标志,PC PC+15、 AND DR,SR0100 DR SR 0000 0011指令编码:功能:DR DR and SR,影响Z标志,PC PC+16、 OR DR,SR0101 DR SR 0000 0011指令编码:功能:DR DR or SR,影响Z标志,PC PC+17、 NOT DR0110 DR SR 0000 0011指令编码:功能:DR not SR,影响Z标志,PC PC+18、 MOV DR,SR0

6、111 DR SR 0000 0001指令编码:功能:功能:DR SR,不影响标志位,PC PC+11000 0000 0000 0000 ADR 9、 JMP ADR指令编码:功能:PC ADR10、 JNC ADR1001 0000 ADR -1指令编码:功能:如果C=0,则PC ADR;如果C=1,则PC PC+111、 JNZ ADR1010 0000 ADR -1指令编码:功能:如果Z=0,则PC ADR;如果C=1,则PC PC+112、 MVRD DR,DATA1000 0000 0000 0000 ADR 指令编码:功能:DR DATA,PC PC+213、 LDR DR,SR

7、1101 DR SR 0000 0001指令编码:功能:DR SR,PC PC+114、 STR SR,DR1110 DR SR 0000 0000指令编码:功能:DR SR,PC PC+115、 NOP0111 0000 0000 0000指令编码:功能:PC PC+116、补充:PUSH SR01000110SR入栈POP DR01000111出栈 DRRET01010001子程序返回CALL ADR10000000调用首地址在ADR的子程序(双字指令)5、 指令编码CPU为16位:CPU的并行处理能力16位,总线宽度为16位,指令长度至少16位。采用对称式寄存器结构:无累加器的概念,形成

8、的通用寄存器组有两个输出端口(读端口)、一个输入端口(写端口)。共设有4个R(R0-R3)。指令分类:运算类、转移类、访存类。用两位编码: IR15, IR14 运算类: 0 0 转移类: 1 0访存类: 1 1 运算类: (IR15=0) IR14, IR13, IR12 ADD 0 0 0 INC 0 0 1 SUB 0 1 0 DEC 0 1 1AND 1 0 0 OR 1 0 1 NOT 1 1 0 NOP 1 1 1结果处理(送R或送M)两种选择,1位编码: IR0=1:送DR;影响Z标志否, 1位编码:IR1=1,影响;影响C标志否, 1位编码:IR2=1,影响。没用的位设为0(保

9、留位) 指令机器码:ADD DR, SR0000 DR SR-0000 0111INC DR0001 DR SR-0000 0111SUB DR, SR0010 DR SR-0000 0111DEC DR0011 DR SR-0000 0111AND DR, SR0100 DR SR-0000 0011OR DR, SR0101 DR SR-0000 0011NOT DR0110 DR SR-0000 0011MOV DR, SR0111 DR SR-0000 0001JMP ADR1000 00000000 0000“16位ADR”JNC ADR1001 0000- rel(8 bit)JN

10、Z ADR1010 0000-rel(8 bit)MVRD RD, DATA1100 0000-0000 0000LDA DR, SR1101 DR SR- 0000 0001STR SR, DR1110 DR SR-0000 0000NOP0111 0000-0000 0000说明:(1)本CPU中含有4个通用寄存器,用R0,R1,R2,和R3表示。源寄存器用SR表示,目的寄存器用DR表示,因此DR和SR在指令编码中各用2bit编码。 (2)指令编码中的代表该指令当前的PC值。 (3)设计指令系统时首要考虑的是指令要满足功能的需求。这个指令系统还包括PUSH、POP、以上指令包括运算指令、转

11、移指令和存储指令3类。这三类指令根据、进行分类:为0时运算指令;、为10时转移指令;、为11时存储指令。 (4)考虑指令译码方便,减少硬件资源的消耗: 算术逻辑指令的对应运算器ALU的3位运算操作码 当=1时,本指令中对DR的写操作 当=1时,本指令影响标志位Z 当=1时,本指令影响标志位C NOP指令实际上是一条“MOV ,”指令,只是不改变目的寄存器的内容。(二)设计指令流程;1、时序部件(电路)(1)概述 CPU工作的关键部件,产生计算机执行机器指令所需的时序信号。计算机的工作过程:一个指令周期接一个指令周期;在一个指令周期内是一个机器周期接一个机器周期;在一个机器周期内是一个节拍接一个

12、节拍;在一个节拍内产生哪些微操作信号取决于指令操作流程。伴随着指令的执行,计算机内部有两股信息在流动:一股是数据流,流过不同的部件完成不同处理;一股是控制信号流,控制数据从何处流出、经过何地(运算处理部件)、流往何处,微控制信号的产生由指令操作流程规定(操作码),控制信号有效状态的先后顺序由节拍控制。(2)机器周期目标:一个机器周期执行一条单字指令。如:ADD DR,SR执行过程:1)取指;2)译码分析;3)执行(运算);4)写结果。可合并为三个阶段:1)取指;2)分析、执行;3)写结果(存储器、寄存器)(3)节拍三个阶段(取指、分析执行、写结果)对应三个节拍。t1:取指t1上升沿MADDRP

13、C,t2上升沿指令送IR;PC+1(temp)t2:译码分析、运算处理(Z、CTEMP);t3:存储器、寄存器读写,下降沿写寄存器,改变C、Z、PC等。1、ADD DR,SR t1 t2 t3Madd=pc Result=DR+SR R/W=1 Z_TEMP PC=pc_tDread=ob C_TEMP DR=ResultIR=Dread Z=Z_TEMPPC_t=PC+1 C=C_TEMP2、INC DR t1 t2 t3Madd=pc Result=DR+1 R/W=1 Z_TEMP PC=pc_tDread=ob C_TEMP DR=ResultIR=Dread Z=Z_TEMPPC_t

14、=PC+1 C=C_TEMP3、SUB DR,SR t1 t2 t3Madd=pc Result=DR-SR R/W=1 Z_TEMP PC=pc_tDread=ob C_TEMP DR=ResultIR=Dread Z=Z_TEMPPC_t=PC+1 C=C_TEMP4、DEC DR t1 t2 t3Madd=pc Result=DR-1 R/W=1 Z_TEMP PC=pc_tDread=ob C_TEMP DR=ResultIR=Dread Z=Z_TEMPPC_t=PC+1 C=C_TEMP5、AND DR,SR t1 t2 t3Madd=pc Result=DR and SR R/W

15、=1 Z_TEMP PC=pc_tDread=ob DR=ResultIR=Dread Z=Z_TEMPPC_t=PC+1 6、OR DR,SR t1 t2 t3Madd=pc Result=DR or SR R/W=1 Z_TEMP PC=pc_tDread=ob DR=ResultIR=Dread Z=Z_TEMPPC_t=PC+1 7、NOT DR t1 t2 t3Madd=pc Result=not DR R/W=1 Z_TEMP PC=pc_tDread=ob DR=ResultIR=Dread Z=Z_TEMPPC_t=PC+18、MOV DR,SR t1 t2 t3Madd=pc

16、 Result= SR R/W=1 PC=pc_tDread=ob DR=ResultIR=Dread PC_t=PC+19、JMP ADR t1 t2 t3Madd=pc Madd= PC_t R/W=1 R/W=1 Dread=obDread=ob PC=DreadIR=Dread PC_t=PC+110、JNC ADR t1 t2 t3Madd=pc generate if c_z_j_f=1R/W=1 c_z_j_f then PC=sjmp_aDread=ob sjmp_a else PC=PC_tIR=Dread PC_t=PC+111、JNZ ADR t1 t2 t3Madd=p

17、c generate if c_z_j_f=1R/W=1 c_z_j_f then PC=sjmp_aDread=ob sjmp_a else PC=PC_tIR=Dread PC_t=PC+112、MVRD DR,DATA t1 t2 t3Madd=pc Madd= PC_t R/W=1 R/W=1 Dread=obDread=ob DR=DreadIR=Dread PC=PC+2 PC_t=PC+113、LRD DR,SR t1 t2 t3Madd=pc Madd= SR R/W=1 R/W=1 Dread=obDread=ob DR=DreadIR=Dread PC=PC_t PC_t=

18、PC+114、STR SR,DR t1 t2 t3Madd=pc Madd= DR R/W=0 R/W=1 ob=SRDread=ob IR=Dread PC=PC_t PC_t=PC+115、NOP t1 t2 t3Madd=pc R/W=1 Dread=ob IR=Dread PC=PC_t PC_t=PC+1说明:(1) Mem_Addr是存储器地址总线。(2) Ob是存储器数据总线。(3) We是存储器读写信号,为0时写存储器,为1时读存储器。(4) Z_tmp是运算产生的结果为0的标志,z_out是本条指令执行完成后的结果为0的标志。(5) C_tem是运算产生的进位标志,c_out

19、是本条指令执行完成后的进位标志。(6) IR是指令寄存器。(7) C_z_j_flag是条件转移指令“JNC ADR”或者“JNZ ADR”产生的条件转移指令(8) Sjmp_addr是条件转移指令“JNC ADR”或者“JNZ ADR”产生的条件转移地址。(9) Result是运算器产生的运算结果。(三)CPU结构设计1. 一条指令需要3拍时间 (1)t1:取指。t1上升沿MADDR PC,t2上升沿指令送IR;PC+1(temp)(2)t2:译码分析、运算处理(Z、CTEMP);(3)t3:存储器、寄存器读写,下降沿写寄存器,改变C、Z、PC等。三周期指令:包括所有的算术逻辑指令:ADD,

20、SUB,DEC,INC,CMP,AND,OR,XOR,TEST,SHL,SHR,SAR。除了绝对转移指令JMPA外的所有控制转移指令:JR,JRC,JRNC,JRZ,JRNZ。一条数据传送指令:MOV。这些指令只需三个周期就可以完成,其中,前两个周期用于取指。这些指令都可以用操作码前两位都是00,所以很容易和其它指令区别。见下图: 三周期指令时序图2.简单CPU结构:无流水、无Cache;主要部件有:运算单元ALU;通用寄存器组;控制器(译码);取指操作(时序电路);存储器操作。CPU由5部分组成:取指部分instru_fetch、指令译码部分decoder_unit、执行部分exe_unit

21、、存储器部分memory_unit、和通用寄存器组regfile。另外,还需设计一个程序包exe_cpu_components,将各底层设计实体作为元件存储,供各设计实体使用。顶层设计实体exe_cpu完成CPU 的5个组成部分的连接。3、整体结构设计我们在设计整体结构时,依据的是各指令的数据通路。然后采用自顶向下,逐步分解细化的方法进行设计。先整体模块,后局部模块。l CPU整体结构 串行指令CPU整体结构图4、 各分模块结构设计l 控制器结构 串行指令CPU控制器结构图l 运算器结构 串行指令CPU运算器结构图(四)CPU设计实现1、通用寄存器组regfile通用寄存器组内包含4个16位寄

22、存器。这是一个具有写入端口,2个读出端口的通用寄存器组。写入端口将指令执行后得到的目的寄存器的值在的下降沿写入目的寄存器中。只有具有写目的寄存器功能的指令执行结束时才写目的寄存器。有些指令,如JMP指令等执行结束后不会改变通用寄存器组的值。通用寄存器组的2个读出端口,一个是目的寄存器读出端口,一个是源寄存器读出端口,从这2个端口读出的内容供执行部分exe_unit和存储器部分memory_unit使用。 通用寄存组内还有2个标志位:z_out和c_out,在的下降沿根据指令执行的结果改变或者不改变它们的值。这2个标志位的值送执行部分exe_unit使用。通用寄存器组各引脚结构如下图:图regf

23、ile通用寄存器组是通过4个寄存器、2个2-4译码器和1个4-1选择器构成,其各个部分连接关系如下图所示: 图regfile组成通用寄存器组部分regifile源代码:(1) 寄存器regregfile的引脚如下图所示:图regfilelibrary ieee;use ieee.std_logic_1164.all;entity reg is port (reset: instd_logic;d_input: instd_logic_vector(15 downto 0);clk:instd_logic;write: instd_logic; sel: instd_logic;q_output

24、: outstd_logic_vector(15 downto 0) );end reg;architecture a OF reg isbeginprocess(reset,clk)beginIF reset = 0 thenq_output = x0000; elsif clkevent and clk = 0 then -时钟下降沿触发if sel =1 and write = 1 thenq_output = d_input;end if;end if;end process;end a;(2) 2-4译码器decoder_2_to_42-4译码器的引脚如下图所示:图2-4译码器Lib

25、rary ieee;use ieee.std_logic_1164.all;entity decoder_2_to_4 is port ( sel: in std_logic_vector(1 downto 0); sel00: out std_logic; sel01: out std_logic; sel02: out std_logic; sel03: out std_logic );end decoder_2_to_4;architecture Behavioral of decoder_2_to_4 isbeginsel00 = (not sel(1) and (not sel(0)

26、;sel01 = (not sel(1) and sel(0) ;sel02 = sel(1) and (not sel(0) ;sel03 out_put out_put out_put out_put = Input3;end case;end process;end Behavioral;(4) 通用寄存器组regfilelibrary ieee;use ieee.std_logic_1164.all;use work.exp_cpu_components.all;entity regfile isport ( DR: in std_logic_vector(1 downto 0); -

27、源寄存器号SR: in std_logic_vector(1 downto 0); -目的寄存器号 reset: in std_logic;write: in std_logic;-写寄存器信号 clk: in std_logic;d_input: in std_logic_vector(15 downto 0); -写寄存器的数据change_z: in std_logic;-如果为1,则重新设置z标志change_c: in std_logic; c_in: in std_logic; z_in: in std_logic;R0,R1,R2,R3: out std_logic_vector

28、(15 downto 0);output_DR: out std_logic_vector(15 downto 0); output_SR: out std_logic_vector(15 downto 0);c_out: out std_logic;z_out: out std_logic );end regfile;architecture struct of regfile issignal reg00, reg01, reg02,reg03: std_logic_vector(15 downto 0);signal sel00, sel01, sel02, sel03: std_log

29、ic;beginR0 = reg00;R1 = reg01;R2 = reg02;R3 = reg03;z_c_proc: process(reset,clk) -对指令执行结束后的z、c标志进行处理begin if reset = 0 thenz_out = 0;c_out = 0;elsif clkevent and clk = 0 then if change_z = 1 thenz_out = z_in; end if; if change_c = 1 thenc_out reset,d_input= d_input,clk= clk,write= write, sel= sel00,

30、q_output= reg00);Areg01: reg port map(-寄存器R1reset= reset,d_input= d_input,clk= clk,write= write, sel = sel01,q_output= reg01);Areg02: reg port map(-寄存器R2reset= reset,d_input= d_input,clk= clk,write= write, sel= sel02,q_output= reg02);Areg03: reg port map(-寄存器R3reset= reset,d_input= d_input,clk= clk,

31、write= write, sel= sel03,q_output= reg03);des_decoder: decoder_2_to_4 port map(-2 4译码器sel = DR, sel00 = sel00,sel01 = sel01,sel02 = sel02,sel03 = sel03 );muxB: mux_4_to_1 port map(-目的寄存器读出4选1选择器input0 = reg00, input1 = reg01,input2 = reg02,input3 = reg03,sel = DR,out_put = output_DR);muxA: mux_4_to_

32、1 PORT MAP(-源寄存器读出4选1选择器input0 = reg00, input1 = reg01,input2 = reg02,input3 = reg03,sel = SR,out_put = output_SR);end struct;2、取指部分instru_fetch取指部分完成4项工作:(1)产生时钟信号、和,供实验CPU各部分使用(2)在复位信号reset为低时将PC复位为0;在一条指令执行结束后,根据指令执行的结果在的下降沿改变PC的值。(3)将从存储器读出的指令的堆一个字在的上升沿送至指令寄存器IR中。(4)计算PC+1的值pc_inc,为双字指令取第二个指令字做准

33、备。取指部分instru_fetch源代码取指部分的各引脚关系如图:图instru_fetchlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use work.exp_cpu_components.all;entity instru_fetch isport(reset,clk:in std_logic;data_read: in std_logic_vector(15 downto 0); -存储器读出的数lj_instruct: in

34、std_logic; -长转移指令DW_intruct:in std_logic;c_z_j_flag: in std_logic; -为1时进行条件转移sjmp_addr: in std_logic_vector(15 downto 0); -条件转移指令的转移地址t1,t2,t3: buffer std_logic;pc: buffer std_logic_vector(15 downto 0);pc_inc: buffer std_logic_vector(15 downto 0);IR: out std_logic_vector(15 downto 0);end instru_fetc

35、h;architecture behav of instru_fetch is signal start:std_logic;beginIR_poc: process(reset,t2)beginif reset = 0 thenIR = x7000; -nop指令elsif t2event and t2 = 1 thenIR = data_read;end if;end process;process(reset,clk)begin if reset = 0 then start = 1;elseif clkevent and clk =0 then start = 0;end if;end

36、 if;end process;process(reset,clk)beginif reset = 0 then t1 = 0; t2 = 0; t3 = 0;elsif clkevent and clk = 1 then t1 = start or t3;t2 = t1;t3 = t2;end if;end process;pc_inc = pc + 1;-为取双字指令的第2个字或者计算相对转移地址做准备PC_proc:process(reset,t3)begin if reset = 0 thenpc = x0000;elsif t3event and t3 = 0 thenif lj_i

37、nstruct = 1 thenpc = data_read;elsif c_z_j_flag =1 thenpc = sjmp_addr;elsif DW_intruct = 1 thenpc = pc + 10;elsepc = pc_inc;end if;end if;end process;end behav;3、 指令译码部分decoder_unit指令译码部分根据指令寄存器IR的值产生实验CPU所需要的各种控制信号和其他信号:SR:源寄存器号(编址)DR:目的寄存器号(编址)Op_code:控制ALU进行8种运算操作的3位编码Zj_instruct:为1表示本条指令是条“JNZ A

38、DR”指令Cj_instruct: 为1表示本条指令是条“JNC ADR”指令Lj_instruct: 为1表示本条指令是条“JMP ADR”指令DRWr:为1表示在的下降沿将本条指令的执行结果写入目的寄存器Mem_Write:为1表示本条指令有存储器写操作,存储器的地址是源寄存器的内容。DW_instruct:为1表示本条指令是双字指令Change_z:为1表示本条指令可能改变Z(结果为0)标志Change_c:为1表示本条指令可能改变C(进位)标志Sel_memdata:为1表四本条指令写入目的寄存器的值来自读寄存器R_sjmp_addr:计算条件转移地址所需要的16位相对地址。它是由条件

39、转移指令中的8位相对地址经过符号扩展生成的。指令译码器在传统上属于控制器部分,是控制器的核心。所谓组合逻辑控制器是指指令译码器是有组合逻辑构成的,所谓微程序控制器是指指令译码器主要由控制存储器ROM和少许组合逻辑构成的。指令译码部分decoder_unit源代码:decoder_unit的引脚关系如下图:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use work.exp_cpu_components.all;entity decode

40、r_unit isport (IR: in std_logic_vector(15 downto 0); SR: out std_logic_vector(1 downto 0);DR: out std_logic_vector(1 downto 0);op_code: out std_logic_vector(2 downto 0);zj_instruct: out std_logic;cj_instruct: out std_logic;lj_instruct: out std_logic;DRWr: buffer std_logic; -为1时写DR寄存器Mem_Write: out s

41、td_logic;DW_intruct: buffer std_logic; change_z: out std_logic;change_c: out std_logic;sel_memdata: out std_logic; -为1时存储器的读出数据作为写入DR的数据 r_sjmp_addr: out std_logic_vector(15 downto 0) -相对转移地址);end decoder_unit;architecture behav of decoder_unit isbeginSR = IR(9 downto 8);DR = IR(11 downto 10);sel_me

42、mdata = IR(15) and IR(14) and (not IR(13);change_z = not IR(15) and IR(1);change_c = not IR(15) and IR(2);DRWr_proc: process(IR)beginif IR(15) = 0 then if IR(0) =1 thenDRWr = 1; Else DRWr = 0;end if;elsif IR(14) = 1 and IR(13) = 0 then DRWr = 1;elseDRWr = 0;end if;end process; sj_addr_proc:process(I

43、R) -条件转移指令的相对转移地址从8位扩展到16位beginif IR(7) =1 thenr_sjmp_addr = 11111111 & IR(7 downto 0);elser_sjmp_addr -jmp addr;mvDR dr,dataMem_Write = 0;DW_intruct - str dr,srMem_Write = 1;DW_intruct Mem_Write = 0;DW_intruct = 0;end case;end process;ALUOP_CODE_PROC:PROCESS(IR)begin if IR(15) = 0 thenop_code = IR(

44、14 downto 12);else op_code -jmp adrzj_instruct = 0;cj_instruct = 0;lj_instruct -jnc addrzj_instruct = 0;cj_instruct = 1;lj_instruct -jnz addrzj_instruct = 1;cj_instruct = 0;lj_instruct zj_instruct = 0;cj_instruct = 0;lj_instruct = 0;end case;end process;end behav;4、 执行部分exe_unit执行部分完成下列任务:(1)8种算术逻辑运

45、算:加,加1,减,减1,与,或,非核数据传送,并临时将运算结果存放在result中。根据运算结果产生进位标志,临时存放在c_tmp中;根据运算结果产生结果为0的标志,临时存放在z_tmp中。(2)产生存储器读写操作所需要的存储器地址Mem_Addr。存储器地址是根据下列情况决定的:在节拍时选择pc,在双字指令时选择pc_inc,在LDR指令时选择SR(源寄存器)内容,在STR指令时选择DR(目的寄存器)内容。(3)产生条件转移指令(jnc和jnz)所需要的转移标志c_z_j_flag(为1表示转移)和转移地址sjmp_addr。执行部分的核心传统上属于运算器,是运算器的核心。执行部分exe_u

46、nit源代码:exe_unit引脚关系如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use work.exp_cpu_components.all;entity exe_unit isport( t1: in std_logic;op_code:in std_logic_vector(2 downto 0);zj_instruct: in std_logic; cj_instruct: in std_logic; pc: in st

47、d_logic_vector(15 downto 0);pc_inc:in std_logic_vector(15 downto 0);c_in: in std_logic; -以前指令产生的进位C z_in: in std_logic; -以前指令产生的ZMem_Write: in std_logic; -为1时,写存储器c_tmp:out std_logic;z_tmp:out std_logic;c_z_j_flag: out std_logic; -为1时进行条件转移r_sjmp_addr:in std_logic_vector(15 downto 0); -相对转移地址DW_intruct: in std_logic;sjmp_addr:out std_logic_vector(15 downto 0); -条件转移指令的转移地址SR_data: in std_logic_vector(15 downto 0);DR_data: in std_logic_vector(15 downto 0);Mem_Addr: out std_logic_vector(15 downto 0);result: out std_logic_vector(15 downto 0) -运算结果

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