SV强制类型转换和常数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SV强制类型转换和常数相关的知识,希望对你有一定的参考价值。

参考技术A

静态转换有三种,分别是数据类型强制转换、向量宽度强制转换和符号强制转换,格式分别为:

静态强制转换是编译时的转换,转换的操作总会运行, 而不会检查结果的有效性

下面对数据类型强制转换和向量宽度强制转换做了仿真:

仿真结果如下:

系统函数 $cast 是动态的,并且 在运行时进行带转换数值的检查

动态强制类型转换的格式为: $cast(dest_var, source_var); ,系统函数 $cast 有两个变量:目标变量和源变量

下面几种情况会导致无效的强制类型转换:

$cast可以作为任务调用也可以作为函数调用,作为任务调用时,如果转换不成功, 会报告运行时错误 ,但作为函数调用时, 不会报告运行时错误

系统函数$cast具有返回值,如果转换成功,返回 1 ;转换失败,返回 0

例如:

$cast函数不能和直接修改源表达式的操作符(++, +=)一块用

$cast函数主要用途是将表达式的结果赋给枚举类型变量

静态强制转换是可综合的,动态强制转换由于一些综合工具可能不支持$cast系统函数

系统函数和系统任务都是不可综合的

下面这个例子,将 0.25*8 动态装换成 int 类型,并通过系统函数 $cast 判断转换是否成功

仿真结果如下:

Verilog提供了三种常数类型 parameter 、 specparam 和 localparam

确立 实质上是软件工具建立模块实例代表的设计层次的过程

Verilog限制 parameter 、 specparam 和 localparam 常数的声明只能在模块、静态任务和静态函数中, 不允许在动态任务和动态函数中

关键字const 允许将任何变量声明为常数,const形式的常数直到确立完成后才被赋值

const常数的使用范围:

const常数的声明必须包含数据类型,例如:

const常数实质上是一个只能被初始化的变量

本文摘在《SystemVerilog硬件设计与建模》

以上是关于SV强制类型转换和常数的主要内容,如果未能解决你的问题,请参考以下文章

Java中的强制类型转换是如何转换的?

JS强制类型转换,隐式类型转换, == 和===的区别

SQL SERVER中强制类型转换cast和convert的区别

请问double型可以强制转换成int型吗?

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别