struct_shadow.sv 4.71 KB
Newer Older
1 2 3 4 5 6
typedef struct packed { reg w; bit x; logic y; } StructA;
typedef struct packed { reg w; logic y; bit x; } StructB;
typedef struct packed { bit x; reg w; logic y; } StructC;
typedef struct packed { logic y; reg w; bit x; } StructD;
typedef struct packed { bit x; logic y; reg w; } StructE;
typedef struct packed { logic y; bit x; reg w; } StructF;
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

module top;

    integer i, j, k;
    StructA a;
    StructB b;
    StructC c;
    StructD d;
    StructE e;
    StructF f;
    initial begin
        for (i = 0; i < 2; i++) begin
            for (j = 0; j < 2; j++) begin
                for (k = 0; k < 2; k++) begin
                    a = '{ w:i, x:j, y:k };
                    b = '{ w:i, x:j, y:k };
                    c = '{ w:i, x:j, y:k };
                    d = '{ w:i, x:j, y:k };
                    e = '{ w:i, x:j, y:k };
                    f = '{ w:i, x:j, y:k };
                    $display("A: %1d%1d%1d -> ", i,j,k, a,b,c,d,e,f);
                end
            end
        end
    end

    initial begin
        integer i, j, k;
        StructB a;
        StructC b;
        StructD c;
        StructE d;
        StructF e;
        StructA f;
        for (i = 0; i < 2; i++) begin
            for (j = 0; j < 2; j++) begin
                for (k = 0; k < 2; k++) begin
                    a = '{ w:i, x:j, y:k };
                    b = '{ w:i, x:j, y:k };
                    c = '{ w:i, x:j, y:k };
                    d = '{ w:i, x:j, y:k };
                    e = '{ w:i, x:j, y:k };
                    f = '{ w:i, x:j, y:k };
                    $display("B: %1d%1d%1d -> ", i,j,k, a,b,c,d,e,f);
                end
            end
        end

        begin
            integer i, j, k;
            StructC a;
            StructD b;
            StructE c;
            StructF d;
            StructA e;
            StructB f;
            for (i = 0; i < 2; i++) begin
                for (j = 0; j < 2; j++) begin
                    for (k = 0; k < 2; k++) begin
                        a = '{ w:i, x:j, y:k };
                        b = '{ w:i, x:j, y:k };
                        c = '{ w:i, x:j, y:k };
                        d = '{ w:i, x:j, y:k };
                        e = '{ w:i, x:j, y:k };
                        f = '{ w:i, x:j, y:k };
                        $display("C: %1d%1d%1d -> ", i,j,k, a,b,c,d,e,f);
                    end
                end
            end
        end
    end

    task foo;
        integer i, j, k;
        StructD a;
        StructE b;
        StructF c;
        StructA d;
        StructB e;
        StructC f;
        for (i = 0; i < 2; i++) begin
            for (j = 0; j < 2; j++) begin
                for (k = 0; k < 2; k++) begin
                    a = '{ w:i, x:j, y:k };
                    b = '{ w:i, x:j, y:k };
                    c = '{ w:i, x:j, y:k };
                    d = '{ w:i, x:j, y:k };
                    e = '{ w:i, x:j, y:k };
                    f = '{ w:i, x:j, y:k };
                    $display("D: %1d%1d%1d -> ", i,j,k, a,b,c,d,e,f);
                end
            end
        end
    endtask
    initial foo();

103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
    task bar;
        input integer i, j, k;
        input StructE a;
        input StructF b;
        input StructA c;
        input StructB d;
        input StructC e;
        input StructD f;
        $display("E: %1d%1d%1d -> ", i,j,k, a,b,c,d,e,f);
    endtask
    initial begin
        integer i, j, k;
        for (i = 0; i < 2; i++) begin
            for (j = 0; j < 2; j++) begin
                for (k = 0; k < 2; k++) begin
                    bar(i,j,k
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                    );
                end
            end
        end
    end

    function baz;
        input integer i, j, k;
        input StructF a;
        input StructA b;
        input StructB c;
        input StructC d;
        input StructD e;
        input StructE f;
        $display("F: %1d%1d%1d -> ", i,j,k, a,b,c,d,e,f);
        baz = 0;
    endfunction
    initial begin
        integer i, j, k;
        integer unused;
        for (i = 0; i < 2; i++) begin
            for (j = 0; j < 2; j++) begin
                for (k = 0; k < 2; k++) begin
                    unused = baz(i,j,k
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                        , '{ w:i, x:j, y:k }
                    );
                end
            end
        end
    end
160
endmodule