diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/memories/issue00335.v | 28 | ||||
| -rw-r--r-- | tests/memories/issue00710.v | 17 | ||||
| -rwxr-xr-x | tests/memories/run-test.sh | 6 | ||||
| -rw-r--r-- | tests/various/muxpack.v | 62 | ||||
| -rw-r--r-- | tests/various/muxpack.ys | 54 | 
5 files changed, 165 insertions, 2 deletions
| diff --git a/tests/memories/issue00335.v b/tests/memories/issue00335.v new file mode 100644 index 000000000..f3b6e5dfe --- /dev/null +++ b/tests/memories/issue00335.v @@ -0,0 +1,28 @@ +// expect-wr-ports 1 +// expect-rd-ports 1 +// expect-rd-clk \clk + +module ram2 (input clk, +             input             sel, +             input             we,  +             input [SIZE-1:0]  adr,  +             input [63:0]      dat_i,  +             output reg [63:0] dat_o); +   parameter  SIZE = 5; // Address size + +   reg [63:0] mem [0:(1 << SIZE)-1]; +   integer    i; + +   initial begin +      for (i = 0; i < (1<<SIZE) - 1; i = i + 1) +        mem[i] <= 0; +   end +    +   always @(posedge clk) +     if (sel) begin +       if (~we) +         dat_o <= mem[adr]; +       else +         mem[adr] <= dat_i; +     end +endmodule diff --git a/tests/memories/issue00710.v b/tests/memories/issue00710.v new file mode 100644 index 000000000..7a5fad1c2 --- /dev/null +++ b/tests/memories/issue00710.v @@ -0,0 +1,17 @@ +// expect-wr-ports 1 +// expect-rd-ports 1 +// expect-rd-clk \clk + +module top(input clk, input we, re, reset, input [7:0] addr, wdata, output reg [7:0] rdata); + +reg [7:0] bram[0:255]; +(* keep *) reg dummy; + +always @(posedge clk) +	if (reset) +		dummy <= 1'b0; +	else if (re) +		rdata <= bram[addr]; +	else if (we) +		bram[addr] <= wdata; +endmodule diff --git a/tests/memories/run-test.sh b/tests/memories/run-test.sh index 734a96682..d0537bb98 100755 --- a/tests/memories/run-test.sh +++ b/tests/memories/run-test.sh @@ -14,7 +14,7 @@ shift "$((OPTIND-1))"  bash ../tools/autotest.sh $seed -G *.v -for f in `egrep -l 'expect-(wr|rd)-ports' *.v`; do +for f in `egrep -l 'expect-(wr-ports|rd-ports|rd-clk)' *.v`; do  	echo -n "Testing expectations for $f .."  	../../yosys -qp "proc; opt; memory -nomap;; dump -outfile ${f%.v}.dmp t:\$mem" $f  	if grep -q expect-wr-ports $f; then @@ -25,6 +25,10 @@ for f in `egrep -l 'expect-(wr|rd)-ports' *.v`; do  		grep -q "parameter \\\\RD_PORTS $(gawk '/expect-rd-ports/ { print $3; }' $f)\$" ${f%.v}.dmp ||  				{ echo " ERROR: Unexpected number of read ports."; false; }  	fi +	if grep -q expect-rd-clk $f; then +		grep -q "connect \\\\RD_CLK \\$(gawk '/expect-rd-clk/ { print $3; }' $f)\$" ${f%.v}.dmp || +				{ echo " ERROR: Unexpected read clock."; false; } +	fi  	echo " ok."  done diff --git a/tests/various/muxpack.v b/tests/various/muxpack.v index 3a1086dbf..33ece1f16 100644 --- a/tests/various/muxpack.v +++ b/tests/various/muxpack.v @@ -187,7 +187,8 @@ module case_nonexclusive_select (  );          always @* begin              case (x) -                0, 2: o = b; +                0: o = b; +                2: o = b;                  1: o = c;                  default: begin                      o = a; @@ -197,3 +198,62 @@ module case_nonexclusive_select (          endcase          end  endmodule + +module case_nonoverlap ( +        input wire [2:0] x, +        input wire a, b, c, d, e, +        output reg o +); +        always @* begin +            case (x) +                0, 2: o = b; // Creates $reduce_or +                1: o = c; +                default: +                    case (x) +                        3: o = d; 4: o = d; // Creates $reduce_or +                        5: o = e; +                        default: o = 1'b0; +                    endcase +        endcase +        end +endmodule + +module case_overlap ( +        input wire [2:0] x, +        input wire a, b, c, d, e, +        output reg o +); +        always @* begin +            case (x) +                0, 2: o = b; // Creates $reduce_or +                1: o = c; +                default: +                    case (x) +                        0: o = 1'b1; // OVERLAP! +                        3, 4: o = d; // Creates $reduce_or +                        5: o = e; +                        default: o = 1'b0; +                    endcase +        endcase +        end +endmodule + +module case_overlap2 ( +        input wire [2:0] x, +        input wire a, b, c, d, e, +        output reg o +); +        always @* begin +            case (x) +                0: o = b; 2: o = b; // Creates $reduce_or +                1: o = c; +                default: +                    case (x) +                        0: o = d; 2: o = d; // Creates $reduce_or +                        3: o = d; 4: o = d; // Creates $reduce_or +                        5: o = e; +                        default: o = 1'b0; +                    endcase +        endcase +        end +endmodule diff --git a/tests/various/muxpack.ys b/tests/various/muxpack.ys index 579dad8d3..af23fcec8 100644 --- a/tests/various/muxpack.ys +++ b/tests/various/muxpack.ys @@ -212,3 +212,57 @@ design -import gold -as gold  design -import gate -as gate  miter -equiv -flatten -make_assert -make_outputs gold gate miter  sat -verify -prove-asserts -show-ports miter + +design -load read +hierarchy -top case_nonoverlap +#prep # Do not prep otherwise $pmux's overlapping entry will get removed +proc +design -save gold +opt -fast -mux_undef +select -assert-count 2 t:$pmux +muxpack +opt +stat +select -assert-count 0 t:$mux +select -assert-count 1 t:$pmux +design -stash gate +design -import gold -as gold +design -import gate -as gate +miter -equiv -flatten -make_assert -make_outputs gold gate miter +sat -verify -prove-asserts -show-ports miter + +design -load read +hierarchy -top case_overlap +#prep # Do not prep otherwise $pmux's overlapping entry will get removed +proc +design -save gold +opt -fast -mux_undef +select -assert-count 2 t:$pmux +muxpack +opt +stat +select -assert-count 0 t:$mux +select -assert-count 2 t:$pmux +design -stash gate +design -import gold -as gold +design -import gate -as gate +miter -equiv -flatten -make_assert -make_outputs gold gate miter +sat -verify -prove-asserts -show-ports miter + +design -load read +hierarchy -top case_overlap2 +#prep # Do not prep otherwise $pmux's overlapping entry will get removed +proc +design -save gold +opt -fast -mux_undef +select -assert-count 2 t:$pmux +muxpack +opt +stat +select -assert-count 0 t:$mux +select -assert-count 2 t:$pmux +design -stash gate +design -import gold -as gold +design -import gate -as gate +miter -equiv -flatten -make_assert -make_outputs gold gate miter +sat -verify -prove-asserts -show-ports miter | 
