转一篇Systemverilog的一个牛人总结:

http://blog.sina.com.cn/s/blog_5e9b181a010188re.html

1、合并数组和非合并数组

1)合并数组:

存储方式是连续的,中间没有闲置空间。

例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。

表示方法:

数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】

Bit[3:0] [7:0] bytes   ;

2)非合并数组:

Bit [7:0] bytes [0:3]   ;或者 Bit [7:0] bytes [4]   ;

2、二维数组和合并数组识别:

合并数组:  bit [3:0] [7:0] arrys;   大小在变量名前面放得,且降序

二维数组:  int arrays[0:7] [0:3] ;  大小在变量名后面放得,可降序可升序

位宽在变量名前面,用于识别合并和非合并数组,位宽在后面,用于识别数组中元素个数。

3、非合并数组:

一般仿真器存放数组元素时使用32bit的字边界,byte、shortint、int都放在一个字中。

非合并数组:字的地位存放变量,高位不用。

表示方法:

Bit   [7:0] bytes;

4、合并数组和非合并数组的选择

(1)当需要以字节或字为单位对存储单元操作。

(2)当需要等待数组中变化的,则必须使用合并数组。例如测试平台需要通过存储器数据的变化来唤醒,需要用到@,@只能用于标量或者合并数组。

Bit[3:0] [7:0] barray[3]  ; 表示合并数组,合并数组中有3个元素,每个元素时8bit,4个元素可以组成合并数组

可以使用barry[0]作敏感信号。

5、动态数组

随机事物不确定大小。

使用方法:数组在开始是空的,同时使用new[]来分配空间,在new[n]指定元素的个数。

int dyn[];

Dyn = new[5];     //分配5个元素空间

Dyn.delete() ;     //释放空间

6、队列

在队列中增加或删除元素比较方便。

7、关联数组

当你需要建立一个超大容量的数组。关联数组,存放稀疏矩阵中的值。

表示方法:

采用在方括号中放置数据类型的形式声明:

Bit[63:0] assoc[bit[63:0]];

8、常量:

1)Verilog 推荐使用文本宏。

好处:全局作用范围,且可以用于位段或类型定义

缺点:当需要局部常量时,可能引起冲突。

2)Parameter

作用范围仅限于单个module

3)Systemverilog:

参数可以在多个模块里共同使用,可以用typedef 代替单调乏味的宏。

9、可以在for循环中定义变量,作用范围仅在循环内部

for(int i=0;i<10;i++)

array[i] =i;

10、任务、函数及void函数

1) 区别:

Verilog中task 和function最重要的区别是:task可以消耗时间而函数不能。函数中不能使用#100的延时或@的阻塞语句,也不能调用任务;

Systemverilog中函数可以调用任务,但只能在fork  joinnone生成的线程中。

2)使用:

如果有一个不消耗时间的systemverilog任务,应该把它定义成void函数;这样它可以被任何函数或任务调用。

从最大灵活性角度考虑,所有用于调用的子程序都应该被定义成函数而非任务,以便被任何其它任务或函数调用。(因为定义成任务,函数调用任务很有限制)

11、 类静态变量

作用:

1)类的静态变量,可以被这个类的对象实例所共享。

当你想使用全局变量的时候,应该先想到创建一个类的静态变量

静态变量在声明的时候初始化。

2)

类的每一个实例都需要从同一个对象获取信息。

12、静态方法

作用:

当静态变量很多的时候,操作它们的代码是一个很大的程序,可以用在类中创建一个静态方法读写静态变量,但是静态方法不能读写非静态变量。

l       ref高级的参数类型

Ref 参数传递为引用而不是复制。Ref比 input 、output、inout更好用。

Function void print_checksum(const ref bit [31:0] a[ ]);

1)       也可以不用ref进行数组参数传递,这时数组会被复制到堆栈区,代价很高。

2)       用带ref 进行数组参数传递,仅仅是引用,不需要复制;向子程序传递数组时,应尽量使用ref以获得最佳性能,如果不希望子程序改变数组的值,可以使用const ref。

3)       Ref参数,用ref 传递变量;可以在任务里修改变量而且,修改结果对调用它的函数可见,相对于指针的功能。

转载于:https://www.cnblogs.com/littleMa/p/4761974.html

