SystemVerilog语言简介(三)

简介: <p align="left">15. 强制类型转换</p> <p align="left"> </p> <p align="left"><span style="font-size:14px">Verilog不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用<span style="color:blue">'</span>操作符提供了数据类型的强制转换功能。这种

15. 强制类型转换

 

Verilog不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用'操作符提供了数据类型的强制转换功能。这种强制转换可以转换成任意类型,包括用户定义的类型。例如:

 

 

int' (2.0 * 3.0) // 将结果转换为int类型

 

mytype' (foo) // foo转换为mytype类型

 

 

 

一个值还可以通过在强制转换操作符前指定一个10进制数来转换成不同的向量宽度,例如:

 

17' (x - 2) // 将结果转换为17位宽度

 

 

也可以将结果转换成有符号值,例如:

 

 

signed' (x) // x转换为有符号值

 

16. 操作符

 

Verilog没有C语言的递增(++)和递减(--)操作符。而SystemVerilog加入了几个新的操作符:

 

l         ++和--:递增和递减操作符;

 

l         +=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=赋值操作符;

 

17. 唯一性和优先级决定语句

 

在Verilog中,如果没有遵循严格的编码风格,它的if-elsecase语句会在RTL仿真和RTL综合间具有不一致的结果。如果没有正确使用full_caseparallel_case综合指令还会引起一些其它的错误。

 

SystemVerilog能够显式地指明什么时候一条决定语句的分支是唯一的,或者什么时候需要计算优先级。我们可以在if或case关键字之前使用uniquerequires关键字。这些关键字可以向仿真器、综合编译器、以及其它工具指示我们期望的硬件类型。工具使用这些信息来检查ifcase语句是否正确建模了期望的逻辑。例如,如果使用unique限定了一个决定语句,那么在不希望的case值出现的时候仿真器就能够发布一个警告信息。

 

bit [2:0] a;

 

unique if ((a==0) || (a==1)) y = in1;

 

else if (a==2) y = in2;

 

else if (a==4) y = in3; // 3567会引起一个警告

 

 

 

priority if (a[2:1]==0) y = in1; // a01

 

else if (a[2]==0) y = in2; // a23

 

else y = in3; // 如果a为其他的值

 

 

 

unique case (a)

 

  0, 1: y = in1;

 

  2: y = in2;

 

  4: y = in3;

 

endcase // 3567会引起一个警告

 

 

 

priority casez (a)

 

  2'b00? : y = in1; // a01

 

  2'b0?? : y = in2; // a23

 

  default : y = in3; //如果a为其他的值

 

endcase

 

 

18. 底部检测的循环

 

Verilog包含forwhilerepeat循环,这几个循环都是在循环的起始处检测循环条件。SystemVerilog加入了一个do-while循环,这种循环在执行语句的结尾处检测循环条件。

 

19. 跳转语句

 

在语句的执行过程中,C语言提供了几种方式来跳转到新的语句,包括:returnbreakcontinuegoto。在Verilog中除了通过使用disable语句跳转到语句组的尾部外,没有提供任何其它跳转语句。使用disable语句执行中止和继续功能要求加入块的名字,并且会产生不直观的代码。SystemVerilog加入了C语言的breakcontinue关键字,这两个关键字不要求使用块名字。另外,SystemVerilog还加入了一个return关键字,它可以用来在任何执行点上退出一个任务或函数。

 

l         break:退出一个循环,与C语言相同;

 

l         continue:跳转到一个循环的尾部,与C语言相同;

 

l         return 表达式:退出一个函数;

 

l         return:退出一个任务或void类型的函数。

 

SystemVerilog没有包含C语言中的goto语句。

 

20. 块名字和语句标签

 

在Verilog中,我们可以通过在beginfork

相关文章
|
C语言
C语言入门篇(三)上
C语言入门篇(三)上
|
C语言
C语言入门篇(四)上
C语言入门篇(四)上
|
存储
第三章:C51 编程语言
第三章:C51 编程语言
62 0
|
4月前
|
存储 Rust 编译器
【Rust学习】03_通用编程概念
您成功了!这是一个相当大的章节:您了解了变量、标量和复合数据类型、函数、注释、 if 表达式和循环!若要练习本章中讨论的概念。
46 2
|
C语言
C语言入门篇(三)下
C语言入门篇(三)下
|
6月前
|
Java 程序员 C#
C++ 编程入门指南:深入了解 C++ 语言及其应用领域
C++是一种由Bjarne Stroustrup开发的跨平台编程语言,以C语言为基础并添加了面向对象特性。它用于创建高性能应用,支持类和对象,提供高级系统资源控制。C++经历了多次更新,包括C++11、C++14、C++17和C++20。因其可移植性和代码重用,成为流行选择。学习C++简单有趣,与C、C#、Java有共通性。开始C++编程,可以从打印&quot;Hello World!&quot;的简单程序入手。关注微信公众号`Let us Coding`获取更多内容。
114 0
|
C语言
C语言入门篇(四)下
C语言入门篇(四)下
|
算法 程序员 C语言
01-C++核心语法|C++概述【C++简介、C++起源、可移植性和标准、为什么C++会成功、从一个简单的程序开始认识C++】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
01-C++核心语法|C++概述【C++简介、C++起源、可移植性和标准、为什么C++会成功、从一个简单的程序开始认识C++】
|
JavaScript 前端开发 Unix
1.C 语言简介
1.C 语言简介
165 0
|
Rust 安全 JavaScript
Rust通用编程概念
Rust通用编程概念
下一篇
无影云桌面