Merge pull request #122 from samycharas/fix_adder_mapping
Fix adder mapping
diff --git a/README.md b/README.md
index 4721300..0e3fc84 100644
--- a/README.md
+++ b/README.md
@@ -63,6 +63,7 @@
The plugin adds the following command:
* synth_quicklogic
+* ql_dsp
Detailed help on the supported command(s) can be obtained by running `help <command_name>` in Yosys.
diff --git a/ql-qlf-plugin/qlf_k6n10/arith_map.v b/ql-qlf-plugin/qlf_k6n10/arith_map.v
index 2d8dee5..6b275d3 100644
--- a/ql-qlf-plugin/qlf_k6n10/arith_map.v
+++ b/ql-qlf-plugin/qlf_k6n10/arith_map.v
@@ -38,10 +38,30 @@
endgenerate
wire [Y_WIDTH: 0 ] CARRY;
- assign CARRY[0] = CI;
+
+ // Due to VPR limitations regarding IO connexion to carry chain,
+ // we generate the carry chain input signal using an intermediate adder
+ // since we can connect a & b from io pads, but not cin & cout
+ generate
+ adder intermediate_adder (
+ .cin ( ),
+ .cout (CARRY[0]),
+ .a (CI ),
+ .b (CI ),
+ .sumout ( )
+ );
+
+ adder first_adder (
+ .cin (CARRY[0]),
+ .cout (CARRY[1]),
+ .a (AA[0] ),
+ .b (BB[0] ),
+ .sumout (Y[0] )
+ );
+ endgenerate
genvar i;
- generate for (i = 0; i < Y_WIDTH - 1; i = i+1) begin:gen3
+ generate for (i = 1; i < Y_WIDTH - 1; i = i+1) begin:gen3
adder my_adder (
.cin (CARRY[i] ),
.cout (CARRY[i+1]),
@@ -50,19 +70,6 @@
.sumout (Y[i] )
);
end endgenerate
-
- generate if ((Y_WIDTH -1) % 20 == 0) begin:gen4
- assign Y[Y_WIDTH-1] = CARRY[Y_WIDTH-1];
- end else begin:gen5
- adder my_adder (
- .cin (CARRY[Y_WIDTH - 1]),
- .cout (CARRY[Y_WIDTH] ),
- .a (1'b0 ),
- .b (1'b0 ),
- .sumout (Y[Y_WIDTH -1] )
- );
- end
- endgenerate
assign X = AA ^ BB;
endmodule
diff --git a/ql-qlf-plugin/qlf_k6n10/cells_sim.v b/ql-qlf-plugin/qlf_k6n10/cells_sim.v
index 36872ce..ad22df3 100644
--- a/ql-qlf-plugin/qlf_k6n10/cells_sim.v
+++ b/ql-qlf-plugin/qlf_k6n10/cells_sim.v
@@ -63,7 +63,7 @@
assign lut4_out[2] = s4[2];
assign lut4_out[3] = s4[3];
- assign lut5_out[0] = s0[0];
+ assign lut5_out[0] = s5[0];
assign lut5_out[1] = s5[1];
assign lut6_out = li[5] ? s5[0] : s5[1];
@@ -182,7 +182,7 @@
(* invertible_pin = "IS_C_INVERTED" *)
input C,
input S,
- input E,
+ input E
);
parameter [0:0] INIT = 1'b0;
parameter [0:0] IS_C_INVERTED = 1'b0;
diff --git a/ql-qlf-plugin/tests/full_adder/full_adder.tcl b/ql-qlf-plugin/tests/full_adder/full_adder.tcl
index 6365284..9c5a402 100644
--- a/ql-qlf-plugin/tests/full_adder/full_adder.tcl
+++ b/ql-qlf-plugin/tests/full_adder/full_adder.tcl
@@ -17,21 +17,26 @@
equiv_opt -assert -map +/quicklogic/qlf_k4n8/cells_sim.v synth_quicklogic -family qlf_k4n8
design -reset
+
# Equivalence check for adder synthesis for qlf-k6n10
read_verilog -icells -DWIDTH=4 $::env(DESIGN_TOP).v
hierarchy -check -top full_adder
yosys proc
-equiv_opt -assert -map +/quicklogic/qlf_k6n10/cells_sim.v synth_quicklogic -family qlf_k6n10
+synth_quicklogic -family qlf_k6n10
+yosys cd full_adder
+stat
+select -assert-count 5 t:adder
design -reset
-#TODO: Fix equivalence check for substractor design with qlf_k6n10 device
-
-## Equivalence check for subtractor synthesis
-#read_verilog -icells -DWIDTH=4 $::env(DESIGN_TOP).v
-#hierarchy -check -top subtractor
-#yosys proc
-#equiv_opt -assert -map +/quicklogic/qlf_k6n10/cells_sim.v synth_quicklogic -family qlf_k6n10
+# Equivalence check for subtractor synthesis for qlf-k6n10
+read_verilog -icells -DWIDTH=4 $::env(DESIGN_TOP).v
+hierarchy -check -top subtractor
+yosys proc
+synth_quicklogic -family qlf_k6n10
+yosys cd subtractor
+stat
+select -assert-count 5 t:adder
design -reset