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是一种硬件描述和验证语 ...
随机推荐
- Scrollview嵌套listview
//建立Scrollview类 public class MyScrollView extends ScrollView { public MyScrollView(Context context, ...
- h5移动端-1
iphone3 : 设备分辨率 : 320*480 屏幕分辨率 : 320*480 iphone4 : 设备分辨率 : 320*480 屏幕分辨率 : 640*960 iphone5 : 设备分辨率 ...
- 论SCRM系统对传统行业的冲击
SCRM(Social Customer Relationship Management)顾名思义是社会型客户关系管理系统,这在当前的电子商务领域是一个创新的概念,由于社交媒体(Social Medi ...
- 为什么js加事件时不要写括号
function al(){alert("我擦")}此时,al代表这个函数的对象,al()就是直接运行了.var nfun=al;就是让nfun也指向了al,此时nfun()就相当 ...
- 从0和1到Python
什么是编程语言? 举一个例子: 如果我们不会英语,和一个不会中文的老外交流,怎么办?找个翻译. 电脑只懂0和1组成的机器语言. 用0和1告诉计算机做事很累:人类语言易了解,学习快,效率高. 如果定义一 ...
- 使用keepalived实现mysql主从复制的自动切换
最近测试了一下mysql+keepalived实现主从自动切换,主从都需要安装keepalived,使用vip漂移实现主从自动切换,这里主要记录的是keepalived的文件配置. 这里mysql搭建 ...
- makedown使用语法
makedown是一个轻量级的标记语言,目前越来越多的写作爱好者所使用.优点很多,纯文本内容兼容所有文本编辑器.语法简单.轻松导出HTML.PDF和本身.md文件. 1.编辑工具 windows: M ...
- Apache Tomcat 7 安装与配置
下载 首先需要下载tomcat7的安装文件,地址如下: http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomca ...
- Beta版本冲刺——day4
No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 站立式会议 今日计划表 人员 工作 ...
- PetShop安装失败
报错提示: Security This installer has encountered an unexpected error installing this package. This may ...