Board logo

标题: 数字逻辑电路半减器 [打印本页]

作者: look_w    时间: 2017-9-22 21:09     标题: 数字逻辑电路半减器

本帖最后由 look_w 于 2017-9-23 16:32 编辑

0x00 废话不多说,直接贴上半减器的真值表如下
    我们来理解一下半减器的原理,我们知道,这是针对于二进制的运算。当0-0=0,此时没有向高位借位,所以对于高位借位则为0。那么0-1呢?我们知道,二级制运算以1当2(也就是10),所以没法减去1,只能向高位进行借位操作,此时对于高位借位则为1,借位之后变成“2”(10),最后运算的结果为1。同理,再分析其他情况的运算也是如此。
    贴上verilog描述
module h_suber(a, b, s, c);    input a, b;    output s, c;    assign s = a ^ b; //输出差值    assign c = b & (~a); //向高位的借位endmodule    0x01进一步加深,我们来学习下全减器,在半减器的基础上增加了来自低位的借位,这里可以对比全加器的规则,对于全加器是存在来自低位的“进位”,进行运算的时候也把低位进位考虑其中。所以对于全减器的规则,我们则把低位的借位给减去,再根据被减数和减数来判断高位的借位。也可以这样理解,对于低位的借位,因为是低位向被减数这一位借的,所以被减数应当被减去一位1。
运算公式:A-B-C1=D(C2的值取决于运算的结果是否需要向高位借位)

//被减数x,减数y,低位借位sub_in,高位借位sub_out,差diffr//例化语句实现module f_suber(x, y, sub_in, sub_out, diffr);    input x, y, sub_in;    output sub_out, diffr;    wire net1, net2, net3;    //h_suber(a, b, s, c);    h_suber u1(x, y, net1, net2);    h_suber u2(net1, sub_in, diffr, net3);    or u3(sub_out, net2, net3);endmodule




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0