![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SV理论知识
文章平均质量分 85
季月三吃蛋炒饭
这个作者很懒,什么都没留下…
展开
-
SV理论知识六:代码覆盖率、功能覆盖率以及断言覆盖率
单独列出每个covergroup实例的覆盖率,/*-----------------------------断言和断言覆盖率-------------------------------------------------(1) 采样monitor监听到的事务,由于monitor监听的事务是动态变化的,也就是说虽然采样的是某种事务类型的某个变量,但是具体所属的实例是会变化的。2. 覆盖组的覆盖点可以会自动建仓或者自定义仓,对于自动建仓,会根据采样点的取值范围来生成仓,例如一个N比特的就有2的N次方个仓,原创 2023-09-24 22:24:36 · 1109 阅读 · 1 评论 -
SV理论知识五:随机和约束
(2) 动态数组 : 可以使用 size()约束数组的大小,使用 sum()约束数组的和,使用 product()约束数组的积。与在类中定义约束,并且通过对象调用随机化函数 randomize() 相对的是,一些细碎的场景并不需要像类那么全面支持随机约束的方式,而是需要一种更简单的机制来随机化一些在类之外的变量。(2) 可以直接把数组当成一个集合,然后使用inside进行约束,注意,如果数组中某个元素出现多次,那么出现的概率是相同的,也就是说不管元素重复出现多少次,求解的概率都是一样的;原创 2023-09-24 22:22:36 · 892 阅读 · 1 评论 -
SV理论知识四:线程以及线程间通信
注意,使用fork语句块可以在父线程开辟多条子线程,子线程间是并行运行的,父线程可以暂停或者取消子线程,而子线程终止时,父线程中的其他子线程不受影响,当父线程终止时,现在有定义好的三个子线程do1,do2,do3,在task中并行运行这三个子线程,其中只要有任何一个线程结束,都退出并行运行块,并打印DONE。生产端将数据put进信箱1,阻塞在get 信箱2中,消费端从信箱1get到事务后,向信箱2 put一个rsp信号,相当于一个握手协议;消费端消费等待事件1,消费完一个数据后触发事件2;原创 2023-07-28 11:51:33 · 307 阅读 · 1 评论 -
SV理论知识三:类与对象
如果该对象内又包含了另一个类的句柄,(2) 深拷贝:自定义一个copy()函数,先使用new()创建一个实例,然后复制实例的所有变量,如果有其他类的句柄那么调用该类的copy()函数,层次调用就能开辟一个新的对象。那么仅仅是拷贝了该句柄而已,没有创建一个新的对象,因此拷贝出来的对象和原来的对象是共享一个下层对象的,对该句柄指向的对象进行修改会影响拷贝后的对象。回调更多的是拓展某个方法,如果使用继承的话,需要先复制原来的方法的代码,再添加新的代码,这样如果父类的方法改了,子类拓展的方法也得修改。原创 2023-07-28 11:49:45 · 467 阅读 · 1 评论 -
SV理论知识二:过程语句和子程序
(5) 函数只能返回一个值,函数不能有输出(output)或者双向(inout)变量,任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值。2)如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,而在离开该进程/方法后,automatic变量会被销毁。1)动态变量的生命周期同其所在域共存亡,如function/task中的临时变量,在其方法调用结束后,临时变量的生命也将终结,所以它们是动态生命周期。原创 2023-07-28 11:48:13 · 120 阅读 · 1 评论 -
SV理论知识一:数据类型
4)使用exists(index)来判断数组是否存在某个元素(不存在则返回缺省值),使用first(index)来获取数组的第一个元素索引,使用next(index)来获取下一个索引值。非合并数组:仿真器来存储数组元素时通常是使用32位宽,也就是一个字来存放数据,如果数组的元素位宽小于32,那么高位的将不被使用,只是用低位,这样会造成浪费;合并数组:可以将数组定义为合并数组,那么数组的元素在存储空间中就是连续存放的,任何数组类型都可以定义成合并数组,定义合并数组必须给出该合并数组的位宽和大小。原创 2023-07-28 11:45:44 · 844 阅读 · 1 评论