diff --git a/cpu/alu/adder16.sv b/cpu/alu/adder16.sv index 7e596d1..fc8e2d7 100644 --- a/cpu/alu/adder16.sv +++ b/cpu/alu/adder16.sv @@ -1,4 +1,5 @@ import adder::*; +import lookahead::*; package adder16 ( output [15:0]sum16, @@ -8,21 +9,23 @@ package adder16 ( wire [15:0]c ); -adder(sum16[0], carry16[0], a16[0], b16[0], c[0] = 0); -adder(sum16[1], carry16[1], a16[1], b16[1], c[1] = carry16[0]); -adder(sum16[2], carry16[2], a16[2], b16[2], c[2] = carry16[1]); -adder(sum16[3], carry16[3], a16[3], b16[3], c[3] = carry16[2]); -adder(sum16[4], carry16[4], a16[4], b16[4], c[4] = carry16[3]); -adder(sum16[5], carry16[5], a16[5], b16[5], c[5] = carry16[4]); -adder(sum16[6], carry16[6], a16[6], b16[6], c[6] = carry16[5]); -adder(sum16[7], carry16[7], a16[7], b16[7], c[7] = carry16[6]); -adder(sum16[8], carry16[8], a16[8], b16[8], c[8] = carry16[7]); -adder(sum16[9], carry16[9], a16[9], b16[9], c[9] = carry16[8]); -adder(sum16[10], carry16[10], a16[10], b16[10], c[10] = carry16[9]); -adder(sum16[11], carry16[11], a16[11], b16[11], c[11] = carry16[10]); -adder(sum16[12], carry16[12], a16[12], b16[12], c[12] = carry16[11]); -adder(sum16[13], carry16[13], a16[13], b16[13], c[13] = carry16[12]); -adder(sum16[14], carry16[14], a16[14], b16[14], c[14] = carry16[13]); -adder(sum16[15], carry16[15], a16[15], b16[15], c[15] = carry16[14]); +lookahead(c, a, b); + +adder(sum16[0], carry16[0] = c[0], a16[0], b16[0],); +adder(sum16[1], carry16[1] = c[1], a16[1], b16[1]); +adder(sum16[2], carry16[2] = c[2], a16[2], b16[2]); +adder(sum16[3], carry16[3] = c[3], a16[3], b16[3]); +adder(sum16[4], carry16[4] = c[4], a16[4], b16[4]); +adder(sum16[5], carry16[5] = c[5], a16[5], b16[5]); +adder(sum16[6], carry16[6] = c[6], a16[6], b16[6]); +adder(sum16[7], carry16[7] = c[7], a16[7], b16[7]); +adder(sum16[8], carry16[8] = c[8], a16[8], b16[8]); +adder(sum16[9], carry16[9] = c[9], a16[9], b16[9]); +adder(sum16[10], carry16[10] = c[10], a16[10], b16[10]); +adder(sum16[11], carry16[11] = c[11], a16[11], b16[11]); +adder(sum16[12], carry16[12] = c[12], a16[12], b16[12]); +adder(sum16[13], carry16[13] = c[13], a16[13], b16[13]); +adder(sum16[14], carry16[14] = c[14], a16[14], b16[14]); +adder(sum16[15], carry16[15] = c[15], a16[15], b16[15]); endpackage \ No newline at end of file diff --git a/cpu/alu/lookahead.sv b/cpu/alu/lookahead.sv new file mode 100644 index 0000000..617f131 --- /dev/null +++ b/cpu/alu/lookahead.sv @@ -0,0 +1,17 @@ +package lookahead ( + output [15:0]carry_bit, + input [15:0]a, + input [15:0]b, +); + + res = and16(y, a, b); + + for (i=0; i<15 ; i=i+1) + if (res[i] = 0) + carry_bit[i] = 0; + else + carry_bit[i] = 1; + end + end + +endpackage \ No newline at end of file