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实现进位,并通过中间变量赋给⾼⼀位,同时得出低⼀位的数值。数码管的显⽰部分复习了上学期学习的内容。