Merge pull request #4607 from povik/ql-nodiv

quicklogic: Avoid carry chains in division mapping
This commit is contained in:
Martin Povišer 2024-10-07 16:11:11 +02:00 committed by GitHub
commit 6c1450fdaf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 2 deletions

View File

@ -304,6 +304,7 @@ endmodule
// Divide and Modulo
// --------------------------------------------------------
`ifndef NODIV
module \$__div_mod_u (A, B, Y, R);
parameter WIDTH = 1;
@ -531,7 +532,7 @@ module _90_modfloor (A, B, Y);
.R(Y)
);
endmodule
`endif
// --------------------------------------------------------
// Power

View File

@ -266,7 +266,8 @@ struct SynthQuickLogicPass : public ScriptPass {
if (check_label("map_gates")) {
if (inferAdder && family == "qlf_k6n10f") {
run("techmap -map +/techmap.v -map " + lib_path + family + "/arith_map.v", "(unless -no_adder)");
run("techmap -map +/techmap.v -map " + lib_path + family + "/arith_map.v -D NODIV", "(unless -no_adder)");
run("techmap", "(unless -no_adder)");
} else {
run("techmap");
}

View File

@ -0,0 +1,14 @@
# division by constants should not infer carry chains.
read_verilog <<EOF
module top (input [15:0] a, output [15:0] y);
assign y = a / 3;
endmodule
EOF
equiv_opt -assert -map +/quicklogic/qlf_k6n10f/cells_sim.v synth_quicklogic -family qlf_k6n10f
design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
cd top # Constrain all select calls below inside the top module
select -assert-max 100 t:$lut
select -assert-none t:$lut %% t:* %D