Specman string:如何将字符串拆分为其字符列表?

时间:2014-12-22 08:44:58

标签: string specman e

我需要将uint拆分为list of bitslist of chars,其中每个字符"0""1",也是好的)。我尝试这样做的方法是首先将uint连接到string,使用数字类型的二进制表示形式 - bin(),然后使用str_split_all()将其拆分:< / p>

var num : uint(bits:4) = 0xF; // Can be any number  
print str_split_all(bin(num), "/w");

"/w"是字符串匹配模式,表示任何字符)。 输出I 期望

"0"
"b"
"1"
"1"
"1"
"1"

实际输出是:

0.      "0b1111"

为什么它不起作用?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

如果要将整数拆分为位列表,可以使用%{...}运算符:

var num_bits : list of bit = %{num};

您可以在EDAPlayground找到一个有效的例子。

作为对您的问题的额外说明,"/w"并不意味着匹配任何字符。字符串"/\w/"表示匹配AWK语法中的任何单个字符。如果你把它放到你的匹配表达式中,你将得到(几乎)你想要的输出,但是有一些额外的空格交错(分隔符)。

无论如何,如果你想将一个字符串拆分成它的组成字符,str_split_all(...)就不是了。将字符串转换为ASCII字符然后再将它们转换回字符串更容易:

extend sys {
  run() is also {
    var num : uint(bits:4) = 0xF; // Can be any number  
    var num_bin : string = bin(num);
    var num_bin_chars := num_bin.as_a(list of byte);

    for each (char) in num_bin_chars {
      var char_as_string : string;
      unpack(packing.low, %{8'b0, char}, char_as_string);
      print char_as_string;
    };
  };
};

unpack(...)语法直接来自 e 参考手册,第2.8.3节字符串和标量之间的类型转换或标量列表