• 类型转换

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)的更多相关文章

  1. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  2. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

  3. System Verilog随笔(1)

    测试文件该怎么写? 首先看一个简单代码案例: `timescale 1ns/10ps //1 module test;   //2 intput wire[15:0] a; output reg[15 ...

  4. c++类型转换Type Cast)

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...

  5. verilog中符号位的扩展问题

    以下内容转自 艾米电子 - 使用有符号数,Verilog(http://www.cnblogs.com/yuphone/archive/2010/12/12/1903647.html) Verilog ...

  6. Verilog中变量位宽注意

    Verilog中,变量定义方式可以为:reg[位宽-1:0] 数据名:reg[位宽:1] 数据名.其他变量也类似. 以reg变量cnt为例,当cnt位宽为4时,可定义为reg[3:0] cnt,或者定 ...

  7. system verilog的一些总结(从其他博客复制来的)

    转载自 http://blog.sina.com.cn/s/blog_e7fec2630101f5t9.html SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE 136 ...

  8. System Verilog基础(一)

    学习文本值和基本数据类型的笔记. 1.常量(Literal Value) 1.1.整型常量 例如:8‘b0 32'd0 '0 '1 'x 'z 省略位宽则意味着全位宽都被赋值. 例如: :] sig1 ...

  9. [转]System Verilog的概念以及与verilog的对比

    原文地址: http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语 ...

随机推荐

  1. jquery的ajax和jsonp的写法

    交互 ajax jsonp ajax跟之前一模一样 $(document).ready(function(){     $.ajax({         url:'get.php',         ...

  2. Android Studio使用教程-菜单(Edit)

    3.2.1.Undo(Ctrl+Z) 撤销上一次操作 3.2.2.Redo(Ctrl+Shift+Z) 退出撤销操作 3.2.3.Cut(Ctrl+X) 剪切 3.2.4.Copy(Ctrl+C) 复 ...

  3. HTML meta 标签用法(转)

    meta主要为分HTTP标头信息(HTTP-EQUIV)和页面描述信息(NAME).标头信息包括文档类型.字符集.语言等浏览器正确显示网页的信息及处理动作:网页描述如内容的关键字.摘要.作者和定义ro ...

  4. 今天网站后台登录页面需要生成一个二维码,然后在手机app上扫描这个二维码,实现网站登录的效果及其解决方案如下

    要实现二维码登录,需要解决2个技术,1.需要js websocket 与后台php实现长连接技术 2.实现二维码生成技术 要实现这个功能第二个算是比较简单,只需要下载一个php的二维码生成器即可,但要 ...

  5. Docker学习---ubuntu环境

    添加Docker的ATP仓库 sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sour ...

  6. JSP编译原理图解

  7. select 函数1

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序( ...

  8. oracle数据库从入门到精通之二

    重点关注表的创建与操作语法(如何创建与设计表是后话)常用数据类型表本质上是数据的集合操作数据类型:不管扩展多少种数据类型,常用的就以下几种字符串    varchar2(其它数据库是varchar)来 ...

  9. MYSQL 判断一个时间段是否在另一个时间段内。

    [1 CREATE TABLE #B 2 ( 3 MeetingRoom int, 4 BeginTime datetime, 5 EndTime datetime6 ) 7 insert into ...

  10. Unexpected end of file from server 服务器访问问题导致

    Caused by: java.net.SocketException: SocketException invoking http://xxxx/cxf/xh/creditInterface?wsd ...