SystemVerilog约束

什么是直接测试?

验证工程师将首先创建一个称为验证计划的程序,其中详细介绍了在RTL仿真中需要测试的设计的每个功能,以及每个测试将如何创建针对特定功能的独立方案。

例如,如果某外设需要配置其寄存器以启动AXI总线事务,那么我们将进行不同的测试以对这些寄存器进行不同的配置并获得良好的覆盖率。

这些是直接测试,其中每个测试都执行特定任务以完成任务。

什么是随机测试?

复杂的设计具有许多场景和许多特殊情况,这些情况可以通过随机测试更好地验证,并且花费更少的精力和时间。 以上面相同的示例为例,每次使用不同的种子运行测试时,测试都会为外设寄存器配置随机值,从而为每次运行实现不同的方案。 这将确保我们能及时发现并隐藏所有错误。

约束条件

SystemVerilog允许用户以紧凑的声明性方式指定约束,然后由内部求解器对其进行处理,以生成满足所有条件的随机值。 基本上,约束无非是让我们定义应为随机变量分配哪些合法值的方法。 关键字rand将正常变量声明为随机变量。

class Pkt;
  rand bit [7:0] addr;
  rand bit [7:0] data;
 
  constraint addr_limit { addr <= 8'hB; }
endclass

上面的示例声明了一个称为Pkt的类,该类的地址字段受到限制。 请注意,它的两个属性都以rand关键字为前缀,该关键字告诉求解器在被要求时应将这些变量随机化。 该约束称为addr_limit,它指定求解器可以为低于或等于8’hB的地址分配任何随机值。 由于8位变量addr的类型为bit,因此它可以具有0到255之间的任何值,但受约束,有效值将限制为11。

如您所见,这项强大的功能将使我们能够创建变量,这些变量被限制在对设计有效的范围内,并具有更好的验证效果。 在接下来的几节中,我们将看到如何在SystemVerilog中有效使用不同的构造,这些构造使我们能够以更好的方式描述约束。
参考文献:
【1】https://www.chipverify.com/systemverilog/systemverilog-constraints

发布了71 篇原创文章 · 获赞 8 · 访问量 7393

猜你喜欢

转载自blog.csdn.net/qq_43042339/article/details/104581391