返回介绍

2.6 字符串文本

发布于 2020-09-09 22:55:43 字数 1745 浏览 1335 评论 0 收藏 0

字符串文本由引号包围并且拥有自己的数据类型。非打印字符或其它特殊字符都使用一个反斜杠(\)作为开始。SystemVerilog加入了下列特殊字符串字符:

\v    // 垂直TAB
\f    // 换页
\a    // 响铃
\x02  // 十六进制数

一个字符串文本必须包含在一个单一的行中,除非新的行紧跟着一个反斜杠(\)。在这种情况下,反斜杠和新行字符会被忽略。对字符串文本的长度没有预定义的限制。

与Verilog-2001一样,一个字符串文本可以赋值到一个整数类型。如果尺寸不同,它会进行右调整。

byte c1 = "A";
bit [7:0] d = "\n";
bit [0:11][7:0] c2 = "hello world\n";
    // c2的值为{8'h68, 8'h65, 8'h6c, 8'h6c, 8'h6f, 8'h20,
    //          8'h77, 8'h6f, 8'h72, 8'h6c, 8'h64, 8'h0a}
bit [0:10][7:0] c3 = "hello world\n";
    // c3的值为{8'h65, 8'h6c, 8'h6c, 8'h6f, 8'h20,
    //          8'h77, 8'h6f, 8'h72, 8'h6c, 8'h64, 8'h0a}
bit [0:9][7:0] c4 = "hello world\n";
    // c4的值为{8'h6c, 8'h6c, 8'h6f, 8'h20,
    //           8'h77, 8'h6f, 8'h72, 8'h6c, 8'h64, 8'h0a}
bit [0:12][7:0] c5 = "hello world\n";
    // c5的值为{8'h00, 8'h68, 8'h65, 8'h6c, 8'h6c, 8'h6f, 8'h20,
    //          8'h77, 8'h6f, 8'h72, 8'h6c, 8'h64, 8'h0a}

一个字符串文本可以被赋值到一个非压缩字节数组。如果尺寸不同,它会进行左调整。

byte c6[0:12] = "hello world\n";
FPGA技术网疑问
关于这一处的左调整,ModelSim SE PLUS 6.1a的实现似乎与参考手册的规定不符。在ModelSim SE PLUS 6.1a仍然进行右调整,也就是C6的值为:
{8'h00, 8'h68, 8'h65, 8'h6c, 8'h6c, 8'h6f, 8'h20, 8'h77, 8'h6f, 8'h72, 8'h6c, 8'h64, 8'h0a}

压缩数组和非压缩数组将在第四章中讨论。字符串文本与数组文本的差别将在接下来的2.7节中讨论。

字符串文本还可以被强制转换成一个压缩数组或非压缩数组,这与将字符串文本赋值到一个压缩数组或非压缩数组遵守相同的规则。强制类型转换将在3.14节中讨论。

SystemVerilog 3.1a还包含一个string数据类型,字符串文本可以赋值给这种类型的变量。string类型的变量具有任意的长度,它们可以动态地改变大小以便容纳任意字符串。

字符串文本是一个压缩数组(宽度是8位的整数倍),当字符串文本赋值到一个string类型或在一个使用string类型操作码的表达式中使用(参看3.7节)的时候,它们可以被隐式地转换成string类型。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文