[SV]SystemVerilog操作符应用总结

                          SystemVerilog操作符应用总结

 

一、位拼接操作符

       位拼接是由一个或多个表达式产生的bit位连接在一起的结果。位拼接应该使用大括号'{}'表示,其中的表达式用逗号分隔。不允许在连接中使用未调整大小的常数。这是因为需要使用连接中每个操作数的大小来计算连接的完整大小。

  • 下面的例子连接了四个表达式:
{a, b[3:0], w, 3'b101};
  • 上面的例子与下面的例子是等价的:
{a, b[3], b[2], b[1], b[0], w, 1'b1, 1'b0, 1'b1};

 

二、复制操作符

        复制操作符(也称为多重连接)是由一个前接一个非负、非x和非z常数表达式(称为复制常数)表示的,该常数被括在大括号内。复制表示将多个连接的副本连接在一起。与常规连接不同,包含复制的表达式不能出现在赋值的左侧,也不能连接到输出或输入端口。

  • 这个示例把w复制了4次
{4{w}}; // yields the same value as {w, w, w, w}
  • 下面的示例显示了非法复制
{1'bz{1'b0}}; // illegal
{1'bx{1'b0}}; // illegal
  • 下一个示例演示了嵌套在连接中的复制
{b, {3{a, b}}}; // yields the same value as {b, a, b, a, b, a, b}

 

三、字符串连接

  • 赋值的左侧不允许字符串连接,只允许作为表达式使用。
string hello = "hello";
string s;
s = { hello, " ", "world" };
$display( "%s\n", s ); // displays 'hello world'
s = { s, " and goodbye" };
$display( "%s\n", s ); // displays 'hello world and goodbye'
  • 大括号的复制操作符形式也可以用于字符串类型的数据对象。在字符串复制的情况下,允许使用非常数乘数。
int n = 3;
string s = {n { "boo " }};
$display( "%s\n", s ); // displays 'boo boo boo '

 

四、流操作符(pack/unpack)

       流操作符按照用户指定的顺序将位流类型(见LRM6.24.3)打包成一个位序列。在左侧使用时,流操作符执行相反的操作,即将位流解压缩为一个或多个变量。

       如果被打包的数据包含任何4状态类型,则打包操作的结果是一个4状态流,否则包的结果是一个2状态流。在本条款的其余部分中,比特一词,无其他限定,表示本段所要求的二态或四态比特。

 4.1、基本语法

streaming_concatenation ::= { stream_operator [ slice_size ] stream_concatenation } // from A.8.1
stream_operator ::= >> | <<
slice_size ::= simple_type | constant_expression
stream_concatenation ::= { stream_expression { , stream_expression } }
stream_expression ::= expression [ with [ array_range_expression ] ]

 

 4.2、Example

