摘要:Introduction SystemC是C++的library,类似UVM是SystemVerilog的library。 下面是SystemC在整个项目中的角色: 硬件架构探索、创建算法、性能模型 验证工程师作为参考模型(经过DPI接口调用) 设计工程师将其作为design spec,设计RTL
阅读全文
摘要:课程: 【数组芯片验证】 SystemC and TML-2.0 资料网址: SystemC TLM-2.0 官方文档: TLM-2.0
阅读全文
摘要:超线程/同步多线程(HT/SMT)技术 虽然现在超线程(Hyper-Threading)被大家广泛接受,并把所有一个物理核心上有多个虚拟核心的技术都叫做超线程,但这其实是Intel的一个营销名称。而实际上这一类技术的(学术/技术)通行名称是同步多线程(SMT,Simultaneous Multith
阅读全文
摘要:fork join_any 在一个简单的SystemVerilog中,main thread会等到所有child thread都完成执行。这意味着如果任何child thread永远运行并且永远不会完成,则fork将挂起模拟。SystemVerilog还提供了带有fork join和fork joi
阅读全文
摘要:fork join SystemVerilog 通过构造提供对并行或并发threads的支持。可以使用fork和join同时生成多个procedural blocks。有一些变体允许main thread根据child thread何时完成继续执行其余语句。 Syntax fork // Threa
阅读全文
摘要:Wait fork wait fork允许 main thread 等待,直到所有 forked threads 都结束。这在 main thread 必须生成多个 threads 并在等待所有 threads 完成之前执行某些功能的情况下非常有用。 Example 我们将使用上一篇文章中相同的示例
阅读全文
摘要:SystemVerilog Threads What are SystemVerilog threads or processes ? thread 或 process 是作为单独实体执行的任何一段代码。在 verilog 中,每个initial和always块都作为单独的 thread 生成,这些
阅读全文
摘要:SystemVerilog Coverpoint Bins Usage coverpoint 用于在 covergroup 中指定要进行覆盖率收集统计收集的目标的变量。它记录单个变量或表达式的观测值。 coverpoint后面跟变量名或表达式,用于指定要收集覆盖率的目标。 可以使用bins关键字手动
阅读全文
摘要:SystemVerilog Covergroup and Coverpoint coverpoint 是 covergroup 中最基本的单元,多个 coverpoint 的覆盖率构成 covergroup 的覆盖率,在构成整体功能覆盖率。covergroup new covergroup可以在包、
阅读全文
摘要:SystemVerilog Functional Coverage covergroup 和 VCS 获取 coverage 的主要区别 covergroup用于功能覆盖率收集,而vcs主要用于代码覆盖率收集。 covergroup需要在设计代码中显示定义和实例化,通过sample()方法触发采样。
阅读全文
摘要:SystemVerilog Assertions with time delay 到目前为止,在之前的文章中,在每个时钟边沿检查了简单的布尔表达式。但是顺序检查需要几个时钟周期才能完成,并且时间延迟由符号指定。## ## Operator 如果a在任何给定时钟周期内不为高电平,则序列在同一周期内启动
阅读全文
摘要:SystemVerilog $rose、$fell、$stable A 是 SystemVerilog assertion 中的简单构成基块,可以表示某些表达式以帮助创建更复杂的属性。sequence Simple Sequence module tb; bit a; bit clk; // Thi
阅读全文
摘要:SystemVerilog Concurrent Assertions Concurrent Assertions描述了跨越仿真时间的行为,并且仅在时钟边沿发生时进行评估。 SystemVerilog Concurrent Assertions语句可以在与其它语句同时运行的模块、接口或程序块中指定。
阅读全文
摘要:SystemVerilog Immediate Assertions Immediate Assertions基于模拟事件语义执行,并且需要在过程块中指定。在模拟过程中,它的处理方式与语句中的表达式相同。if 如果表达式在执行语句时为true,则Immediate Assertions将通过,如果表
阅读全文
摘要:SystemVerilog Assertions 系统的行为可以写成一个assertion,该assertion在任何时候都应该为真。因此,assertion用于验证定义为属性的系统的行为,也可用于功能覆盖。 What are properities of a design ? 如果assertio
阅读全文
摘要:SystemVerilog Functions SystemVerilog函数具有与Verilog中的function相同的特征。 Functions a的主要用途是返回一个可在表达式中使用且不能消耗模拟时间的值。function function不能具有时间控制语句,如@ # fork join
阅读全文
摘要:SystemVerilog Event An是一个静态对象句柄,用于在两个或多个并发活动进程之间进行同步。一个进程将触发event,另一个thread的等待event。event 可以分配或其它event变量进行比较 可以分配给null 当分配给另一个event时,两个变量都指向同一个同步对象 可以
阅读全文
摘要:SystemVerilog case SystemVerilog语句检查表达式是否与多个表达式和分支中的一个匹配。该行为与Verilog中的行为相同。case unique, unique0 case 所有case语句都可以由or关键字限定,以执行违规检查,就像我们在if-else-if构造中看到的
阅读全文
摘要:SystemVerilog 'unique' and 'priority' if-else 条件语句用于决定是否执行语句。if else SystemVerilog 引入了一下用于违规检查的构造。if else unique-if unique0-if priority-if unique-if,
阅读全文
摘要:break module tb; initial begin // This for loop increments i from 0 to 9 and exit for (int i = 0; i < 10; i++) begin $display ("Iteration [%0d]", i);
阅读全文
摘要:一组给定的语句可以使用构造执行N次。repeat Syntax repeat (<number>) // Single Statement repeat (<number>) begin // Multiple Statements end Example #1 module tb; initial
阅读全文
摘要:SystemVerilog forever loop 循环永远运行,或者无限时间运行。forever Syntax forever // Single statement forever begin // Multiple statements end 循环类似于下面Verilog中所示的代码。两者
阅读全文
摘要:SystemVerilog for loop SystemVerilog中的循环多次重复一组给定的语句,直到不满足给定的表达式。与所有其他过程块一样,循环中需要多个语句被for和for begin end关键字括起来。 Syntax For循环使用三步方法控制其语句的执行: 初始化影响循环运行次数的
阅读全文
摘要:SystemVerilog foreach loop SystemVerilog数组是允许在单个变量中存储多个值的数据结构。循环仅用于遍历此类数组,并且是执行此操作的最简单和最简单的方法。foreach Syntax 循环从0开始循环访问每个索引。如果循环中有多个语句,则必须像所有其他过程块一样用f
阅读全文
摘要:SystemVerilog while and do-while loop 两者都是循环构造,只要给定条件为真,就会执行给定的语句集。while do while 循环首先检查条件是否为true,如果条件为true,则执行语句。如果条件被证明是假的,则循环就在哪里结束。while 循环首先执行一次语
阅读全文
摘要:SystemVerilog Loops What are loops ? loop是一段不断执行的代码。条件语句通常包含在循环中,以便在条件变为真时终止。如果loop永远运行,那么模拟将无限期挂起。 下表给出了 SystemVerilog 中不同类型的循环构造。 \ \ forever Runs t
阅读全文
摘要:SystemVerilog typedef and alias Typedef 在复杂的测试平台中,某些变量声明可能具有更长的数据类型规范,后者需要在测试平台的多个位置使用。 在这种情况下,我们可以使用a为现有数据类型提供用户定义的名称。然后,可以在整个代码中使用新的数据类型,因此如果需要,无需在多
阅读全文
摘要:SystemVerilog Structure Structure可以包含不同数据类型的元素,这些元素可以作为一个整体引用,也可以通过其名称单独引用。这些元素具有相同数据类型的数组完全不同。 // Normal arrays -> a collection of variables of same
阅读全文
摘要:SystemVerilog Queue 目录SystemVerilog QueueTypes of QueuesSystemVerilog Queue UsageSystemVerilog Queue ExampleWhat are queue slice expressions ?SystemVe
阅读全文
摘要:SystemVerilog Array Manipulation SystemVerilog 中有许多内置方法,可帮助数组搜索和排序。 数组操作方法只需循环访问数组元素,每个元素都用于计算子句指定的表达式。迭代器参数指定一个局部变量,该变量可在表达式中用于引用迭代中的当前元素。如果未提供参数,ite
阅读全文
摘要:SystemVerilog Associative Array 当集合的大小未知或数据空间稀疏时,关联数组是更好的选择。关联数组在使用之前不会分配任何存储,并且索引表达式不限于整数表达式,而是可以是任何类型。 关联数组实现其声明类型的元素的查找表。要用作索引的数据类型用作查找键并强制排序。 Synt
阅读全文
摘要:SystemVerilog Dynamic Arrays Dynamic Arrays是一个unpacked Arrays,其大小可以在运行时设置或更改。因此与静态数组完全不同,静态数组的大小是在数组声明期间预先确定的。Dynamic Arrays的默认大小为零,直到由构造函数设置。new() Sy
阅读全文
摘要:SystemVerilog Unpacked Arrays Unpacked Arrays用于引用在变量名称之后声明的维度。 Unpacked Arrays可以是固定大小的数组、动态数组、关联数组、队列。 Single Dimensional Unpacked Array module tb; by
阅读全文
摘要:SystemVerilog Packed Arrays SystemVerilog 中有两种类型的数组- packed array 和 unpacked array。 packed array用于引用在变量名称之前声明的维度。 bit [3:0] data; // Packed array or v
阅读全文
摘要:SystemVerilog Arrays SystemVerilog 在通过不同类型的数组构建复杂的数据结构方面提供了很大的灵活性。 静态阵列 动态阵列 关联数组 队列 Static Arrays 静态数组是指其大小在编译时间之前已知的数组。在下面显示的示例中,声明了一个8位宽的静态数组,为其分配了
阅读全文
摘要:SystemVerilog Enumeration 枚举类型定义一组命名值。在以下示例中,light_*是一个枚举变量,可以存储三个可能的值(0,1,2)之一。默认情况下,枚举列表中的第一个名称获取值0,以下名称获取增量值(如1和2)。 enum {RED, YELLOW, GREEN} light
阅读全文