彩票网站和app建设,网站栏目策划,网站设置快捷方式,珠海网站建设 旭洁一、概述 和Verilog相比#xff0c;SV提供了很多改进的数据结构。它们具有如下的优点#xff1a;
双状态数据类型#xff1a;更好的性能#xff0c;更低的内存消耗队列、动态和关联数组#xff1a;减少内存消耗#xff0c;自带搜索和分类功能类和结构#xff1a;支持抽…一、概述 和Verilog相比SV提供了很多改进的数据结构。它们具有如下的优点
双状态数据类型更好的性能更低的内存消耗队列、动态和关联数组减少内存消耗自带搜索和分类功能类和结构支持抽象数据结构联合和合并结构允许对同一数据有多种视图view字符串支持内建的字符序列枚举类型方便代码编写增加可读性
二、数据类型 Verilog-1995有两种基本的数据类型变量和线网net)。它们各自都可以有四种取值0、1、X、Z。 RTL代码使用变量来存放组合和时序值。变量可以是单比特或多比特的无符号数reg[7:0]m),32比特的有符号数integer)64比特的无符号数time或浮点数real)。若干变量可以被一起存放到定宽数组里。所有的存储都是静态的意味着所有的变量在整个仿真过程当中都是存活的子程序routine不能通过堆栈来保存形式参数和局部变量。线网可以用来连接设计当中的不同部分例如门和模块实例。尽管线网有很多种用法但是大多数设计者还是使用标量或矢量wire来连接各个设计模块的端口。 SV增加了很多新的数据类型以便同时帮助设计和验证工程师。我们直接进行一个简单的总结当我们谈到SV中的数据类型的时候我们一般进行3个维度的区分 变量(variable) 或者 线网(wire)逻辑类型(logic) 或者 双状态数据类型(bit等)有符号 或者 无符号 2.1 变量 or 线网 我们知道在verilog中也有线网wire和变量reg的区分并且在verilog中wire类型只能通过连续赋值assign进行驱动reg类型只能通过过程赋值always/inital进行驱动。 与verilog像类似SV中也把线网类型描述成wire并且也是只能够过连续赋值进行驱动但是对于变量类型的描述有所不同SV中对于经典的reg类型进行了改动改成立variable缩写为var。其最大的不同就在于它除了作为一个变量之外还可以被连续赋值门单元和模块所驱动最简单的理解reg不能用assign,但是var可以用assign赋值。 到这里可能就会产生一个疑问既然var这么万能那我们还保留wire干什么反正都可以assignwire似乎显得多此一举了。但是有要求是var类型不可以有多个结构性驱动例如在对双向总线模型inout进行建模的时候。此时需要使用wire类型SV会对多个数据来源进行解析并确定最终值。 默认为var类型例如只写一个logic(下面马上说)含义就是var logic。
2.2 逻辑 或者 双状态数据 verilog中所有的数据有4种可能的取值类型01XZ。其中01不用过多的解释X表示未知Z表示高阻也可以理解为没有驱动。但是在实际的硬件上是不存在所谓的X的对于硬件其并不存在X只是我们无法获知其到底是什么状态所以引入了X来对硬件进行建模。 在SV中数据类型被分成了两种逻辑logic类型和二状态数据类型。对于logic来说其可能的取值与verilog一致也是上述的4种但是为了更有利提高仿真器的性能并减少内存的使用量,SV引入了双状态数据类型最简单的双状态数据类型是bit它是无符号的另外四种带符号的双状态数据类型是byteshortintint和longint。 2.3 有符号 和 无符号 没啥好说的 三、补充说明
四值逻辑变量例如reg、logic或者integer等在仿真开始时的初值为X二值逻辑变量例如bit等在仿真开始时的初值为0如果四值逻辑与二值逻辑的数据类型之间发生的默认转换那么Z和X值将转换为0。二值逻辑也可以用来实现可综合电路只是二值逻辑由于没有X 和Z值因此可能会出现仿真行为同综合电路结果不一致的情况。SV添加void类型来表示空类型经常用在函数定义时表示不会返回数值同C语言的void使用方法SV添加shortreal表示32位单精度浮点类型同C语言的float而Verilog的real类型表示双精度浮点类型同C语言的double。