我是靠谱客的博主 美好季节,最近开发中收集的这篇文章主要介绍【计算机组成原理】实验二、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

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

最后

以上就是美好季节为你收集整理的【计算机组成原理】实验二、CPU 部件实现之 ALU 和寄存器堆的全部内容,希望文章能够帮你解决【计算机组成原理】实验二、CPU 部件实现之 ALU 和寄存器堆所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部