计组实验报告Word文件下载.docx
- 文档编号:16427777
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:62
- 大小:771.13KB
计组实验报告Word文件下载.docx
《计组实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计组实验报告Word文件下载.docx(62页珍藏版)》请在冰豆网上搜索。
实现了对二进制数据进行定点算术运算、逻辑运算和传送数据操作。
算术运算包括定点加减运算;
逻辑运算主要有逻辑与、逻辑或、逻辑非操作。
具体操作码及其实现的操作见下表:
(3)实验CPU设计及调试。
成功编写了CPU的设计代码;
掌握计算机的工作原理,建立清晰的计算机整体概念;
掌握调试软件的使用方法,成功对CPU进行调试。
CPU的指令集如下表:
基本CPU指令集
操作码
指令
功能
寻址
格式
00000
ADDDR,SR
DR←DR+SR
寄存器
R型
00001
ADCDR,SR
DR←DR+SR+C
00010
SUBDR,SR
DR←DR-SR
00011
SBCDR,SR
DR←DR-SR-C
00100
INCDR
DR←DR+1
I型
00101
DECDR
DR←DR-1
00110
SHLDR,imm
DR←DR*imm
S型
00111
SHRDR,imm
DR←DR/imm
01000
MOVRDR,SR
DR←SR
01001
MOVDDR,DATA
DR←DATA
立即数
J型
01010
LDRRDR,SR
DR←[SR]
寄存器间接
01011
STRRDR,SR
[DR]←SR
01100
JMPADR
PC←ADR
直接
01101
JRZADR
PC←PC+ADRZ=1
相对
01111
JRCADR
PC←PC+ADRC=1
JRSADR
PC←PC+ADRS=1
10000
CLC
C←0
N型
10001
STC
C←1
10010
NOP
空操作
2实验要求
2.1指令格式要求
基本CPU指令格式:
指令格式
类型
操作码(5位)
目的操作数(3位)
源操作数(3位)
OP
DR
SR
J型
ADR
IMM
实验要求中,共有18条指令,所以用5位操作码。
DR和SR通用寄存器要求8个或者16个均可,为了方便起见,实验过程中选择8个寄存器,则DR和SR各占3位。
因为是16位系统,所以位10-6表示操作码,位5-3和位2-0分别为SR和DR,位15-11闲置为0。
2.2指令流程及微信号序列分析
一条指令执行需要3拍时间。
(1)T1:
取指。
在t2的上升沿,将从存储器取出的指令写入指令寄存器IR中。
T1执行的操作如下:
T1:
Mem_Addr<
-pcwe<
-1data_read<
-obIR<
-data_readpc_inc<
-pc+1
18条指令T1完成的操作都是一样的,后面就不再赘述。
(2)T2:
根据指令寄存器IR的内容进行指令译码;
根据指令译码得到的控制信号进行运算和其他操作。
(3)T3:
存储器读、写操作;
在T3的下降沿将运算结果写入目的寄存器,改变C标志和Z标志;
在T3的下降沿,改变PC的值,为取下一条指令做好准备。
2.2.1ADD指令分析
算数逻辑运算指令流程图:
(ADD,ADC,SUB,SBC,INC,DEC,SHL,SHR均是算数逻辑运算指令,后面不再赘述)
T2:
result<
-DR+SRgeneratez_tmpgeneratec_tmp
T3:
pc<
-pc_incDR<
-resultz_out<
-z_tmpc_out<
-c_tmp
T2进行运算DR+SR,改变z_tmp和c_tmp。
T3将运算结果写入目的寄存器;
改变C标志和Z标志;
改变PC的值,为取下一条指令做好准备。
2.2.2ADC指令分析
-DR+SR+c_ingeneratez_tmpgeneratec_tmp
T2进行运算DR+SR+C,改变z_tmp和c_tmp。
2.2.3SUB指令分析
-DR-SRgeneratez_tmpgeneratec_tmp
T2进行运算DR-SR,改变z_tmp和c_tmp。
2.2.4SBC指令分析
-DR-SR-c_ingeneratez_tmpgeneratec_tmp
T2进行运算DR-SR-C,改变z_tmp和c_tmp。
2.2.5INC指令分析
-DR+1generatez_tmpgeneratec_tmp
T2进行运算DR+1,改变z_tmp和c_tmp。
2.2.6DEC指令分析
-DR-1generatez_tmpgeneratec_tmp
T2进行运算DR-1,改变z_tmp和c_tmp。
2.2.7SHL指令分析
-DR*immgeneratez_tmpgeneratec_tmp
T2进行运算DR*imm,改变z_tmp和c_tmp。
2.2.8SHR指令分析
-DR/immgeneratez_tmpgeneratec_tmp
T2进行运算DR/imm,改变z_tmp和c_tmp。
2.2.9MOVR指令分析
访寄存器指令流程图:
(MOVR,MOVD均是访寄存器指令,2条指令的执行过程如上图)
-SR
-result
T2将SR的数值作为结果。
T3将结果写入目的寄存器;
2.2.10MOVD指令分析
-pc_inc
we<
-obDR<
-data_readpc<
-pc+2
T2将DATA地址送入存储器地址总线。
T3时we为1时读存储器;
将DATA值写入DR;
因为本条指令长度为32位,所以pc要加二。
2.2.11LDRR指令分析
T2将SR送入存储器地址总线。
将存储器中的数据写入DR。
访存指令流程图:
2.2.12STRR指令分析
-DR
-0ob<
-SRpc<
T2将DR送入存储器地址总线。
T3时we为0时写存储器;
将SR值写入存储器。
2.2.13JMP指令分析
-obpc<
-data_read
T2将ADR送入存储器地址总线。
将所得数据送入pc。
跳转指令流程图:
2.2.14JRC指令分析
generatec_z_j_flaggeneratesjmp_addr
ifc_z_j_flag=1thenpc<
-sjmp_addrelsepc<
T3如果C为0,则pc<
-ADR;
C为1,则顺序执行。
2.2.15JRZ指令分析
T3如果Z为0,则pc<
Z为1,则顺序执行。
2.2.16JRS指令分析
与上面两条指令类似。
2.2.17CLC指令分析
c_tmp<
-0
-pc_incc_out<
-c_tmp
改变C值为0。
2.2.18STC指令分析
与上面一条指令类似。
3.部件仿真实验
3.1八个通用寄存器设计与仿真
3.1.1设计代码
(1)设计实体reg
libraryieee;
useieee.std_logic_1164.all;
entityregis
port
(
clr:
instd_logic;
D:
instd_logic_vector(15downto0);
clock:
instd_logic;
write:
sel:
Q:
outstd_logic_vector(15downto0)
);
endreg;
architecturebehavofregis
begin
process(clr,clock)
begin
ifclr='
0'
then
Q<
=x"
0000"
;
elsif(clock'
eventandclock='
1'
)then
ifsel='
andwrite='
Q<
=D;
endif;
endif;
endprocess;
endbehav;
(2)设计实体decoder2_to_4
Libraryieee;
entitydecoder_2_to_4is
port(
sel:
instd_logic_vector(1downto0);
sel00:
outstd_logic;
sel01:
sel02:
sel03:
outstd_logic
);
enddecoder_2_to_4;
architecturebehavofdecoder_2_to_4is
sel00<
=(notsel
(1))and(notsel(0));
sel01<
=(notsel
(1))andsel(0);
sel02<
=sel
(1)and(notsel(0));
sel03<
=sel
(1)andsel(0);
(3)设计实体mux4_to_1
entitymux_4_to_1is
port(
input0,
input1,
input2,
input3:
instd_logic_vector(15downto0);
instd_logic_vector(1downto0);
out_put:
outstd_logic_vector(15downto0));
endmux_4_to_1;
architecturebehavofmux_4_to_1is
mux:
process(sel,input0,input1,input2,input3)
caseselis
when"
00"
=>
out_put<
=input0;
01"
=input1;
10"
=input2;
11"
=input3;
endcase;
endprocess;
(4)顶层设计实体register
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
entityregfileis
Port(DR:
SR:
reset:
DRWr:
clk:
d_input:
DR_data:
outstd_logic_vector(15downto0);
SR_data:
outstd_logic_vector(15downto0)
endregfile;
architecturestructofregfileis
--components
--16bitRegisterforregisterfile
componentreg
instd_logic;
endcomponent;
--2to4Decoder
componentdecoder_2_to_4
port(
outstd_logic;
outstd_logic
--4to1linemultiplexer
componentmux_4_to_1
instd_logic_vector(15downto0);
instd_logic_vector(1downto0);
outstd_logic_vector(15downto0));
signalreg00,reg01,reg02,reg03
:
std_logic_vector(15downto0);
signalsel00,sel01,sel02,sel03
std_logic;
Areg00:
regportmap(
clr=>
reset,
D=>
d_input,
clock=>
clk,
write=>
DRWr,
sel=>
sel00,
Q=>
reg00
Areg01:
sel01,
reg01
Areg02:
sel02,
reg02
Areg03:
sel03,
reg03
--decoder
des_decoder:
decoder_2_to_4portmap
(
sel=>
DR,
sel00=>
sel00,
sel01=>
sel01,
sel02=>
sel02,
sel03=>
sel03
mux1:
mux_4_to_1PORTMAP(
Input0=>
reg00,
Input1=>
reg01,
Input2=>
reg02,
Input3=>
reg03,
sel=>
DR,
out_put=>
DR_data
mux2:
input0=>
input1=>
input2=>
input3=>
sel=>
SR,
SR_data
endstruct;
3.1.2RTL连接图
3.1.3仿真过程
(1)数据含义
Clk:
时钟信号
Reset:
复位信号
d_input:
数据输入
DRWr:
允许写入信号
DR:
2-4译码器输入端,第一个4选1多路器选择端
SR:
第二个4选1多路器选择端
DR_data:
目的操作数
SR_data:
源操作数
(2)运算过程分析
前四个周期,数据输出并无规律,此时主要执行的操作是将d_input输入的4个数据0000、0001、0002、0003分别存到R0R1R2R3;
从第五个周期开始往后,数据输出呈现规律,此时,前半周期DR为00选中R0,读出第一个周期时就存入的数据0000,SR为01选中R1,读出第二周期就存入的数据0001。
后半周期,由于clk上升沿,将此时的d_input即0004存入R0,改变了R0中的数据,DR_data就显示0004。
第六周期,前半周期DR为01选中R1,读出第二个周期时就存入的数据0001,SR为02选中R2,读出第二周期就存入的数据0002。
后半周期,由于clk上升沿,将此时的d_input即0005存入R1,改变了R1中的数据,DR_data就显示0005。
以此类推。
3.2算术逻辑单元设计与仿真
3.2.1设计代码
po
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告