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数据类型的更多相关文章

  1. [02]java数据类型和运算符等知识

    00 Java中的注释 为了方便程序的阅读,Java语言允许程序员在程序中写上一些说明性的文字,用来提高程序的可读性,这些文字性的说明就称为注释.注释不会出现在字节码文件中,即Java编译器编译时会跳 ...

  2. 02.JS数据类型与数据类型转换

    前言:   学习一门编程语言的基本步骤 (01)了解背景知识 (02)搭建开发环境 (03)语法规范 (04)常量和变量 (05)数据类型 (06)数据类型转换5.数据类型——datatype  数据 ...

  3. python基础02 基本数据类型

    摘要:简单的数据类型以及赋值 变量不需要声明 python的变量不需要声明,你可以直接输入: >>>a = 10 那么你的内存里就有了一个变量a, 它的值是10,它的类型是integ ...

  4. python学习笔记02 --------------基础数据类型

    python的基本数据类型: 1.基本数据 1.1. 数字类型 1.1.1 整数 int int()           #将括号内内容转化为整数类型. 1.1.2 浮点数 float 1.1.3 复 ...

  5. 「JavaSE 重新出发」02.02 引用数据类型

    引用(复合)数据类型 1. 枚举类型 例: 枚举类型 Size 的声明: enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 声明 Size 类型变量: ...

  6. 02 JavaScript数据类型、类型转换、注释

    JavaScript 数据类型 JavaScript 变量能够保存多种数据类型:数值.字符串值.数组.对象.undefined.null等等 var length = 7; // 数字 var las ...

  7. Python 基础02 基本数据类型

    简单的数据类型以及赋值 变量不需要声明 Python的变量不需要声明,你可以直接输入: >>> a = 10 那么你的内存里就有了一个变量a,它的值是10,它的类型是 integer ...

  8. 【Python系统学习02】数据类型与类型转换

    一.数据类型 字符串 整数 浮点数 [补充中...] 1.字符串 str 字符串:英文string,简写str. name = '小石头:' print(name,'2019', '12', '24' ...

  9. MongoDB基础知识 02

    MongoDB基础知识 02 6 数据类型 6.1 null : 表示空值或者不存在的字段 {"x":null} 6.2 布尔型 : 布尔类型只有两个值true和false {&q ...

  10. JavaSE学习总结第02天_Java基础语法1

      02.01 关键字的概述和使用 关键字概述:被Java语言赋予特定含义的单词 关键字特点:组成关键字的字母全部小写 关键字注意事项:goto和const作为保留字存在,目前并不使用,类似Notep ...

随机推荐

  1. debian 10安装英伟达独显驱动

    我的显卡是GTX1050TI,刚安装好Debian 10的时候启动会黑屏,无法进入系统,解决办法是在grub界面,按e修改启动参数,在启动参数那一行(一般会包含quiet)后面加上 nouveau.m ...

  2. Ubuntu18.04-Java8安装

    添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 安装oracle-java-installer sudo ...

  3. Hibernate(六)--缓存策略

    缓存: 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问中间层,ORM在查询数据时,首先会根据自身的缓存管理策略,在缓存中查找相关数据,如果发现所需的数 ...

  4. JS DOM中getElement系列和querySelector系列获取节点

    节点查找方法 document.getElementById() 前面必须是document document.getElementsByName()  前面必须是document ele.getEl ...

  5. Python之基础、细节

    引号的用法 单引号对 ' ' :表示字符串,可以换行 双引号对 " " :表示字符串 三引号对 ''' ''' 和 """ ""& ...

  6. VLAN和子网之间的区别与联系

    通常来说,子网和VLAN的相似之处在于它们都处理网络的一部分的分段或分区.但是,VLAN是数据链路层(OSI L2)的构造,而子网是网络层(OSI L3)的IP构造,它们解决网络上的不同问题.尽管在V ...

  7. 洛谷P3719 [AHOI2017初中组]rexp

    洛谷P3719 [AHOI2017初中组]rexp 题目背景 以下为不影响题意的简化版题目. 题目描述 给出一个由(,),|,a组成的序列,求化简后有多少个a. 化简规则: 1.形如aa...a|aa ...

  8. XSS跨站测试代码

    '><script>alert(document.cookie)</script>='><script>alert(document.cookie)&l ...

  9. 2.Android网络编程-web介绍以及Tomcat安装使用

    1.CS和BS CS:Client/Server 客户端和服务器,这种软件往往需要安装.比如QQ.迅雷.播放器. 优点 :  可以减轻服务器端压力,将部分代码写到客户端,并且界面很美观. 缺点 :  ...

  10. MySQL8服务无法正常启动的解决方法(1053错误)

    个人博客 地址:https://www.wenhaofan.com/article/20190530120545 错误描述 在MySQL安装的最后一步启动失败,如下图所示 在服务和应用程序->服 ...