转载: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 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一样放在第一个参数上。

注意

  • 一个流行的$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

systemverilog 字符串类型的更多相关文章

  1. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  2. Redis命令拾遗一(字符串类型)

    文章归博客园和作者“蜗牛”共同所有 .转载和爬虫请注明原文Redis系列链接 http://www.cnblogs.com/tdws/tag/NoSql/ Redis有五种基本数据类型.他们分别是字符 ...

  3. Java中,关于字符串类型、随机验证码、 时间类型

    一.字符串类型:String类型 定义一个字符串 String a="Hello World"; String b= new String ("Hello World&q ...

  4. 学习笔记:MySQL字符串类型

    字符串类型 a)         char和varchar 1.都需要指定字符的长度,char中的长度是字符的长度,而varchar的长度是字节的长度 2. char中指定的长度就是实际占用的长度,而 ...

  5. Redis常用命令入门1:字符串类型命令

    Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号 ...

  6. Spark1.3使用外部数据源时条件过滤只要是字符串类型的值均报错

    CREATE TEMPORARY TABLE spark_tbls USING org.apache.spark.sql.jdbc OPTIONS ( url 'jdbc:mysql://hadoop ...

  7. Redis从基础命令到实战之字符串类型

    字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串和和二进制数据.本文以代码形式列举常用的操作命令,并在实践部分演示一个简单的商品管理功能,实现了通常使用关系型数据库开发的增改查功能,注 ...

  8. 后台返回字符串类型function的处理 (递归算法)

    $(function(){ $.ajax({ type: "post", url: "${ctx}/modules/fos/reference/echart", ...

  9. mysql中的字符串类型数据索引优化

    摘自 "高性能mysql" 对于一些字符串类型较长的字段搜索时, 可以参考如下方法

随机推荐

  1. 类型定义VS类型别名

    类型定义是在当前包中的一直存在的.输出%T,发现类型前面都有main.前缀 类型别名,其实还是它的根本类型,别名只存在在代码中.编译后就不存在了,还是根本类型.

  2. 【优化技术专题】「温故而知新」基于Quartz系列的任务调度框架的动态化任务实现分析

    不提XXLJOB或者其他的调度框架,就看我接触的第一个任务调度框架Quartz(温故而知新) Quartz的动态暂停 恢复 修改和删除任务 实现动态添加定时任务,先来看一下我们初步要实现的目标效果图, ...

  3. POJ3061——Subsequence(尺取法)

    Subsequence POJ - 3061 给定长度为n的数列整数a0,a1,a2-an-1以及整数S.求出总和不小于S的连续子序列的长度的最小值,如果解不存在输出0. 反复推进区间的开头和末尾,来 ...

  4. CentOS7搭建sftp

    openssh-server自带sftp服务 1.添加组: groupadd  sftp 2.添加不可登录的sftp用户 useradd -u 1001  -g  sftp   -s /sbin/no ...

  5. 解决dede编辑器不能保存word文档样式问题

    ckeditor在dede里不能保存样式,试过多种解决办法都还是没有解决.最终将编辑器换成FCK得到解决. 第一步:下载FCK编辑器 下载地址: 链接: http://pan.baidu.com/s/ ...

  6. ecshop transport.js IE报错(608行),对象不支持此属性或方法 的解决办法

    解决办法: 将if (this.hasOwnProperty(k)) { 改为: if (this.hasOwnProperty && this.hasOwnProperty(k)) ...

  7. I/O流中的字节流

    今天总结一下Java中重要的知识点I/O流,今天主要学习了字节流(自己的理解) 什么是I/O:我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出ou ...

  8. Jmeter系列(2)- 代理服务器录制脚本

    操作步骤 step-1 添加代理服务器 step-2 添加线程组 step-3 添加录制控制器 HTTP代理服务器配置 - HTTP(S) Test Script Recorder TestPlan ...

  9. promise对象总结

    一.Promise是异步编程的一种解决方案,它是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promis ...

  10. Qt中的ui文件转换为py文件

    将pyuic5 -o demo.py demo.ui写入ui-py.bat文件(自定义文件),将ui文件与ui-py.bat文件放在同一文件夹,双击.bat文件即可生成.py文件