int j = { "A", "B", "C", "D" };
{ >> {j}} // generates stream "A" "B" "C" "D"
{ << byte {j}} // generates stream "D" "C" "B" "A" (little endian)
{ << 16 {j}} // generates stream "C" "D" "A" "B"
{ << { 8'b0011_0101 }} // generates stream 'b1010_1100 (bit reverse)
{ << 4 { 6'b11_0101 }} // generates stream 'b0101_11
{ >> 4 { 6'b11_0101 }} // generates stream 'b1101_01 (same)
{ << 2 { { << { 4'b1101 }} }} // generates stream 'b1110

 

int a, b, c;
logic [10:0] up [3:0];
logic [11:1] p1, p2, p3, p4;
bit [96:1] y = {>>{ a, b, c }}; // OK: pack a, b, c
int j = {>>{ a, b, c }}; // error: j is 32 bits < 96 bits
bit [99:0] d = {>>{ a, b, c }}; // OK: d is padded with 4 bits
{>>{ a, b, c }} = 23'b1; // error: too few bits in stream
{>>{ a, b, c }} = 96'b1; // OK: unpack a = 0, b = 0, c = 1
{>>{ a, b, c }} = 100'b1; // OK: unpack as above (4 bits unread)
{ >> {p1, p2, p3, p4}} = up; // OK: unpack p1 = up[3], p2 = up[2],
                             // p3 = up[1], p4 = up[0]

 

 

 

 

 

 

 

  • 14
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: SystemVerilog视频教程是一种通过视频形式来传授SystemVerilog编程语言知识的教育资源。SystemVerilog是一种硬件描述语言,用于设计和验证数字电路。由于SystemVerilog的复杂性和广泛应用,视频教程成为学习SystemVerilog编程的一种受欢迎的方式。 SystemVerilog视频教程通常由经验丰富的讲师或专业从业者制作,他们通过实例、演示和讲解来教授SystemVerilog的各个方面。这些视频教程通常涵盖了SystemVerilog的语法、建模、验证技术、调试技巧等内容,可帮助初学者和有经验的工程师提升他们的SystemVerilog技能。 通过观看SystemVerilog视频教程,学习者可以从讲师的实际操作中汲取经验,了解如何正确地使用SystemVerilog编写高质量的硬件描述和验证代码。视频教程中的实例和演示能够帮助学习者更好地理解SystemVerilog的概念和应用场景,提高他们解决问题的能力。 视频教程还提供了方便的学习方式,学习者可以随时随地观看,按照自己的进度学习,并且可以反复观看以加深理解。此外,视频教程通常还提供配套的练习和答疑服务,帮助学习者更好地应用所学知识。 总的来说,SystemVerilog视频教程是一种高效、便捷、直观的学习SystemVerilog编程语言的方式,它可以帮助学习者快速掌握SystemVerilog的核心概念和技术,并提供实践经验和调试技巧,使他们能够在实际项目中应用SystemVerilog进行数字电路设计和验证。 ### 回答2: SystemVerilogSV)是一种硬件描述语言(HDL),用于在数字电路设计和验证中描述和模拟硬件行为。SystemVerilog视频教程可以帮助学习者理解和掌握SystemVerilog语言的基本概念、语法和用法,从而能够更好地进行硬件设计和验证工作。 SystemVerilog视频教程通常包含各种主题,如基本语法、数据类型、运算符、控制流、模块化设计、并发编程、接口和连接、时序和延迟、验证方法等。这些主题的深度和难度会逐渐增加,以确保学习者能够逐步理解并应用所学知识。 通过观看SystemVerilog视频教程,学习者可以通过音频和视觉的方式更直观地了解相关概念和用法。视频教程通常由专业的讲师或从业者制作,他们会提供实例和案例,以展示如何在实际项目中应用SystemVerilog。 与仅靠阅读文本资料相比,通过视频教程学习SystemVerilog可以更有效地帮助学习者理解和记忆相关内容。通过观看视频,学习者可以看到代码示例的执行过程和效果,更好地理解语言的工作原理和应用场景。 总结来说,SystemVerilog视频教程是学习者学习SystemVerilog的一种有效途径。通过观看视频,学习者可以更直观地了解相关概念和用法,并通过实例和案例的展示进行实际操作和应用。通过视频教程的学习,学习者可以更好地掌握SystemVerilog语言,提高硬件设计和验证的能力。 ### 回答3: SystemVerilog是一种硬件描述语言(HDL),广泛应用于硬件设计和验证领域。有许多视频教程可供学习和掌握SystemVerilog。 SystemVerilog视频教程通常涵盖SystemVerilog的基本语法、数据类型、操作符、控制结构等内容。它们通过图示、示例代码和实时演示等方式,帮助学习者理解和运用SystemVerilog的各个方面。 SystemVerilog视频教程的好处之一是可以通过观看视频来学习,相较于纯文本教程更加生动和直观。视频中通常会导入或讲解一个概念,然后通过实例进行演示,帮助学习者更好地理解。而且,视频教程往往会提供练习题目,让学习者进行练习和巩固。 在学习SystemVerilog视频教程时,可以按照自己的学习进度进行自主安排。可以先从基础的概念和语法开始,逐步深入学习高级特性和应用。此外,可以选择不同难度和主题的教程,根据自己的需求和兴趣来选择学习。 总的来说,SystemVerilog视频教程是入门和提高SystemVerilog水平的有效工具。通过观看视频,学习者可以更直观地理解和掌握SystemVerilog的各个方面,从而更好地应用于硬件设计和验证。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元直数字电路验证

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值