(数字逻辑笔记)用Verilog实现一个简单ALU(组合逻辑)

实验描述:

输入:两个4位二进制数,代表两个操作数A,B;一个3位控制信号operation,代表ALU要进行的运算。本实验中,ALU可以实现8种运算:

输出:4位结果,1位进位

operation | F

000 | A + B

001 | A - B

010 | B + 1

011 | B - 1

100 | NOT A

101 | A XOR B

110 | A AND B

111 | A OR B

实现代码:

/*********************
*    By VastCosmic
*    2021/12/26
*********************/

module ALU(A,B,operation,result,cout);
    input[3:0] A;
	input[3:0] B;
	input[2:0] operation;
	output reg[3:0] result;
	output reg cout;
 
    always @(A or B or operation) 
    begin
        case(operation) 
        //A+B
        3'b000: begin result <= A + B;end 	    
        //A-B
	    3'b001: begin result <= A - B;end
        //B+1
	    3'b010: begin result <= B + 1;end
        //B-1
	    3'b011: begin result <= B - 1;end
        //NOT A
	    3'b100: begin result <= ~A;end
        //A XOR B
	    3'b101: begin result = A ^ B;end     
        //A AND B
	    3'b110: begin result = A & B;end
        //A OR B
	    3'b111: begin result = A | B;end
        endcase
    end
endmodule

TestBench:

/*********************
*    By VastCosmic
*    2021/12/26
*********************/

`timescale 1ns/10ps
module ALU_tb;
reg [3:0] A;
reg [3:0] B;
reg [2:0] operation;
wire [3:0] result;
wire cout;

ALU ALU(A,B,operation,result,cout);
initial 
    begin
        A<=0000;B<=0000;operation <= 000;       //initial
        #10   A<=0001;B<=0001;operation <= 000; //A + B 0010
        #10   A<=0001;B<=0001;operation <= 001; //A - B 0000
        #10   A<=0001;B<=0001;operation <= 010; //B + 1 0010
        #10   A<=0001;B<=0001;operation <= 011; //B - 1 0000
        #10   A<=1001;B<=0001;operation <= 100; //NOT A 0110
        
        #10   A<=0001;B<=0010;operation <= 101; //A XOR B 
        
        #10   A<=0001;B<=0001;operation <= 110; //A AND B 
        #10   A<=0001;B<=0000;operation <= 110; //A AND B
        
        #10   A<=0001;B<=0000;operation <= 111; //A OR B 
        #10   A<=0000;B<=0000;operation <= 111; //A OR B
        #10   $stop;    
    end
endmodule

使用Vivado进行仿真:

仿真波形:

  • 16
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值