
常量和字符串背景主要包括绿皮书第2.13和2.14两节的内容核心内容几种常见的常量字符串及其内置函数我的理解常量绿皮书2.13节中介绍了几种常量的声明。第一种是宏定义在工作中我们常用宏定义来隔离部分代码和定义全局常量在整个验证环境中使用这个define来替代某些常数。这么做的优点就是可以在后续修改的时候只修改这个宏定义中定义的值就可以。宏定义宏定义是纯粹的文本替换也就以为着它可以替换几乎任何字段define WORD logic [31:0] module test WORD data; endmodule这种情况下使用typedef也可以替换宏定义。parameterparameter大家应该也不陌生它最大的特点是可以在实例化的时候被重新覆盖module my_module #(parameter int W8) ( ... ); endmodule // 实例化时覆盖 my_module #(.W(16)) u_inst ( ... );constconst被称为修饰符的原因是因为它本身不定义常量而是给原有变量套上一个“印章”给这个变量赋予“不可修改”的属性。所以const是可以在仿真期间使用的字符串systemverilog中的string是一个可变长度的数据类型可以理解为一个字符的集合。其内置了很多实用函数方法名返回值类型作用s.len()int返回字符串长度字节数。空串长度为 0。s.getc(i)byte返回第i个字符的 ASCII 码等价于s[i]。s.tolower()string返回全小写的新字符串原串不变。s.toupper()string返回全大写的新字符串原串不变。s.compare(t)int区分大小写比较相等返回 0不等返回非 0。s.icompare(t)int不区分大小写比较。s.substr(i, j)string提取子串j必须大于等于i。s.atoi()int将数字字符串转为十进制整数如42- 42。s.atohex()int将十六进制字符串转整数如FF- 255。s.atoreal()real将字符串转为浮点数如3.14- 3.14。