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 ...
随机推荐
- Spark存储介绍
目录 整体架构 存储相关类 应用启动时 增删改后更新元数据 获取数据存放位置 数据块的删除 RDD存储调用 数据读取 数据写入 cache & checkpoint Reference 记录一 ...
- 进阶之路 | 奇妙的IPC之旅
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习清单: IPC的基础概念 多进程和多线程的概念 Android中的序列化机制和Binder Android ...
- \n不换行
\n在js中表示换行,<br/>在html中表示换行,所以如果在设置innerHtml值时使用 \n ,那么在页面上并不会显示换行,而在设置innerText值时使用 \n 就会显 ...
- Redisson源码学习之RedissonFairLock
博客待整理,先只是把源码看了.... 后面不再备注redis中的命令含义了,这样备注写太多了不好阅读. package org.redisson; import java.util.Arrays; i ...
- 使用elementui树形控件写项目小结
使用tree pagination serch table 实现功能 项目难点主要解析后台传递的代码,线性转树形,这儿加上一个大神的解析 https://blog.csdn.net/dandanzmc ...
- IDEA最新注册码 (亲测有效,可激活至 2089 年~)
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 分享IDEA最新注册码 (亲测有效,可激活至 2089 年~) 注意 本 ...
- thinkPHP5.1模型User设计
创建一个User类,再引入think\Model,让User类继承Model 例: <?php namespace app\index\model; use think\Model; class ...
- java-局部变量,成员变量区别
1. 内存中的位置 成员变量: 堆内存 局部变量: 栈内存 2. 生命周期 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法调用完毕而消失 3. 注意事项 ...
- 理解Android线程创建流程
copy from : http://gityuan.com/2016/09/24/android-thread/ 基于Android 6.0源码剖析,分析Android线程的创建过程 /androi ...
- 用idea打包maven项目
利用idea工具打包项目 1.点击图中标记①,idea会自动生成打包命令,这个打包命令会包含单元测试内容,如果单元测试的内容报错,是打包不成功的,这个时候我们需要在打包命令中用 -Dmaven.tes ...