欢迎大家加入2022届数字IC交流群,QQ群号 1060380138
时钟块类似于modport,除了具备modport的信号方向指定,还能够建模信号的时序行为。下面是一个时钟块的例子。
clocking sample_cb @(posedge clk);
default input #2ns output #3ns;
input a1, a2;
output b1;
endclocking
在上面的示例中,定义了一个名为sample_cb的时钟块,关联的时钟为clk。default关键字定义默认的时钟偏斜,输入为2ns,输出为3ns。输入偏斜定义了时钟采样在时钟边沿前多少个时间单位。输出偏斜定义了时钟驱动在时钟边沿后的多少个时间单位。
时钟块只能在module或者interface中定义
1) input #1 step req1;
2) input #1ns req1;
定义时钟偏斜有两种方式
systemverilog仿真器是事件驱动的仿真器,明确定义了不同的阶段来计划和执行所有事件。在仿真中,所有的事件都以timeslot为单位进行。timeslot被划分为一组有序阶段,提供设计和测试代码之间的可预测交互。如下图所示,一个timeslot可以划分为五个主要阶段,每个阶段都可以进一步的被划分为细分的子阶段。
strobe和其他类似的事件在此区域执行。而$dislpay事件在Active 和 Reactive(如果在program块中调用)阶段执行
rand logic [15:0] a, b, c;
constraint c_abc {
a < c;
b == a;
c < 30;
b > 25;
}
将约束内容取交集,c可以取27-30之间的任意值。
unique约束会令一组成员两两各不相同。下面是一个示例。
class Test;
rand byte a[5];
rand byte b;
constraint ab_cons { unique {b, a[0:5]}; }
endclass
你答对了吗
class Packet;
rand bit[31:0] addr;
constraint c_addr { addr inside [0:100];}
endclass
欢迎在留言区给出你的答案,正确答案将在下一期公布,或者到下面的文章获取答案