杭电计组实验4-寄存器堆设计实验.doc_第1页
杭电计组实验4-寄存器堆设计实验.doc_第2页
杭电计组实验4-寄存器堆设计实验.doc_第3页
杭电计组实验4-寄存器堆设计实验.doc_第4页
杭电计组实验4-寄存器堆设计实验.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

杭州电子科技大学计算机学院实验报告实验项目: 课程名称:计算机组成原理与系统结构设计姓名: 学号: 同组姓名: 学号: 实验位置(机号): 实验日期: 指导教师: 实验内容(算法、程序、步骤和方法)1、 实验目的(1) 学会使用Verilog HDL进行时序电路的设计方法。(2) 掌握灵活应用Verilog HDL进行各种描述与建模的技巧和方法。(3) 学习寄存器堆的数据传送与读/写工作原理,掌握寄存器堆得设计方法。2、 实验仪器 ISE工具软件三、步骤、方法(1)启动Xilinx ISE软件,选择File-New Project,输入工程名shiyan2,默认选择后,点击Next按钮,确认工程信息后点击Finish按钮,创建一个完整的工程。(2)在工程管理区的任意位置右击,选择New Source命令。弹出New Source Wizard对话框,选择Verilog Module,并输入Verilog文件名,点击Next按钮进入下一步,点击Finish完成创建。(3)编辑程序源代码,然后编译,综合;选择Synthesize-XST项中的Check Syntax右击选择Run命令,并查看RTL视图;如果编译出错,则需要修改程序代码,直至正确。(4)在工程管理区将View类型设置成Simulation,在任意位置右击,选择New Source命令,选择Verilog Test Fixture选项。点击Next,点击Finish,完成。编写激励代码,观察仿真波形,如果验证逻辑有误,则修改代码,重新编译,仿真,直至正确。(5)由于实验四并未链接实验板,所以后面的链接实验板的步骤此处没有。操作过程及结果一,操作过程实验过程和描述:module shiyan4(R_Addr_A,R_Addr_B,Clk,W_Addr,W_Data,R_Data_A,R_Data_B,Reset,Write_reg);input Clk,Reset;input wire Write_reg;input wire4:0R_Addr_A;input wire4:0W_Addr;input wire4:0R_Addr_B;input wire32:0W_Data;reg 31:0REG_Files31:0;output wire0:31R_Data_A;output wire0:31R_Data_B;integer i=0;always(posedge Clk or posedge Reset)begin if(Reset) begin for(i=0;i=31;i=i+1) REG_Filesi=32b0; endelse begin if(Write_reg) REG_FilesW_Addr=W_Data; endend assign R_Data_A=REG_FilesR_Addr_A; assign R_Data_B=REG_FilesR_Addr_B;endmodule仿真代码module shiyan4_test;/ Inputsreg 4:0 R_Addr_A;reg 4:0 R_Addr_B;reg Clk;reg 4:0 W_Addr;reg 32:0 W_Data;reg Reset;reg Write_reg;/ Outputswire 0:31 R_Data_A;wire 0:31 R_Data_B;/ Instantiate the Unit Under Test (UUT)shiyan4 uut (.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);initial begin/ Initialize InputsR_Addr_A = 0;R_Addr_B = 0;Clk = 0;W_Addr = 0;W_Data = 0;Reset = 0;Write_reg = 0;/ Wait 100 ns for global reset to finish#100;/ Add stimulus here#100;Clk = 1;Reset = 0;R_Addr_A = 0;R_Addr_B = 0;W_Addr = 5b00001;Write_reg = 1;W_Data = 32h1111_1111;#100;Clk = 0;Reset = 0;R_Addr_A = 0;R_Addr_B = 0;W_Addr = 5b00001;Write_reg = 1;W_Data = 32h1111_1111;#100;Clk = 1;Reset = 0;R_Addr_A = 0;R_Addr_B = 0;W_Addr = 5b00010;Write_reg = 1;W_Data = 32h2222_2222;#100;Clk = 0;Reset = 0;R_Addr_A = 5b00001;R_Addr_B = 5b00010;W_Addr = 0;Write_reg = 0;W_Data = 0; #100;Clk = 0;Reset = 1;R_Addr_A = 5b00001;R_Addr_B = 5b00010;W_Addr = 0;Write_reg = 0;W_Data = 0;end endmoduleRTL图二、结果思考题:(1)根据8个寄存器执行读、写操作,实验结果符合预期(2)always(posedge Clk or posedge Reset)begin if(Reset) begin for(i=0;i=31;i=i+1) REG_Filesi3b000) REG_FilesW_Addr=W_Data; end endend assign R_Data_A=REG_FilesR_Addr_A; assign R_Data_B=REG_FilesR_Addr_B;(3) 读操作没有使能或者时钟信号控制,是组合逻辑电路,只要给出寄存器地址,即可独处寄存器中的数据 。所有写入操作的输入信号(包括写寄存器地址W_Addr、写入数据W_Data、写控制信号Write_Reg)必须在时钟边沿来临时已经有效。实验体会在这个寄存器堆设计实验中,这个实验理解起来稍微有点困难,起初已经写好了代码,进行了仿真,出现了波形。但是后来老师要求读操作和写操作输出不同的数据,在不同的单元。 于是我就把仿真代码改了一下,将W_Data,W_Addr等数据做了修改。这个实验也就成功了。通过做这个寄存器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论