【计算机组成原理】实验二、CPU 部件实现之 ALU 和寄存器堆

1. 使用 Verilog 完成 ALU 的设计,并编写测试仿真文件验证其正确性。要求: ALU 支持 16 位的加、减、与、或以及移位运算。

module ALU(a,b,op,y);
input[15:0]a,b;
input[3:0]op;
output y;
reg[15:0]y;

always@(*)begin
    case(op)
        //算术运算
        4'd0: y = a + b;
        4'd1: y = a - b;
        4'd2: y = a * b;
        4'd3: y = a / b;
        4'd4: y = a % b;    //求余
        
        //位运算
        4'd5: y = a & b;    //与
        4'd6: y = a | b;    //或
        4'd7: y = ~a;       //非
        4'd8: y = a ^ b;    //异或
        4'd9: y = a ~^ b;   //同或
        4'd10: y = ~(a & b);//与非
        4'd11: y = ~(a | b);//或非
        
        //移位运算
        4'd12: y = a << b;//逻辑左移和算术左移结果相同
        4'd13: y = a >> b;//逻辑右移
        4'd14: y = a >>> b;//算术右移
        4'd15: y = 0;
        
        
    endcase
end
endmodule
module test(
    );
reg[15:0] a,b;
reg[3:0] op;
wire[15:0] y;
ALU f(.a(a),.b(b),.op(op),.y(y));
initial begin
    a = 21;b = 16;op = 0; 
    
    #170 $stop;
end
always begin
    #10 a = a + 2;
    b = b-1;
    op = op+1;
end
endmodule

在这里插入图片描述
在这里插入图片描述

2. 使用 Verilog 完成通用寄存器堆的设计,并编写测试仿真文件验证其正确性。

要求 寄存器堆包含 8 个 16 位的寄存器; 寄存器堆有两个读端口和一个写端口。

设计一个8*16位的寄存器堆,即含有8个寄存器,每个寄存器16位。该寄存器堆有2个读端口、1个写端口,即能够同时读出2个寄存器的值,写入1个寄存器。读操作不需要时钟控制,写操作需要在上跳沿才能写入。

module RegFile(clk,WE,RA,RB,RW,busA,busB,busW);
input clk,WE;

//相当于地址,用来决定读或写的寄存器
input[2:0] RA,RB,RW;

input[15:0] busW;//要写入寄存器堆的内容
output[15:0] busA,busB;//从寄存器堆读出的内容

reg[15:0] regfile[7:0];//寄存器堆

integer i;
initial begin   //  初始化寄存器堆
    for(i=0;i<8;i=i+1) //总是习惯i++,老是报错
        regfile[i] = i*i;
end
always@(posedge clk)
begin
    if(WE == 1)
        regfile[RW] = busW;
end
assign busA = regfile[RA];
assign busB = regfile[RB];

endmodule
module test(
    );
reg clk,WE;
reg[2:0] RA,RB,RW;
reg[15:0] busW;
wire[15:0] busA,busB;

RegFile f(.clk(clk),.WE(WE),.RA(RA),.RB(RB),.RW(RW),
.busW(busW),.busA(busA),.busB(busB));

initial begin
    clk=0;WE=0;
    RA=3'd2;RB=3'd4;RW=3'd0;
    busW = 16'd24;
    
    #1000 $stop;
end
always #5 clk = ~clk;
always begin
   #43 WE = 1;
   #10 WE = 0;
   RW = RW + 1;
   busW = busW + 23;
end
always begin
   #10 RA = RA + 1;
    RB = RB + 3;
end


endmodule

在这里插入图片描述
在这里插入图片描述

  • 10
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机组成原理是研究计算机硬件系统的基本原理和结构的学科。它主要包括计算机的各个组成部分以及它们之间的相互关系和工作原理。下面我将为你介绍一下计算机组成原理中的实验和运算器设计。 在计算机组成原理的学习中,实验是非常重要的一部分,通过实验可以帮助学生更好地理解和掌握计算机硬件系统的工作原理。常见的计算机组成原理实验包括: 1. 组合逻辑电路实验:通过搭建和测试各种组合逻辑电路,如门电路、多路选择器、加法器等,来理解数字电路的基本原理和运作方式。 2. 时序逻辑电路实验:通过设计和验证时序逻辑电路,如触发器、计数器、状态机等,来了解时序电路的工作原理和时钟信号的作用。 3. 存储器实验:通过搭建和测试各种存储器,如静态RAM、动态RAM、ROM等,来了解存储器的结构和工作原理,并学习存储器的读写操作。 4. CPU实验:通过设计和实现简单的CPU,包括指令集、控制单元和运算器等,来了解CPU的组成和工作原理,以及指令的执行过程。 而运算器设计是计算机组成原理中的一个重要内容,它是计算机中负责执行算术和逻辑运算的部件。运算器通常包括算术逻辑单元(ALU)、寄存器和数据通路等。在运算器设计中,需要考虑运算器的功能、指令集、数据格式、运算精度等方面的设计要求。同时,还需要设计适当的控制信号和数据通路,以实现各种运算操作的执行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值