zoukankan      html  css  js  c++  java
  • 全加器检测8位数中的1

    问题:  输入一个8bit数,输出其中1的个数。如果只能使用1bit全加器,最少需要几个?

    先来了解一下全加器和半加器:

    http://m.elecfans.com/article/716153.html

     所以解题思路如下:

    https://forum.allaboutcircuits.com/threads/count-number-of-logic-1s-in-7-bit-number.49821/

    module f_add(a,
                b,
                ci,
                s,
                co
                );
        input a;
        input b;
        input ci;
        output s;
        output co;
        
        assign {co,s}=a+b+ci;
    //    assign s=(a^b)^ci;
    //    assign co=(a&&b)||(ci&&(a^b));
    endmodule
    module count_1_add(
                        data_in,
                        data_out
                        );
        input [7:0]data_in;
        output [3:0]data_out;//最多只需要四位就可表示8,即输入的8位二进制全是1的情况
        wire s0,s1,s2,s3,s4,s5,s6;
        wire c0,c1,c2,c3,c4,c5,c6;
        f_add f_add0(
                .a(data_in[0]),
                .b(data_in[1]),
                .ci(data_in[2]),
                .s(s0),
                .co(c0)
                );
        f_add f_add1(
                .a(data_in[3]),
                .b(data_in[4]),
                .ci(data_in[5]),
                .s(s1),
                .co(c1)
                );
        f_add f_add2(
                .a(s0),
                .b(s1),
                .ci(data_in[6]),
                .s(s2),
                .co(c2)
                );
        f_add f_add3(
                .a(s2),
                .b(data_in[7]),
                .ci(1'b0),
                .s(s3),
                .co(c3)
                );
        f_add f_add4(
                .a(c0),
                .b(c1),
                .ci(c2),
                .s(s4),
                .co(c4)
                );
        f_add f_add5(
                .a(s4),
                .b(c3),
                .ci(1'b0),
                .s(s5),
                .co(c5)
                );
        f_add f_add6(
                .a(c5),
                .b(c4),
                .ci(1'b0),
                .s(s6),
                .co(c6)
                );
        assign data_out={c6,s6,s5,s3};
        
    endmodule
    `timescale 1ns/1ns
    module tb;
        reg [7:0]data_in;
        wire [3:0]data_out;
        reg clk;
        count_1_add count_1_add(
                        .data_in(data_in),
                        .data_out(data_out)
                        );
        initial clk=0;
        always #1 clk=~clk;
        initial begin
            data_in=8'b1101_0010;
            #10;
            data_in=8'b1001_0000;
        end
    endmodule 

    可以看到用了七个全加器,点开其中一个,可以看到一个全加器由两个半加器和一个或门组成。

     

    YKJIAO
  • 相关阅读:
    本周总结
    本周总结
    第四周自我总结
    结对编程
    第四周自我总结
    第三周自我总结
    本周工作安排及内容
    知识思考
    交作业。。。
    MSF过程模型
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/12752959.html
Copyright © 2011-2022 走看看