计算机系统结构实验报告文档格式.docx
- 文档编号:20774550
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:15
- 大小:468.59KB
计算机系统结构实验报告文档格式.docx
《计算机系统结构实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《计算机系统结构实验报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
output(description)
prog_cnt-pipepc
npc
pc
clk(时钟信号)
clrn(清零信号)
if_stage-pipeif
pcsource(选择下条指令)
pc4
bpc(转移指令)
ins
rpc
jpc
inst_reg-pipeir
dpc4
inst
clk
clrn
id_stage-pipeid
bpc
inst(二进制的指令序列)
wdi
a
wrn
b
wwreg
imm
rn
aluc
rsrtequ
pcsource
wreg
m2reg
weme
aluimm
shift
jal
de_reg-pipedereg
da
ea
db
eb
dimm
eimm
epc4
drn
ern
daluc
ealuc
dwreg
ewreg
dm2reg
em2reg
dwmem
ewmem
daluimm
ealuimm
dshift
eshift
djal
ejal
exe_stage-pipeexe
ealu
z
ern0
em_reg-pipeemreg
malu(malu<
=ealu)
mb(mb<
=eb)
mrn(mrn<
=ern)
mwreg(mwreg<
=ewreg)
mm2reg(mm2reg<
=em2reg)
mwmen(mwmem<
=ewmem)
mem_stage–IP_RAM
datain
dataout
addr
we
mw_reg-pipemwreg
malu
walu(walu<
=malu)
mmo
wmo(wmo<
=mmo)
mrn
wrn(wrn<
=mrn)
mwreg
wwreg(wwreg<
=mwreg)
mm2reg
wm2reg(wm2reg<
=mm2reg)
wb_stage–mux2x32
a0
y(y=s?
a1:
a0)
a1
s
流水线模块图
六、实验器材(设备、元器件)
ISEProjectNavigator
七、实验步骤:
1)根据课堂所学的五级流水线的结构,分析并理解代码含义;
2)根据代码中定义的各个模块的接口,补全流水线模块图相应接口的名称;
3)根据各个信号的输入输出,补全流水线模块图的连线。
八、实验数据及结果分析:
指令依次执行。
九、实验结论、心得体会和改进建议:
今日之日多烦忧
实验二
汇编器的实现
用Java,C或C++任一编程语言实现汇编器,输入流水线的指令序列,输出2进制编码。
该指令编码可复制到指令存储器中执行。
1.写出主要函数模块;
2.提供源代码和可执行文件;
(按实验内容分析实验原理并填写)
DEVCPP
欲穷千里目
(按实验步骤顺序填写代码、数据或截图)
实验三
解决数据冒险
在给出的流水线代码基础上,增加内部前推数据通路、暂停流水线数据通路和关闭写使能信号的数据通路以解决普通的数据冒险和load数据冒险。
1.画出修改后的流水线图;
2.写出增加的多路选择器的选择信号逻辑函数;
3.流水线仿真结果,对仿真结果作必要说明;
可以在ID级完成检测数据相关并把检测结果(多路器的选择信号ADEPEN两位和BDEPEN两位)作为控制信号打入流水线寄存器,在进入EXE级后立即开始ALU的操作。
1)检测数据相关
在流水线ID级观察指令的寄存器字段,检测是否有“先读后写”冲突。
可以写出一条指令进入流水线ID级,检测与前面指令很可能有数据相关的基本条件。
由于指令格式中源寄存器号rd与立即数部分重叠,而立即数不会出现相关的,因此,指令操作码需要参与检测以区分是寄存器操作数还是立即数。
WREG信号也应参与检测以区分是写寄存器rd还是store指令中的rd,如果是store指令,也不会产生相关。
DEPEN=A_DEPEN+B_DEPEN
A_DEPEN=EXE_A_DEPEN+MEM_A_DEPEN
B_DEPEN=EXE_B_DEPEN+MEM_B_DEPEN
EXE_A_DEPEN=(ID_rs==EXE_rd)(EWREG==1)(ID_rsIsReg)
MEM_A_DEPEN=(ID_rs==MEM_rd)(MWREG==1)(ID_rsIsReg)
EXE_B_DEPEN=(ID_rt==EXE_rd)(EWREG==1)(ID_rtIsReg)
+(ID_rd==EXE_rd)(EWREG==1)
MEM_B_DEPEN=(ID_rt==MEM_rd)(MWREG==1)(ID_rtIsReg)
+(1D_rd==MEM_rd)(MWREG==1)
ID_rsIsReg=and+andi+or+ori+add+addi+sub+subi+load+store
ID_rtIsReg=and+or+add+sub
2)数据前推
在EXE级中,利用在ID级产生的信号A_DEPEN和B_DEPEN选择ALU输入端的操作数。
将流水线寄存器中计算完成的数据送到ALU输入端。
多路选择器
1
2
3
操作数来源
指令(无相关)
立即数
de_reg
em_reg
3)load相关的暂停
实现load流水线暂停的控制信号LOADDEPEN,这个信号是在ID级产生。
本实验指令集中,store取的是rs中的数据,不会与load相关。
LOADDEPEN=(ID_rs==EXE_rd)(em2reg==1)(ID_rsIsReg)+(ID_rt==EXE_rd)(em2reg==1)(ID_rtIsReg)
增加了检测数据相关和load相关的流水线
在EXE级,根据ADEPEND和BDEPEND的信号,选择相应操作数:
modulepipeexe(ealuc,ADEPEND,BDEPEND,ea,eb,eimm,walu,malu,ern0,epc4,ejal,ern,ealu,z
);
input[31:
0]ea,eb,epc4,eimm,malu,walu;
input[1:
0]BDEPEND,ADEPEND;
input[4:
0]ern0;
0]ealuc;
inputejal;
output[31:
0]ealu;
output[4:
0]ern;
wire[31:
0]alua,alub,ealu0,epc8,sa;
outputz;
assignsa={eimm[4:
0],eimm[31:
5]};
//移位位数的生成
cla32ret_addr(epc4,32'
h4,1'
b0,epc8);
//将PC+4再加4变成PC+8,供jal用
mux4x32alu_ina(ea,sa,malu,walu,ADEPEND,alua);
//选择ALUa端的数据来源
mux4x32alu_inb(eb,eimm,malu,walu,BDEPEND,alub);
mux2x32save_pc8(ealu0,epc8,ejal,ealu);
//选择最后ALU结果的来源,ejal为0时是ALU内部算出的结果,为1时是PC+8
assignern=ern0|{5{ejal}};
//当jal指令执行时,把返回地址写入31号寄存器
alual_unit(alua,alub,ealuc,ealu0,z);
//ALU
endmodule
LOADDEPEN有效时,封锁相关信号:
modulepipepc(npc,LOADDEPEN,clk,clrn,pc
0]npc;
inputclk,clrn,LOADDEPEN;
0]pc;
dff32program_counter(npc,LOADDEPEN,clk,clrn,pc);
//利用32位的D触发器实现PC
modulepipeir(pc4,ins,LOADDEPEN,clk,clrn,dpc4,inst
0]pc4,ins;
0]dpc4,inst;
dff32pc_plus4(pc4,LOADDEPEN,clk,clrn,dpc4);
dff32instruction(ins,LOADDEPEN,clk,clrn,inst);
modulecla32(a,b,ci,s,co
0]a,b;
inputci;
0]s;
outputco;
wireg_out,p_out;
cla_32cla(a,b,ci,g_out,p_out,s);
assignco=g_out|p_out&
ci;
实验四
解决控制冒险
在给出的流水线代码基础上,增加ID级关闭写使能信号,以解决不正确分支指令的影响。
只要将branch的译码信号保留在流水线寄存器中,当紧接branch后的指令进入ID时,用这个译码信号封锁当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这样这条指令的执行就对程序的逻辑没有影响。
将branch的译码信号保留在流水线寄存器中,当紧接branch后的指令进入ID时,用这个译码信号封锁当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这样这条指令的执行就对程序的逻辑没有影响。
不改变处理器指令执行的效果,即不改变处理机的状态、寄存器堆和存储器的内容。
modulepipeemreg(ewreg,em2reg,ewmem,ealu,eb,ern,ez,B_WZ,clk,clrn,
mwreg,mm2reg,mwmem,malu,mb,mrn,mz
0]ealu,eb;
inputewreg,em2reg,ewmem,B_WZ,ez;
inputclk,clrn;
0]malu,mb;
0]mrn;
outputmwreg,mm2reg,mwmem,mz;
reg[31:
reg[4:
regmwreg,mm2reg,mwmem,mz;
always@(negedgeclrnorposedgeclk)
if(clrn==0)
begin
mwreg<
=0;
mm2reg<
mwmem<
malu<
mb<
mrn<
mz<
end
else
if(B_WZ==0)
=ez;
=ewreg;
=em2reg;
=ewmem;
=ealu;
=eb;
=ern;
modulepipedereg(dwreg,dm2reg,dwmem,daluc,D_BDEPEND,da,db,dimm,drn,
D_ADEPEND,djal,dpc4,D_WZ,D_BTAKEN,clk,clrn,
ewreg,em2reg,ewmem,ealuc,E_BDEPEND,ea,eb,eimm,
ern,E_ADEPEND,ejal,epc4,E_WZ,DE_BTAKEN
0]da,db,dimm,dpc4;
0]drn;
0]daluc;
0]D_BDEPEND,D_ADEPEND;
inputdwreg,dm2reg,dwmem,djal,D_WZ,D_BTAKEN;
output[1:
0]E_BDEPEND,E_ADEPEND;
0]ea,eb,eimm,epc4;
outputewreg,em2reg,ewmem,ejal,E_WZ,DE_BTAKEN;
reg[1:
regewreg,em2reg,ewmem,ejal,E_WZ,DE_BTAKEN;
ewreg<
em2reg<
ewmem<
ealuc<
E_BDEPEND<
ea<
eb<
eimm<
ern<
E_ADEPEND<
ejal<
epc4<
E_WZ<
DE_BTAKEN<
=dwreg;
=dm2reg;
=dwmem;
=daluc;
=D_BDEPEND;
=da;
=db;
=dimm;
=drn;
=D_ADEPEND;
=djal;
=dpc4;
=D_WZ;
=D_BTAKEN;
modulepipemwreg(mwreg,mm2reg,mmo,malu,mrn,clk,clrn,
wwreg,wm2reg,wmo,walu,wrn,B_WMEM
0]malu,mmo;
inputmwreg,mm2reg,B_WMEM;
0]walu,wmo;
0]wrn;
outputwwreg,wm2reg;
regwwreg,wm2reg;
wwreg<
wm2reg<
wmo<
walu<
wrn<
wwreg<
=mwreg;
wm2reg<
=mm2reg;
=mmo;
walu<
=malu;
=mrn;
报告评分:
指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机系统 结构 实验 报告