20210330HDLBits学习笔记:Veriliog Language - More Verilog Features

该博客介绍了两个Verilog模块的设计:Popcount255计算255位输入中1的个数,使用阻塞赋值顺序执行;另一个是BCDadd100,实现了一个全加器链,通过内部寄存器和循环完成100位二进制到十进制加法。这两个设计展示了Verilog在数字逻辑设计中的应用。
摘要由CSDN通过智能技术生成

Popcount255

always过程快中运用阻塞赋值语句可以实现顺序执行。

module top_module( 
    input [254:0] in,
    output reg [7:0] out );
    integer i;
        always @(*)
            begin
                out = 8'd0;//初始化
                for (i = 0; i < 255; i = i + 1)
            begin
                out = out + in[i];
            end
            end
endmodule

Bcdadd100

全加器,下一个adder输入时上一个adder输出,因此只需要一个寄存器加loop就可以实现迭代的效果

module top_module( 
    input [399:0] a, b,
    input cin,
    output cout,
    output [399:0] sum );
    reg [100:0] cin_mid;
    always @(*) cin_mid[0] = cin;
    generate 
        genvar i;
            for (i = 0; i < 100; i = i + 1)
                begin : loop
                    bcd_fadd bcd (.a(a[(4 * i + 3): 4*i]),
                                  .b(b[(4 * i + 3): 4*i]), 
                                  .cin(cin_mid[i]), 
                                  .cout(cin_mid[i + 1]), 
                                  .sum(sum[(4 * i + 3): 4*i]) );
                end
     endgenerate
     assign cout = cin_mid[100];
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值