sometimes you just want a BCD adder instead of a binary adder. here is a 16bit one that works.

//put the cla and #1 adders together to make them easier to merge

module bcdadd4(

output co,

output [15:0] s,

input [15:0] a,b,

input cin);

wire p_up,g_up;

wire [3:0] p,g;

wire [3:0] carry;

pfa_bcd add[3:0](.p(p),.g(g),.s(s),.a(a),.b(b),.cin({carry[2:0], cin}));

cla localcla(.p_up(p_up),.g_up(g_up),.cout(carry),.p(p),.g(g),.cin(cin));

assign co = carry[3];

endmodule

module pfa_bcd(output reg p, g, output reg[3:0] s, input cin, input[3:0] a, b);

always @(*) begin

s <= (a+b+cin) % 10;

p <= (a+b == 9);

g <= (a+b > 9);

end

endmodule

## No comments:

Post a Comment