
SystemVerilog
文章平均质量分 84
GGbao_
误入歧途,及时止损!
展开
-
断言(Assertion)
assertion可以包含一个property,assertion也可以清晰地独立声明property,在property内部可以有条件地关闭。property块可以直接包含sequence,复杂的property也可以独立声明多个sequence。sequence是用来表示在一个或者多个时钟周期内的时序描述,是property的基本构建模块,并经过组合来描述复杂的功能属性。原创 2023-05-01 19:56:08 · 2900 阅读 · 0 评论 -
SystemVerilog与C语言的接口
SystemVerilog 引人了直接编程接(DPI.Direct Programning Interface),它能更加简单地连接C、C++或者其他非Verilog编程语言。一旦你声明或者使用import语句“导人”了一个C子程序,你就可以像调用SystemVerilog中的子程序一样来调用它。此外C代码也可以调用SystemVerilog中的子程序。使用DPI可以很方便地连接C代码,这些C代码可以读取激励,包含一个参考模型或仅仅扩展SystemVerilog的功能。原创 2023-05-09 17:50:13 · 1976 阅读 · 0 评论 -
功能覆盖率
功能覆盖率是用来衡量哪些设计特征已经被测试程序测试过的一个指标。从设计规范着手,创建一个验证计划,详细列出要测试什么以及如何进行测试。验证计划是引导你开展工作的指南。原创 2023-05-05 11:02:57 · 2125 阅读 · 0 评论 -
线程及线程间通信
当源端线程试图向一个容量固定并且已经饱和的信箱里放入数值时,会发生阻塞直到信箱里的数据被移走。缺省情况下,信箱类似于容量不限的FIFO一在消费方取走物品之前生产方可以向信箱里放入任意数量的物品。,使用get可以获取一个或多个钥匙,而put则可以返回一个或多个钥匙。如果试图往信箱里放入多于设定容量的物品,则put会阻塞,直到从信箱里搬走物品腾出空间。这比使用nurn 函数可靠一些,因为在对信箱实施测量直到下一次访问信箱的这段时间里,信箱中条目的数量可能会发生变化。的,所以它总是阻塞着,等待事件的变化。原创 2023-05-03 14:43:25 · 164 阅读 · 0 评论 -
SystemVerilog的随机化
采用受约束的随机测试法(CRT)自动产生测试集。定向测试集能找到你认为可能存在的Bug,CRT方法通过随机激励,可以找到你都无法确定的Bug。可以通过约束来选择测试方案,只产生有效的激励,以及测试感兴趣的功能项。CRT环境不仅需要产生激励,还需要通过参考模型,传输函数或其他方法预测输出结果。CRT由两部分组成:使用随机的数据流为 DUT 产生输人的测试代码,以及伪随机数发生器(PRNG)的种子(seed)。只要改变种子的值,就可以改变CRT的行为。原创 2023-05-02 16:43:37 · 1767 阅读 · 0 评论 -
APB协议断言(Assertion)
在下一次传输开始前,上一次的PADDR和PWRITE信号应该保持不变。在PSEL和PWRITE同时保持为高的阶段,PWDATA需要保持。在PENABLE拉高的同一个周期,PRDATA也应该发生变化。发生对同一个地址的读操作再不间隔做写操作,再不间隔做读操作。在PENABLE拉高的下一个周期,PENABLE应该拉低。在PSEL拉高的下一个周期,PENABLE也应该拉高。对同一个地址先做写操作再不间隔做读操作。在读操作时,分别发生连续读和非连续读。在写操作时,分别发生连续写和非连续写。原创 2023-05-01 20:57:07 · 430 阅读 · 0 评论 -
连接设计和测试平台
SystemVerilog使用接口为块之间的通信建模,接口可以看作一捆智能的连线。接口包含了连接、同步、甚至两个或者更多块之间的通信功能,它们连接了设计块和测试平台。最简单的接口仅仅是一组双向信号的组合。这些信号用logic数据类型,可以使用过程语句驱动。使用接口的好处:连接变得更加简洁而不易出错。如果希望在一个接口中放人一个新的信号,只需要在接口定义和实际使用这个接口的模块中做修改。你不需要改变其他任何模块,例如在top模块,信号只是穿过该模块,而不进行任何操作。原创 2023-05-01 15:04:28 · 238 阅读 · 0 评论 -
过程语句和子程序
SystemVerilog中增加return语句用于返回,如果没有,则任务中的剩下的部分就必须被放到一个else条件语句中,从而使得代码变得不规整,可读性也降低了。Verilog中的$timeformat的四个参数分别是事件标度(-9表示纳秒、-12表示皮秒)、小数点后的数据精度、时间值之后的后缀字符串、显示数值的最小宽度。这样它就能被任何任务或函数所调用了。在静态代码块中声明并初始化变量的时候存在漏洞,变量是静态分配的,所以实际上在仿真的一开始它就有初值,解决的办法及时将程序快声明为automatic。原创 2023-04-29 17:45:34 · 465 阅读 · 0 评论 -
SystemVerilog数据类型
由于struct只是一个数据的集合,所以它是可综合的。struct创建新类型创建一个 pixel类型} pizel;上述声明只是创建了一个pixel变量。要想在端口和程序中共享它,则必须创建一个新的类型,如例pixel结构) pixel_s;对结构初始化可以在声明或者过程赋值语句中把多个值赋给一个结构体,就像数组那样。赋值时要把数值放到带单引号的大括号中。使用typedef创建联合(可以容纳不同数据类型)real f;} num_u;num_u un;un.f=0.0;原创 2023-04-29 15:25:26 · 1242 阅读 · 0 评论 -
SystemVerilog验证导论
首先需要阅读硬件规范,然后写下验证计划,计划上列有各种测试,每个测试针对一系列相关的特性。首先,需要在测试平台中加入代码,用于监控进入设备中的激励,以及设备对激励的反应,并椐此确定哪些功能已经被验证过。然后,你需要对结果进行分析,最后决定如何采用新的激励来达到那些尚未被测试到的条件和逻辑。这些步骤可能包含有定向或随机的测试,断言、软硬件协同验证、硬件仿真、形式验证,以及对验证IP的使用等等。测试平台构件指的是存在于测试平台中的部分,注意与设计中的物理构件区分开,后者是采用RTL代码描述的。原创 2023-04-28 21:59:14 · 150 阅读 · 0 评论