Согласно System Verilog LRM «Формат шаблона назначения», структура данных может быть напечатана в строку следующим образом:
module top;
typedef enum {ON, OFF} switch_e;
typedef struct {switch_e sw; string s;} pair_t;
pair_t va[int] = '{10:'{OFF, "switch10"}, 20:'{ON, "switch20"}};
initial begin
$display("va[int] = %p;",va);
$display("va[int] = %0p;",va);
$display("va[10].s = %p;", va[10].s);
end
endmodule : top
This example may print:
va[int] = '{10:'{sw:OFF, s:"switch10"}, 20:'{sw:ON, s:"switch20"}} ;
va[int] = '{10:'{OFF, "switch10"}, 20:'{ON, "switch20"}} ;
va[10].s = "switch10";
Есть ли способ сделать обратное? То, что я хотел бы сделать, это взять строку шаблона назначения в качестве плюса или строки, прочитанной из файла, и назначить ее переменной во время выполнения, например:
string assign_pattern = "'{10:'{sw:OFF, s:"switch10"}, 20:'{sw:ON, s:"switch20"}}";
$cast(va, assign_pattern); // ** This doesn't work **
Если это вообще невозможно , есть ли способ сделать это специально для типов упакованных структур?