ambiguous_tore.v 1.86 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
module MI;
    parameter KIND = "";
    parameter DELAY = 0;
    parameter PREFIX = "";
    parameter SUFFIX = "";
    parameter E = 1;
    parameter T = 1;
    initial #DELAY $display("%s: %sE%s=%0d $bits(%sT%s)=%0d",
        KIND, PREFIX, SUFFIX, E, PREFIX, SUFFIX, T);
endmodule

module top;
    parameter FLAG = 1;

    `define TEST(D, prefix, eval, tval, leftval) \
        if (FLAG) begin \
            localparam [eval:1] ez = 1'sbz; \
            localparam [tval:1] tz = 1'sbz; \
            initial begin \
                #(D * 10); \
                $display(`"prefix``E = %0d %0d`", eval, eval); \
                $display(`"$bits(prefix``E) = %0d %0d`", 32, 32); \
                $display(`"$bits(prefix``T) = %0d %0d`", tval, tval); \
                $display(`"$left(prefix``E) = %0d`", 31); \
                $display(`"$left(prefix``T) = %0d`", leftval); \
                $display(`"prefix``E'('z) = %b`", ez); \
                $display(`"prefix``T'('z) = %b`", tz); \
            end \
            MI #("I", D*10+1, `"prefix`", "", eval, tval) i1(); \
            MI #("M", D*10+2, `"prefix`", "", eval, tval) m1(); \
            MI #("I", D*10+3, `"prefix`", "[6]", (eval >> 6) & 1'b1, tval*6) i2(); \
            MI #("M", D*10+4, `"prefix`", "[6]", (eval >> 6) & 1'b1, tval*6) m2(); \
            MI #("I", D*10+5, `"prefix`", "[6:0]", eval & 7'h7f, tval * 7) i3(); \
            MI #("M", D*10+6, `"prefix`", "[6:0]", eval & 7'h7f, tval * 7) m3(); \
        end

    `define TEST_C(D, prefix, efac, tfac) \
        `TEST(D, prefix, (efac)*(tfac), (tfac)*(efac), (efac)-1)

    `TEST(0, , 3, 6, 5)
    `TEST(1, P::, 2, 2, 1)

    `TEST_C(2, C#()::, 1, 1)
    `TEST_C(3, C#(E, T)::, 3, 6)
    `TEST_C(4, C#(P::E, P::T)::, 2, 2)
    `TEST_C(5, C#(C#(E, T)::E, C#(E, T)::T)::, 18, 18)
    `TEST_C(6, C#(E[1], T[2])::, 1, 12)
    `TEST_C(7, C#(E[2:0], T[2:0])::, 3, 18)

endmodule