systemverilog 起步

转一篇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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记(56):Python实战编程-Menu

立即学习:https://edu.csdn.net/course/play/19711/343119?utm_sourceblogtoedu 1.菜单menu: 1&#xff09;弹出式菜单&#xff0c;类似与电脑桌面右击弹出的菜单成为弹出菜单&#xff1b; 2&#xff09;窗体式菜单&#xff1a;类似于word上面的菜单栏 2.窗体菜单创建的步骤…

SystemCenter2012SP1实践(19)集成WSUS更新服务器2012

今天我们的任务是配置一台WSUS&#xff08;Windows更新服务器&#xff09;&#xff0c;以方便后期通过"基线"与其组合&#xff0c;完成虚拟机的系统补丁升级。WSUS是Windows系统运维自动化的一个重要组成部分&#xff0c;通过它&#xff0c;能够节省我们很多的运维时…

像元尺寸计算

像元尺寸 X 总像素大小 感光芯片尺寸&#xff08;图像区域大小&#xff09;

win7右键点击文件夹进入命令窗口方法

方法一&#xff1a;按住shift键&#xff0c;鼠标右击&#xff0c;会出现"在此处打开命令窗口"&#xff1b;方法二&#xff1a;修改注册表&#xff0c;为鼠标右键添加打开命令行功能&#xff1b;(1)将下列内容赋值到记事本中&#xff0c;并保存为.reg文件。Windows Re…

教你学会Linux/Unix下的vi文本编辑器

vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器。看了不少关于vi的资料&#xff0c;终于得到这个总结。首先&#xff0c;记住vi编辑器的两个模式&#xff1a;1、命令模式2、编辑模式。在一个UNIX/Linux的shell命令或者一个以斜杠&#xff08;/&#xff09;、问号&#xf…

C++函数返回引用的含义

引用的意思就是说返回变量的地址而非变量本身。这样子函double数结束之后存储返回值的内存单元不会被销毁&#xff0c;保留了它的地址。 例如下面这个例子: int a1,b; ba; b; 这个例子里执行完之后a为1&#xff0c;而b为2。 但这个例子&#xff1a; int a1; int *b&#xff1b;…

LintCode: 3 Sum

C 把3个数求和&#xff0c;转变为2个数求和 1. 把数组排序 2. 注意过滤重复值 3. 从前到后遍历&#xff0c;游标i 4. 从后边数中找start &#xff0b; end &#xff1d; -arr[i]的2 sum 5. start &#xff0b; end < -arr[i], start 6. start end > -arr[i], end-- 7. s…

$* $@ $# $? $$ $! $0 $_

特殊参数&#xff1a; [xiluhuavm-xiluhua][~]$ set one two three  #使用set命令设置位置参数[xiluhuavm-xiluhua][~]$ echo $*        #打印所有位置参数 one two three[xiluhuavm-xiluhua][~]$ echo $        #打印所有位置参数 one two three[xiluhuavm-…

最优化课堂笔记03:整数规划

二、整数规划问题的求解方法&#xff1a;&#xff08;重点&#xff1a;分枝定界法&#xff09; 1.割平面法 1&#xff09;基本思想 2&#xff09;求解步骤 2&#xff09;重点&#xff1a;分枝定界法&#xff08;极大化的问题&#xff09;考试不会分很多次枝&#xff0c;用图解…

CodeIgniter 2.X 于 PHP5.6 兼容错误

本篇文章由&#xff1a;http://xinpure.com/codeigniter-2-x-to-php5-6-compatible-error/ CI 3.0 已兼容此问题 在代码迁移的过程中&#xff0c;遇到了一个 PHP 版本兼容错误 A PHP Error was encounteredSeverity: NoticeMessage: Only variable references should be return…

自动驾驶汽车定位技术

一、高精度地图 二、汽车定位技术 三、无线通信辅助汽车定位 四、视觉辅助汽车定位 五、自动驾驶高精度地图与定位实践

正整数分解为几个连续自然数之和

题目&#xff1a;输入一个正整数&#xff0c;若该数能用几个连续正整数之和表示&#xff0c;则输出所有可能的正整数序列。 一个正整数有可能可以被表示为n(n>2)个连续正整数之和&#xff0c;如&#xff1a; 1512345 15456 1578 有些数可以写成连续N&#xff08;>1&#…

egret3D与2D混合开发,画布尺寸不一致的问题

egret3d的GUI目前还没有&#xff0c;在做3d游戏的时候没有UI可用&#xff0c;只能使用egret2d的EUI组件库&#xff0c;egret3d与egret2d混合开发&#xff0c;canvas3d的大小与位置与canvas2d并没有重合&#xff0c;导致适配ui时总是错位。在做手机屏幕适配的时候必须解决这种问…

最优化作业讲解01:标准化线性规划(LP)

1.1、错误点&#xff1a;求得了目标函数最优解&#xff0c;但是没有将结果返回去最大值 2.4、错误点&#xff1a;x2变量的处理上&#xff0c;x2不是任意变量不可以按照任意变量来进行变换 x6 x2 5&#xff0c;且x6>0 2.9、 易错点&#xff1a; 1&#xff09;基变量要满足…

hdu1428(spfa与记忆化搜索)

漫步校园 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3508 Accepted Submission(s): 1066Problem DescriptionLL最近沉迷于AC不能自拔&#xff0c;每天寝室、机房两点一线。由于长时间坐在电脑边&#xff…

explicit关键字详解(C++ )

一&#xff1a;首先, C中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). class CxString // 没有使用explicit关键…

React Native 常见问题集合

在使用React Native时候&#xff0c;我记录下比较常遇到的问题&#xff0c;分为以下几类&#xff1a; 1. 调试问题 2. 写法问题 3. 疑难问题 4. 奇怪问题 调试问题 1. 在react-native run-android运行后&#xff0c;真机上打开的空白页面。 我测试机是红米2A&#xff08;Androi…

算法:字符串消除问题的数学证明

问题&#xff1a; 给定一个字符串&#xff0c;仅由A、B、C3个字母组成。当出现连续两个不同的字母时&#xff0c;你可以用另外一个字母替换它&#xff0c;如有AB或BA连续出现&#xff0c;你把它们替换为字母C&#xff1b;有AC或CA连续出现时&#xff0c;你可以把它们替换为字母…

学习笔记(57):Python实战编程-Treeview

立即学习:https://edu.csdn.net/course/play/19711/343120?utm_sourceblogtoedu 1.树状结构Treeview:分为树状折叠式列表和列表显示&#xff0c;是一种很重要数据列表展示的形式 2.树状列表建立步骤&#xff1a; 1&#xff09;创建一个树状列表&#xff1a;在这里可以设置显示…

ios 常用操作-1

项目中可能会用到的一些技巧方法&#xff0c;做个记录&#xff0c;已被不时之需。 一。程序在运行过程中不锁屏&#xff1f; [UIApplication sharedApplication].idleTimerDisabledYES; 二。显示被view 或 control遮盖的背景内容。比如有时在不同的ios版本上 tableview cell上画…