02-SV数据类型
1、数据类型
内建数据类型:逻辑(logic)类型、双状态数据类型(bit,byte,shortint,int,longint)、四状态数据类型(integer,time,real)
SV对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动,这种数据类型被称为logic。任何使用线网的地方均可以使用logic,但要求logic不能有多个结构性的驱动,例如在对双向总线建模的时候,这时需要使用线网wire类型。其实logic同时具备了wire和reg的属性,可以过程赋值、连续赋值、门驱动、模块驱动。

其他:定宽数组、动态数组、队列、关联数组、字符串、枚举类型
合理选择数据类型:
网络数据包:长度固定,顺序存取——定宽数组或者动态数组
保存期望值的计分板:仿真前长度未知,按值存取,长度经常变化——队列
有序结构:数据按照可预见的顺序输出——队列 输出顺序不确定——关联数组
超过百万个条目的特大容量存储器模型:不需要用到所有的存储空间——关联数组,可以考虑双状态的合并数据进一步减少存储量
文件的命令名或操作码:把字符串转化成固定值——关联数组
指令中的操作码或者状态机中的状态名—— 枚举类型
2、定宽数组
⑴合并数组
⑵合并数组与非合并数组的选择

使用合并数组有助于节省存储空间
module sv_test1(
);
// constant array
int md1[][]='{'{,,},'{4,5,6}};
int md2[][]='{'{,,},'{4,5,6}};
bit [:] md3[] = '{5{5}}; // packed array
bit [:][:] bytes; initial begin
// access array
foreach(md1[i,j]) begin
$display("md1[%0d][%0d]=%0d",i,j,md1[i][j]);
end // compare arrsy
if(md1==md2) begin
$display("equal"); // equal
end // Use both bit and array indices
$displayb(md3[][:]); //
$displayb(md3[][:]); // 10 // paked array
bytes = 'hCafe_Dada;
$displayh(bytes,, // cafedada
bytes[],, // ca
bytes[][]); // MSB 1
end endmodule
3、动态数组
int dyn[],dyn2[];
initial begin
$display("========= dynamic array ==========");
dyn = new[];
foreach(dyn[i]) dyn[i] = i;
dyn2 = dyn;
dyn2[] = ;
$display(dyn[],dyn2[]); // 0 5
dyn.delete();
dyn2.delete();
end
4、队列
(1)队列的声明是使用带有美元符号的下标[$],队列元素的编号从0到$,队列的常量不需要使用‘
int j = ;
int q[$] = {,,}; // {0,2,5}
initial begin
$display("========= queue =========");
q.insert(,j); // {0,1,2,5}
q.delete(); // {0,2,5}
q.push_front(); // {3,0,2,5}
j = q.pop_back; // j=5 {3,0,2}
$display("j=%0d",j);
q.push_back(); // {3,0,2,4}
j = q.pop_front; // j=3 {0,2,4}
$display("j=%0d",j);
foreach(q[i]) $display(q[i]);
q.delete();
end
5、关联数组
用于稀疏化存储,也可以像perl中的哈希一样用字符串进行索引。
// associative array
int associative_array[string];
initial begin
$display("=========== associative array ==============");
associative_array["min_address"] = ;
associative_array["max_address"] = ;
foreach(associative_array[s])
$display("associative_array[%s]",s,associative_array[s]);
end
6、链表
SystemVerilog的队列比链表更加高效易用。
7、枚举类型

