systemverilog string split

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值