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技术
CSS是英语Cascading Style Sheets(层叠样式表单)的缩写,它是一种用来表现HTML或 XML 等文件式样的计算机语言. CSS 目前最新版本为CSS2,能够真正做到网页表现与内容 ...
- 百度地图helloworld程序问题
按照百度开发者平台[http://developer.baidu.com/map/index.php?title=androidsdk/guide/retrieval]的开发指南,完整编写代码ok之后 ...
- 05_动手动脑之String.equals()方法的实现代码
Question: 请查看String.equals()方法的实现代码,注意学习其实现方法. Answer: java中的String.equals()方法的实现代码: equals()法是根类Obj ...
- outscan 一键批量 get struct2 devMode (CNVD-2016-04656)
之前写的一个玩意 下载地址:http://pan.baidu.com/s/1i5jmEwP 密码:v8v3 一键批量 get struct2 devMode 支持百度.google(google有访问 ...
- SpringMVC——文件上传
----------------------------------------------------------------------------spring.xml-------------- ...
- (转) Playing FPS games with deep reinforcement learning
Playing FPS games with deep reinforcement learning 博文转自:https://blog.acolyer.org/2016/11/23/playing- ...
- 如何解决CDR x8安装时显示“已停止工作”
相信很多朋友在安装cdr X8时会遇到这样一种情况,能装上去,但不能运行,弹出提示说CorelDRAW X8(64-bit)已停止工作.同样的X8安装包,在不同的电脑上测试有的没有问题,有的则会出现以 ...
- sql server 条件 not in (null)总是false
SELECT 1 WHERE 2 NOT IN ( 1 ); 结果: (无列名) 1 SELECT 1 WHERE 2 NOT IN ( 1, NULL ); 结果:(无列名) ...
- asp.net 导入excel文件
前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="b2ccarri ...
- DELPHI 各版本下载
各版本中国下载地址: http://pan.baidu.com/s/1eQ1QGy2 http://pan.baidu.com/s/1qWK3mw8 (有新版本发布时,会同步最新官网地址) ───── ...