有符号的32位加减法器(改进版)

module adder32(input [31:0] a,
input [31:0] b,
input clk,
input ci,
output x,
output co,

input y,
output wire [3:0] an,   //片选
output wire [6:0] seg //段选 
    );
    wire [31:0] count;
    wire [3:0]a1;//显示a
    wire [3:0]b1;//显示b
    wire [31:0]s;//运算结果的补码
    wire [31:0]aa;//a的补码
    wire [31:0]bb;//b的补码
     wire [31:0]gg;//根据是否加减改变b的符号
     wire [31:0]ff;//运算结果
     wire [3:0]jj;//七段数码管显示结果
    assign a1[0]=a[0];
    assign a1[1]=a[1];
    assign a1[2]=a[2];
    assign a1[3]=a[3];//显示第一个操作数
    assign b1[0]=b[0];//显示第二个操作数
     assign b1[1]=b[1];
      assign b1[2]=b[2];
       assign b1[3]=b[3];
       comp_conv f1(a,aa);//求a的补码

assign  gg=y?{~b[31],b[30:0]}:b;
comp_conv f2(gg,bb);//求b的补码
        
add i0(aa[0],bb[0],ci,s[0],count[0]);//按位相加
add i1(aa[1],bb[1],count[0],s[1],count[1]);
add i2(aa[2],bb[2],count[1],s[2],count[2]);
add i3(aa[3],bb[3],count[2],s[3],count[3]);
add i4(aa[4],bb[4],count[3],s[4],count[4]);
//以此类推
test f4(s,ff);
assign x=ff[31];
 assign jj[0]=ff[0];
 assign jj[1]=ff[1];
 assign jj[2]=ff[2];
 assign jj[3]=ff[3];

 assign co=count[31]^count[30];
DigitalDisplay f3(clk,a1,b1,jj,an,seg);//七段数码管调用
endmodule
module add(input a ,input b, input ci,output s,output co);//一位全加器
 assign {co, s} = a + b + ci;
endmodule
module comp_conv(                                    //补码运算
input[31:0]a,
output[31:0]a_comp
        );
assign a_comp=a[31]?{a[31],~a[30:0]+1}:a;//(方法3)不用中间变量y,直接得到a_comp结果
//逻辑不太复杂时,用位拼接,二选一
endmodule
module test(input [31:0] a,//补码转原码
output [31:0]b

    );
    assign  b=a[31]?{a[31],~(a[30:0]-1)}:a;

endmodule


module adder(
input [3:0] aa,
input [3:0] bb,
input clk,
input ci,
output x,
output co,
output z,
input y,
output wire [3:0] an,   //片选
output wire [6:0] seg //段选 );
);
adder32 U1({28'b0,aa[3:0]},
{28'b0,bb[3:0]},
 clk, ci,x,co,z,y,
  an,   //片选
  seg //段选 
  );
  endmodule

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值