HDL bits----arithmetic circuits

1.hadd

module top_module( 
    input a, b,
    output cout, sum );
    assign sum=(a^b)^0;
    assign cout=(a&b)|((a^b)&0);
endmodule

2.fadd

module top_module( 
    input a, b, cin,
    output cout, sum );
    assign sum=(a^b)^cin;
    assign cout=(a&b)|((a^b)&cin);
endmodule

3.adder3

module top_module( 
    input [2:0] a, b,
    input cin,
    output [2:0] cout,
    output [2:0] sum );
    assign sum[0]=(a[0]^b[0])^cin;
    assign cout[0]=(a[0]&b[0])|(a[0]^b[0])&cin;
    assign sum[1]=(a[1]^b[1])^cout[0];
    assign cout[1]=(a[1]&b[1])|(a[1]^b[1])&cout[0];
    assign sum[2]=(a[2]^b[2])^cout[1];
    assign cout[2]=(a[2]&b[2])|(a[2]^b[2])&cout[1];
   
    
endmodule

4.Exams/m2014 q4j

(我写的)

module top_module (
    input [3:0] x,
    input [3:0] y, 
    output [4:0] sum);
    wire w1,w2,w3;
    assign sum[0]=(x[0]^y[0])^0;
    assign w1=(x[0]&y[0])|(x[0]^y[0])&0;
    assign sum[1]=(x[1]^y[1])^w1;
    assign w2=(x[1]&y[1])|(x[1]^y[1])&w1;
    assign sum[2]=(x[2]^y[2])^w2;
    assign w3=(x[2]&y[2])|(x[2]^y[2])&w2;
    assign sum[3]=(x[3]^y[3])^w3;
    assign sum[4]=(x[3]&y[3])|(x[3]^y[3])&w3;
endmodule
module top_module (
	input [3:0] x,
	input [3:0] y,
	output [4:0] sum
);

	// This circuit is a 4-bit ripple-carry adder with carry-out.
	assign sum = x+y;	// Verilog addition automatically produces the carry-out bit.

	// Verilog quirk: Even though the value of (x+y) includes the carry-out, (x+y) is still considered to be a 4-bit number (The max width of the two operands).
	// This is correct:
	// assign sum = (x+y);
	// But this is incorrect:
	// assign sum = {x+y};	// Concatenation operator: This discards the carry-out
endmodule

(上图 官网的)

5.Exams/ece241 2014 q1c

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

endmodule

6.adder100

(我靠)

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

7.bcdadd4

module top_module ( 
    input [15:0] a, b,
    input cin,
    output cout,
    output [15:0] sum );
    wire [3:0] wa;
    wire [3:0] wb;
    wire [3:0] wc;
    wire [3:0] wd;
    wire w1,w2,w3,w4;
        bcd_fadd instance1(.a(a[3:0]),.b(b[3:0]),.cin(cin),.cout(w1),.sum(wa));
        bcd_fadd instance2(.a(a[7:4]),.b(b[7:4]),.cin(w1),.cout(w2),.sum(wb));
        bcd_fadd instance3(.a(a[11:8]),.b(b[11:8]),.cin(w2),.cout(w3),.sum(wc));
        bcd_fadd instance4(.a(a[15:12]),.b(b[15:12]),.cin(w3),.cout(w4),.sum(wd));
    assign sum={wd,wc,wb,wa};
    assign cout=w4;
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值