返回介绍

7.12 串联

发布于 2020-09-09 22:55:47 字数 1100 浏览 843 评论 0 收藏 0

与Verilog一样,花括号({ })被用来表示串联。串联被当作一个压缩的位向量来看待。它可以使用在一条赋值语句或一个表达式的左侧。

logic log1, log2, log3;
{log1, log2, log3} = 3'b111;
{log1, log2, log3} = {1'b1, 1'b1, 1'b1}; // 与3'b111具有相同的效果

如果一条赋值语句一侧的串联宽度与另外一侧的表达式的宽度不同,那么软件工具可以产生一个警告信息。对于下面的例子,软件工具可以给出尺寸不匹配的警告信息。

bit [1:0] packedbits = {32'b1,32'b1}; // 右侧是64位
int i = {1'b1, 1'b1};                 // 右侧是2位

参见2.7 数组文本和2.8 结构体文本节中有关数组和结构体初始化的信息。

SystemVerilog增强了串联操作,它允许字符串类型变量的串联。一般情况下,如果一个串联操作的任何一个操作数是字符串类型,那么串联就被当作是字符串,并且所有其它自变量都被隐式转换成字符串类型(参见3.7 string数据类型中的描述)。字符串串联只能作为表达式使用,不能使用在赋值语句的左侧。

string hello = "hello";
string s;
s = {hello, " ", "world"};
$display( "%s\n", s );     // 显示成'hello world'

s = {s, " and goodbye"};
$display("%s\n", s);       // 显示成'hello world and goodbye'

复制操作符(也被称为乘串联)中的花括号还可以与字符串类型的变量一起使用。在字符串复制的情况下,可以使用非常量的乘数。

int n = 3;
string s = {n{"boo "}};
$display("%s\n", s);       // 显示成'boo boo boo '

注意:与位串联不同,字符串串联或复制的结果不会被缩减。相反,目的变量(具有字符串类型)会调整尺寸以便容纳结果字符串。

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

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

发布评论

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