2010-11-02 17:22:35| 分类: SystemVerilog | 标签: |举报 |字号大中小 订阅
英文来源:http://systemverilog.co/wiki/String_Type
------------------------------------------------------------------------------------------------------------------------------------
传统的Veriog仅仅支持文字表述上的字符串, 而SystemVerilog将字符串作为了内建的数据类型。类似C++的std::string类型,SystemVerilog字符串类型支持很多操作和函数。
SytemVerilog字符串类型支持的操作和方法:
SytemVerilog字符串类型支持的操作和方法 | |
操作 | 描述 |
strA==strB | 相等——操作数可以是字符串类型或者字符串文字,如果两个字符串由相同的字符序列组成,则返回1. |
strA!=strB | 不等于—— 对相等操作取反 |
strA<strB strA<=strB strA>strB strA>=strB | 比较——如果相应的按字典序的比较条件满足时,则返回1 |
{strA,strB,..,strN} | 连接——扩展指定的字符串。操作符可以是字符串类型,也可以是字符串文字。当所有的操作符都是字符串文字时,此操作完成整体的连接,结果也是一个字符串文字。 |
str.len() | 长度——返回代表字符串的长度的整数 |
str.putc(i, c) | 字符输入——将字符串str中的第i个字符替换成字符c。i必须是一个整数,c必须是一个字节类型的字符 |
str.getc(i) | 获取字符——返回字符串str的第i个字符。i必须是整数,返回的字符表示为一个字节。 |
str.toupper() | 转成大写——返回str中所有字符变成大写的字符串 |
str.tolower() | 转成小写——返回str中所有字符变成小写的字符串 |
strA.compare(strB) | 比较——比较strA和strB.从第一个字符开始比较。如果相等,则继续后续字符,知道两者有不同或者到达某个字符串的结尾。如果相等,返回’0‘;如果strA在strB之后,则返回整数;如果strA在strB之前,则返回负数. |
strA.icompare(strB) | 比较——和compare方法类似,但是不关心大小写。 |
str.substr(i, j) | 子串——i和j都是整数,返回一个新的字符串,由str的第i和和第j个中间的所有字符组成 |
str.atoi() | 字符串转整数——返回一个32bit整数(不考虑此字符串表示的数字的长度),对于atoi, 字符串将被看作十进制;对于atoh,十六进制;对于atooct,八进制;对于atob,二进制。对于比较大的数字,使用系统任务$sscanf更加合适[1]. |
str.atoreal() | 字符串转实数——此方法返回字符串str表示的实数 |
str.itoa(i) | 整数转字符串——atoi,atohex,atooct,atobin的反运算。此系列方法输入一个整数i,将其对应的表示方式存在字符串str中。 |
str.realtoa(r) | 实数转字符串——atoreal的反运算。此方法输入一个实数r,将其对应的表示方式存在字符串str中。 |
字符串在构建日志信息的时候非常有用。有许多很方便有用的SystemVerilog系统函数,以下列举其中的几个:
Useful SystemVerilog System Tasks | |||||||||
---|---|---|---|---|---|---|---|---|---|
Task Name | Description | ||||||||
$sscanf(str,format,args); | $sscanf 将字符串按照某个模板格式进行扫描,其字符串格式和C语言中的printf()函数类似 | ||||||||
$sformat(str,format,args); | $sformat是$sscanf的反函数。将字符串按照给定的格式填入相应的参数args中 | ||||||||
$display(format,args); | $display就是Verilog的printf语句,在stdout上显示格式化的字符串 | ||||||||
$sformatf(format,args); | $sformatf任务和$sformat相似,除了其返回字符串结果。字符串作为$sformatf的返回值,而不是像$sformt一样放在第一个参数上。 |
评论