Added Altera Cyclon III cell library to xsthammer
authorClifford Wolf <clifford@clifford.at>
Thu, 4 Jul 2013 12:50:03 +0000 (14:50 +0200)
committerClifford Wolf <clifford@clifford.at>
Thu, 4 Jul 2013 12:50:03 +0000 (14:50 +0200)
tests/xsthammer/Makefile
tests/xsthammer/cy_cells.v [new file with mode: 0644]
tests/xsthammer/run-check.sh

index 60aebcd32fac08fa559db1446c4a86eebd794bf3..792dce9e19914c8cec07900a877d17077a13266a 100644 (file)
@@ -14,7 +14,7 @@ check_vivado/%.log: rtl/%.v vivado/%.v
        bash run-check.sh -vivado $(notdir $(basename $<))
 
 check_quartus/%.log: rtl/%.v quartus/%.v
-       bash run-check.sh -quartus $(notdir $(basename $<))
+       bash run-check.sh -quartus $(notdir $(basename $<))
 
 xst/%.v: rtl/%.v
        bash run-xst.sh $(notdir $(basename $<))
diff --git a/tests/xsthammer/cy_cells.v b/tests/xsthammer/cy_cells.v
new file mode 100644 (file)
index 0000000..29161e0
--- /dev/null
@@ -0,0 +1,86 @@
+
+// Based on the simulation models from /opt/altera/13.0/quartus/eda/sim_lib/cycloneiii_atoms.v
+
+module cycloneiii_lcell_comb (dataa, datab, datac, datad, cin, combout, cout);
+
+input dataa, datab, datac, datad, cin;
+output combout, cout;
+
+parameter lut_mask = 16'hFFFF;
+parameter sum_lutc_input = "datac";
+parameter dont_touch = "off";
+parameter lpm_type = "cycloneiii_lcell_comb";
+
+reg cout_tmp, combout_tmp;
+reg [1:0] isum_lutc_input;
+
+// 4-input LUT function
+function lut4;
+       input [15:0] mask;
+       input dataa, datab, datac, datad;
+       begin
+           lut4 = datad ? ( datac ? ( datab ? ( dataa ? mask[15] : mask[14])
+                                            : ( dataa ? mask[13] : mask[12]))
+                                  : ( datab ? ( dataa ? mask[11] : mask[10])
+                                            : ( dataa ? mask[ 9] : mask[ 8])))
+                        : ( datac ? ( datab ? ( dataa ? mask[ 7] : mask[ 6])
+                                            : ( dataa ? mask[ 5] : mask[ 4]))
+                                  : ( datab ? ( dataa ? mask[ 3] : mask[ 2])
+                                            : ( dataa ? mask[ 1] : mask[ 0])));
+       end
+endfunction
+
+initial
+       if (sum_lutc_input == "datac")
+               isum_lutc_input = 0;
+       else if (sum_lutc_input == "cin")
+               isum_lutc_input = 1;
+       else
+               isum_lutc_input = 2;
+
+always @* begin
+       if (isum_lutc_input == 0) // datac 
+               combout_tmp = lut4(lut_mask, dataa, datab, datac, datad);
+       else if (isum_lutc_input == 1) // cin
+               combout_tmp = lut4(lut_mask, dataa, datab, cin, datad);
+       cout_tmp = lut4(lut_mask, dataa, datab, cin, 'b0);
+end
+
+assign combout = combout_tmp;
+assign cout = cout_tmp;
+
+endmodule
+
+// ----------------------------------------------------------------------
+
+module cycloneiii_io_ibuf (i, ibar, o);
+
+parameter differential_mode = "false";
+parameter bus_hold = "false";
+parameter simulate_z_as = "Z";
+parameter lpm_type = "cycloneiii_io_ibuf";
+
+input i, ibar;
+output o;
+
+assign o = i;
+
+endmodule
+
+// ----------------------------------------------------------------------
+
+module cycloneiii_io_obuf (i, oe, seriesterminationcontrol, devoe, o, obar);
+
+parameter open_drain_output = "false";
+parameter bus_hold = "false";
+parameter lpm_type = "cycloneiii_io_obuf";
+
+input i, oe, devoe;
+input [15:0] seriesterminationcontrol; 
+output o, obar;
+
+assign o = i;
+assign obar = ~i;
+
+endmodule
+
index 64f0da6d7393b662c56c6fc1a13a7369d2f7131f..99daa137833feec859e0a86b9d5db0f4555a8596 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/bash
 
 use_vivado=false
+use_quartus=false
 checkdir="check"
 
 if [ "$1" = "-vivado" ]; then
@@ -9,6 +10,12 @@ if [ "$1" = "-vivado" ]; then
        shift
 fi
 
+if [ "$1" = "-quartus" ]; then
+       use_quartus=true
+       checkdir="check_quartus"
+       shift
+fi
+
 if [ $# -eq 0 ]; then
        echo "Usage: $0 <job_id>" >&2
        exit 1
@@ -22,21 +29,23 @@ mkdir -p $checkdir check_temp/$job
 cd check_temp/$job
 
 {
-       echo "module ${job}_top(a, b, y_rtl, y_xst);"
-       sed -r '/^(input|output) / !d; /output/ { s/ y;/ y_rtl;/; p; }; s/ y_rtl;/ y_xst;/;' ../../rtl/$job.v
+       echo "module ${job}_top(a, b, y_rtl, y_syn);"
+       sed -r '/^(input|output) / !d; /output/ { s/ y;/ y_rtl;/; p; }; s/ y_rtl;/ y_syn;/;' ../../rtl/$job.v
        echo "${job}_rtl rtl_variant (.a(a), .b(b), .y(y_rtl));"
-       echo "${job}_xst xst_variant (.a(a), .b(b), .y(y_xst));"
+       echo "${job}_syn syn_variant (.a(a), .b(b), .y(y_syn));"
        echo "endmodule"
 } > ${job}_top.v
 
 for mode in nomap techmap; do
        {
-               if $use_vivado; then
+               if $use_quartus; then
+                       echo "read_verilog ../../quartus/$job.v"
+               elif $use_vivado; then
                        echo "read_verilog ../../vivado/$job.v"
                else
                        echo "read_verilog -DGLBL ../../xst/$job.v"
                fi
-               echo "rename $job ${job}_xst"
+               echo "rename $job ${job}_syn"
 
                echo "read_verilog ../../rtl/$job.v"
                echo "rename $job ${job}_rtl"
@@ -45,18 +54,24 @@ for mode in nomap techmap; do
                fi
 
                echo "read_verilog ${job}_top.v"
-               echo "read_verilog ../../xl_cells.v"
+               if $use_quartus; then
+                       echo "read_verilog ../../cy_cells.v"
+               else
+                       echo "read_verilog ../../xl_cells.v"
+               fi
 
                echo "hierarchy -top ${job}_top"
-               echo "flatten ${job}_xst"
+               echo "proc"
+
+               echo "flatten ${job}_syn"
                echo "flatten ${job}_rtl"
                echo "flatten ${job}_top"
                echo "opt_clean"
 
-               echo "rename ${job}_xst ${job}_xst_${mode}"
+               echo "rename ${job}_syn ${job}_syn_${mode}"
                echo "rename ${job}_rtl ${job}_rtl_${mode}"
                echo "rename ${job}_top ${job}_top_${mode}"
-               echo "dump -outfile ${job}_top_${mode}.il ${job}_xst_${mode} ${job}_rtl_${mode} ${job}_top_${mode}"
+               echo "dump -outfile ${job}_top_${mode}.il ${job}_syn_${mode} ${job}_rtl_${mode} ${job}_top_${mode}"
        } > ${job}_top_${mode}.ys
        ../../../../yosys -q ${job}_top_${mode}.ys
 done
@@ -64,11 +79,11 @@ done
 {
        echo "read_ilang ${job}_top_nomap.il"
        echo "read_ilang ${job}_top_techmap.il"
-       echo "sat -timeout 60 -verify-no-timeout -show a,b,y_rtl,y_xst -prove y_rtl y_xst ${job}_top_nomap"
-       echo "sat -timeout 60 -verify-no-timeout -show a,b,y_rtl,y_xst -prove y_rtl y_xst ${job}_top_techmap"
+       echo "sat -timeout 60 -verify-no-timeout -show a,b,y_rtl,y_syn -prove y_rtl y_syn ${job}_top_nomap"
+       echo "sat -timeout 60 -verify-no-timeout -show a,b,y_rtl,y_syn -prove y_rtl y_syn ${job}_top_techmap"
        if [[ $job != expression_* ]]; then
-               echo "eval -brute_force_equiv_checker ${job}_rtl_nomap   ${job}_xst_nomap"
-               echo "eval -brute_force_equiv_checker ${job}_rtl_techmap ${job}_xst_techmap"
+               echo "eval -brute_force_equiv_checker ${job}_rtl_nomap   ${job}_syn_nomap"
+               echo "eval -brute_force_equiv_checker ${job}_rtl_techmap ${job}_syn_techmap"
        fi
 } > ${job}_cmp.ys