杭电计组实验4-寄存器堆设计实验.doc

上传人:b****3 文档编号:2493955 上传时间:2022-10-30 格式:DOC 页数:6 大小:118.50KB
下载 相关 举报
杭电计组实验4-寄存器堆设计实验.doc_第1页
第1页 / 共6页
杭电计组实验4-寄存器堆设计实验.doc_第2页
第2页 / 共6页
杭电计组实验4-寄存器堆设计实验.doc_第3页
第3页 / 共6页
杭电计组实验4-寄存器堆设计实验.doc_第4页
第4页 / 共6页
杭电计组实验4-寄存器堆设计实验.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

杭电计组实验4-寄存器堆设计实验.doc

《杭电计组实验4-寄存器堆设计实验.doc》由会员分享,可在线阅读,更多相关《杭电计组实验4-寄存器堆设计实验.doc(6页珍藏版)》请在冰豆网上搜索。

杭电计组实验4-寄存器堆设计实验.doc

杭州电子科技大学计算机学院

实验报告

实验项目:

课程名称:

计算机组成原理与系统结构设计

姓名:

 学号:

同组姓名:

  学号:

  

实验位置(机号):

实验日期:

      指导教师:

实验内容(算法、程序、步骤和方法)

一、实验目的

(1)学会使用VerilogHDL进行时序电路的设计方法。

(2)掌握灵活应用VerilogHDL进行各种描述与建模的技巧和方法。

(3)学习寄存器堆的数据传送与读/写工作原理,掌握寄存器堆得设计方法。

二、实验仪器

ISE工具软件

三、步骤、方法

(1)启动XilinxISE软件,选择File->NewProject,输入工程名shiyan2,默认选择后,点击Next按钮,确认工程信息后点击Finish按钮,创建一个完整的工程。

(2)在工程管理区的任意位置右击,选择NewSource命令。

弹出NewSourceWizard对话框,选择VerilogModule,并输入Verilog文件名,点击Next按钮进入下一步,点击Finish完成创建。

(3)编辑程序源代码,然后编译,综合;选择Synthesize--XST项中的CheckSyntax右击选择Run命令,并查看RTL视图;如果编译出错,则需要修改程序代码,直至正确。

(4)在工程管理区将View类型设置成Simulation,在任意位置右击,选择NewSource命令,选择VerilogTestFixture选项。

点击Next,点击Finish,完成。

编写激励代码,观察仿真波形,如果验证逻辑有误,则修改代码,重新编译,仿真,直至正确。

(5)由于实验四并未链接实验板,所以后面的链接实验板的步骤此处没有。

操作过程及结果

一,操作过程

实验过程和描述:

moduleshiyan4(R_Addr_A,R_Addr_B,Clk,W_Addr,W_Data,R_Data_A,R_Data_B,Reset,Write_reg);

inputClk,Reset;

inputwireWrite_reg;

inputwire[4:

0]R_Addr_A;

inputwire[4:

0]W_Addr;

inputwire[4:

0]R_Addr_B;

inputwire[32:

0]W_Data;

reg[31:

0]REG_Files[31:

0];

outputwire[0:

31]R_Data_A;

outputwire[0:

31]R_Data_B;

integeri=0;

always@(posedgeClkorposedgeReset)

begin

if(Reset)

begin

for(i=0;i<=31;i=i+1)

REG_Files[i]<=32'b0;

end

else

begin

if(Write_reg)REG_Files[W_Addr]<=W_Data;

end

end

assignR_Data_A=REG_Files[R_Addr_A];

assignR_Data_B=REG_Files[R_Addr_B];

endmodule

仿真代码

moduleshiyan4_test;

//Inputs

reg[4:

0]R_Addr_A;

reg[4:

0]R_Addr_B;

regClk;

reg[4:

0]W_Addr;

reg[32:

0]W_Data;

regReset;

regWrite_reg;

//Outputs

wire[0:

31]R_Data_A;

wire[0:

31]R_Data_B;

//InstantiatetheUnitUnderTest(UUT)

shiyan4uut(

.R_Addr_A(R_Addr_A),

.R_Addr_B(R_Addr_B),

.Clk(Clk),

.W_Addr(W_Addr),

.W_Data(W_Data),

.R_Data_A(R_Data_A),

.R_Data_B(R_Data_B),

.Reset(Reset),

.Write_reg(Write_reg)

);

initialbegin

//InitializeInputs

R_Addr_A=0;

R_Addr_B=0;

Clk=0;

W_Addr=0;

W_Data=0;

Reset=0;

Write_reg=0;

//Wait100nsforglobalresettofinish

#100;

//Addstimulushere

#100;

Clk=1;

Reset=0;

R_Addr_A=0;

R_Addr_B=0;

W_Addr=5'b00001;

Write_reg=1;

W_Data=32'h1111_1111;

#100;

Clk=0;

Reset=0;

R_Addr_A=0;

R_Addr_B=0;

W_Addr=5'b00001;

Write_reg=1;

W_Data=32'h1111_1111;

#100;

Clk=1;

Reset=0;

R_Addr_A=0;

R_Addr_B=0;

W_Addr=5'b00010;

Write_reg=1;

W_Data=32'h2222_2222;

#100;

Clk=0;

Reset=0;

R_Addr_A=5'b00001;

R_Addr_B=5'b00010;

W_Addr=0;

Write_reg=0;

W_Data=0;

#100;

Clk=0;

Reset=1;

R_Addr_A=5'b00001;

R_Addr_B=5'b00010;

W_Addr=0;

Write_reg=0;

W_Data=0;

end

endmodule

RTL图

二、结果

思考题:

(1)根据8个寄存器执行读、写操作,实验结果符合预期

(2)always@(posedgeClkorposedgeReset)

begin

if(Reset)

begin

for(i=0;i<=31;i=i+1)

REG_Files[i]<=32'b0;

end

else

begin

if(Write_reg)begin

if(W_Addr>3’b000)REG_Files[W_Addr]<=W_Data;end

end

end

assignR_Data_A=REG_Files[R_Addr_A];

assignR_Data_B=REG_Files[R_Addr_B];

(3)读操作没有使能或者时钟信号控制,是组合逻辑电路,只要给出寄存器地址,即可独处寄存器中的数据。

所有写入操作的输入信号(包括写寄存器地址W_Addr、写入数据W_Data、写控制信号Write_Reg)必须在时钟边沿来临时已经有效。

实验体会

在这个寄存器堆设计实验中,这个实验理解起来稍微有点困难,起初已经写好了代码,进行了仿真,出现了波形。

但是后来老师要求读操作和写操作输出不同的数据,在不同的单元。

于是我就把仿真代码改了一下,将W_Data,W_Addr等数据做了修改。

这个实验也就成功了。

通过做这个寄存器堆设计实验,我对寄存器堆得读操作和写操作有了一个认识和理解。

也对ISE这个软件的运用更加熟练了,对寄存器堆这个概念也有了更深层次的理解,增长了我的知识,强化了我的实践能力以及思考能力。

这次实验收获很大。

指导教师评议

实验步骤写的时候,最好自己按照所做步骤写,二人不要一模一样。

成绩:

  指导教师签名:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1