第一范文网 - 专业文章范例文档资料分享平台

system verilog 绗簩绔犵炕璇?- 鐧惧害鏂囧簱

来源:用户分享 时间:2025/5/25 10:56:07 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第二章数据类型

和Verilog相比,System Verilog提供了很多改进的数据结构,虽然其中的部分结构最初是为设计者创建的,但对于测试者也同样有用,本章将介绍这些对验证很有用的数据结构。

System Verilog引进了一些新的数据类型,它们具有如下优点。 1) 双状态数据类型:更好的性能,更低的内存消耗。

2) 队列、动态和关联数组:减少内存消耗,自带搜索和分类功能。 3) 类和结构:支持抽象数据结构。

4) 联合和合并结构:允许对同一数据有多种视图(view)。 5) 字符串:支持内建的字符序列。

6) 枚举类型:方便代码编写,增加可读性。

2.1内建数据类型

Verilog-1995有两种基本的数据类型:变量和线网(net)。它们各自都可以有4个取值:0,1,Z和X。RTL代码使用变量来存放组合和时序值。变量可以是单bit或多bit的无符号数(reg[7:0]m),32bits的有符号数(integer),64bits的无符号数(time)或浮点数(real)。若干变量可以被遗弃存放到定宽的数组里。所有的存储都是静态的,意味着所有的变量在整个仿真过程中都是存活的,子程序(routine)不能通过堆栈来保存形式参数和局部变量。线网可以用来连接设计当中的不同部分,例如门和模块实例。大多数设计者使用标量或矢量wire来连接各个设计模块的端口。

System Verilog增加了很多新的数据类型以便同时帮助设计和验证工程师。

2.1.1 逻辑(logic)类型

在Verilog中,初学者经常分不清reg和wire。应该使用哪一个来驱动端口?怎么连接不同的模块?System Verilog对经典的reg数据类型进行了改进,使它除了作为一个变量以外还可以被连续赋值、门单元和模块所驱动。为了区别reg类型,这种改进的数据类型叫做logic。任何使用wire的地方均可使用logic,但要求logic不能有多个结构性的驱动,例如在对双向总线建模的时候。此时需要使用wire类型,例如wire,System Verilog会对多个数据来源进行解析后确定终值。例2.1展示了logic类型在System Verilog中的使用。

2.1.2 双状态数据类型

相比四状态数据类型,System Verilog引入的双状态数据类型有益于提高仿真器的性能并减少内存使用量。最简单的双状态数据类型是bit,是无符号的。另四种带符号的双状态的数据类型是byte,shortint,int和longint,如例2.2所示。

把双状态变量连接到被测设计,如果被测设计试图产生X或Z,这些值会被转换成双状态值,而测试代码可能永远无法察觉。这些值被转换成了0还是1不重要,重要的是要随时检查未知的值得传播。使用($isunknown)操作符,可以在表达式的任意位置出现X或Z时返回1,如例2.3所示。

使用格式符%0t和参数$time可以打印出当前的仿真时间,打印的格式再$timeformat()子程序中指定。3.7节有关于时间值的详细介绍。

2.2 定宽数组

相比于Verilog-1995中的一维定宽数组,System Verilog提供了更加多样的数组类型,功能也大大增强了。

2.2.1 定宽数组的声明和初始化

Verilog要求在声明中必须给出数组上下界限,因为几乎所有数组都使用0作为索引下届,所以System Verilog允许只给出数组宽度的便捷声明方式,跟C语言类似。

可以通过在变量名后面指定维度的方式来创建多维定宽数组,例2.5创建了几个二维的整数数组,大小都是8行4列,最后一个元素的值被设置为1.多维数组在Verilog-2001中已经引入,但这种紧凑型声明方式却是新的。

如果代码试图从一个越界的地址中读取数据,那么System Verilog将返回数组元素类型的缺省值。即对于一个元素为4状态类型的数组。例如logic,返回的是X,而对于双状态类型如int或bit则返回0。这适用于所有数组类型,包括定宽数组、动态数组、关联数组和队列,同时适用于地址中含有X或Z的情况。wire在没有驱动的时候输出是Z。

很多System Verilog仿真器在存放数组元素时候使用32bit的字边界,所以byte,shortint和int都是存放在一个字中,而longint则存放到两个字中。

如例2.7所示,在非合并数组中,字的低位用于存放数据,高位则不使用。图2.1所示的字节数组b_unpack被存到三个字的空间里。如图2.1所示。

仿真器通常使用两个或两个以上的连续字来存放logic和integer等4状态类型,这会比存放双状态变量多占用一倍的空间。

2.2.2 常量数组

例2.8,2.9说明了如何使用常量数组,即一个单引号和大括号来初始化数组,可以一次性为数组的部分或所有元素赋值。在大括号前标上重复次数可以对多个元素重复赋值,还可以为那些没有显式赋值的元素制定一个默认值。

2.2.3 基本的数组操作 for和foreach

操作数组的最常见方式是使用for或foreach循环。在例2.10中,i被声明为for循环内的局部变量。System Verilog的$size的函数返回数组的宽度。在foreach循环中,只需指定数组名并在后面的方括号中给出索隐变量,System Verilog便会自动遍历数组中的元素。索引变量就会自动声明,只在循环内有效。

system verilog 绗簩绔犵炕璇?- 鐧惧害鏂囧簱.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c2vcdz8oz2c7916195d0l_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top