牛人的systemverilog总结

牛人的systemverilog总结

ID:3156639

大小:44.50 KB

页数:21页

时间:2017-11-20

牛人的systemverilog总结_第1页
牛人的systemverilog总结_第2页
牛人的systemverilog总结_第3页
牛人的systemverilog总结_第4页
牛人的systemverilog总结_第5页
资源描述:

《牛人的systemverilog总结》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Systemverilog数据类型l合并数组和非合并数组1)合并数组:存储方式是连续的,中间没有闲置空间。例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看成是1个32bit的数据。表示方法:数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】Bit[3:0][7:0]bytes;2)二维数组和合并数组识别:合并数组:bit[3:0][7:0]arrys;大小在变量名前面放得,且降序二维数组:intarrays[0:7][0:3];大小在变量名后面放得,可降序可升序位宽在变量名前面,用于识别合并和非合并数组,位宽在后

2、面,用于识别数组中元素个数。3)非合并数组一般仿真器存放数组元素时使用32bit的字边界,byte、shortint、int都放在一个字中。非合并数组:字的地位存放变量,高位不用。表示方法:Bit[7:0]bytes;4)合并数组和非合并数组的选择(1)当需要以字节或字为单位对存储单元操作。(2)当需要等待数组中变化的,则必须使用合并数组。例如测试平台需要通过存储器数据的变化来唤醒,需要用到@,@只能用于标量或者合并数组。Bit[3:0][7:0]barray[3];表示合并数组,合并数组中有3个元素,每个元素时8bit,4个元素可以组成合并数组可

3、以使用barry[0]作敏感信号。l动态数组随机事物不确定大小。使用方法:数组在开始是空的,同时使用new[]来分配空间,在new[n]指定元素的个数。Intdyn[];Dyn=new[5];//分配5个元素空间Dyn.delete();//释放空间l队列在队列中增加或删除元素比较方便。l关联数组当你需要建立一个超大容量的数组。关联数组,存放稀疏矩阵中的值。表示方法:采用在方括号中放置数据类型的形式声明:Bit[63:0]assoc[bit[63:0]];l常量:1)Verilog推荐使用文本宏。好处:全局作用范围,且可以用于位段或类型定义缺点:当

4、需要局部常量时,可能引起冲突。2)Parameter作用范围仅限于单个module3)Systemverilog:参数可以在多个模块里共同使用,可以用typedef代替单调乏味的宏。过程语句l可以在for循环中定义变量,作用范围仅在循环内部for(inti=0;i<10;i++)array[i]=i;l任务、函数及void函数1)区别:Verilog中task和function最重要的区别是:task可以消耗时间而函数不能。函数中不能使用#100的延时或@的阻塞语句,也不能调用任务;Systemverilog中函数可以调用任务,但只能在forkjo

5、innone生成的线程中。2)使用:如果有一个不消耗时间的systemverilog任务,应该把它定义成void函数;这样它可以被任何函数或任务调用。从最大灵活性角度考虑,所有用于调用的子程序都应该被定义成函数而非任务,以便被任何其它任务或函数调用。(因为定义成任务,函数调用任务很有限制)l类静态变量作用:1)类的静态变量,可以被这个类的对象实例所共享。当你想使用全局变量的时候,应该先想到创建一个类的静态变量静态变量在声明的时候初始化。2)类的每一个实例都需要从同一个对象获取信息。l静态方法作用:当静态变量很多的时候,操作它们的代码是一个很大的程序

6、,可以用在类中创建一个静态方法读写静态变量,但是静态方法不能读写非静态变量。lref高级的参数类型Ref参数传递为引用而不是复制。Ref比input、output、inout更好用。Functionvoidprint_checksum(constrefbit[31:0]a[]);1)也可以不用ref进行数组参数传递,这时数组会被复制到堆栈区,代价很高。2)用带ref进行数组参数传递,仅仅是引用,不需要复制;向子程序传递数组时,应尽量使用ref以获得最佳性能,如果不希望子程序改变数组的值,可以使用constref。3)Ref参数,用ref传递变量;可

7、以在任务里修改变量而且,修改结果对调用它的函数可见,相对于指针的功能。lReturn语句增加了return语句。Task任务由于发现了错误而需要提前返回,如果不这样,那么任务中剩下的语句就必须被放到一个else条件语句中。体会下Taskload_array(intlen.Refintarray[]);If(len<0)begin$display(“Badlen”);Returun;//任务中其它代码…endtaskl局部数据存储automatic作用Verilog中由于任务中局部变量会使静态存储区,当在多个地方调用同一个任务时,不同线程之间会窜用这

8、些局部变量。Systemverilog中,module和program块中,缺省使用静态存储;如果想使用自动存储,需加入a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。