systemverilog 起步相关推荐

  1. [笔记] systemverilog学习笔录

    2015-08-20 周四 晴 http://blog.chinaaet.com/detail/40060 SystemVerilog中包含并发断言和即时断言两种类型的断言.所谓并发断言就是在时钟边沿 ...

  2. Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误

    这篇是计算机类的优质预售推荐>>>><Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误> 编辑推荐 纠错式学习,从"陷阱 ...

  3. 从试用到使用:计算机视觉产业新一轮发展的起步年

    参加 2018 AI开发者大会,请点击官网报名 CSDN 出品的<2018-2019 中国人工智能产业路线图>V2.0 版即将重磅面世! V1.0 版发布以来,我们有幸得到了诸多读者朋友及 ...

  4. react中试用leaflet简单起步

    写在最前边,前不久的一个项目中要做一个地图的数据可视化需求.项目中用到了 Leaflet.项目到现在功能已经基本实现,现在写下来做一下记录.Demo是用 create-react-app 搭建的.源码 ...

  5. 【译】在ASP.NET中创建PDF-iTextSharp起步

    .Net framework 中自身并不包含可以和pdf打交道的方法.所以,当你需要你的ASP.Net Web应用程序中包含创建或与PDF文件交互的部分时,就不得不去找可用的第三方组件.使用谷歌可以搜 ...

  6. SpringBoot入门(二)——起步依赖

    本文来自网易云社区 在前一篇我们通过简单几步操作就生成了一个可以直接运行的Web程序,这是因为SpringBoot代替我们做了许多工作,概括来讲可以分为起步依赖和自动配置.这一篇先来看看起步依赖. 项 ...

  7. 「镁客·请讲」深睿医疗乔昕:AI医疗才起步,说变革尚早

    "深睿医疗已经远远不只是在做医疗影像诊断单一领域." AI医疗离我们有多远? 当IBM沃森陷入瓶颈时,国内的AI医疗却是别开生面的另一番场景.从2016年开始,国家作为政策引导方, ...

  8. 可综合的SystemVerilog:参数化函数/任务

    在Verilog中,参数化模块被广泛应用.参数可重新定义保证模块的可配置性及可复用性.但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力. SystemVerilog提供了一种 ...

  9. 网络推广外包——网络推广外包浅析那些年起步就结束的企业网站

    随着互联网技术的逐年发展,现如今几乎各行各业的企业都会通过网站建设早早地开始布局网络市场,然而尽管众多企业都注册了属于自家的官方网站,但是却始终没看到什么效果,建设网站花费的钱也是打了水漂,存在这种情 ...

最新文章

  1. 吴恩达的二八定律:80%的数据+20%的模型=更好的机器学习
  2. Problem 2238 Daxia Wzc's problem 1627 瞬间移动
  3. WinForm控件之【NumericUpDown】
  4. 使用Callable和Future接口创建线程
  5. java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。
  6. Java购物车swing_JAVA课程设计--购物车
  7. 网络服务家族图谱:一张图带您了解华为云网络服务大家族!【华为云分享】
  8. 虽说下班时间自己说了算
  9. HBuilderX 打包 vue 项目生成 apk
  10. 火车进出栈【卡特兰数】【高精度】【压位】【压int位】
  11. 迷茫时代的明白人——书摘
  12. java导出excel 打不开_java – 无法使用AbstractExcelView导出Excel工作表
  13. TreeSet集合如何保证元素唯一
  14. 【刷题日记】网易——牛牛的背包问题
  15. 初识openstack之0——虚拟化及Xen和KVM介绍
  16. python影评_python爬虫及结巴分词《攀登者》影评分析
  17. 虚拟机无法建立与服务器的连接,无法通过 Vmconnect 连接到虚拟机 - Windows Server | Microsoft Docs...
  18. java 微信支付以及退款拿过来直接使用
  19. 云数据中心概述与趋势
  20. 【转】什么是WTW Wi-Fi 6(802.11ax)解析18:TWT节能机制(Target Wake Time)

热门文章

  1. android 进度条 代码,Android进度条ProgressBar的实现代码
  2. socket 收不到netty客户端消息_Netty开发 —— 首个demo学习
  3. 怎么让电脑屏幕一直亮着_笔记本开机白屏怎么回事 笔记本开机白屏解决方法【详解】...
  4. iOS开发-缓存图片到沙盒--思路
  5. Python+Opencv实现无参数、全自动的Canny算法
  6. python join() 函数的用法
  7. 熔池 沉积_用于3D打印的AI(第3部分):异常熔池分类的纠缠变分自动编码器
  8. make modules 和 make modules_install
  9. md发布test-1 md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-
  10. instance 怎么获得自己的 Metadata - 每天5分钟玩转 OpenStack(169)