verilog HDLBits刷题学习笔记——Arithmetic Circuits

Half adder

创建一个半加法器。半加器将两位相加(没有进位)并产生和和进位。

Create a half adder. A half adder adds two bits (with no carry-in) and produces a sum and carry-out.

module top_module(

        input a, b,

        output cout, sum );

        assign cout = a&b;

        assign sum = a^b;

endmodule

思路解析:sum作为保存和的数,cout作为保存进位的数 ,计算表如下:

                 a       b        cout          sum

                1        1         1                0               此时需要进位

                0        1          0               1

                1        0          0               1

                0        0          0               0

Full adder

Create a full adder. A full adder adds three bits (including carry-in) and produces a sum and carry-out..

思路:三个数相加,其中的某个bit位中,若三个数的那个bit位全为1,则sum为1,cout也为1。

                a       b           cin        cout          sum

                1        1           1             1              1             此时需要进位

                0        1           1            1             0

                1        0           1            1              0

                0        0            1           0               1

分析真值表逻辑 得以下关系式: sum = a^b^cin;
                                   cout = (a&b)|(b&cin)|(a&cin);

再利用assign赋值语句即可

signed addition overflow

假设您有两个 8 位 的补码,a[7:0] 和 b[7:0]。这些数字相加产生 s[7:0]。还要计算是否发生了(有符号的)溢出。

计算相加直接   assign s = a+ b

计算判断是不是有溢出,看最高位,如果a[7]  b[7]同时为1,说明两个数都为负数,相加最后s[7]却为0,符号位反而变成了正数,说明有溢出;如果a[7]  b[7]同时为0,说明两个数都为正数,相加最后s[7]却为1,符号位反而变成了负数,说明有溢出

assign overflow = (a[7] &b[7]&~s[7])|(~a[7] &~b[7]&s[7])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值