2_IC验证Systemverilog
文章平均质量分 75
介绍sv语法,有这一个专辑就够了
爱吃桃子的ICer
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[systemverilog]9_覆盖组_Covergroup_Coverpoint_bin
例化除了例子中的“CovPort = new()”,也可以用多次例化定义例化名,“CovPort cg1 = new();如果有多个coverpoint,则可添加名称,cross kind,port前也可以添加名字,值得注意的是可以不指定bin,下例中就是突突的coverpoint。一个coverpoint自定义了多个bin,用bins定义一个仓,bins hi []代表仓数组。d:可能没有关心或省去了一些值(bin),就不能简单地乘积。(1)概述(covergroup、coverpoint)原创 2023-07-17 23:47:58 · 1748 阅读 · 0 评论 -
[systemverilog]8_代码覆盖率_行/路径/翻转/状态机覆盖率_功能覆盖率
断言覆盖率需要自己定义,只有代码覆盖率软件会自动收集的。断言覆盖率使用assert,断言覆盖率可用来检测互斥。d两种可能一个是设计代码,一个是验证环境,可能是设计没有实现某功能,也可能是环境没把设计定位到感兴趣的状态上。路径覆盖率路径指的是branch,if语句或case语句。覆盖率不仅在仿真可以收集,形式仿真、硬件加速也可以收集。代码覆盖率关注点在于设计代码,而非验证环境的代码。收集什么时候,收集哪些数据,可以降低开销。(1)收集信息而非数据。(2)只测量需要的内容。(2)覆盖率反馈回路。原创 2023-07-17 23:13:55 · 367 阅读 · 0 评论 -
[systemverilog]7_线程通信_event_mailbox_samephone
event事件(1)Verilog中,一个线程总是要等待一个带@操作符的事件。这个操作符是边沿敏感的,所以它总是阻塞着、等待事件的变化。资源共享的需求(semaphore) 对于线程间共享资源的使用方式,应该遵循互压访问(mutexaccess)原则。原创 2022-12-15 23:13:23 · 566 阅读 · 0 评论 -
[systemverilog]6_线程及控制_fork并行线程语句块
模块(线程)在仿真一开始便并行执行,除了每个线程会依照自身内部产生的事件来触发过程语句块之外,也同时依靠相邻模块间的信号变化来完成模块之间的线程同步。(1)module (模块)作为SV从Verilog继承过来的概念,自然地保持了它的特点,除了作为RTL模型的外壳包装和实现硬件行为,在更高层的集成层面,模块之间也需要通信和同步。最短的子线程结束就执行fork-join_any外的语句,但是fork里的其他线程仍可能会执行,主要看fork外的语句。原创 2022-12-15 23:03:47 · 492 阅读 · 0 评论 -
[systemverilog]5_随机化
SV允许使用randomize() with来增加额外的约束,这和在类里增加约束是等效的,但同时要注意类内部约束和外部约束之间应该是协调的,如果出现互相违背的情况,那么随机数值求解会失败。如果随机化该对象时,不禁止其中的任何一个约束块,那么调用随机函数randomize()后,下列哪一个数值可能是p.length的值?(1)inside是常见的约束运算符,表示变量应该属于某一个值的集合,除非还存在其他约束,否则随机变量在集合里取值的概率是相等的。由于有了soft,另外约束一个报错,整体就是报错的。原创 2022-11-20 22:46:07 · 754 阅读 · 0 评论 -
[systemverilog]4_class/module_类的继承_成员覆盖_packet
本节将继续讲解class类的继承和覆盖、句柄的传递,以及packet包的使用,与module的区别原创 2022-11-20 22:41:47 · 696 阅读 · 0 评论 -
[systemverilog]3_类_对象_句柄_静态变量和方法
(1)类是将相同的个体抽象出来的描述方式,对象是实体。具有相同属性和功能的对象属于同一类,而不同的类之间肯有继承关系或没有联系。(2)Verilog的module+method的方式与SV的class定义有本质上的差别,class是面向对象编程,即面向对象编程的三要素:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism) 。(3)类的定义核心即是属性声明(property declaration)和方法定义(method definition)原创 2022-11-20 22:35:51 · 844 阅读 · 0 评论 -
[systemverilog]2_interface_clocking
在interface的端口列表中只需要定义时钟、复位等公用信号,或者不定义任何端口信号,转而在变量列表中定义各个需要跟DUT和TB连接的logic变量,为了简单,推荐使用logic来定义变量。第五行的addr,也采用了自身定义的采样事件,即clock1上升沿前的1step.文里的1step会使得采样发生在clock1上升沿的上一个时间片采样区域,即可以保证采样到的毅据是上一个时钟周期的数据。在仿真行为中,为尽量避免时序电路中时钟和驱动信号的时序竞争问题,需要给出尽量明确的驱动时序和采样时序。原创 2022-10-30 23:42:09 · 1422 阅读 · 0 评论 -
[systemverilog]1_数据结构
sformat ( output_var , format_string [ , list_of_arguments ] ):$sformat()比$sformatf()多了第一个参数,第一个参数就是放整理好的字符串的容器。根据数组是否为组合型而占用存储空间不同,以32bit为一个存储空间的话,组合型的(pack)存储是连续的,而非组合的数组中的每个组员占用一个存储空间。因为logic是四值逻辑,需要两bit的存储,所以对于pack而言,24*2=48,而24bit为一个单元,故需要两个单元;原创 2022-10-23 22:35:53 · 555 阅读 · 0 评论
分享