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、仿真结果