关于SV的一些知识1

打算挖个坑,在这里记录一些SV的知识。

首先在verilog重只有两种数据类型,即变量类型和现网类型,这两种都是四值逻辑。变量类型中的reg,integer可以储存组合逻辑或者时序逻辑,而线网类型中的wire可以用来连接硬件模块。而在SV中将硬件信号分成类型和数据类型。

类型表示该类信号是变量或者线网类型,注意对于线网类型赋值只能使用来连续赋值语句。而变量类型的可以使用连续赋值和过程赋值。

数据类型则表示是四值逻辑还是二值逻辑

在这里讲下v和SV的区别:verilog是硬件描述语言,倾向于描述电路中哪些变量应该被实现成寄存器,哪些变量应该被实现成线网类型。但是sv是侧重于验证的语言,他只会单纯的对变量进行赋值操作,而这些变量只属于软件环境构建。

关于SV的一些知识1_第1张图片定宽数组的宽度在编译时就已经确定了,动态数组的宽度要在程序运行时才确定。注意,动态数组在声明时时空的,需要用new[]对其进行元素分配。对列结合了链表和数组的有点,看可以在他任何地方进行添加和删减元素。关联数组可以用来保存系数矩阵的元素,当我对一个非常大的地址进行空间寻址的时候,该数组致位实际写入的元素分配空间。

initial和always的区别:首先我们要知道,module/endmodule,interface/endinterface是硬件世界,program/endprogram,class/endclass是软件世界。

always是为了描述硬件的行为,只能在module和interface中使用。使用时需要注意使用方式是时序电路描述还是组合电路描述(时序电路有时钟,组合电路没有时钟)。

而initial是描述软件的行为,只执行一次,他本身不可综合,对以描述电路没有帮助。

接下来讲一讲function和task之间的区别:首先function可以在参数列表指定input,output,inout,还可以返回或者不返回值,返回而当话用return,不返回的话在声明function的时候用void。而task不能用return返回结果。

task里面可以有耗时语句(@event,wait event),function不行.

task可以调用task和function,但是function只能调用function。

你可能感兴趣的:(sv,有关验证的一些东西,fpga开发,前端)