Circuits--Combinational--Arithmetic

本文介绍了几种不同位宽的加法器模块,包括半加器、全加器、多位二进制加法器、带溢出检测的有符号加法以及BCD码加法,展示了它们的输入输出逻辑和处理机制。
摘要由CSDN通过智能技术生成

1. Half adder

module top_module( 
    input a, b,
    output cout, sum );
    
    always@(*)
        begin
            if(a+b>1)
                begin
                   sum=a+b-2'b10;
                   cout=1;
                end
            else
                begin
                   sum=a+b;
                    cout=0;
                end
        end

endmodule

2..Full adder

module top_module( 
    input a, b, cin,
    output cout, sum );
    
    always@(*)
        begin
            if(a+b+cin>1)
                begin
                   cout=1;
                    sum=a+b+cin-2'b10;
                end
            else
                begin
                   cout=0;
                    sum=a+b+cin;
                end
        end

endmodule

3. 3-bit binary adder

module top_module( 
    input [2:0] a, b,
    input cin,
    output [2:0] cout,
    output [2:0] sum );
    
    assign {cout[0],sum[0]}=a[0]+b[0]+cin;
    assign {cout[1],sum[1]}=a[1]+b[1]+cout[0];
    assign {cout[2],sum[2]}=a[2]+b[2]+cout[1];

endmodule

4. Adder

module top_module (
    input [3:0] x,
    input [3:0] y, 
    output [4:0] sum);
    
    wire [3:0] cout;
     assign {cout[0],sum[0]}=x[0]+y[0];
    assign {cout[1],sum[1]}=x[1]+y[1]+cout[0];
    assign {cout[2],sum[2]}=x[2]+y[2]+cout[1];
    assign {cout[3],sum[3]}=x[3]+y[3]+cout[2];
    assign sum[4]=cout[3];
    
    

endmodule

5.Signed addition overflow

module top_module (
    input [7:0] a,
    input [7:0] b,
    output [7:0] s,
    output overflow
); //
 
    // assign s = ...
    // assign overflow = ..
    assign s=a+b;
    assign overflow= (a[7]&b[7]&~s[7])|(~a[7]&~b[7]&s[7]);

endmodule

6. 100-bit binary adder

module top_module( 
    input [99:0] a, b,
    input cin,
    output cout,
    output [99:0] sum );
    
    assign {cout,sum[99:0]}=a+b+cin;

endmodule

7. 4-digit BCD adder

module top_module ( 
    input [15:0] a, b,
    input cin,
    output cout,
    output [15:0] sum );
    
    wire cout1,cout2,cout3;

    bcd_fadd b1(a[3:0],b[3:0],cin,cout1,sum[3:0]);
    bcd_fadd b2(a[7:4],b[7:4],cout1,cout2,sum[7:4]);
    bcd_fadd b3(a[11:8],b[11:8],cout2,cout3,sum[11:8]);
    bcd_fadd b4(a[15:12],b[15:12],cout3,cout,sum[15:12]);
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值