Combinational for-loop: 255-bit population count&&Adder100

题目1: Combinational for-loop: 255-bit population count

A "population count" circuit counts the number of '1's in an input vector. Build a population count circuit for a 255-bit input vector.

题目要求我们输出255位数据里有多少个1,我们知道在硬件里无论是什么数据都是以二进制的形式存在,要么0要么1,数1的个数直接对in的每一位进行相加,即一个for循环。

代码

module top_module( 
    input [254:0] in,
    output [7:0] out );

    reg [7:0]counter;
    integer i;
    always @(*)begin
        counter=0;
        for(i=0;i<255;i=i+1)begin
            counter=counter+in[i];
        end
        out=counter;
    end
endmodule

 题目2:Adder100

Create a 100-bit binary adder. The adder adds two 100-bit numbers and a carry-in to produce a 100-bit sum and carry out.

 分析:实现100位波纹加法器(级联,进位至于上一次有关),这在Verilog中需要使用到generate ...for进行实例化,实现代码的复用。

我们知道在加法器中,sum=a^b(a异或b),cout=a&b(这里是我临时推的,标准的忘记了),借助这个可以实现一位加法器,再进行实例化。

代码

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

    reg [99:0]c;//用于存储每次的进位
    genvar i;
    generate 
        add add_0(
            .a(a[0]),
            .b(b[0]),
            .cin(cin),
            .cout(c[0]),
            .sum(sum[0])
            );
        for(i=1;i<100;i=i+1) begin:ADD_100
            add add_i(
                .a(a[i]),
                .b(b[i]),
                .cin(c[i-1]),
                .cout(c[i]),
                .sum(sum[i])
            );
        end
       
    endgenerate
    assign cout=c[99];
endmodule
            
module add( 
    input a, b, cin,
    output cout, sum );
    
    always @(*)begin
        sum=a^b^cin;
        cout=(a&b)|(a&cin)|(b&cin);
    end
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值