02-SV数据类型的更多相关文章
- [02]java数据类型和运算符等知识
00 Java中的注释 为了方便程序的阅读,Java语言允许程序员在程序中写上一些说明性的文字,用来提高程序的可读性,这些文字性的说明就称为注释.注释不会出现在字节码文件中,即Java编译器编译时会跳 ...
- 02.JS数据类型与数据类型转换
前言: 学习一门编程语言的基本步骤 (01)了解背景知识 (02)搭建开发环境 (03)语法规范 (04)常量和变量 (05)数据类型 (06)数据类型转换5.数据类型——datatype 数据 ...
- python基础02 基本数据类型
摘要:简单的数据类型以及赋值 变量不需要声明 python的变量不需要声明,你可以直接输入: >>>a = 10 那么你的内存里就有了一个变量a, 它的值是10,它的类型是integ ...
- python学习笔记02 --------------基础数据类型
python的基本数据类型: 1.基本数据 1.1. 数字类型 1.1.1 整数 int int() #将括号内内容转化为整数类型. 1.1.2 浮点数 float 1.1.3 复 ...
- 「JavaSE 重新出发」02.02 引用数据类型
引用(复合)数据类型 1. 枚举类型 例: 枚举类型 Size 的声明: enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 声明 Size 类型变量: ...
- 02 JavaScript数据类型、类型转换、注释
JavaScript 数据类型 JavaScript 变量能够保存多种数据类型:数值.字符串值.数组.对象.undefined.null等等 var length = 7; // 数字 var las ...
- Python 基础02 基本数据类型
简单的数据类型以及赋值 变量不需要声明 Python的变量不需要声明,你可以直接输入: >>> a = 10 那么你的内存里就有了一个变量a,它的值是10,它的类型是 integer ...
- 【Python系统学习02】数据类型与类型转换
一.数据类型 字符串 整数 浮点数 [补充中...] 1.字符串 str 字符串:英文string,简写str. name = '小石头:' print(name,'2019', '12', '24' ...
- MongoDB基础知识 02
MongoDB基础知识 02 6 数据类型 6.1 null : 表示空值或者不存在的字段 {"x":null} 6.2 布尔型 : 布尔类型只有两个值true和false {&q ...
- JavaSE学习总结第02天_Java基础语法1
02.01 关键字的概述和使用 关键字概述:被Java语言赋予特定含义的单词 关键字特点:组成关键字的字母全部小写 关键字注意事项:goto和const作为保留字存在,目前并不使用,类似Notep ...
随机推荐
- 二次开发的Selenium Demo版本
文件名你们自己命名就好,至于为什么要重写强制位移的函数呢,是因为Mac上Selenium不支持拖拽,只能这样做了,4个文件--------------------------------------- ...
- 生成JavaDoc文档
JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了.在简略介绍JavaDoc写法之后,再看一下在Intellij Idea 中如何将代码中的注释 ...
- proptypes介绍
开始 prop-types的主要作用:对props中数据类型进行检测及限制 引用方法:import PropTypes from 'prop-types' 用法: // 基本用法 用来检测数据类型 c ...
- vue基于video.js实现视频播放暂停---切图网
切图网是最早致力于PSD2HTML切图等web前端外包服务的,随着前端技术的更新迭代,现在也已经全面投入了vue的浪潮了,下面是vue中实现视频播放的方法. vue.js中引入video视频播放器 m ...
- java 虚拟机原理
什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目 ...
- 版本管理git
Git 是目前世界上最先进的分布式版本控制系统. git的主要操作步骤 git.init 初始化,显示成功后去相应的文件夹中查看是不是多了一个git文(版本库) 命令1. git confi ...
- P2256 一中校运会之百米跑
----------------------- 题目链接:MIKU --------------------- 我现在发现找BUG的最好方法————喝水 喝一次找一个,喝两次A道题 --------- ...
- Vue中data元素之间相互赋值的陷阱
今天在整理代码时,遇到这样的一个场景,下面将结合示例说明: (一)在Vue文件中定义一个const常量,如下图所示: (二)在data中有三个元素是这样赋值的,如下图所示: (三)在created() ...
- BSP与HAL关系(转)
板级支持包(BSP)(Board Support Package)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件 ...
- hibernate报错:MappingException: Could not determine type for...解决办法
有时候实体里的一些属性并不想映射到数据库(比方说子级菜单List), 如果不做处理的话会报字段映射错误找不到这列Column Not Found 例如:org.hibernate.MappingExc ...