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

相关文章
|
5月前
|
C语言
C 语言函数:入门指南
一个函数包括两个部分: 声明:函数名称、返回类型和参数(如果有) 定义:函数体(要执行的代码)
93 2
|
18天前
|
Python
【掰开揉碎】Python 中 type() 函数的强大功能:探索动态类型和元编程
【掰开揉碎】Python 中 type() 函数的强大功能:探索动态类型和元编程
|
9月前
|
自然语言处理 数据库连接
编译原理(五) 语言的定义
编译原理(五) 语言的定义
|
9月前
编译原理(四) 语言及其文法的基本概念
编译原理(四) 语言及其文法的基本概念
|
10月前
|
算法 Java 程序员
01-C++核心语法|C++概述【C++简介、C++起源、可移植性和标准、为什么C++会成功、从一个简单的程序开始认识C++】
复习`C++核心语法`,且适当进行汇编探索底层实现原理,进一步夯实基础,为以后的`底层开发`、`音视频开发`、`跨平台开发`、`算法`等方向的进一步学习埋下伏笔。
01-C++核心语法|C++概述【C++简介、C++起源、可移植性和标准、为什么C++会成功、从一个简单的程序开始认识C++】
|
12月前
|
自然语言处理 Go
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
112 0
|
12月前
|
JavaScript 前端开发 Unix
1.C 语言简介
1.C 语言简介
119 0
LabVIEW编程语法学习笔记之变量
LabVIEW编程语法学习笔记之变量
71 0
|
Rust 安全 JavaScript
Rust通用编程概念
Rust通用编程概念
|
监控 安全 搜索推荐
SystemVerilog学习-01-系统验证概述(二)
SystemVerilog学习-01-系统验证概述
310 0
SystemVerilog学习-01-系统验证概述(二)