专题实验资料4实验报告模板.docx
- 文档编号:12107226
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:8
- 大小:64.84KB
专题实验资料4实验报告模板.docx
《专题实验资料4实验报告模板.docx》由会员分享,可在线阅读,更多相关《专题实验资料4实验报告模板.docx(8页珍藏版)》请在冰豆网上搜索。
专题实验资料4实验报告模板
计算机组织与结构专题实验报告
学生姓名王梦蝶
专业/班级计算机26
学号2120505127
所在学院电信学院
指导教师姜欣宁
提交日期2012.11.5
实验名称:
寄存器组的设计与实现
1.实验目的
(1)了解通用寄存器组的用途
(2)掌握通用寄存器组及他的控制结构
(3)掌握层次结构的设计方法
2.实验要求
(1)分析VHDL程序代码,写出寄存器组模块的设计思路(配合用程序流程图、状态图描述);自己设计一个32bit的寄存器组模块(设寄存器个数为64)并且完成相关的读写操作。
(2)分析各种操作结果的仿真图;
(3)画出寄存器组模块的结构图;
(4)记录设计和实现过程;包括:
出现了什么问题(截图表示)及如何解决的。
3.实验原理
通用寄存器组是CPU的重要组成部分。
从存储器取来的数据要放在通用寄存器中;从外部设备取来的数据除DMA方式外,要放在通用寄存器中。
向存储器输出的数据也是从通用寄存器中取出的;向外部设备输出的数据除DMA方式外也是从通用寄存器中取出的。
由于从通用寄存器组中取数据比从存储器或者外部设备取数据速度快得多,因此参加算术运算和逻辑运算的数据一般是从通用寄存器组中取出的,它向算术逻辑单元ALU提供了进行算术运算和逻辑运算所需要的2个操作数,同时又是运算结果的暂存地。
通用寄存器组内寄存器的数目与CPU性能有关,CPU性能越高,通用寄存器组内的寄存器数目越多。
由于算术逻辑运算需要2个操作数,因此通用寄存器组有2个读端口,负责提供进行算术逻辑单元需要的源操作数和目的操作数。
通用寄存器组有1个写端口,负责将运算结果保存到指定的寄存器内。
根据通用寄存器组的功能要求,一个只有4个16位寄存器的通用寄存器组的框图如图所示。
图.4个16位寄存器组成的通用寄存器组在图所示的电路中,
1)Reset:
为低电平时,将4个16位寄存器R0—R3复位为0。
2)寄存器:
它的write和sel有效,为高电平时,在时钟信号clk的上升沿将D端的输入D[15..0]写入寄存器,然后送到寄存器的输出Q[15..0]。
3)4个寄存器的允许写信号write和外部产生的目的寄存器写信号DRWr直接相
连。
4)选择信号sel(每个寄存器):
它决定哪一个寄存器进行写操作。
4个寄存器的选择信号分别和2-4译码器产生的sel00、sel01、sel10和sel11相连。
只有当1个寄存器被选中(sel为高电平)时,才允许对该寄存器进行写操作。
5)2-4译码器:
它的输入sel[1..0]接DR[1..0],2-4译码器对2位的输入信号sel[1..0]进行2-4译码,产生4个输出sel00、sel01、sel10和sel11,分别
送往4个寄存器R0、R1、R2和R3的选择端sel。
6)4选1多路选择器:
*多路选择器1从4个寄存器R0、R1、R2和R3的输出Q[15..0]选择1路送到DR_data[1..0],给算术逻辑单元提供目的操作数;选择信号sel[1..0]接
DR[1..0]。
*多路选择器2从4个寄存器R0、R1、R2和R3的输出Q[15..0]选择1路送到SR_data[1..0],给算术逻辑单元提供源操作数;选择信号sel[1..0]接SR[1..0]。
4.设计思路与源代码
模块设计:
(1)低层设计实体register_16:
完成寄存器复位和读写功能。
(2)低层设计实体mux4_to_1:
完成选择哪一个寄存器的值送寄存器组的输出。
这是一个4选一选择器。
(3)低层设计实体decoder2_to_4:
完成选择写哪一个寄存器。
这是一个2-4译码器。
(4)高层设计实体regfile:
负责将6个低层设计实体的连接,完成寄存器组的全部功能。
代码如下:
设计实体register_16libraryieee;useieee.std_logic_1164.all;entityregiister_16isport
(reset:
instd_logic;
d_input:
instd_logic_vector(15downto0);clk:
instd_logic;write:
instd_logic;sel:
instd_logic;q_output:
outstd_logic_vector(15downto0)
);
endregister_16;architectureaofregister_16isbegin
process(reset,clk)beginifreset='0'then
q_output<=x"0000";--复位
elsif(clk'eventandclk='1')thenifsel='1'andwrite='1'thenq_output<=d_input;
endif;
endif;
endprocess;
enda;
设计实体decoder2_to_4libraryieee;useieee.std_logic_1164.all;entitydecoder2_to_4isport(sel:
instd_logic_vector(1downto0);sel00:
outstd_logic;sel01:
outstd_logic;sel02:
outstd_logic;sel03:
outstd_logic);
enddecoder2_to_4;architecturebehavioralofdecoder2_to_4isbeginsel00<=(notsel
(1))and(notsel(0));sel01<=(notsel
(1))andsel(0);sel02<=sel
(1)and(notsel(0));sel03<=sel
(1)andsel(0);
endbehavioral;
设计实体mux4_to_1libraryieee;useieee_std_logic_1164.all;entitymux4_to_1isport(input0,input1,input2,input3
:
instd_logic_vector(15downto0);sel:
instd_logic_vector(1downto0);out_put:
outstd_logic_vector(15downto0));
endmux4_to_1;architecturebehavioralofmux4_to_1isbeginmux:
process(sel,input0,input1,input2,input3)begincaseselis
when"00"
=>
out_put<=input0;
when"01"
=>
out_put<=input1;
when"10"
=>
iut_put<=input2;
when"11"
=>
out_put<=input3;
endcase;
endprocess;
endbehavioral;
顶层设计实体regfilelibraryieee;useieee。
std_logic_1164.all;entityregfileisport(wr_port:
instd_logic_vector(1downto0);rd_port:
instd_logic_vector(1downto0);reset:
instd_logic;wen:
instd_logic;clk:
instd_logic;
data:
instd_logic_vector(15downto0);data_out:
outstd_logic_vector(15downto0)
);endregfile;architecturestructofregfileis
componentregister_16--16bit寄存器port(reset,clk,write,sel:
instd_logic;d_input:
instd_logic_vector(15downto0);q_output:
outstd_logic_vector(15downto0));
endcomponent;
componentdecoder2_to_4--2—4译码器port(sel:
instd_logic_vector(1downto0);sel00,sel01,sel02,sel03:
outstd_logic);
endcomponent;
componentmux4_to_1--4选1多路开关port(input0,input1,input2,input3
:
instd_logic_vector(15downto0);sel:
instd_logic_vector(1downto0);out_put:
outstd_logic_vector(15downto0));
endcomponent;signalreg00,reg01,reg02,reg03:
std_logic_vector(15downto0);signalsel00,sel01,sel02,sel03:
std_logic;
begin
Areg00:
register_16portmap(--16位寄存器R0
reset=>reset,
--顶层设计实体的外部输入信号reset
d_input=>data,
--顶层设计实体的外部输入信号data
clk=>clk,
--顶层设计实体的外部输入信号clk
write=>wen,sel=>sel00,
q_output=>reg00
);
--顶层设计实体的外部输入信号wen
Areg01:
register_16portmap(
--16位寄存器R1
reset=>reset,
--顶层设计实体的外部输入信号reset
d_input=>data,
--顶层设计实体的外部输入信号data
clk=>clk,
--顶层设计实体的外部输入信号clk
write=>wen,sel=>sel01,
q_output=>reg01
);
--顶层设计实体的外部输入信号wen
Areg02:
reggister_16portmap(
--16位寄存器R2
reset=>reset,
--顶层设计实体的外部输入信号reset
d_input=>data,
--顶层设计实体的外部输入信号data
clk=>clk,
--顶层设计实体的外部输入信号clk
write=>wen,sel=>sel02,
q_output=>reg02
);
--顶层设计实体的外部输入信号wen
Areg03:
reggister_16portmap(
--16位寄存器R3
reset=>reset,
--顶层设计实体的外部输入信号reset
d_input=>data,
--顶层设计实体的外部输入信号data
clk=>clk,
--顶层设计实体的外部输入信号clk
write=>wen,sel=>sel03,q_output=>reg03
);
--顶层设计实体的外部输入信号wren
decoder:
decoder2_to_4portmap(
--2—4译码器
sel=>wr_port,sel00=>sel00,sel01=>sel01,sel02=>sel02,sel03=>sel03
);
--顶层设计实体的外部输入信号rd_port
mux:
mux_4_to_1portmap(--4选1多路器
input0=>reg00,input1=>reg01,input2=>reg02,input3=>reg03,
sel=>
rd_port,
--顶层设计实体的外部输入信号rd_port
out_put=>
data_out
--顶层设计实体的输出信号q_out
);
endstruct;
5.实验步骤
(1)实验台设置成FPGA-CPU独立调试模式
REGSEL=0、CLKSEL=1、FDSEL=0。
使用实验台上的单脉冲,即STEP_CLK短路子短接,短路子RUN_CLK断开。
(2)将设计在QuartusⅡ下输入,编译后下载到TEC-CA上的FPGA中。
(3)将下列数据存入寄存器
将数据写入寄存器组,并读写检查。
6.实验现象分析
实验仿真结果截图如下:
7.实验小结
(1)当复位信号reset=0时,将通用寄存器组中的4个寄存器清零。
从波形图上可以看出A,B的输出值都为0;
(2)当DRW=1时,在时钟cpR的上升沿将数据总线上的数据写入sR指定的寄存器。
当DRW=0时,sR指定的寄存器的输出送往IDC指定的输出端口;
(3)由IDA,IDB选择从A或B口输出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专题 实验 资料 报告 模板