您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 杭电计组实验4-寄存器堆设计实验
杭州电子科技大学计算机学院实验报告实验项目:课程名称:计算机组成原理与系统结构设计姓名:学号:同组姓名:学号:实验位置(机号):实验日期:指导教师:实验内容(算法、程序、步骤和方法)一、实验目的(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)beginif(Reset)beginfor(i=0;i=31;i=i+1)REG_Files[i]=32'b0;endelsebeginif(Write_reg)REG_Files[W_Addr]=W_Data;endendassignR_Data_A=REG_Files[R_Addr_A];assignR_Data_B=REG_Files[R_Addr_B];endmodule仿真代码moduleshiyan4_test;//Inputsreg[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;//Outputswire[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//InitializeInputsR_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;endendmoduleRTL图二、结果思考题:(1)根据8个寄存器执行读、写操作,实验结果符合预期(2)always@(posedgeClkorposedgeReset)beginif(Reset)beginfor(i=0;i=31;i=i+1)REG_Files[i]=32'b0;endelsebeginif(Write_reg)beginif(W_Addr3’b000)REG_Files[W_Addr]=W_Data;endendendassignR_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这个软件的运用更加熟练了,对寄存器堆这个概念也有了更深层次的理解,增长了我的知识,强化了我的实践能力以及思考能力。这次实验收获很大。指导教师评议实验步骤写的时候,最好自己按照所做步骤写,二人不要一模一样。成绩:指导教师签名:
本文标题:杭电计组实验4-寄存器堆设计实验
链接地址:https://www.777doc.com/doc-5726865 .html