我有一个property
正在等待两个不同的sequence
发生,如下所示(sequence
和property
已在此处简化):
sequence seq1;
logic [3:0] a;
@(posedge clk) (some_signal1 == 1, a = other_signal1);
endsequence
sequence seq2;
logic [3:0] b;
@(posedge clk) (some_signal2 == 1, b = other_signal2);
endsequence
property abc;
seq1 ##[1:$] seq2;
endproperty
some_signal1
,some_signal2
,other_signal1
,other_signal2
都是RTL信号。
我的问题:
通过或覆盖property abc
后,我想知道序列中采样的相应other_signal1
和other_signal2
。如何访问这些信号值?
我正在考虑按层次结构访问sequence
局部变量,例如seq1.a
或seq2.b
。但这些是不允许的,因为他们是当地人。
将这些变量声明为正式参数也无济于事,因为无法在LHS中分配形式参数。
我的意图是我将这些信号用于其他目的,即:
cover property (abc) begin
// grab seq1.a and seq2.b, and do some other tasks
end
答案 0 :(得分:0)
您可以在( , )
内的逗号右侧执行以下三项操作之一:
(参见IEEE1800-2012,16.11调用关于序列匹配的子程序)
任务调用是关键。您可以在序列中调用的任务中分配任务范围之外的变量:
sequence seq1;
@(posedge clk) (some_signal1 == 1, assign_a(other_signal1));
endsequence
sequence seq2;
@(posedge clk) (some_signal2 == 1, assign_b(other_signal2));
endsequence
property abc;
seq1 ##[1:$] seq2;
endproperty
cover property (abc)
$display("a= %d, b= %d", a , b);
task assign_a(input int i);
a = i;
endtask
task assign_b(input int i);
b = i;
endtask