32位寄存器组及其寄存器

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值