(精品)毕业精品控制器实验报告(2013年优秀毕业设计)_第1页
(精品)毕业精品控制器实验报告(2013年优秀毕业设计)_第2页
(精品)毕业精品控制器实验报告(2013年优秀毕业设计)_第3页
(精品)毕业精品控制器实验报告(2013年优秀毕业设计)_第4页
(精品)毕业精品控制器实验报告(2013年优秀毕业设计)_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江苏技术师范学院计算机学科实验基地实验报告评分: 学分:实验类型:必修 选修 实验日期:06 年 06 月 28日实验名称:组合逻辑控制器逻辑设计实验地点:实验基地学生姓名: 指导教师:班 级: 评阅教师:同组学生: 计算机科学与工程学院制实验报告内容:一、 实验目的 理解组合逻辑控制器的结构及功能,理解微命令信号和时序信号的产生,并学会如何采用VHDL语言对硬件逻辑进行描述并下载到FPGA芯片中,从而设计完成一个具有组合逻辑控制器功能的芯片。二、 实验方案与计划(对硬件和项目设计)模块结构和功能设计顶层模块的功能描述:根据现行指令、控制台命令、时序系统等产生模型机所需微命令;控制整个CPU的运行。输入:RST /*复位信号CLK /*系统时钟;IR_CODE /*指令输入(16 位);输出:READ_COM /*读存储器;WRITE_COM /*写存储器; CPR0_P /*寄存器R0的打入脉冲 CPR1_P /*寄存器R1的打入脉冲 CPR2_P /*寄存器R2的打入脉冲 CPR3_P /*寄存器R3的打入脉冲 CPC_P /*寄存器C的打入脉冲CPD_P /*寄存器D的打入脉冲 CPPC_P /*寄存器PC的打入脉冲 CPSP_P /*寄存器SP的打入脉冲CPMBR_P /*寄存器MBR的打入脉冲 CPMAR_P /*寄存器MAR的打入脉冲CPPSW_P /*寄存器PSW的打入脉冲 SMBR /*寄存器MBR的置入端; SIR /*寄存器IR的置入端; EMAR /*寄存器MAR的使能端; SELA3 /*选择器A的选择控制(3位)SELB3 /*选择器B的选择控制(3位)CON_ALU6 /*ALU的功能控制(6位)SHIFT_REG2 /*移位器的控制(2位)左移、右移、直传(DM);组合逻辑控制器内部框图:译码器IR_CODE微操做信号发生器CPMAR_PCLK时序发生器EMARCPMBR_PPSWSMBRRSTREAD_COMCPR0_PWRITE_COMSIRCPR2_PCPR1_P编码器CON_ALU6CPC_PCPR3_P编码器CPD_PSELB3CPSP_PCPPC_P编码器SELA3CPPSW_P编码器SHIFT_REG21、指令译码器说明:由于译码后输出较多,所以按操作类型(IR15IR12),源寄存器号(IR11IR9),源寻址方式(IR8-IR6),目的寄存器号(IR5IR3),目的寻址方式(IR2IR0)分为五个译码器。(1) 操作类型译码 U_OPER_DECOD输入:IR15,IR14,IR13,IR12输出:MOV,ADD,SUB,AND,OR,EOR,COM,NEG,INC,DEG,SL,SR,JMP_RST,JSR功能描述表:IR15IR14IR13IR12JMP_RST4/16译码器IR15IR14IR13IR12MOVADDSUBANDOREORCOMNEGINCDECSLSRJSRIR_OPER_TYPE0000MOV0001ADD0010SUB0011AND0100OR0101EOR0110COM0111NEG1000INC1001DEC1010SL1011RL1100JMP/RST1101JSR(2) 源寄存器号译码 U_SREG_DECOD输入:IR11,IR10,IR9输出:S_R0 , S_R1 , S_R2 , S_R3 , S_SP , S_PSW , S_PC功能:IR(11 DOWNTO 9) 3/8译码器IR11IR10IR9S_R0S_R1S_R2S_R3S_SPS_PSWS_PCIR_SREG_TYPE000S_R0001S_R1010S_R2011S_R3100S_SP101S_PSW110-111S_PC(3)源寄存器寻址方式译码 U_SADDR_DECOD输入:IR8,IR7,IR6输出:S_ADDR_REG , S_ADDR_INDI , S_ADDR_DECR , S_ADDR_INCR , S_DOUB_INDI , S_ADDR_VARI , S_ADDR_SKP功能:IR8IR7IR63/8译码器S_ADDR_REGS_ADDR_INCRS_DOUB_INDIS_ADDR_VARIIR8IR7IR6S_ADDR_INDIS_ADDR_DECRS_ADDR_SKPIR_SREG_ ADDR000RS_ADDR_REG001(R )S_ADDR _INDI010-(R) S_ADDR _DECR011(R)+S_ADDR _INCR100(R)+S_DOUB_INDI101X(R)S_ADDR _VARI110SKPS_ADDR _SKP111-(4)目的寄存器号译码 U_DREG_DECOD输入:IR5,IR4,IR3输出:D_R0 , D_R1 , D_R2 , D_R3 , D_SP , D_PSW , D_PC功能:IR(5 DOWNTO 3)3/8译码器IR5IR4IR3D_R0D_R1D_R2D_R3D_SPD_PSWD_PCIR_DREG_ TYPE000D_R0001D_R1010D_R2011D_R3100D_SP101D_PSW110-111D_PC(5)目的寄存器寻址方式译码 U_DADDR_DECOD输入:IR2,IR1,IR0输出:D_ADDR_REG , D_ADDR_INDI , D_ADDR_DECR , D_ADDR_INCR , D_DOUB_INDI , D_ADDR_VARI , D_ADDR_SKPD_ADDR_INCRD_DOUB_INDID_ADDR_VARI3/8译码器IR2IR1IR0D_ADDR_REGD_ADDR_INDID_ADDR_DECRD_ADDR_SKP功能:IR2IR1IR0IR_DREG_ ADDR000RD_ADDR_REG001(R )D_ADDR _INDI010-(R) D_ADDR _DECR011(R)+D_ADDR _INCR100(R)+D_DOUB_INDI101X(R)D_ADDR _VARI110SKPD_ADDR _SKP111-2、时序发生器 模块编号:U_CLOCK_SYSTEM;说明:模型机的时序系统采取三级时序(工作周期,时钟周期,工作脉冲)(1)工作周期模型机设置六种工作周期状态,用六个周期状态触发器作为它们的标志。某一时期内只有其中一个周期状态触发器为1,指明CPU现在所处的工作周期状态,为该阶段的工作提供时间标志与依据。由于暂时不考虑中断与DMA,所以只设置四个工作周期。1)取指周期FT2)源周期ST3)目的周期DT4)执行周期ET不同类型指令所需的工作周期可能不同。在每一工作周期结束前,判断下一个周期状态是什么,并为此准备好进入该周期的条件,如发出电位信号1ST等,到本周期结束的时刻,实现周期状态的定时切换。1FT=FT_SET_1D FT C Q1FTCPFTFTD ST C Q1STCPSTST1DTCPDTD DT C QDTD ET C Q1ETCPETET(2)时钟周期(节拍) U_CLOCK_CIRCLE以主存访问周期所需时间为时间周期的宽度。一个工作周期包含若干节拍,根据不同指令的需要,节拍数可变。设计一个时钟周期计数器T,从T=0开始进入一个计数循环,表示进入新的工作周期。如果本工作周期还需延长,则发T+1,计数器T将继续计数,开始新的节拍。如果本工作周期应当结束,则发命令T=0。计数器T的状态经译码产生节拍状态,如:T0,T1,T2等,作为分步操作的时间标志。T_COUNTEREN(T+1)TICPT(P)U_CLOCK_COUNTERENCPTTI1上升沿TI+10X003/6译码器TIT0T1T2T3T4U_CLOCK_DECODETIT0T1T2T3001000010100100010110001ANDST2STT2ANDST1STT1ANDST0STT0ANDST4STT4ANDDT0DTT0ANDST3STT3ANDDT2DTT2ANDDT3DTT3ANDDT1DTT1ANDET0ETT0ANDET1ETT1ANDDT4DTT0ANDFT0FTT0ANDET3ETT3ANDET2ETT2(3) 工作脉冲 U_CLOCK_PULSE模型机在每个时钟周期的末尾发一个工作脉冲P,作为各种同步脉冲的来源。工作脉冲P的前沿作为打入寄存器的定时,标志一个数据通路操作的完成。P的后沿作为周期切换的定时,在此时刻对时钟周期计数器T计数、打入新的工作周期状态。PCLK分频器RSTP_INVER分频系数的选取F_CLK:P的周期为访存所需时间。3、编码器(1)输入选择器A的控制信号的编码 U_CODE_SELA编码器ASEL_AR0_TO_AR1_TO_AR2_TO_AR3_TO_AC_TO_AD_TO_APC_TO_ASP_TO_A输入:R0_TO_A , R1_TO_A , R2_TO_A , R3_TO_A , C_TO_A , D_TO_A , PC_TO_A , SP_TO_A;输出:SEL_A 功能:R0_TO_AR1_TO_AR2_TO_AR3_TO_AC_TO_AD_TO_APC_TO_ASP_TO_ASEL_A1000000000001000000001001000000100001000001100001000100000001001010000001011000000001111(2)输入选择器B的控制信号的编码 U_CODE_SELB输入:R0_TO_B , R1_TO_B , R2_TO_B , R3_TO_B , C_TO_B , D_TO_B , PSW_TO_B , MBR_TO_B;编码器ASEL_BR0_TO_BR1_TO_BR2_TO_BR3_TO_BC_TO_BD_TO_BPSW_TO_BMBR_TO_B输出:SEL_B 功能:R0_TO_BR1_TO_BR2_TO_BR3_TO_BC_TO_BD_TO_BPSW_TO_BMBR_TO_BSEL_B1000000000001000000001001000000100001000001100001000100000001001010000001011000000001111编码器_ALUALU_CON6ABA_ADD_BA_SUB_BA_COMB_COMA_ADD_1A_SUB_1A_NEGA_AND_BA_OR_BA_EOR_B(3)ALU的控制信号编码 U_CODE_ALU_CON6输入:A,B,A_ADD_B, A_SUB_B, A_COM, B_COM, A_ADD_1, A_SUB_1, A_NEG, A_AND_B, A_OR_B, A_EOR_B;输出:ALU_CON6功能:ALU_CON6=S3S2S1S0 & M & C0输入功能S3S2S1S0M C0ALU_CON6AA11111X111110BB10101X101010A_ADD_BA加B 100100100100A_SUB_BA减B 0110(A加B)01011001A_ COMA非 00001X000010B_ COMB非 01011X010110A_ADD_1A加1 111101111101A_SUB_1A减1 000000000000B_ NEGB补 110011110011A_AND_BA与B 11101X111010A_OR_BA或B1011XX101100A_EOR_BA异或B10011X1001104、微操作信号发生器 (1)指令流程图 (见附件1)(2)指令操作时间表(见附件2)(3)微命令信号的综合和化简(见附件3)三、实验过程理解与描述 经过整理的数据及表格1、设计输入(用MODELSIM 5.6仿真软件) 原程序(见附件4)2、模块的功能仿真(用MODELSIM 5.6仿真软件)(1)输入信号激励设计仿真测试程序TESTBENCH(见附件5)(2)启动仿真程序(3)输出结果(波形图) : 被测试的指令IR_CODE=0000001001010010 即MOV (R1),-(R2);3、编译(用MAX+PLUS2 9.5) 目标器件为EPF10K10LC84-4 编译后产生一个SRAM目标文件(.sof) 4、时序仿真(用MAX+PLUS2 9.5)(1)传播延迟分析(2)时序逻辑电路性能分析(3)建立和保持时间分析5、器件编程(用MAX+PLUS2 9.5) 编程电缆是ByteBlaster; 编程文件是编译后产生一个SRAM目标文件 编程器件是EPF10K10LC84-4l 实验记录的分析、讨论与结论从被测试的指令MOV (R1),-(R2)的仿真波形图可以看出,FT0,ST0,ST1,ST2,ET0,ET2几个时钟中所发的微命令都正确。l 实验小结本次实验基本能满足预定要求,时序、逻辑功能正确,文档健全。四、 对指定问题的回答 需要学生回答的问题 工作脉冲如何产生?简述工作脉冲的作用。答:工作脉冲从系统时钟分频得到,分频系数由访存周期决定;工作脉冲的前沿作为打入寄存器的定时,其后沿作为周期切换的定时,在此刻对时钟周期计数器T计数、打入新的工作周期状态。 实验前对学生的特殊要求深刻理解组合逻辑控制器结构功能,熟悉VHDL语言,能熟练运用相关开发工具。五、 对实验的评价和建议本实验能让学生加深对组合逻辑控制器组织结构及功能的理解,以及学会如何在具体的应用环境中综合运用VHDL语言进行硬件描述及功能模拟,但所描述的对象结构简化无实际应用意义,建议增加实验的实际应用性。六、 实验附件有关程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity cpu_control isPort ( ir_code : in std_logic_vector(15 downto 0); pulse : in std_logic; reset : in std_logic; -reset clock pulse cppsw_p : out std_logic;sela3 : out std_logic_vector(2 downto 0);selb3 : out std_logic_vector(2 downto 0);con_alu6 : out std_logic_vector(5 downto 0);shift_reg2 : out std_logic_vector(1 downto 0);read_com: out std_logic;write_com: out std_logic;smbr : out std_logic;sir : out std_logic;emar : out std_logic;cpmbr_p : out std_logic;cpmar_p : out std_logic; cpr0_p: out std_logic;cpr1_p: out std_logic;cpr2_p: out std_logic;cpr3_p: out std_logic;cpc_p : out std_logic;cpd_p : out std_logic;cppc_p: out std_logic;cpsp_p: out std_logic;int_en : out std_logic;-intr : in std_logic; - inta : out std_logic;-psw_flag: in std_logic_vector(5 downto 0);inta_it3 : out std_logic );end cpu_control;architecture cpu_control_arch of cpu_control iscomponent oper_decoder - Port ( ir15_12 : in std_logic_vector(3 downto 0); op_mov :out std_logic; op_add :out std_logic; op_sub :out std_logic; op_and :out std_logic; oP_or :out std_logic; op_eor :out std_logic; op_com :out std_logic; op_neg :out std_logic; op_inc :out std_logic; op_dec :out std_logic; op_sl :out std_logic; op_sr :out std_logic; op_jmp_rst :out std_logic; op_jsr :out std_logic; op_sti :out std_logic; op_cli: out std_logic);end component;component code_shift Port ( dm : in std_logic; shift_sl : in std_logic; shift_sr : in std_logic; shift_reg2 : out std_logic_vector(1 downto 0);end component;component d_reg_decod Port ( ir5_3 :in std_logic_vector(2 downto 0); d_r0 :out std_logic; d_r1 :out std_logic; d_r2 :out std_logic; d_r3 :out std_logic; d_sp :out std_logic; d_psw :out std_logic; d_pc :out std_logic; d_tmp :out std_logic);end component;component daddr_decod Port ( ir2_0 :in std_logic_vector(2 downto 0); d_addr_reg :out std_logic; d_addr_indi :out std_logic; d_addr_decr :out std_logic; d_addr_incr :out std_logic; d_doub_indi :out std_logic; d_addr_vari :out std_logic; d_addr_skp :out std_logic; d_addr_tmp :out std_logic);end component;component s_reg_decod Port ( ir11_9 :in std_logic_vector(2 downto 0); s_r0 :out std_logic; s_r1 :out std_logic; s_r2 :out std_logic; s_r3 :out std_logic; s_sp :out std_logic; s_psw :out std_logic; s_pc :out std_logic; s_tmp :out std_logic);end component;component saddr_decod Port ( ir8_6 :in std_logic_vector(2 downto 0); s_addr_reg :out std_logic; s_addr_indi :out std_logic; s_addr_decr :out std_logic; s_addr_incr :out std_logic; s_doub_indi :out std_logic; s_addr_vari :out std_logic; s_addr_skp :out std_logic; s_addr_tmp :out std_logic);end component;component code_selb Port ( r0_to_b :in std_logic; r1_to_b :in std_logic; r2_to_b :in std_logic; r3_to_b :in std_logic; C_to_b :in std_logic; D_to_b :in std_logic; psw_to_b :in std_logic; mbr_to_b :in std_logic; sel_b :out std_logic_vector(2 downto 0) );end component;component code_sela Port ( r0_to_a :in std_logic; r1_to_a :in std_logic; r2_to_a :in std_logic; r3_to_a :in std_logic; C_to_a :in std_logic; D_to_a :in std_logic; sp_to_a :in std_logic; pc_to_a :in std_logic; sel_a :out std_logic_vector(2 downto 0) );end component;component code_alu Port ( op_a:in std_logic; op_b:in std_logic; a_add_b:in std_logic; a_sub_b:in std_logic; a_com:in std_logic; b_com:in std_logic; a_add_1:in std_logic; a_sub_1:in std_logic; a_neg:in std_logic; a_and_b:in std_logic; a_or_b:in std_logic; a_eor_b:in std_logic; reset : in std_logic; alu_con6:out std_logic_vector(5 downto 0) );end component;signal op_mov : std_logic;signal op_add : std_logic;signal op_sub : std_logic;signal op_and : std_logic;signal oP_or : std_logic;signal op_eor : std_logic;signal op_com : std_logic;signal op_neg : std_logic;signal op_inc : std_logic;signal op_dec : std_logic;signal op_sl : std_logic;signal op_sr : std_logic;signal op_jmp : std_logic;signal op_jsr : std_logic;signal op_sti : std_logic;signal op_cli : std_logic;signal s_r0 : std_logic;signal s_r1 : std_logic;signal s_r2 : std_logic;signal s_r3 : std_logic;signal s_sp : std_logic;signal s_psw : std_logic;signal s_pc : std_logic;signal s_tmp : std_logic; signal d_r0 : std_logic;signal d_r1 : std_logic;signal d_r2 : std_logic;signal d_r3 : std_logic;signal d_sp : std_logic;signal d_psw : std_logic;signal d_pc : std_logic;signal d_tmp : std_logic;signal s_addr_reg : std_logic;signal s_addr_indi : std_logic;signal s_addr_decr : std_logic;signal s_addr_incr : std_logic;signal s_doub_indi : std_logic;signal s_addr_vari : std_logic;signal s_addr_skp : std_logic;signal s_addr_tmp : std_logic;signal d_addr_reg : std_logic;signal d_addr_indi : std_logic;signal d_addr_decr : std_logic;signal d_addr_incr : std_logic;signal d_doub_indi : std_logic;signal d_addr_vari : std_logic;signal d_addr_skp : std_logic;signal d_addr_tmp : std_logic;signal r0_to_a : std_logic;signal r1_to_a : std_logic;signal r2_to_a : std_logic;signal r3_to_a : std_logic;signal C_to_a : std_logic;signal D_to_a : std_logic;signal sp_to_a : std_logic; signal pc_to_a : std_logic; signal r0_to_b : std_logic;signal r1_to_b : std_logic;signal r2_to_b : std_logic;signal r3_to_b : std_logic;signal C_to_b : std_logic;signal D_to_b : std_logic;signal psw_to_b : std_logic; signal mbr_to_b : std_logic; signal op_a: std_logic;signal op_b: std_logic;signal a_add_b: std_logic;signal a_sub_b: std_logic;signal a_com: std_logic;signal a_add_1: std_logic;signal a_sub_1: std_logic;signal a_neg: std_logic;signal a_and_b: std_logic;signal a_or_b: std_logic;signal a_eor_b: std_logic;signal dm : std_logic;signal shift_sl : std_logic;signal shift_sr : std_logic;signal dou_oper : std_logic; -double operatorsignal sin_oper : std_logic; -single operatorsignal two_oper : std_logic;signal zero_oper : std_logic;signal zero_temp : std_logic;signal condition : std_logic;type state_type is (initial,ft0,st0,st1,st2,st3,st4,dt0,dt1,dt2,dt3,dt4,et0,et1,et2,et3,it0,it1,it2,it3,it4,it5);signalpresent_state,next_state : state_type;signal ft0_to_st0 : std_logic;signal ft0_to_dt0 : std_logic;signal ft0_to_et0 : std_logic;signal st0_to_st1 : std_logic;signal st1_to_st2 : std_logic;signal st1_to_dt0 : std_logic;signal st1_to_et0 : std_logic;signal st2_to_st3 : std_logic;signal st2_to_dt0 : std_logic;signal st2_to_et0 : std_logic;signal st3_to_st4 : std_logic;signal st4_to_dt0 : std_logic;signal st4_to_et0 : std_logic;signal dt0_to_dt1 : std_logic;signal dt0_to_et0 : std_logic;signal dt1_to_dt2 : std_logic;signal dt1_to_et0 : std_logic;signal dt2_to_dt3 : std_logic;signal dt2_to_et0 : std_logic;signal dt3_to_dt4 : std_logic;signal dt3_to_et0 : std_logic;signal dt4_to_et0 : std_logic;signal et0_to_et1 : std_logic;signal et0_to_et2 : std_logic;signal et0_to_ft0 : std_logic;signal et1_to_et2 : std_logic;signal et1_to_ft0 : std_logic;signal et2_to_et3 : std_logic;signal et2_to_ft0 : std_logic;signal et3_to_ft0 : std_logic;signal et0_to_it0 : std_logic;-signal et1_to_it0 : std_logic;-signal et2_to_it0 : std_logic;-signal et3_to_it0 : std_logic;-signal it_enter : std_logic;beginzero_tempir_code(15 downto 12), op_mov =op_mov, op_add =op_add, op_sub =op_sub, op_and =op_and, oP_or =oP_or, op_eor =op_eor, op_com =op_com, op_neg =op_neg, op_inc =op_inc, op_dec =op_dec, op_sl =op_sl, op_sr =op_sr, op_jmp_rst= op_jmp, op_sti=op_sti, op_cli=op_cli, op_jsr =op_jsr); u_dreg_deco: d_reg_decod Port map( ir5_3=ir_code(5 downto 3), d_r0 =d_r0, d_r1 =d_r1, d_r2 =d_r2, d_r3 =d_r3, d_sp =d_sp, d_psw =d_psw, d_pc =d_pc, d_tmp =d_tmp);u_daddr_deco: daddr_decod Port map( ir2_0=ir_code(2 downto 0), d_addr_reg =d_addr_reg, d_addr_indi =d_addr_indi, d_

温馨提示

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

评论

0/150

提交评论