e19293001
e19293001

Reputation: 2901

returning queue from function in systemverilog

I can't compile this code:

      function integer[$] get_register_name;
                integer ret[$];
                ret.push_back(1);
                ret.push_back(2);
                return ret;
      endfunction

Is it possible to return a queue from a function?

Upvotes: 6

Views: 23705

Answers (2)

Miroslav Gasic
Miroslav Gasic

Reputation: 11

Down there is the example of code that worked for me....

typedef bit[31:0] bitQueue[$];

//Merges first and second queue, //with second queue being added to the end of first

function bitQueue   mergeEnd(bit[31:0] queue_1[$], bit[31:0] queue_2[$]);
  foreach (queue_2[i]) queue_1.push_back(queue_2[i]);
  return queue_1;
endfunction

Upvotes: 1

dwikle
dwikle

Reputation: 6978

Yes, you can return a queue from a function. But to do so you must define a new type using typedef and return that type.

typedef integer queue_of_int[$];

function queue_of_int get_register_name();
   queue_of_int ret;
   ret.push_back(1);
   ret.push_back(2);
   return ret;
endfunction

Note that in the typedef the [$] comes after the type name, while the queue element type is before the type name.

Upvotes: 22

Related Questions