zoukankan      html  css  js  c++  java
  • systemverilog 字符串类型

    转载:https://blog.csdn.net/Holden_Liu/article/details/100727957

    传统的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() 
    str.atohex() 
    str.atooct() 
    str.atobin()

    字符串转整数——返回一个32bit整数(不考虑此字符串表示的数字的长度),对于atoi, 字符串将被看作十进制;对于atoh,十六进制;对于atooct,八进制;对于atob,二进制。对于比较大的数字,使用系统任务$sscanf更加合适[1].

    str.atoreal()

    字符串转实数——此方法返回字符串str表示的实数

    str.itoa(i
    str.hextoa(i
    str.octtoa(i
    str.bintoa(i)

    整数转字符串——atoi,atohex,atooct,atobin的反运算。此系列方法输入一个整数i,将其对应的表示方式存在字符串str中。

    str.realtoa(r)

    实数转字符串——atoreal的反运算。此方法输入一个实数r,将其对应的表示方式存在字符串str中。

      

    字符串在构建日志信息的时候非常有用。有许多很方便有用的SystemVerilog系统函数,以下列举其中的几个:

    Useful SystemVerilog System Tasks

    Useful SystemVerilog System Tasks
    Task NameDescription
    $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一样放在第一个参数上。

    注意

    • 一个流行的$sformatf的替代方式是$psprintf. 它实际上是由Vera遗留下来的。$sformtf 在后来成为了SystemVerilog的语言标准。然而,大部分流行的SystemVerilog编译器都支持$psprintf,尽管它没有成为标准。如果想符合标准,请使用$sformatf.

    参考

    1.  Dave Rich, Verification Guild, 2007, "String manipulation through atohex();", accessed on August 22 2010
    2.  Ben Cohen, Verification Guild, 2006, "$psprintf // In VCS not in P1800", accessed on August 22 201
    int fh;
     
    str_num.itas(num);
     
    fh = $fopen({"aa_",str_num,"_bbb.log"},“w”);
     
    $fdisplay(fh,"data:%h, time:%0t",data,$time);
    string rm_file;
    $sformat(rm_file,"rm_out_data_%0d.log",cmd_cnt);//将打印字符串放入rm_file
    int rm_out_file; // as file handle
    rm_out_file = $fopen(rm_file); //
    $fclose(rm_out_file);

    $sscanf

    http://docs.roxen.com/pike/7.0/tutorial/strings/sscanf.xml

    $sformat和$sformatf区别

    https://baijiahao.baidu.com/s?id=1665683787389360422&wfr=spider&for=pc

  • 相关阅读:
    数据解析1127
    数据解析1119
    数据解析1114
    数据解析1122
    数据解析1121
    数据解析1120
    数据解析1116
    数据解析1128
    Twitter惊现新型病毒 每分钟159条速率分散
    宏达电预计本年有望在台湾市场击败诺基亚
  • 原文地址:https://www.cnblogs.com/zhiminyu/p/12945749.html
Copyright © 2011-2022 走看看