在ModelSim的用细绳连接一个字节,下面的代码工作得很好:如何SystemVerilog中
string r;
string s;
// ...assign some string to s...
integer i;
r = "";
for (i=s.len()-1; i>=0; i=i-1) begin
if (s[i] != "\n") begin
r = {s[i], r};
end
end
在Aldec的海滨,这会导致编译错误Incompatible types at assignment: .r<string> <- s[i]<byte>
。
阅读SystemVerilog LRM,我可以看到花括号似乎只支持连接字符串,而不是字节。因此,ModelSim不像LRM那么严格,或者它将s[i]
字节隐式转换为单字符字符串(在这种情况下似乎是合理的)。在里维埃拉,它看起来像我必须手动将字节s[i]
转换为一个字符的字符串。什么是最有效和简洁的解决方案(如果可能,不必引入临时变量)?
我想's [i]'被视为长度为1而不是字节的字符串。在我看来,里维埃拉可能不会做正确的事情。你有没有与此相关的LRM参考?此外,花括号当然可以用来连接位/逻辑/字节 - 这是Verilog的一个保留,在SystemVerilog LRM中可能不明确。 – dwikle
@dwikle,SystemVerilog 3.1a LRM,在*表13-2:字符串运算符*在第13页是我正在看。对我来说,这听起来像所有的操作数必须是一个'字符串'或一个字符串文字。当然,使用{}连接位,逻辑和字节也可以,但结果不会是字符串。 – FriendFX