【SystemVerilog】数据类型(1)logic

news/2024/5/19 17:25:50 标签: systemverilog, 数字IC验证, 数字IC设计

相对于Verilog来说,SystemVerilog引进了一些新的数据类型,它们具有如下优点:

        (1)双状态数据类型:更好的性能,更低的内存消耗。

        (2)队列、动态和关联数组:减少内存消耗,自带搜索和分类功能。

        (3)类和结构:支持抽象数据结构。

        (4)联合和合并结构:允许对同一数据有多种视图(view)。

        (5)字符串:支持内建的字符序列。

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

双状态,即 0 / 1 ;而verilog中reg/wire都是四状态: 0 /1 /X /Z;

一、逻辑(logic)类型

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

举个栗子:

例1:

 例2:

 总结一下:

        logic类型可以替代所有其他类型,包括reg类型。只有一个驱动源的变量都可以声明为logic类型。但是如果存在多个驱动,那么编译就会报错。

        需要设计为多驱动的信号,例如双向总线,就需要定义为线网类型,例如wire。

二、双状态数据类型

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

 

需要注意的是:

  1. 新增的数据类型基本都是有符号的,使用时要注意。
  2. 在把双状态变量连接到被测设计,尤其是被测设计的输出时务必要小心。如果被测设计试图产生X或Z,这些值会被转换成双状态值,而测试代码可能永远也察觉不了。这些值被转换成了0还是1并不必要,重要的是要随时检查未知值的传播。使用($ isunknown )操作符,可以在表达式的任意位出现X或Z时返回1。


http://www.niftyadmin.cn/n/1076124.html

相关文章

Java集合框架之二:LinkedList源码解析

LinkedList底层是通过双向循环链表来实现的,其结构如下图所示: 链表的组成元素我们称之为节点,节点由三部分组成:前一个节点的引用地址、数据、后一个节点的引用地址。LinkedList的Head节点不包含数据,每一个节点对应一…

jQuery源码的一个坑

纯吐槽 大半夜也真是够了,想学着jQ造个小轮子巩固下js,结果一开始就卡住了。 虽然之前也看过源码,但是主要是研究方法实现什么的,对于框架主函数和入口结构不怎么熟悉,于是想着一步一步调试看看。 $(#div) 简单吧&…

[Windows]获取系统版本号

1 string GetMainProgInfo()2 {3 string strRet;4 TCHAR szPath[MAX_PATH];5 GetModuleFileName(NULL,szPath,MAX_PATH); 6 7 //根据主程序路径获取版本信息 8 DWORD dwHandle 0; 9 DWORD dwVerSize GetFileVersionInfoSize(szPath,&dwHandle); 10 if (dwVerSiz…

【SystemVerilog】数据类型(2)定宽数组和动态数组

目录 一、定宽数组 1.1定宽数组的声明和初始化 1.2常量数组 1.3数组的基本操作——for、foreach 1.4数组的比较和复制 1.5合并数组 二、动态数组 SV对数组分为两类:定宽数组和动态数组。 定宽数组,一般长度始终固定,且不存在重用性的…

Xilinx平台Aurora IP介绍(四)Example Design介绍

多看一些example design之后,你就会发现都是熟悉的配方~ 汇总篇: Xilinx平台Aurora IP介绍(汇总篇) 目录 一、Example Design 二、仿真 一、Example Design 首先打开example design,看看示例工程架构: …

PHP 快速排序

<?php //快速排序 //待排序数组 $arrarray(6,3,8,6,4,2,9,5,1); //函数实现快速排序 function quick_sort($arr) { //判断参数是否是一个数组 if(!is_array($arr)) return false; //递归出口:数组长度为1&#xff0c;直接返回数组 …

【SystemVerilog】数据类型(3)数组的方法

目录 一、数组缩减方法 二、数组定位方法 三、数组排序方法 SV提供了很多数组的方法&#xff0c;可用于任何一种非合并的数组类型&#xff0c;包括定宽数组、动态数组、队列和关联数组。这些方法有繁有简&#xff0c;简单的如求当前数组的大小&#xff0c;复杂的如对数组排序…

localStorage新手必看不容错过

1先看一个留言板的小例子 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title></head> <body><fieldset><legend>留言板</legend><textarea name…