SystemVerilog中格式化输出域宽如何设置

在使用$display等方法格式化显示数据时,经常需要指定显示数据的对齐方式,一般情况下会在百分号(%)和指定基数之间通过指定域宽(field width)实现要显示数据的对齐格式。本文将示例field width在格式化显示中的使用方法。

1 设置域宽值的格式如下:


2 在百分号(%)和指定的基数字母之间不指定域宽的情况

【示例】
【仿真结果】

示例中din为32位,赋值为’d12,在没有指定域宽时,din的十进制显示为“        12”,十六进制显示为“0000000C”。这是因为按照指定格式不设置有域宽显示数据时,采用的是默认域宽,在默认域宽情况下会按照所要显示数据所能表示的最大域宽进行对齐。示例中的din为32位,按照十进制显示时能表示的最大的十进制数是232-1,即4294967296,共十个字符位,所以在现实完了要显示的有效数据12后,还有8个字符的空位需要用空格向左补齐。din按照十六进制显示时,能表示的最大的十六进制数是FFFFFFFF,共8个字符,所以在显示完了有效数据12(即C)之后,还有7个字符的空位需要用0向左补齐。这里需要注意,如果按照十进制显示,那么向左补齐采用的是空格不是0,采用其他数制字母的按照0进行补齐。


3 在百分号(%)和指定的基数字母之间指定域宽大于实际要显示字符个数的情况

【示例】 
【仿真结果】
示例中din为32位,赋值为’d12,指定域宽为4,din的十进制显示为“  12”,十六进制显示为“000C”。示例中din按照十进制显示时,指定域宽为4个字符,此时显示的数据只占用了2个字符的宽度,小于指定域宽值4,所以此时显示12后还有2个字符的空位需要用空格向左补齐。din按照十六进制显示时,指定域宽为4个字符,此时显示的数据只占用了1个字符的宽度,还有3个字符的空位需要用0向左补齐。可见,当设置的域宽值大于要显示的数据实际宽度时,将按照设置的域宽值进行显示,在要显示数据左侧补齐空格(十进制格式或者字符串格式)或者0(非十进制格式或者字符串格式)直到显示宽度满足设置域宽值。


4 在百分号(%)和指定的基数字母之间指定域宽小于等于实际要显示字符个数的情况

【示例】 
仿真结果
示例中din为32位,赋值为’d123456,指定域宽为4,din的十进制显示为“123456”,十六进制显示为“1e240”。示例中din按照十进制显示时,指定域宽为4个字符,此时显示的数据实际需要使用6个字符的宽度,大于设定的域宽4,此时显示数据将按照实际数据占用字符数显示,不受设定的域宽值影响。din按照十六进制显示时,指定域宽为4个字符,此时显示的数据实际需要使用5个字符的宽度,大于设定的域宽4,此时显示数据将按照实际数据占用字符数显示,也不受设定的域宽值影响。可见,当设置的域宽值小于等于要显示数据的实际宽度时,将按照数据实际宽度进行显示,不会进行补零或者空格的操作。


5 设置域宽值为负值

【示例】
【仿真结果】

示例中,在指定域宽时使用了负值,此时数据显示将按照左对齐的方式对数据右侧进行补位操作,具体补位过程与使用正数类似,这里不管十进制还是十六进制都采用了空格进行补位,但是实际上在IEEE1800中约定域宽值只能设置为正数,所以关于负值域宽可能会存在不同仿真工具处理不一致的情况,安全起见,建议大家使用正数域宽值。


通过上述示例,在格式化输出时设置域宽的规则如下:

Ø 在百分号(%)和指定的基数字母之间不指定域宽时,采用的是默认域宽,在默认域宽情况下会按照所要显示数据所能表示的最大域宽进行对齐,如果按照十进制显示,那么向左补齐采用的是空格不是0,采用其他数制字母的按照0进行补齐。

Ø 在百分号(%)和指定的基数字母之间指定域宽大于实际要显示字符个数时,将按照设置的域宽值进行显示,在要显示数据左侧补齐空格(十进制格式或者字符串格式)或者0(非十进制格式或者字符串格式)直到显示宽度满足设置域宽值;

Ø 在百分号(%)和指定的基数字母之间指定域宽小于等于实际要显示字符个数时,将按照数据实际宽度进行显示,不会进行补零或者空格的操作;

Ø 建议不使用负值域宽设置; 
全部评论
这分享太实用了,楼主牛啊
点赞 回复 分享
发布于 2022-10-21 11:38 山西

相关推荐

01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务