2位BCD码加法器设计
- 格式:pdf
- 大小:48.43 KB
- 文档页数:3
2位BCD码加法器设计
2位BCD码加法器设计
⼀、源程序module adder(A0,A1,B0,B1,a0,a1,b0,b1,s0,s1,s2); //模块名为adder和端⼝列表
input[3:0]A0,A1,B0,B1;//定义模块的输⼊端⼝,分别表⽰数A的个位、⼗位,数B的个位、⼗位。
output[6:0]a0,a1,b0,b1,s0,s1,s2;//定义模块的输出端⼝,分别表⽰数码管输出的加数,被加数,和的各位。
reg[6:0]a0,a1,b0,b1,s0,s1,s2;
reg[4:0]T0,T1;
reg[3:0]Z0,Z1;
reg c1,c2,S2;//定义S2为和的百位,其他均为中间变量。
reg[3:0]S0,S1;//定义S0为和的个位。S1为和的百位。
always
begin
T0 = A0 + B0;
if(T0 > 9)//判断⼗位是否有进位,有则c1=1,没有c1=0。
begin
Z0 = 10;
c1 = 1;
end
else
begin
Z0 = 0;
c1 = 0;
end
S0 = T0-Z0;//和个位的算法。
T1 = A1 + B1 + c1;
if (T1 > 9)//判断百位是否有进位,有则c2=1,没有c2=0。
Z1 = 10;
c2 = 1;
end
else
begin
Z1 = 0;
c2 = 0;
endS1 = T1-Z1;//和⼗位的算法。
S2 = c2;//和百位的算法。
End
//利⽤case语句分别让数码管显⽰加数,被加数,和的各位。always @(A0)
begin
case(A0)
4'd0:a0=7'b0000001;
4'd1:a0=7'b1001111;
4'd2:a0=7'b0010010;
4'd3:a0=7'b0000110;
4'd4:a0=7'b1001100;
4'd5:a0=7'b0100100;
4'd6:a0=7'b0100000;
4'd7:a0=7'b0001111;
4'd8:a0=7'b0000000;
4'd9:a0=7'b0000100;
default: a0=7'bx;
end
always @(A1) begin
case(A1)
4'd0:a1=7'b0000001; 4'd1:a1=7'b1001111; 4'd2:a1=7'b0010010; 4'd3:a1=7'b0000110; 4'd4:a1=7'b1001100;4'd5:a1=7'b0100100; 4'd6:a1=7'b0100000; 4'd7:a1=7'b0001111; 4'd8:a1=7'b0000000; 4'd9:a1=7'b0000100; default:a1=7'bx; endcase
end
always @(B0)
begin
case(B0)
4'd0:b0=7'b0000001; 4'd1:b0=7'b1001111; 4'd2:b0=7'b0010010; 4'd3:b0=7'b0000110; 4'd4:b0=7'b1001100;4'd5:b0=7'b0100100;
4'd7:b0=7'b0001111; 4'd8:b0=7'b0000000; 4'd9:b0=7'b0000100; default: b0=7'bx; endcase
end
always @(B1)
begin
case(B1)
4'd0:b1=7'b0000001; 4'd1:b1=7'b1001111; 4'd2:b1=7'b0010010; 4'd3:b1=7'b0000110; 4'd4:b1=7'b1001100;4'd5:b1=7'b0100100; 4'd6:b1=7'b0100000; 4'd7:b1=7'b0001111; 4'd8:b1=7'b0000000; 4'd9:b1=7'b0000100; default:b1=7'bx; endcaseend
always @(S0)
begin
case(S0)
4'd0:s0=7'b0000001;
4'd2:s0=7'b0010010; 4'd3:s0=7'b0000110; 4'd4:s0=7'b1001100; 4'd5:s0=7'b0100100; 4'd6:s0=7'b0100000;4'd7:s0=7'b0001111; 4'd8:s0=7'b0000000; 4'd9:s0=7'b0000100; default: s0=7'bx; endcase
end
always @(S1) begin
case(S1)
4'd0:s1=7'b0000001; 4'd1:s1=7'b1001111; 4'd2:s1=7'b0010010; 4'd3:s1=7'b0000110; 4'd4:s1=7'b1001100;4'd5:s1=7'b0100100; 4'd6:s1=7'b0100000; 4'd7:s1=7'b0001111; 4'd8:s1=7'b0000000; 4'd9:s1=7'b0000100; default: s1=7'bx;endcase
end
always @(S2) begin
case(S2)
4'd0:s2=7'b0000001; 4'd1:s2=7'b1001111; 4'd2:s2=7'b0010010; 4'd3:s2=7'b0000110; 4'd4:s2=7'b1001100;4'd5:s2=7'b0100100; 4'd6:s2=7'b0100000; 4'd7:s2=7'b0001111; 4'd8:s2=7'b0000000; 4'd9:s2=7'b0000100; default: s2=7'bx;endcase
end
endmodule⼆、仿真结果
能够完成从1到99的加法运算,并且正常显⽰。
三、实验体会
完成这个2位BCD码加法器的难点在于算法的实现,利⽤if…else实现进位,并通过中间变量赋给⾼⼀位,同时得出低⼀位的数值。数码管的显⽰部分复习了上学期学习的内容。