当前位置:文档之家› 哈工大CPU设计报告

哈工大CPU设计报告

计算机设计与实践CPU设计报告
指令格式设计:
注:Ri代表3位该寄存器号的二进制表示,X,sign为8位立即数,add为8为地址
一整体框图
二各模块详细说明(数据流关系、接口说明)
1 时钟管理模块
1.1结构框图:
1.2功能描述:时钟模块为一节拍发生器,以输入时钟信号作为触发,四个节拍循环往复,当“rst”为1时节拍复位。

1.3数据流关系:
1.4接口说明:
port(
rst: in std_logic; --复位信号
clk: in std_logic; --输入时钟信号
k: out std_logic_vector(3 downto 0) --节拍输出
);
2 取址模块
2.1
visit_mem_flag
pc_out
ir_out
2.2功能描述:取指模块主要负责取指操作,当复位信号为1时,pc置零;若pc更新标志(pc_in_flag)为1,则更新当前的pc值;在第一个节拍,将当前pc给到访存控制模块,同时送访存请求信号(visit_mem_flag),取得指令;同时将取得的指令送往运算模块、回写模块,pc送往回写模块。

2.3数据流关系:
Port (rst: in std_logic; --复位
k0,k1: in std_logic; --节拍控制
pc_in_flag: in std_logic; --PC回写允许
ir_in : in std_logic_vector(15 downto 0); --IR进入
pc_in : in std_logic_vector(15 downto 0); --PC回写
visit_mem_flag: out std_logic; --访存信号
pc_out : out std_logic_vector(15 downto 0); --PC输出
ir_out : out std_logic_vector(15 downto 0) --IR输出
);
3 运算模块
3.1结构框图:
3.2功能描述:复位信号为1时,alutou、addr、Cy、Z清零;当回写信号为1时,将回写的数据回写入寄存器中;在第二节拍完成指令的译码工作,并根据译码结果置if_reg(是否更新寄存器),if_pc(是否更新PC),m_r(是否读请求),m_w(是否写请求)四个标志位,并对相关的指令置好addr、aluout和ToHX,以及对一些改变运算标志位的指令置好Cy和Z这两个标志位。

3.3数据流关系:
3.4接口说明:
Port (
rst : in std_logic; --复位信号
k0,k1,k2,k3: in std_logic; --节拍控制 rewrite_flag : in std_logic; --寄存器回写允许 rewrite_data : in std_logic_vector(7 downto 0); --寄存器回写数据
ir_in : in std_logic_vector(15 downto 0); --指令IR进入
aluout : out std_logic_vector(7 downto 0); --运算结果输出 addr : out std_logic_vector(15 downto 0); --准备好的地址输出 if_reg : out std_logic; --是否回写寄存器
if_pc : out std_logic; --是否回写pc
m_r : out std_logic; --给存储管理模块读信号
m_w : out std_logic; --给存储管理模块写信号
toHX : out std_logic_vector(15 downto 0);
Cyflag: out std_logic;
Zflag: out std_logic
);
4 存储控制模块
4.1
4.2功能描述:
此模块主要完成从访存控制模块进行不同指令的存数与取数的请求。

4.3数据流关系:
4.4接口说明: Port( rst: in std_logic; --复位信号 m_w_in : in std_logic; --写请求
m_r_in : in std_logic; --读请求
k2 : in std_logic; --节拍控制
aluout_in : in std_logic_vector(7 downto 0); --Aluout 输入 dataFromMem : in std_logic_vector (7 downto 0);
c_w_out: out std_logic;
c_r_out: out std_logic;
dataToMem : out std_logic_vector (7 downto 0); outToHX : out std_logic_vector (7 downto 0) --输出到回写模块 );
5 访存管理模块
5.1结构框图:
ABUS
ABUS
nMREQ
ABUS
ABUS
ABUS
nBHE
ABUS
ABUS
ABUS
5.2功能描述:当取址模块发出取址请求时,根据PC取出指令送给取址模块;根据存储管理模块给的读写请求对存储器进行读写操作。

5.3数据流关系:
5.4接口说明:
port(
k0,k1,k2: in std_logic; --节拍控制 qz_visit_flag: in std_logic; --取址模块取址信号输入 c_r_in : in std_logic;
c_w_in : in std_logic;
pc_in: in std_logic_vector(15 downto 0); --pc输入
addr_in: in std_logic_vector(15 downto 0); --运算模块地址输入
data_in: in std_logic_vector(7 downto 0); --存数的时候用
DBUS: inout std_logic_vector(15 downto 0);
ABUS: out std_logic_vector(15 downto 0);
nMREQ: out std_logic; --片选
nRD: out std_logic; --读信号
nWR: out std_logic; --写信号
nBHE: out std_logic; --高位访问允许
nBLE: out std_logic; --低位访问允许 data_out: out std_logic_vector(7 downto 0); --取得数据输出
ir_out: out std_logic_vector(15 downto 0) --取得指令输出
);
end fangcun;
6 回写模块
6.1结构框图:
6.2功能描述:第四节拍时完成PC或者是Reg的回写,并完成PC+1的过程。

6.4接口说明:
port(
k3: in std_logic;
if_pc_in: in std_logic;
if_reg_in: in std_logic;
from_M: in std_logic_vector(7 downto 0);
pc_in: in std_logic_vector(15 downto 0); --用于处理jz,jc
jmp_in: in std_logic_vector(16 downto 0);
ir_in: in std_logic_vector(15 downto 0);
pc_update: out std_logic; --PC回写标志
reg_update: out std_logic; --Reg回写标志 pcnew: out std_logic_vector(15 downto 0);
Rdata: out std_logic_vector(7 downto 0)
);
end huixie;
三设计、调试、波形、下载过程中遇到的问题及解决方法。

1.下载到板子上时,IR只显示低8位。

在访存模块中未将DBUS的高八位赋值,只将低八位赋值为data_in,将其的高八位并上“00000000”即可。

2.数据总线的数据显示不对。

在读完数据后,未将DBUS赋值为高阻。

在访存模块中,在读取数据总线数据后,随即将其赋值为高阻状态。

3.运算产生Cy=1时,随即加上Cy=1这一结果,本应该在下一运算中加上。

将对于Cy的处理放于另一个Process中处理,专门处理对于Process的赋值情况,避免了上述情况的发生。

4.部分区域出现多重的嵌套if或case语句时,结果不对。

增加相同的判定条件,从而减少嵌套的层数,可以有效避免。

5.出现多值驱动的报错。

一个信号不能在多个Process里头赋值。

6.处理跳转指令时跳转错误。

之前跳转指令的处理放在运算模块中,但是怎么调都不好使,之后将跳转指令的处理放到回写模块中,便好使了。

四波形
总波形1
总波形2
时钟管理模块
取址模块
运算模块
存储管理模块
访存控制模块
回写模块。

相关主题