经典设计实例_整理加解释(25-35)

26.调用门原件实现的1位半加器

module half_add1(
input    a,
input    b,
output   sum,
output   cout
);

and (cout,a,b);
xor (sum,a,b);

endmodule

半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。 一位半加器是实现两个一位二进制数的加法运算电路。

                                                                      

A和B是相加的两个数,S是半加和数,C是进位数。

所谓半加就是不考虑进位的加法,它的真值表如下 (见表):

                        

表中:                                       

                                                                               S = \overline{A}B + \overline{B}A

                                                                                    C = AB  

逻辑表达式:  ; 。

半加器的逻辑实现

                                                                    

27.数据流方式描述1位半加器

module half_add2(
input    a,
input    b,
output   sum,
output   count
);

assign    sum = a ^ b;
assign    count = a & b;

endmodule 

28.采用行为描述的1位半加器

module half_add3(
input    a,
input    b,
output   sum,
output   cout
);

always@(a or b)begin
    case({a,b})
        2'b00 : begin
                    sum = 0;
                    cout = 0;
                end
        2'b01 : begin
                    sum = 1;
                    cout = 0;
                end
        2'b10 : begin
                    sum = 1;
                    cout = 0;
                end
        2'b11 : begin
                    sum = 0;
                    cout = 1;
                end                    
end

endmodule

29.使用行为描述的1位半加器

module half_add3(
input    a,
input    b,
output   sum,
output   cout
);

always@(a or b)begin
    sum = a ^ b;
    cout = a & b;                  
end

endmodule

30. 调用门原件实现1位全加器

module full_add1(
input    a,
input    b,
input    cin,
output   sum,
output   cout
);
wire s1,m1,m2,m3;

and (m1,a,b),
    (m2,b,cin),
    (m3,a,cin);
xor (s1,a,b),
    (sum,s1,cin);
or  (cout,m1,m2,m3);

endmodule

全加器英语名称为full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

一位全加器的真值表如下图,其中Ai为被加数,Bi为加数,相邻低位来的进位数为Ci-1,输出本位和为Si。向相邻高位进位数为Ci。

                                                                    

一位全加器的表达式如下:

Si=Ai⊕Bi⊕Ci-1

第二个表达式也可用一个异或门来代替或门对其中两个输入信号进行求和:

                                  

31.数据流描述的1位全加器

module full_add2(
input    a,
input    b,
input    cin,
output   sum,
output   cout
);

assign sum = a ^ b ^ cin;
assign cout = (a & b)|(b & cin)|(cin & a);

endmodule

32.1位全加器

module full_add1(
input    a,
input    b,
input    cin,
output   sum,
output   cout
);

assign{cout,sum} = a + b + cin;

endmodule

33.行为描述的1位全加器

modulee full_add4(
input    a,
input    b,
input    cin,
output reg  sum,
output reg  cout
);
reg    m1,m2,m3;

always@(a or b or cin)begin
    sum = (a ^ b) ^ cin;
    m1  = a & b;
    m2  = b& cin;
    m3  = a& cin;
    cout = (m1 | m2) | m3;
end

endmodule

33.结构描述的4位级联全加器

`include "full_add1.v"
module add4_1(
input [3:0] a,
input [3:0] b,
input cin,
output [3:0]sum,
output cout
);

wire    cout1;
wire    cout2;
wire    cout3;
full_add1 f0(
    .a(a[0]),
    .b(b[0]),
    .cin(cin),
    .sum(sum[0]),
    .cout(cout1)
);
full_add1 f1(
    .a(a[1]),
    .b(b[1]),
    .cin(cout1),
    .sum(sum[1]),
    .cout(cout2)
);
full_add1 f2(
    .a(a[2]),
    .b(b[2]),
    .cin(cout2),
    .sum(sum[2]),
    .cout(cout3)
);
full_add1 f3(
    .a(a[3]),
    .b(b[3]),
    .cin(cout3),
    .sum(sum[3]),
    .cout(cout)
);

endmodule

34.数据流描述4位全加器

module add4_2(
input [3:0] a,
input [3:0] b,
input cin,
output [3:0] sum,
output cout
);

assign {cout,sum} = a + b + cin;

endmodule

35.行为描述的4位全加器

module add4_3(
input [3:0] a,
input [3:0] b,
input cin,
output reg [3:0] sum,
output reg cout
);

always@(a or b or cin)begin
    {cout,sum} = a + b + cin;
end
endmodule

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值