aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/anlogic/arith_map.v
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2019-08-22 18:09:10 +0200
committerGitHub <noreply@github.com>2019-08-22 18:09:10 +0200
commit2c8c8b3c74ccc630e56c412a83fa60fb7066fb4d (patch)
tree95a650ffaadbce982b0801ef0e782e1f193992cc /techlibs/anlogic/arith_map.v
parent4c449caf9bb7a855b8e61cb96f99f59141ea6ef5 (diff)
parent4a32e29445f65edd1726808a7353a9d0e2560c00 (diff)
downloadyosys-2c8c8b3c74ccc630e56c412a83fa60fb7066fb4d.tar.gz
yosys-2c8c8b3c74ccc630e56c412a83fa60fb7066fb4d.tar.bz2
yosys-2c8c8b3c74ccc630e56c412a83fa60fb7066fb4d.zip
Merge pull request #1289 from mmicko/anlogic_fixes
Anlogic fixes and optimization
Diffstat (limited to 'techlibs/anlogic/arith_map.v')
-rw-r--r--techlibs/anlogic/arith_map.v42
1 files changed, 25 insertions, 17 deletions
diff --git a/techlibs/anlogic/arith_map.v b/techlibs/anlogic/arith_map.v
index 6d6a7ca37..d783b0212 100644
--- a/techlibs/anlogic/arith_map.v
+++ b/techlibs/anlogic/arith_map.v
@@ -31,7 +31,10 @@ module _80_anlogic_alu (A, B, CI, BI, X, Y, CO);
output [Y_WIDTH-1:0] X, Y;
input CI, BI;
- output CO;
+ output [Y_WIDTH-1:0] CO;
+
+ wire CIx;
+ wire [Y_WIDTH-1:0] COx;
wire _TECHMAP_FAIL_ = Y_WIDTH <= 2;
@@ -41,15 +44,16 @@ module _80_anlogic_alu (A, B, CI, BI, X, Y, CO);
wire [Y_WIDTH-1:0] AA = A_buf;
wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf;
- wire [Y_WIDTH+1:0] COx;
- wire [Y_WIDTH+2:0] C = {COx, CI};
+ wire [Y_WIDTH-1:0] C = { COx, CIx };
wire dummy;
AL_MAP_ADDER #(
.ALUTYPE("ADD_CARRY"))
adder_cin (
- .a(C[0]),
- .o({COx[0], dummy})
+ .a(CI),
+ .b(1'b0),
+ .c(1'b0),
+ .o({CIx, dummy})
);
genvar i;
@@ -59,18 +63,22 @@ module _80_anlogic_alu (A, B, CI, BI, X, Y, CO);
) adder_i (
.a(AA[i]),
.b(BB[i]),
- .c(C[i+1]),
- .o({COx[i+1],Y[i]})
+ .c(C[i]),
+ .o({COx[i],Y[i]})
);
- end: slice
+
+ wire cout;
+ AL_MAP_ADDER #(
+ .ALUTYPE("ADD"))
+ adder_cout (
+ .a(1'b0),
+ .b(1'b0),
+ .c(COx[i]),
+ .o({cout, CO[i]})
+ );
+ end: slice
endgenerate
- /* End implementation */
- AL_MAP_ADDER #(
- .ALUTYPE("ADD"))
- adder_cout (
- .c(C[Y_WIDTH+1]),
- .o(COx[Y_WIDTH+1])
- );
- assign CO = COx[Y_WIDTH+1];
- assign X = AA ^ BB;
+
+ /* End implementation */
+ assign X = AA ^ BB;
endmodule \ No newline at end of file