In reply to natasv:
It would be clearer if you filled the array with a fixed pattern of numbers instead of random values, then displayed the arrays in binary. Then you would see how the streaming operator fills the array.
class multidsort;
bit [5:0] multi_array [0:2][0:2];
function new;
int v;
foreach(multi_array[i,j]) multi_array[i][j] = v++;
endfunction
bit [5:0] linear_array[$] ;
bit [5:0] linear_array_ii[$] ;
task sortmulti_array();
{>>{linear_array}} = multi_array;
{<<{linear_array_ii}} = multi_array;
$displayb("multi_array = %p",multi_array);
$displayb("linear_array = %p",linear_array);
$displayb("linear_array_ii = %p",linear_array_ii);
linear_array.rsort;
linear_array_ii.rsort;
$display("rsort");
$displayb("linear_array = %p",linear_array);
$displayb("linear_array_ii = %p",linear_array_ii);
endtask
endclass
module top();
initial begin
multidsort multidsort_ii;
multidsort_ii = new();
multidsort_ii.sortmulti_array();
end
endmodule
This displays
# multi_array = '{'{000000, 000001, 000010}, '{000011, 000100, 000101}, '{000110, 000111, 001000}}
# linear_array = '{000000, 000001, 000010, 000011, 000100, 000101, 000110, 000111, 001000}
# linear_array_ii = '{000100, 111000, 011000, 101000, 001000, 110000, 010000, 100000, 000000}
# rsort
# linear_array = '{001000, 000111, 000110, 000101, 000100, 000011, 000010, 000001, 000000}
# linear_array_ii = '{111000, 110000, 101000, 100000, 011000, 010000, 001000, 000100, 000000}
Now you can see that the bit pattern for linear_array_ii is reversed because {<<{}} operator was used.