packed_array_shadow.sv 13.6 KB
Newer Older
1 2
module top;

3 4 5
    logic [6:0][3:0] arr;
    initial arr = 28'h9fba7d;

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 51 52 53 54
    function parity;
        input [3:0] arr;
        parity = arr[2] ^ arr[2] ^ arr[1] ^ arr[0];
    endfunction

    task loop;
        input [3:0] arr;
        begin
            arr = 4'b0000;
            repeat (2**4) begin
                $display("%04b -> %d", arr, parity(arr));
                arr += 1;
            end
        end
    endtask

    task dump;
        begin : dump_block
            integer i;
            for (i = 0; i < 7; i += 1) begin
                $display("arr[%1d] = %04b", i, arr[i]);
            end
        end
    endtask

    task reinterpret;
        input [3:0][6:0] arr;
        begin : reinterpret_block
            integer i;
            for (i = 0; i < 4; i += 1) begin
                $display("arr'[%1d] = %07b", i, arr[i]);
            end
        end
    endtask

    integer i;
    initial begin
        for (i = 0; i < 7; i += 1) begin
            loop(arr[i]);
            dump();
            reinterpret(arr);
        end
    end


    logic [1:0] foolA;
    initial begin
        foolA = 2'b10;
        foolAer(4'b1001);
55 56
        $display("initalA: $bits(foolA):    %08d", $bits(foolA   ));
        $display("initalA: $bits(foolA[0]): %08d", $bits(foolA[0]));
57 58 59 60 61 62
        $display("initalA: foolA[0]: ", foolA[0]);
        $display("initalA: foolA[1]: ", foolA[1]);
    end
    task foolAer;
        input [1:0][1:0] foolA;
        begin
63 64 65
            $display("foolAer: $bits(foolA):       %08d", $bits(foolA      ));
            $display("foolAer: $bits(foolA[0]):    %08d", $bits(foolA[0]   ));
            $display("foolAer: $bits(foolA[0][0]): %08d", $bits(foolA[0][0]));
66 67 68 69 70 71 72 73 74 75 76
            $display("foolAer: foolA[0][0]: ", foolA[0][0]);
            $display("foolAer: foolA[0][1]: ", foolA[0][1]);
            $display("foolAer: foolA[1][0]: ", foolA[1][0]);
            $display("foolAer: foolA[1][1]: ", foolA[1][1]);
        end
    endtask


    task foolBer;
        input [1:0][1:0] foolB;
        begin
77 78 79
            $display("foolBer: $bits(foolB):       %08d", $bits(foolB      ));
            $display("foolBer: $bits(foolB[0]):    %08d", $bits(foolB[0]   ));
            $display("foolBer: $bits(foolB[0][0]): %08d", $bits(foolB[0][0]));
80 81 82 83 84 85 86 87 88 89
            $display("foolBer: foolB[0][0]: ", foolB[0][0]);
            $display("foolBer: foolB[0][1]: ", foolB[0][1]);
            $display("foolBer: foolB[1][0]: ", foolB[1][0]);
            $display("foolBer: foolB[1][1]: ", foolB[1][1]);
        end
    endtask
    logic [1:0] foolB;
    initial begin
        foolB = 2'b10;
        foolBer(4'b1001);
90 91
        $display("initalB: $bits(foolB):    %08d", $bits(foolB   ));
        $display("initalB: $bits(foolB[0]): %08d", $bits(foolB[0]));
92 93 94 95 96
        $display("initalB: foolB[0]: ", foolB[0]);
        $display("initalB: foolB[1]: ", foolB[1]);
    end


97 98 99 100
    initial begin
        begin : lol_block
            logic [1:0][1:0] arr;
            arr = 4'b1001;
101 102 103
            $display("LOL: $bits(arr):       %08d", $bits(arr      ));
            $display("LOL: $bits(arr[0]):    %08d", $bits(arr[0]   ));
            $display("LOL: $bits(arr[0][0]): %08d", $bits(arr[0][0]));
104 105 106 107 108 109 110 111 112
            $display("LOL: arr[0]: ", arr[0]);
            $display("LOL: arr[1]: ", arr[1]);
            $display("LOL: arr[0][1]: ", arr[0][1]);
            $display("LOL: arr[1][0]: ", arr[1][0]);
            $display("LOL: arr[1][1]: ", arr[1][1]);
        end
    end


113 114
    task magic;
    begin
115
        begin : magic_block1
116 117
            logic [1:0][1:0] magic_arr;
            magic_arr = 4'b1001;
118 119 120
            $display("MB1: $bits(magic_arr):       %08d", $bits(magic_arr      ));
            $display("MB1: $bits(magic_arr[0]):    %08d", $bits(magic_arr[0]   ));
            $display("MB1: $bits(magic_arr[0][0]): %08d", $bits(magic_arr[0][0]));
121 122 123 124 125 126 127 128 129
            $display("MB1: magic_arr[0]: ", magic_arr[0]);
            $display("MB1: magic_arr[1]: ", magic_arr[1]);
            $display("MB1: magic_arr[0][1]: ", magic_arr[0][1]);
            $display("MB1: magic_arr[1][0]: ", magic_arr[1][0]);
            $display("MB1: magic_arr[1][1]: ", magic_arr[1][1]);
        end
        begin : magic_block2
            logic [3:0] magic_arr;
            magic_arr = 4'b1001;
130 131
            $display("MB2: $bits(magic_arr):       %08d", $bits(magic_arr      ));
            $display("MB2: $bits(magic_arr[0]):    %08d", $bits(magic_arr[0]   ));
132 133 134 135 136 137 138 139
            $display("MB2: magic_arr[0]: ", magic_arr[0]);
            $display("MB2: magic_arr[1]: ", magic_arr[1]);
            $display("MB2: magic_arr[2]: ", magic_arr[2]);
            $display("MB2: magic_arr[3]: ", magic_arr[3]);
        end
        begin : magic_block3
            logic [1:0][1:0][1:0] magic_arr;
            magic_arr = 4'b1001;
140 141 142 143
            $display("MB3: $bits(magic_arr):          %08d", $bits(magic_arr         ));
            $display("MB3: $bits(magic_arr[0]):       %08d", $bits(magic_arr[0]      ));
            $display("MB3: $bits(magic_arr[0][0]):    %08d", $bits(magic_arr[0][0]   ));
            $display("MB3: $bits(magic_arr[0][0][0]): %08d", $bits(magic_arr[0][0][0]));
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
            $display("MB3: magic_arr[0]: ", magic_arr[0]);
            $display("MB3: magic_arr[1]: ", magic_arr[1]);
            $display("MB3: magic_arr[0][0]: ", magic_arr[0][0]);
            $display("MB3: magic_arr[0][1]: ", magic_arr[0][1]);
            $display("MB3: magic_arr[1][0]: ", magic_arr[1][0]);
            $display("MB3: magic_arr[1][1]: ", magic_arr[1][1]);
            $display("MB3: magic_arr[0][0][0]: ", magic_arr[0][0][0]);
            $display("MB3: magic_arr[0][0][1]: ", magic_arr[0][0][1]);
            $display("MB3: magic_arr[0][1][0]: ", magic_arr[0][1][0]);
            $display("MB3: magic_arr[0][1][1]: ", magic_arr[0][1][1]);
            $display("MB3: magic_arr[1][0][1]: ", magic_arr[1][0][1]);
            $display("MB3: magic_arr[1][0][0]: ", magic_arr[1][0][0]);
            $display("MB3: magic_arr[1][1][1]: ", magic_arr[1][1][1]);
            $display("MB3: magic_arr[1][1][0]: ", magic_arr[1][1][0]);
            begin : magic_block4
                logic [1:0][1:0] magic_arr;
                magic_arr = 4'b1001;
161 162 163
                $display("MB4: $bits(magic_arr):       %08d", $bits(magic_arr      ));
                $display("MB4: $bits(magic_arr[0]):    %08d", $bits(magic_arr[0]   ));
                $display("MB4: $bits(magic_arr[0][0]): %08d", $bits(magic_arr[0][0]));
164 165 166 167 168 169 170
                $display("MB4: magic_arr[0]: ", magic_arr[0]);
                $display("MB4: magic_arr[1]: ", magic_arr[1]);
                $display("MB4: magic_arr[0][1]: ", magic_arr[0][1]);
                $display("MB4: magic_arr[1][0]: ", magic_arr[1][0]);
                $display("MB4: magic_arr[1][1]: ", magic_arr[1][1]);
            end
            magic_arr = 4'b1001;
171 172 173 174
            $display("MB3: $bits(magic_arr):          %08d", $bits(magic_arr         ));
            $display("MB3: $bits(magic_arr[0]):       %08d", $bits(magic_arr[0]      ));
            $display("MB3: $bits(magic_arr[0][0]):    %08d", $bits(magic_arr[0][0]   ));
            $display("MB3: $bits(magic_arr[0][0][0]): %08d", $bits(magic_arr[0][0][0]));
175 176 177 178 179 180 181 182 183 184 185 186 187 188
            $display("MB3: magic_arr[0]: ", magic_arr[0]);
            $display("MB3: magic_arr[1]: ", magic_arr[1]);
            $display("MB3: magic_arr[0][0]: ", magic_arr[0][0]);
            $display("MB3: magic_arr[0][1]: ", magic_arr[0][1]);
            $display("MB3: magic_arr[1][0]: ", magic_arr[1][0]);
            $display("MB3: magic_arr[1][1]: ", magic_arr[1][1]);
            $display("MB3: magic_arr[0][0][0]: ", magic_arr[0][0][0]);
            $display("MB3: magic_arr[0][0][1]: ", magic_arr[0][0][1]);
            $display("MB3: magic_arr[0][1][0]: ", magic_arr[0][1][0]);
            $display("MB3: magic_arr[0][1][1]: ", magic_arr[0][1][1]);
            $display("MB3: magic_arr[1][0][1]: ", magic_arr[1][0][1]);
            $display("MB3: magic_arr[1][0][0]: ", magic_arr[1][0][0]);
            $display("MB3: magic_arr[1][1][1]: ", magic_arr[1][1][1]);
            $display("MB3: magic_arr[1][1][0]: ", magic_arr[1][1][0]);
189 190 191 192 193
        end
    end
    endtask
    initial magic();

194 195 196 197 198

    initial begin
        begin : ntf_magic_block1
            logic [1:0][1:0] ntf_magic_arr;
            ntf_magic_arr = 4'b1001;
199 200 201
            $display("NTFMB1: $bits(ntf_magic_arr):       %08d", $bits(ntf_magic_arr      ));
            $display("NTFMB1: $bits(ntf_magic_arr[0]):    %08d", $bits(ntf_magic_arr[0]   ));
            $display("NTFMB1: $bits(ntf_magic_arr[0][0]): %08d", $bits(ntf_magic_arr[0][0]));
202 203 204 205 206 207 208 209 210
            $display("NTFMB1: ntf_magic_arr[0]: ", ntf_magic_arr[0]);
            $display("NTFMB1: ntf_magic_arr[1]: ", ntf_magic_arr[1]);
            $display("NTFMB1: ntf_magic_arr[0][1]: ", ntf_magic_arr[0][1]);
            $display("NTFMB1: ntf_magic_arr[1][0]: ", ntf_magic_arr[1][0]);
            $display("NTFMB1: ntf_magic_arr[1][1]: ", ntf_magic_arr[1][1]);
        end
        begin : ntf_magic_block2
            logic [3:0] ntf_magic_arr;
            ntf_magic_arr = 4'b1001;
211 212
            $display("NTFMB2: $bits(ntf_magic_arr):       %08d", $bits(ntf_magic_arr      ));
            $display("NTFMB2: $bits(ntf_magic_arr[0]):    %08d", $bits(ntf_magic_arr[0]   ));
213 214 215 216 217 218 219 220
            $display("NTFMB2: ntf_magic_arr[0]: ", ntf_magic_arr[0]);
            $display("NTFMB2: ntf_magic_arr[1]: ", ntf_magic_arr[1]);
            $display("NTFMB2: ntf_magic_arr[2]: ", ntf_magic_arr[2]);
            $display("NTFMB2: ntf_magic_arr[3]: ", ntf_magic_arr[3]);
        end
        begin : ntf_magic_block3
            logic [1:0][1:0][1:0] ntf_magic_arr;
            ntf_magic_arr = 4'b1001;
221 222 223 224
            $display("NTFMB3: $bits(ntf_magic_arr):          %08d", $bits(ntf_magic_arr         ));
            $display("NTFMB3: $bits(ntf_magic_arr[0]):       %08d", $bits(ntf_magic_arr[0]      ));
            $display("NTFMB3: $bits(ntf_magic_arr[0][0]):    %08d", $bits(ntf_magic_arr[0][0]   ));
            $display("NTFMB3: $bits(ntf_magic_arr[0][0][0]): %08d", $bits(ntf_magic_arr[0][0][0]));
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241
            $display("NTFMB3: ntf_magic_arr[0]: ", ntf_magic_arr[0]);
            $display("NTFMB3: ntf_magic_arr[1]: ", ntf_magic_arr[1]);
            $display("NTFMB3: ntf_magic_arr[0][0]: ", ntf_magic_arr[0][0]);
            $display("NTFMB3: ntf_magic_arr[0][1]: ", ntf_magic_arr[0][1]);
            $display("NTFMB3: ntf_magic_arr[1][0]: ", ntf_magic_arr[1][0]);
            $display("NTFMB3: ntf_magic_arr[1][1]: ", ntf_magic_arr[1][1]);
            $display("NTFMB3: ntf_magic_arr[0][0][0]: ", ntf_magic_arr[0][0][0]);
            $display("NTFMB3: ntf_magic_arr[0][0][1]: ", ntf_magic_arr[0][0][1]);
            $display("NTFMB3: ntf_magic_arr[0][1][0]: ", ntf_magic_arr[0][1][0]);
            $display("NTFMB3: ntf_magic_arr[0][1][1]: ", ntf_magic_arr[0][1][1]);
            $display("NTFMB3: ntf_magic_arr[1][0][1]: ", ntf_magic_arr[1][0][1]);
            $display("NTFMB3: ntf_magic_arr[1][0][0]: ", ntf_magic_arr[1][0][0]);
            $display("NTFMB3: ntf_magic_arr[1][1][1]: ", ntf_magic_arr[1][1][1]);
            $display("NTFMB3: ntf_magic_arr[1][1][0]: ", ntf_magic_arr[1][1][0]);
            begin : ntf_magic_block4
                logic [1:0][1:0] ntf_magic_arr;
                ntf_magic_arr = 4'b1001;
242 243 244
                $display("NTFMB4: $bits(ntf_magic_arr):       %08d", $bits(ntf_magic_arr      ));
                $display("NTFMB4: $bits(ntf_magic_arr[0]):    %08d", $bits(ntf_magic_arr[0]   ));
                $display("NTFMB4: $bits(ntf_magic_arr[0][0]): %08d", $bits(ntf_magic_arr[0][0]));
245 246 247 248 249 250 251
                $display("NTFMB4: ntf_magic_arr[0]: ", ntf_magic_arr[0]);
                $display("NTFMB4: ntf_magic_arr[1]: ", ntf_magic_arr[1]);
                $display("NTFMB4: ntf_magic_arr[0][1]: ", ntf_magic_arr[0][1]);
                $display("NTFMB4: ntf_magic_arr[1][0]: ", ntf_magic_arr[1][0]);
                $display("NTFMB4: ntf_magic_arr[1][1]: ", ntf_magic_arr[1][1]);
            end
            ntf_magic_arr = 4'b1001;
252 253 254 255
            $display("NTFMB3: $bits(ntf_magic_arr):          %08d", $bits(ntf_magic_arr         ));
            $display("NTFMB3: $bits(ntf_magic_arr[0]):       %08d", $bits(ntf_magic_arr[0]      ));
            $display("NTFMB3: $bits(ntf_magic_arr[0][0]):    %08d", $bits(ntf_magic_arr[0][0]   ));
            $display("NTFMB3: $bits(ntf_magic_arr[0][0][0]): %08d", $bits(ntf_magic_arr[0][0][0]));
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
            $display("NTFMB3: ntf_magic_arr[0]: ", ntf_magic_arr[0]);
            $display("NTFMB3: ntf_magic_arr[1]: ", ntf_magic_arr[1]);
            $display("NTFMB3: ntf_magic_arr[0][0]: ", ntf_magic_arr[0][0]);
            $display("NTFMB3: ntf_magic_arr[0][1]: ", ntf_magic_arr[0][1]);
            $display("NTFMB3: ntf_magic_arr[1][0]: ", ntf_magic_arr[1][0]);
            $display("NTFMB3: ntf_magic_arr[1][1]: ", ntf_magic_arr[1][1]);
            $display("NTFMB3: ntf_magic_arr[0][0][0]: ", ntf_magic_arr[0][0][0]);
            $display("NTFMB3: ntf_magic_arr[0][0][1]: ", ntf_magic_arr[0][0][1]);
            $display("NTFMB3: ntf_magic_arr[0][1][0]: ", ntf_magic_arr[0][1][0]);
            $display("NTFMB3: ntf_magic_arr[0][1][1]: ", ntf_magic_arr[0][1][1]);
            $display("NTFMB3: ntf_magic_arr[1][0][1]: ", ntf_magic_arr[1][0][1]);
            $display("NTFMB3: ntf_magic_arr[1][0][0]: ", ntf_magic_arr[1][0][0]);
            $display("NTFMB3: ntf_magic_arr[1][1][1]: ", ntf_magic_arr[1][1][1]);
            $display("NTFMB3: ntf_magic_arr[1][1][0]: ", ntf_magic_arr[1][1][0]);
        end
    end

273 274 275 276 277 278 279 280 281 282 283 284 285 286 287

    function [0:1][0:1] ret;
        input unused;
        ret = 4'b1010;
    endfunction
    logic [3:0] ret_res;
    initial begin
        ret_res = ret(0);
        $display("ret: ", ret_res);
        $display("ret[0]: ", ret_res[0]);
        $display("ret[1]: ", ret_res[1]);
        $display("ret[2]: ", ret_res[2]);
        $display("ret[3]: ", ret_res[3]);
    end

288
endmodule