字符串类型
Verilog对字符串处理很有限,但是SV就不一样了。他引入了string类型
字符串类型变量的存储单元为byte类型(一个字)(8个bit);
字符串长度为N,则其成员索引(index)为0:N-1, 这个很好理解;
不同于C语言,字符串的结尾没有空制符null“\0”
字符串的内存是动态分配的,用户不需要担心内存空间管理
typedef logic {15:0} r_t;
r_t r;
integer i=1;
string b=“”; //类似于 string b;
string b={“Hi”, b};
r=r_t’(a); //显式类型转化 字符串类型转化为整形
b=string’(r); //显式类型转化 整形转化为字符串类型
b=“Hi”;
b={5{“Hi”}};
a={i{“Hi”}};
a={i{b}};
a={a, b};
a={“Hi”, b};
b={“Hi”,“”};
a[0]=“h”; // the same as: a[0]=“cough”
怎么判断一个字符串是否为空?
1:str.size();
2:str=null?//这种方式不恰当,容易出错
3: sizeoff(array);
字符串内建方法
str.len ():返回字符串长度的;
str.putc(i, c): 将第i个字符替换为C,等同于str[i]=c;
str.getc(i, c): 返回第i个字符;
Str.substr(i, j): 将第i个字符到第j个字符的字符串返回。
Str.{atoi(),atohex(), atooct(), atobin()}: 将字符串转变为
十进制、十六进制、八进制或者二进制(指的是当前字符串的类型,而不是目标类型,这里需要特别注意)。
Str=“123”;
Int i= str.atoi();// assigns 123 to i//因为123当前是一个十进制的整形,所以用str.atoi
a=sin_value.atobin();
b={sin_path,“=”, a };