杭州电子科技大学计算机学院
实验报告
课程名称:计算机组成原理
实验项目:寄存器堆设计实验
指导教师
实验位置:
姓
班 级:
学 号:
日 期:2015年5月7日
实验目的学习和使用Verlilog HDL 进行和思绪电路的设计方法
掌握灵活的运用Verilog HDL 进行各种描述与建模的技巧和方法
学习寄存器堆的数据传送与读写工作原理,掌握寄存器读一的设计方法实验环境ISE Design Suite 14.6Digilent Adept
Nexys3实验板实验内容(算法、程序、步骤和方法)根据实验原理设计32个32位的寄存器堆,有俩个读端口,1个写端口,既能同时读出两个寄存器的值,写入一个寄存器,设计寄存器只需要定义一个reg类型的数组即可完成,利用数组下标操作,寄存器即可,同时也有Rest 和CLk 信号控制我们的操作的进行。8位的LED进行显示我们读出的数据的一部分!
实验的顶层模块:
module Test_Rgisterfile(Addr,Write_Reg,C1,C2,Clk,Reset,LED);
input [4:0]Addr;
input [1:0]C1;
input Write_Reg,C2,Clk,Reset;
output reg [7:0]LED;
wire [31:0]R_Data_A,R_Data_B;
reg [31:0]W_Data;
reg [4:0]A,B;
Registerfile reg1(A,B,Addr,Write_Reg,W_Data,Clk,Reset,R_Data_A,R_Data_B);
always@(Addr or Write_Reg or C1 or C2 or R_Data_A or R_Data_B)
begin
A=0;
B=0;
LED=0;
W_Data=0;
if(!Write_Reg)
begin
if(!C2)
begin
A=Addr;
case(C1)
2'b00:LED=R_Data_A[7:0];
2'b01:LED=R_Data_A[15:8];
2'b10:LED=R_Data_A[23:16];
2'b11:LED=R_Data_A[31:24];
endcase
end
else
begin
B=Addr;
case(C1)
2'b00:LED=R_Data_B[7:0];
2'b01:LED=R_Data_B[15:8];
2'b10:LED=R_Data_B[23:16];
2'b11:LED=R_Data_B[31:24];
endcase
end
end
else
begin
case(C1)
2'b00:W_Data=32'h0000_0003;
2'b01:W_Data=32'h0000_0607;
2'b10:W_Data=32'hFFFF_FFFF;
2'b11:W_Data=32'h1111_1234;
endcase
end
end
endmodule
寄存器的操作模块:
module Registerfile(input [4:0]R_Addr_A,
input [4:0]R_Addr_B,
input [4:0]W_Addr,
input Write_Reg,
input [31:0]W_Data,
input Clk,
input Reset,
output [31:0]R_Data_A,
output [31:0]R_Data_B
);
reg [31:0]REG_Files[0:31];
reg [5:0]i;
initial
begin
for(i=0;i<=31;i=i+1)
REG_Files[i]=0;
end
assign R_Data_A=REG_Files[R_Addr_A];
assign R_Data_B=REG_Files