BCD加法

16bitBCD加法

在这里插入图片描述

BCD编码就是用4的位二进制来代表一个10进制的位 即 B C D 10010000 BCD_{10010000} BCD10010000码代表98,而二进制代表152。

充分利用模块思想,16bit的BCD加法可以由4个4bitBCD加法组成。

module top_module( 
    input [15:0] a, b,
    input cin,
    output cout,
    output [15:0] sum );
    wire [2:0] cout_temp;
    bcd_add u_bcd_add_0(a[3:0],b[3:0],cin,cout_temp[0],sum[3:0]); 
generate 
    genvar i;
    for(i=1;i<3;i=i+1)begin:bcd_add_16
        bcd_add u_bcd_add(a[(i+1)*4-1:i*4],b[(i+1)*4-1:i*4],cout_temp[i-1],cout_temp[i],sum[(i+1)*4-1:i*4]);
    end
endgenerate
    bcd_add u_bcd_add_3(a[15:12],b[15:12],cout_temp[2],cout,sum[15:12]);
endmodule

4bitBCD加法

4bitBCD可以由两个4bit全加器组成。

module bcd_add (
    input [3:0] a,
    input [3:0] b,
    input     cin,
    output   cout,
    output [3:0] sum );
    wire [1:0]cout_temp;
    wire [3:0] sum_temp;
    wire [3:0] b_temp;
    assign b_temp = (sum_temp[3]&sum_temp[2]|sum_temp[3]&sum_temp[1]|cout_temp[0])?4'b0110:4'b0;
    add_4 u_add4_1(a,b,cin,cout_temp[0],sum_temp);
    add_4 u_add4_2(sum_temp,b_temp,0,cout_temp[1],sum);
    assign cout = cout_temp[0]|cout_temp[1];
endmodule

首先可以发现4bitBCD对于两个4bit数相加若小于等于 9 1001 9_{1001} 91001那么就可以直接用4bit全加器的结果来代表,一旦大于 9 1001 9_{1001} 91001,则对应的4bit全加器则需要加 6 110 6_{110} 6110才能代表BCD的结果,例如
B C

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值