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 ...
随机推荐
- springcloud vue.js 微服务 分布式 activiti工作流 前后分离 shiro权限 集成代码生成器
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面
场景 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建Androi ...
- POST注入之sqlmap
POST注入方法一加—form跑数据库sqlmap.py -u http://59.63.200.79:8815/Pass-05/index.php —form —dbs跑出数据库后查询表名 假设库名 ...
- opencv —— getRotationMatrix2D、warpAffine 仿射变换实现图像旋转缩放
仿射变换的基本概念 仿射变换是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,其数学表达式形式如下: 对应的齐次坐标矩阵表示形式为: 仿射变换保持了二维图形的“平直性”(直线经仿射变换后依然 ...
- NIO学习笔记,从Linux IO演化模型到Netty—— 从BIO到epoll模型
本文不涉及具体代码,只分析Linux IO演化的心路历程,学习资料来源网络,不保证一定正确,若有错误,欢迎指出. BIO 服务端创建socket(80端口),文件描述符3号. 当线程调用accept时 ...
- mybatis_day02
2.映射器Mapper 相当于dao层,不用写实现类(mybatis底层会采用动态代理模式 会跟我生成实现) 步骤: (1) 创建项目 配置mybatis-config.xml 和昨天一样 (2) 创 ...
- Java获取IP地址,IpUtils工具类,Java IP地址获取
================================ ©Copyright 蕃薯耀 2020-01-17 https://www.cnblogs.com/fanshuyao/ import ...
- ASP.NET Learning Center---学习ASP.NET(1)
1,学习地址---微软官网 2,目标:学习Razor,以及建立Web应用. 3,https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor ...
- Java Web 笔记(3)
8.JSP 8.1.什么是JSP Java Server Pages : Java服务器端页面,也和Servlet一样,用于动态Web技术! 最大的特点: 写JSP就像在写HTML 区别: HTML只 ...
- P1028 数的计算( 记忆剪枝 )
题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 n ): 先输入一个自然数 n(n≤1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上一个自然数,但该自然数 ...