system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
- 类型转换
verilog中,任何类型的任何数值都用来给任何类型赋值。verilog使用赋值语句自动将一种类型的数值转换为另一种类型。
例如,当一个wire类型赋值给一个reg类型的变量时,wire类型的数值(包括四态数值,电平强度,多驱动解析)自动转换为reg类型(有4态数值,但没有电平强度和多驱动解析)。
如果一个real类型被赋值给一个reg类型的变量,浮点数值自动截取为reg字长能够表达的整型数值。
下面这个例子里面,使用临时变量将一个浮点类型结果转换为一个64比特整型值,然后将这个整型值与另一个整型数据相加,结果赋值给一个64比特的reg变量。
1 reg [63:0] a, y, temp;
2 real r;
3 temp = r**3; // convert result to 64-bit integer
4 y = a + temp;
system verilog将verilog的自动转换进行了扩展,增加了一个类型转换操作符。类型转换操作符允许设计者在表达式的任意一个地方指定一次类型转换。类型转换操作符的语法为:
type’(expression)
注意与C的类型转换操作符不同(C中为type(expression))。
使用system verilog类型和类型转换,上述的verilog例子可以减少使用临时变量,具体如下:
1 longint a, y;
2 real r;
3 y = a + longint'(r**3);
- 位宽转换
在verilog中,表达式的位宽由操作数、操作符和上下文决定。system verilog也遵守同样的规则,不过有所扩展。
system verilog允许一个表达式的位宽转换为一个不同的位宽,可以对一个表达式或者一个操作结果进行一个明确的位宽转换。
位宽转换操作符的语法为:
size’(expression)
一些类型转换的例子:
logic [:] a, b, c, sum; // 16 bits wide
logic carry; // 1 bit wide
sum = a + ’(); // cast operand
{carry,sum} = ’(a + ); // cast result
sum = a + ’(b - ) / c; // cast intermediate result
如果表达式被转换为一个更小的位宽,则表达式中左边最高位的比特被截取。如果表达式被转换为一个较大的位宽,则表达式进行左边位扩展:无符号数左边扩展0,有符号数左边扩展符号位。
这些规则与一个表达式被赋值为另一个位宽的表达式时的位宽转换规则相同。
- 符号转换
system verilog在确定表达式结果是否有符号时,规则与verilog相同。system verilog同样允许对一个数值进行明切的符号转换。
符号转换的语法如下:
signed’(expression)
unsigned’(expression)
一些符号转换的例子如下:
sum = signed’(a) + signed’(a); // cast operands
if (unsigned'(a-b) <= 5) // cast intermediate result
......
system verilog的符号转换操作符与verilog的系统函数$signed和$unsigned功能一样。符号转换是可综合的。
system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)的更多相关文章
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
- 一段比较有意思的代码——介绍system verilog中的新增幅值语句
system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...
- System Verilog随笔(1)
测试文件该怎么写? 首先看一个简单代码案例: `timescale 1ns/10ps //1 module test; //2 intput wire[15:0] a; output reg[15 ...
- c++类型转换Type Cast)
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...
- verilog中符号位的扩展问题
以下内容转自 艾米电子 - 使用有符号数,Verilog(http://www.cnblogs.com/yuphone/archive/2010/12/12/1903647.html) Verilog ...
- Verilog中变量位宽注意
Verilog中,变量定义方式可以为:reg[位宽-1:0] 数据名:reg[位宽:1] 数据名.其他变量也类似. 以reg变量cnt为例,当cnt位宽为4时,可定义为reg[3:0] cnt,或者定 ...
- system verilog的一些总结(从其他博客复制来的)
转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...
- System Verilog基础(一)
学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...
- [转]System Verilog的概念以及与verilog的对比
原文地址: http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语 ...
随机推荐
- CSS hack方式一览【转】
做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道 ...
- final关键字
1.final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的.在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再 被扩展,那么就设计为fi ...
- nodejs-2:模块与包管理工具
多人协作时,大量的js文件批量的引入到页面中,会出现变量被覆 盖掉方法被重写掉的情况,特别是存在一些依赖关系的时候,还容 易导致页面出错,这是因为js天生就缺少一种模块的管理机制来 隔离实现功能的js ...
- Enum.GetHashCode()的问题
先说一下,正常如果代码可以定义成枚举,我是比较倾向于定义成枚举的,类似这样: public enum Gender { /// <summary> /// 男 /// </summa ...
- UVA1003(dfs+进制转换)
题意:输入很多字符的16进制数,现在需要你先转化为2进制,之后二进制中1和0组成的字符需要你求出来. 思路:字符每一个都有所不同可以靠圆圈的数目求出. #include<cstdio> # ...
- grep命令学习
grep(Globally search a Regular Expression and Print), 全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把 ...
- asp.net 各种路径
Request.Path 是包含文件名的,而 Request.ApplicationPath 是应用程序路径,不包含文件名. 示例: Request.Path = /cftea/Default.asp ...
- 在Mac上使用vim的几个命令
Mac上面编辑文件的命令总是记不住,留一个参考!!! 如果是vim,则:Esc 退出编辑模式,输入以下命令: :wq 保存后退出vi,若为 :wq! 则为强制储存后退出(常用) :w 保存但不 ...
- 第二节:模型(Models)和管理后台(Admin site)
本节内容我们将配置数据库,创建第一个model并且快速了解Django自动生成的管理后台(admin site) 目录 数据库配置 创建模型 激活模型 使用Django API 介绍Django管理后 ...
- winform设置button的边框颜色,或取消边框颜色,不显示边框
// winform设置边框颜色不像webform那么简单,可以通过设置FlatAppearance,也可以通过重绘实现. 一.设置按钮本身属性 buttonBubufx.FlatStyle = Fl ...