1.通常寄存器组是由D触发器实现的,因为它们比较通用储存器占用的硅片面积要大很多,所以不能用于大存储量的情形。一般的应用是将寄存器组和算术逻辑单元ALU串联起来,形成如图5.34所示的结构形式。寄存器组的双通道输出形成了链接到ALU的数据通道,而ALU的输出存储在指定位置的寄存器组上。主处理器提供操作地址,并控制读、写次序以避免在同一位置上同时进行读写操作。
2.实验简单电路图:
3.实验代码:
module Register_File#(parameter word_size=32,addr_size=5)
(output [word_size-1:0] Data_Out_1,Date_Out_Out_2,
input [word_size-1:0] Data_in,
input [addr_size-1:0] Read_Addr_1, Read_Addr_2, Write_Addr,
input Write_Enable,Clock);
reg [word_size-1: 0] Reg_File [31: 0]; //32bit x32 word memory declaration
assign Data_Out_1=Reg_File[Read_Addr_1];
assign Date_Out_Out_2=Reg_File[Read_Addr_2];
always @ (posedge Clock) begin
if (Write_Enable == 1'b1)
Reg_File [Write_Addr]<=Data_in;
end
endmodule
`timescale 1 ps/ 1 ps
module Register_File_vlg_tst();
reg Clock;
reg [31:0] Data_in;
reg [4:0] Read_Addr_1;
reg [4:0] Read_Addr_2;
reg [4:0] Write_Addr;
reg Write_Enable;
wire [31:0] Data_Out_1;
wire [31:0] Date_Out_Out_2;
Register_File i1 (
.Clock(Clock),
.Data_Out_1(Data_Out_1),
.Data_in(Data_in),
.Date_Out_Out_2(Date_Out_Out_2),
.Read_Addr_1(Read_Addr_1),
.Read_Addr_2(Read_Addr_2),
.Write_Addr(Write_Addr),
.Write_Enable(Write_Enable)
);
initial
Data_in [31:0]=32'hffffffff;
initial
begin
Clock=1'b0;
Write_Enable=1'b1;
#10 Write_Enable=1'b0;
#50 Write_Enable=1'b1;
#10 Write_Enable=1'b0;
#50 Write_Enable=1'b1;
#10 Write_Enable=1'b0;
#100 Write_Enable=1'b1;
#10 Write_Enable=1'b0;
#200 $stop;
end
always #5 Clock = ~Clock;
initial
begin
Read_Addr_1[4:0]=4'b0000;
#20 Read_Addr_1=4'b0001;
#40 Read_Addr_1=4'b0010;
#60 Read_Addr_1=4'b0011;
#110 Read_Addr_1=4'b0110;
#200 $stop;
end
initial
begin
Read_Addr_2[4:0]=4'b0000;
#80 Read_Addr_2=4'b0001;
#40 Read_Addr_2=4'b0010;
#10 Read_Addr_2=4'b0011;
#100 Read_Addr_2=4'b0110;
#200 $stop;
end
initial
begin
Write_Addr[4:0]=4'b0000;
#80 Write_Addr=4'b0001;
#40 Write_Addr=4'b0010;
#10 Write_Addr=4'b0011;
#100 Write_Addr=4'b0110;
#200 $stop;
end
endmodule
4.实验完成截图:
5.实验视频地址:p127例5.47视频_哔哩哔哩_bilibili