CPU实验报告.docx
- 文档编号:24127346
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:15
- 大小:194.01KB
CPU实验报告.docx
《CPU实验报告.docx》由会员分享,可在线阅读,更多相关《CPU实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
CPU实验报告
电子科技大学
计算机学科实验基地
实验报告
评分:
学分:
实验类型:
必修√选修实验日期:
05年06月28日
实验名称:
CPU逻辑设计
实验地点:
实验基地
学生姓名:
指导教师:
班级:
评阅教师:
同组学生:
计算机科学与工程学院制
实验报告内容:
一、实验目的
在运算器实验和控制器实验的基础上,掌握整个CPU的设计与实现,理解运算器,控制器,各个寄存器之间的接口关系,并学会如何利用VHDL对硬件实体逻辑进行描述并进行模块级、系统级仿真,从而模拟完整的CPU结构和功能
具体目的如下:
1)掌握用硬件描述语言设计逻辑部件的方法。
2)在运算器实验和控制器实验的基础上掌握整个CPU的设计与实现
掌握CPU的设计过程。
3)掌握寄存器模块的设计过程。
4)了解CPU指令执行的过程。
5)了解寄存器模块的设计方法。
6)验证CPU的功能。
二、实验方案与计划(对硬件和项目设计)
模块编号:
u_model_cpu
功能:
接收指令输入,译码,执行,发出相应的读写信号。
执行完当前指令,接受中断请求,并发出相应的中断相应信号。
输入:
clk:
时钟信号
intr:
中断请求
reset:
复位信号
输出:
addr_bus_16:
数据总线
rd_com:
读信号
wr_com:
写信号
inta:
中断响应
result:
将CPU的R3寄存器引出
inta_it3:
为1标识处于中断中期的IT3
输入输出:
data_bus_16:
数据总线
结构与组成:
CPU作为计算机的核心部件,它主要包括以下几个部分:
1、数据存取模块:
包括运算器部件,寄存器部件
2、组合逻辑控制器
3、时序系统
1数据存取部件
模块编号:
u_model_access
功能:
由ALU汇集(选择),实现数据分配,提供指令码,程序状态字,地址信息和数据
输入:
pulse:
时序信号
reset:
复位信号
cppsw:
打入脉冲
sela3:
ALU输入端A选择
selb3:
ALU输入端B选择
con_alu6:
ALU操作功能选择
shift_reg2:
移位器功能选择
read_com:
读信号
write_com:
写信号
smbr:
将数据总线上的数据置入MBR
sir:
指令置入
emar:
地址开发,将mar内容送入地址总线
cpmbr:
打入脉冲
cpmar:
cpr0:
cpr1:
cpr2:
cpr3:
cpc:
cpd:
cppc:
cpsp:
int_en:
中断使能
输出:
ir_code:
指令码
psw_flag:
程序状态字
addr_bus_16:
地址总线
result_16:
R3输出
输入输出:
data_bus_16:
数据总线
1)运算器部件
模块编号:
U_ALU_16
功能:
在微命令的控制下对输入A、B进行算术逻辑运算。
基本运算有:
A+B、A-B、A、B、A+1、A-1、A与B、A或B、A(B)反COM、A(B)补NEG、左移、右移
输入:
R0、R1、R2、R3、C、D、PC、SP/*选择器A的输入(16位)
R0、R1、R2、R3、C、D、PSW、MBR/*选择器B的输入(16位)
SELA3/*选择器A的选择控制(3位)
SELB3/*选择器B的选择控制(3位)
CON_ALU6/*ALU的功能控制(6位)
SHIFT_REG2/*移位器的控制(2位)—左移、右移、直传(DM)
输出:
IN_BUS_16/*内部数据总线(16位)—运算结果
2)寄存器部件
模块编号:
u_model_c,u_model_d,u_model_ir,u_model_mar,u_model_mbr,u_model_pc,u_model_psw,u_model_r0,u_model_r1,u_model_r2,u_model_r3,u_model_sp
功能:
在微命令的控制下将内部数据总线上的数据打入相应寄存器;从存储器将指令、数据读入寄存器;将数据写入存储器;指令送指令译码器译码。
所有寄存器都是16位,内部结构是16个D触发器,代码输入至D端,CP端脉冲上升沿同步打入。
R,S端为置入端,高电平有效,R置0,S置1。
2组合逻辑控制器
模块编号:
u_model_con
功能:
根据现行指令、PSW、控制台命令、IO设备接口状态、中断请求、时序系统等产生所需微命令;控制整个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);
3时序系统
模块编号:
u_clock
功能:
提供模型机的时序系统采取三级时序(工作周期,时钟周期,工作脉冲)
工作周期:
模型机设置六种工作周期状态,用六个周期状态触发器作为它们的标志。
某一时期内只有其中一个周期状态触发器为1,指明CPU现在所处的工作周期状态,为该阶段的工作提供时间标志与依据。
由于暂时不考虑DMA,所以只设置五个工作周期。
(1)取指周期FT
(2)源周期ST
(3)目的周期DT
(4)执行周期ET
(5)中断周期IT
输入:
clk:
rst:
输出:
p:
●实验小结
通过整个CPU的设计及实现,深刻CPU的组成结构及各部件之间的相互关系和如何用硬件描述语言VHDL对运算器部件进行描述及实现其功能,也更加熟悉了MAX+plusII平台下VHDL的编码、调试,及功能仿真验证、系统级合成,以及通过编程器将其合成结果下载到FPGA中。
通过本次实验,进一步提高了动手能力和独立分析思考问题、解决问题的能力。
三、对指定问题的回答
●需要学生回答的问题
1.从寄存器级上描述CPU的数据通路结构?
模型机的数据通路结构见《计算机组成原理》第五章。
●实验前对学生的特殊要求
深刻理解CPU的结构功能与工作原理,熟悉VHDL语言,能熟练运用相关开发工具。
四、对实验的评价和建议
本实验能让学生加深对模型机CPU组织结构及功能的理解,以及学会如何在具体的应用环境中综合运用VHDL语言进行硬件描述及功能模拟.
五、CPU仿真波形:
六、实验附件(程序清单)
--model_cpu.vhdwillbecalledbymodel_machine.vhd
--model_cpu.vhd
--|
--|--cpu_control.vhd
--|--dataaccess.vhd
--|--clock_pulse.vhd
-----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entitymodel_cpuis
Port(data_bus_16:
inoutstd_logic_vector(15downto0);
addr_bus_16:
outstd_logic_vector(15downto0);
rd_com:
outstd_logic;
wr_com:
outstd_logic;
clk:
instd_logic;
intr:
instd_logic;
inta:
outstd_logic;
reset:
instd_logic;
result:
outstd_logic_vector(15downto0);
inta_it3:
outstd_logic
);--0beginp_out,'1'istoresetp_out
endmodel_cpu;
architecturemodel_cpu_archofmodel_cpuis
componentcpu_control
Port(
ir_code:
instd_logic_vector(15downto0);
pulse:
instd_logic;
reset:
instd_logic;--resetclockpulse
cppsw_p:
outstd_logic;
sela3:
outstd_logic_vector(2downto0);
selb3:
outstd_logic_vector(2downto0);
con_alu6:
outstd_logic_vector(5downto0);
shift_reg2:
outstd_logic_vector(1downto0);
read_com:
outstd_logic;
write_com:
outstd_logic;
smbr:
outstd_logic;
sir:
outstd_logic;
emar:
outstd_logic;
cpmbr_p:
outstd_logic;
cpmar_p:
outstd_logic;
cpr0_p:
outstd_logic;
cpr1_p:
outstd_logic;
cpr2_p:
outstd_logic;
cpr3_p:
outstd_logic;
cpc_p:
outstd_logic;
cpd_p:
outstd_logic;
cppc_p:
outstd_logic;
cpsp_p:
outstd_logic;
int_en:
outstd_logic;---------------------------------------------------------
intr:
instd_logic;---------------------------------------------------------
inta:
outstd_logic;---------------------------------------------------------
psw_flag:
instd_logic_vector(5downto0);
inta_it3:
outstd_logic
);
endcomponent;
componentdataaccess
port(
ir_code:
outstd_logic_vector(15downto0);
pulse:
instd_logic;
reset:
instd_logic;--resetclockpulse
cppsw:
instd_logic;
sela3:
instd_logic_vector(2downto0);
selb3:
instd_logic_vector(2downto0);
con_alu6:
instd_logic_vector(5downto0);
shift_reg2:
instd_logic_vector(1downto0);
--read_com:
instd_logic;
write_com:
instd_logic;
smbr:
instd_logic;
sir:
instd_logic;
emar:
instd_logic;
cpmbr:
instd_logic;
cpmar:
instd_logic;
cpr0:
instd_logic;
cpr1:
instd_logic;
cpr2:
instd_logic;
cpr3:
instd_logic;
cpc:
instd_logic;
cpd:
instd_logic;
cppc:
instd_logic;
cpsp:
instd_logic;
int_en:
instd_logic;------------------------------------------------------------
psw_flag:
outstd_logic_vector(5downto0);
addr_bus_16:
outstd_logic_vector(15downto0);
data_bus_16:
inoutstd_logic_vector(15downto0);
result_16:
outstd_logic_vector(15downto0)
);
endcomponent;
componentclock_pulse
Port(
clk:
instd_logic;
rst:
instd_logic;
p:
outstd_logic
);
endcomponent;
signalir_code:
std_logic_vector(15downto0);
signalcppsw:
std_logic;
signalsela3:
std_logic_vector(2downto0);
signalselb3:
std_logic_vector(2downto0);
signalcon_alu6:
std_logic_vector(5downto0);
signalshift_reg2:
std_logic_vector(1downto0);
signalsmbr:
std_logic;
signalsir:
std_logic;
signalemar:
std_logic;
signalcpmbr:
std_logic;
signalcpmar:
std_logic;
signalcpr0:
std_logic;
signalcpr1:
std_logic;
signalcpr2:
std_logic;
signalcpr3:
std_logic;
signalcpc:
std_logic;
signalcpd:
std_logic;
signalcppc:
std_logic;
signalcpsp:
std_logic;
signalpsw_flag:
std_logic_vector(5downto0);
signalwr:
std_logic;
--signalrd:
std_logic;
signalpulse:
std_logic;
signalint_en:
std_logic;
signalresult_16:
std_logic_vector(15downto0);
begin
result<=result_16;
u_model_con:
cpu_control
Portmap(ir_code=>ir_code,
pulse=>pulse,
reset=>reset,
cppsw_p=>cppsw,
sela3=>sela3,
selb3=>selb3,
con_alu6=>con_alu6,
shift_reg2=>shift_reg2,
read_com=>rd_com,
write_com=>wr,
smbr=>smbr,
sir=>sir,
emar=>emar,
cpmbr_p=>cpmbr,
cpmar_p=>cpmar,
cpr0_p=>cpr0,
cpr1_p=>cpr1,
cpr2_p=>cpr2,
cpr3_p=>cpr3,
cpc_p=>cpc,
cpd_p=>cpd,
cppc_p=>cppc,
cpsp_p=>cpsp,
psw_flag=>psw_flag,
intr=>intr,
inta=>inta,
int_en=>int_en,
inta_it3=>inta_it3
);
u_model_access:
dataaccess
portmap(
ir_code=>ir_code,
pulse=>pulse,
reset=>reset,
cppsw=>cppsw,
sela3=>sela3,
selb3=>selb3,
con_alu6=>con_alu6,
shift_reg2=>shift_reg2,
--read_com=>rd,
write_com=>wr,
smbr=>smbr,
sir=>sir,
emar=>emar,
cpmbr=>cpmbr,
cpmar=>cpmar,
cpr0=>cpr0,
cpr1=>cpr1,
cpr2=>cpr2,
cpr3=>cpr3,
cpc=>cpc,
cpd=>cpd,
cppc=>cppc,
cpsp=>cpsp,
psw_flag=>psw_flag,
addr_bus_16=>addr_bus_16,
data_bus_16=>data_bus_16,
result_16=>result_16,
int_en=>int_en
);
u_clock:
clock_pulse
Portmap(
clk=>clk,
rst=>reset,
p=>pulse
);
--rd_com<=rd;
wr_com<=wr;
endmodel_cpu_arch;
configurationmodel_cpu_configofmodel_cpuis
formodel_cpu_arch
endfor;
endmodel_cpu_config;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPU 实验 报告