一.fork...join、fork...join_none和fork...join_any的区别
fork...join:块中的代码并发执行,块中所有语句执行完毕后才能执行后续代码 。
fork...join_none:点火就可以进行后续的代码了,并且fork...join_none中的代码会继续执行。
fork...join_any:档期中的任意一个语句完成后才可以执行后续代码,同样,fork...join_any中的代码仍会继续执行。
二.内建数据类型之逻辑类型
四值逻辑:integer、logic、reg、net-type(如 wire 和 tri )
二值逻辑:bit、byte、shortint、int、longint
有符号类型:byte8bit、shortint16bit、 int32bit、 longint64bit、 integer32bit
无符号类型: bit、logic、reg、net-type(如 wire 和 tri )
三.动态数组、关联数组、队列
1.定宽数组:数组宽度在编译时就被确定,静态数组
2.动态数组:在仿真时分配空间/调整宽度,可以在仿真中使用最小的存储量。动态数组的宽度不在编译时给出,而是在程序运行时再指定,因此必须使用new[ ]操作符来分配空间(笔试考过),同时在方括号中传递数组宽度。
3.关联数组:当数组元素索引不连续时,如果用定宽数组存储会消耗过大的内存空间,内存利用率低。SV中引入了关联数组,保存稀疏矩阵的元素。(需要超大容量数组时使用)
4.队列:结合了链表和数组的优点。队列和链表相似,可以在队列中的任何地方增加或删除元素,这类操作在性能上的损失比动态数组小得多,因为动态数组需要分配新的数组并复制所有元素的值。队列与数组相似,可以通过索引实现对任一元素的访问,而不需要像链表那样去遍历目标元素之前的所有元素。
四、function和task的区别
function:可以调用function,不能调用task、内部无耗时、可返回可不返回
task:既可以调用function又可以调用task、内部可以置入耗时语句、无法通过return返回,只能通过output、inout或者ref的参数来返回。