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、枚举类型

最新文章

  1. 未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件
  2. JQuery基本知识框架思维导图(上)
  3. zabbix添加监控主机(三)
  4. CircleLayout
  5. QT文件夹定位(网友提供)
  6. Sql"列转行"三种方法对比
  7. 懒人模式Singleton模式Meyers版本号
  8. 【Web探索之旅】第四部分:Web程序员
  9. ModelBinder——ASP.NET MVC Model绑定的核心
  10. iOS导航标题不居中问题(转载)
  11. 函数:atexit
  12. office之Excel 你会用 Ctrl + E 吗?
  13. 网络广告CPS/CPC/CPV/CPM/CPA分别是什么意思
  14. 【运维技术】JENKINS管道部署容器化初探
  15. mysql5.7.13 使用笔记
  16. 关于字符编码:ascii、unicode与utf-8
  17. 第5章 首次登录与在线求助man page
  18. Mybatis 删除多条数据XML SQL语句删除
  19. STL中map错误用法一例
  20. python常见模块之random模块

热门文章

  1. Pyinstaller打包exe,丢失图标等问题
  2. Javascript 基础学习(七)常用内置对象
  3. B样条曲线方程和C++实现
  4. 错误:EfficientDet网络出现"No boxes to NMS"并且mAP:0.0的解决方案
  5. ES6中Set和WeakSet
  6. 安全师(网络安全类pdf电子书籍)
  7. shell中expect免交互
  8. redis深入学习
  9. CSP-J2019被虐记
  10. opencv —— morphologyEx 开运算、闭运算、形态学梯度、顶帽、黑帽