一 简介
约束驱动的测试生成方法使得用户能够自动地为功能验证产生测试。随机约束测试比一个传统的、直接的测试方法更有效率。通过通过指定约束,我们可以很容易地为难于到达的边界条件产生测试。SystemVerilog允许用户以一种紧凑、明了的方式指定约束。约束接下来会被一个求解器处理,这个求解器用来产生满足约束的随机值。
典型情况下,随机约束在一个面向对象的数据对象之上指定。它将需要被随机化的数据建模成包含随机变量和用户定义约束的对象。约束确定了可以被赋值给随机变量的有效值。
二 概述
2.1 功能概述
class Bus;
rand bit[15:0] addr;
rand bit[31:0] data;
constraint word_align {addr[1:0] == 2’b0;}
endclass
us类建模了一个简化的总线,它具有两个随机变量:addr和data,分别代表总线上的地址和数据。word_align约束指出:addr的随机值必须能够使addr字对齐(低两位为0)。
randomize()方法被调用以便为一个总线对象产生新的随机值:
Bus bus = new;
repeat (50) begin
if (bus.randomize() == 1)
$display ("addr = %16h data = %h\n", bus.addr, bus.data);
else
$display ("Randomization failed.\n");
end
调用randomize()会为一个对象中的所有的随机变量选择新的值