CPU设计实验报告Word文档下载推荐.docx
- 文档编号:18730521
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:11
- 大小:22.65KB
CPU设计实验报告Word文档下载推荐.docx
《CPU设计实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《CPU设计实验报告Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
对加法器按位取反,再加一。
关键代码见附录1
c)32bit右移32bit左移32bit算术右移
将移位操作拆分为16位移位、8位移位、4位移位、2位移位、1位移位等几个子运算的组合,然后级联得到最后的运算结果。
d)32bit逻辑比较单元
采用行为级语句直实现逻辑比较功能。
e)alu顶层控制模块
用多路选择器实现对输出结果的控制,采用行为级语句实现设计。
附加说明:
对于无符号运算的结果,由于z,v,n已经将符号的作用考虑进去,因此,对于需要实现的六个指令,仅有a<b需要特殊处理,而其他指令对于无符号数和有符号数的结果一致。
因此,针对a<b指令,添加针对无符号数的专用比较电路,并使用与超前进位加法器类似的方式进行并行加速操作。
二、单周期mips处理器设计
流程框图:
篇二:
cpu设计实验报告
cpu设计实验报告
姓名:
学号:
邮箱:
一、实验目的:
1、掌握硬件描述语言vhdl和eda工具quartusii;
利用vhdl设计16位串行cpu,实现算术和逻辑运算指令、转移指令、访存指令、堆栈指令和控制指令;
2、掌握cpu的调试和测试方法。
二、实验内容:
1、运用硬件描述语言vhdl实现寄存器堆和算数逻辑单元设计、指令集和指令格式、时序设计和整体结构设计、指令译码器的设计、访存单元的设计、调试单元的设计;
2、上机调试。
三、实验步骤:
1、寄存器堆的设计
寄存器堆由16个16位寄存器组成。
其中reset是异步清0端,reset=0时将所有寄存器清0。
dr_sel和sr_sel是目标寄存器和源寄存器编号,dr_out和sr_out输出目标寄存器和源寄存器的内容。
reg_sel指定一个寄存器编号,将该寄存器内容送给reg_out,这两个端口用于调试时观察每个寄存器的值。
reg_en是写允许端。
reg_en=“01”时,在clk的上升沿将from_alu写入dr_sel指定的寄存器;
reg_en=“10”时,在clk的上升沿将from_mem写入dr_sel指定的寄存器。
reg_en取其他值时不改变寄存器堆的值。
设计方法:
subtypewordisstd_logic_vector(15downto0);
typeregisterarrayisarray(0to15)ofword;
signalreg_bank:
registerarray
则reg_bank就是我们所需要的寄存器堆。
写寄存器堆的方法:
reg_bank(conv_integer(dr_sel))&
lt;
=from_alu;
读寄存器堆的方法:
dr_out&
=reg_bank(conv_integer(dr_sel));
其中,conv_integer是std_logic_unsinged程序包提供的函数,将标准逻辑矢量转换成整数,作为reg_bank的下标。
2、算数逻辑单元设计
alu可以实现16种运算。
alu_func是运算功能选择,alu_a和alu_b是两个操作数,c_in是进位标志输入,用于实现adc和sbb。
alu_o是运算结果,c、s、z、o分别是进位标志,符号标志,零标志和溢出标志。
alu功能如下图所示:
7条算术运算指令可以调用quartus提供的模块lpm_add_sub实现。
在库使用说明中增加:
librarylpm;
generic(lpm_width:
natural;
lpm_direction:
string;
lpm_type:
lpm_hint:
string);
port(dataa:
instd_logic_vector(lpm_width-1downto0);
datab:
cin:
instd_logic;
result:
outstd_logic_vector(lpm_width-1downto0);
cout:
outstd_logic;
overflow:
outstd_logic);
并定义几个信号:
signaladdsub_cin:
std_logic;
signaladdsub_c:
signaladdsub_o:
signaladdsub_a:
std_logic_vector(15downto0);
signaladdsub_b:
signaladdsub_r:
在构造体中,用genericmap和portmap语句说明lpm_add_sub的连接方式:
alu_addsub:
lpm_add_sub
genericmap(lpm_width=&
gt;
16,
lpm_direction=&
add,
lpm_type=&
lpm_add_sub,
lpm_hint=&
one_input_is_constant=no,cin_used=yes)
portmap(dataa=&
addsub_a,
datab=&
addsub_b,
cin=&
addsub_cin,
result=&
addsub_r,
cout=&
addsub_c,
overflow=&
addsub_o);
实现7条算术运算指令时,addsub_a、addsub_b、addsub_cin的取值如下:
按照上述取值方法,addsub_r和addsub_o就是这7条指令的运算结果和溢出标志。
对于add和adc指令,addsub_c就是进位标志,对于sub、cmp和sbb,应将addsub_c取反后作为进位标志,而inc和dec不影响进位标志,应将c_in作为进位标志。
三条移位指令的实现方法:
即:
将被移出的位作为进位标志,将移位前后最高位的异或作为溢出标志。
3、标志寄存器的设计
标志寄存器用来保存c,s,z,o四个标志位。
flag_en=“00”时不改变四个标志位;
flag_en=“01”时同时保存四个标志位;
flag_en=“10”时将进位标志清零,用于实现clc指令;
flag_en=“11”时将进位标志置1,用于实现stc指令。
4、执行单元的设计
将寄存器堆,alu和标志寄存器连接在一起,构成执行单元。
编译后,为执行单元生成一个图形符号。
5、指令译码单元的设计
指令集共35条指令,其中单字长(16位)指令33条,双字长(32位)指令2条。
双字长指令:
指令编码采用定长操作码,所有指令的操作码都是8位。
为了将汇编指令转换为二进制形式的机器指令,需要编写一个规则文件。
规则文件是一个纯文本文件,以行为单位,每行指定一条汇编指令的机器码。
注释:
以/开头的行是注释。
常量定义:
r0is0定义了一个常量r0,其值为0
指令格式定义:
包括三个字段,第一字段是指令名,第二字段是操作数声明,第三字
段说明如何生成该指令的机器码。
指令译码单元共产生9个控制信号。
dr_sel&
=ir(7downto4);
sr_sel&
=ir(3downto0);
alu_func&
=ir(11downto8);
mem_wr:
为1表示写存储器,为0表示读存储器。
signalop:
std_logic_vector(7downto0);
op&
=ir(15downto8);
mem_wr&
=‘1’whens=‘0’andop=“10010000”else--str指令篇三:
一、实验内容
设计一个八位定点二进制计算机,具有4个通用寄存器:
r0~r3,能执行11条指令,主存容量为256b的cpu模型机。
二、实验过程
1.指令集设计
ldrri,d
格式
功能:
strri,d
格式
addri,rj
subri,rj
andri,rj
orri,rj
743210
ri←m(d)743210
m(d)←(ri)74
3210ri←(ri)+(rj)74
3210ri←(ri)-(rj)7...
3210ri←(ri)∧(rj)7...
3210ri←(ri)∨(rj)
mulri,rj
格式743210
ri←(ri)×
(rj)
转移指令
条件码
00无条件转移pc←d
01有进位转移pc←d
10结果为0转移pc←d
11
inri,mj
其中mj为设备地址,可以指定四种外围设备,当mj=01时,选中实验箱的二进制代码开关。
功能:
ri←(mj)
outri,mj
格式743210
当mj=10时,选中实验箱的显示灯。
(mj)←ri
halt(停机指令)
用于实现停机。
结果为负转移pc←d其中,ri,rj,均用00表示r1,01表示r2,10表示r3,11表示r4。
2.状态图
00000
3.各模块设计
数据通路和控制器模块exp_cpu_vhd:
clr为清零端,t1~t4为时钟脉冲,cout是运算所得结果的进位,zero
判断所得结果是否为0,为0的话zero为1,min判断所得结果是否为负,为负的话min为1,aludata[7..0]是运算所得的结果,sw_in[7..0]是输入端;
mpcout[4..0]是下址,dr1、dr2是寄存器的值,arout[7..0]地址寄存器的值,bus_data[7..0]是总线上的数据。
语言如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityexp_cpu_vhdis
port(clr,t1,t2,t3,t4:
instd_logic;
cout,zero,min:
aludata,sw_in:
instd_logic_vector(7downto0);
mpcout:
outstd_logic_vector(4downto0);
dr1,dr2,arout,bus_data:
outstd_logic_vector(7downto0));
endexp_cpu_vhd;
architecturertlofexp_cpu_vhdis
typeramisarray(0to23)ofstd_logic_vector(7downto0);
signal--24*8ram
ram8:
ram:
=(x00,x07,x04,x0d,x21,x74,x08,x0c,x08,x0e,x32,x78,x0f,xf7,x03,x0c,x14,x23,x7c,x15,x88,x81,x92,others=&
x00);
--initializeramsignalpc,ar,r1,r2,r3,r4,bus_reg,bus_reg_t2,bus_reg_t3:
std_logic_vector(7downto0);
signalri,mi:
std_logic_vector(1downto0);
signalmpc,mpc_t2,mpc_t3,mpc_t4:
std_logic_vector(4downto0);
signalir:
std_logic_vector(3downto0);
begin
mpcout&
=mpc;
arout&
=ar;
bus_data&
=bus_reg;
ct1:
process(t1,clr)
beginifclr=0thenmpc&
=(others=&
0);
elsift1=1andt1eventthenmpc&
=mpc_t4;
endif;
endprocess;
ct2:
process(t2,mpc,sw_in,ar)
begin
ift2=1andt2eventthencasempciswhen00000=&
mpc_t2&
=00001;
bus_reg_t2&
=sw_in;
when00001=&
=00010;
=pc;
when00010=&
=10000;
=ram8(conv_integer(ar));
when10000=&
--ldampc_t2&
=00011;
when00011=&
=00100;
when00100=&
when10001=&
--stampc_t2&
=00101;
when00101=&
=00110;
when00110=&
ifri=00thenbus_reg_t2&
=r1;
ram8(conv_integer(ar))&
elsifri=01thenbus_reg_t2&
=r2;
elsifri=10thenbus_reg_t2&
=r3;
elsifri=11thenbus_reg_t2&
=r4;
when11001=&
--outmpc_t2&
ifmi=10thenifri=00thenbus_reg_t2&
elsifri=01thenbus_reg_t2&
when11000=&
--inmpc_t2&
篇四:
计算机组成原理cpu设计实验报告
计算机组成原理专题实验报告
——cpu设计
目录
1实验方法......................................................................................................................42总体说明......................................................................................................................5
2.1指令系统:
..............................................................................................5
2.1.1指令格式分类(按指令字长和操作数不同):
......................................................52.1.2具体指令汇总表:
..............................................................................................62.1.3相关指令流程图:
..............................................................................................72.1.4指令数据通路的构建:
.......................................................................................82.1.5指令的分组及节拍:
..........................................................................................112.1.6指令执行状态图:
(见下页)................................................................................122.1.7具体微指令:
...................................................................................................12
2.2系统整体介绍.......................................................................................15
2.2.1系统基本模块划分............................................................................................152.2.2总体结构图:
(见下页).......................................................................................16
3cpu的控制逻辑与具体数据通道设计...........................................................................17
3.1取指令逻辑的设计...............................................................................................183.1.1指令地址的保存................................................................................................183.1.2指令存储器.......................................................................................................193.1.3下一条指令地址的计算.....................................................................................193.2指令译码逻辑的设计............................................................................................203.3指令执行逻辑的设计........................
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPU 设计 实验 报告