verilog 4位无符号BCD码加法器实现

一、前言

BCD码(Binary-Coded Decimal‎)用4位二进制数来表示十进制数中的0~9这10个数码。4位二进制正常情况下是在值为15之后产生进位,但如果是BCD码加法器,那么应该是在值为9之后就要产生进位。

为了实现4位二进制在值为9之后就要产生进位,那么就可以在值大于9的时候,在该值的基础上加6,使其自动产生进位。因为加上6之后,此时的4位二进制的值刚好是大于15产生进位的情况。

二、verilog实现

1、RTL代码

module adder_4bit(
    a,
    b,
    cin,
    cout,
    s
    );

    input cin;
    input [3:0] a,b;
    output cout;
    output [3:0] s;
    
    wire [4:0] temp;
    //4bit 加法器 
    assign temp = a+b+cin;
    assign {cout,s} = (temp>9)?temp+6:temp;
endmodule

2、仿真程序

`timescale  1ns / 1ps   

module tb_adder_4bit;   



// adder_4bit Inputs

reg   cin                                  = 0 ;
reg   [3:0]  a                             = 0 ;
reg   [3:0]  b                             = 0 ;

// adder_4bit Outputs
wire  cout                                 ;
wire  [3:0]  s                             ;


adder_4bit  u_adder_4bit (
    
    .cin                     ( cin         ),
    .a                       ( a     [3:0] ),
    .b                       ( b     [3:0] ),

    .cout                    ( cout        ),
    .s                       ( s     [3:0] )
);

initial
    $monitor($time,"cout=%d,sum %d=%d+%d+%d,m=%d",cout,s,a,b,cin,s);

initial
begin
    a=9;b=8;cin=0;
    #10 b=9;
    #10 a=7;b=2;
    #20 b=4;
    #10 a=5;b=2;
    #10 $finish;
end

endmodule

3、仿真结果

在这里插入图片描述

posted @ 2020-10-09 18:23  耐心的小黑  阅读(319)  评论(0编辑  收藏  举报