module test;
function automatic void parse (
output string out [$],
input string in,
input string separator = ",",
input bit drop_blank = 1
);
string val, min, max;
bit flag;
in = {in,separator};
foreach (in[i]) begin
if (drop_blank && in[i] == " ") continue;
if (in[i] == separator[0]) begin
if (flag) begin
int val_i, min_i, max_i;
if (val == "") max = min;
else max = val;
max_i = max.atoi();
min_i = min.atoi();
if (min_i > max_i) begin
val_i=min_i; min_i=max_i; max_i=val_i;
end
for (int i=min_i; i<=max_i; i++) begin
out.push_back($sformatf("%0d", i));
end
flag = 0;
end else if (val != "") begin
out.push_back(val);
end
val = "";
end else if (in[i] == ".") begin
if (flag == 0) begin
if (in[i+1] != ".") $display("ERROR, just suppurt ..");
min = val;
flag = 1;
end
val = "";
end else begin
val = {val, in[i]};
end
end
endfunction
initial begin
string str = "1..10, 6, 8, 20, 30..32, 40.";
string out[$];
parse(out, str, ",");
foreach(out[idx]) begin
$display("%0s", out[idx]);
end
end
endmodule
result:
Compiler version J-2014.12-SP1-1; Runtime version J-2014.12-SP1-1; Nov 15 14:07 2018
ERROR, just suppurt ..
1
2
3
4
5
6
7
8
9
10
6
8
20
30
31
32
40
V C S S i m u l a t i o n R e p o r t
Time: 0 ns
CPU Time: 0.220 seconds; Data structure size: 0.0Mb
Thu Nov 15 14:07:46 2018