In reply to Tudor Timi:
Below is an update that works.
http://SystemVerilog.us/vf/sva_delay_repeat_pkg.sv
http://SystemVerilog.us/vf/sva_delay_repeat.sv
/* */
// SEE UPDATE BELOW
package sva_delay_repeat_pkg;
sequence dynamic_repeat(q_s, count);
int v=count;
(1, v=count) ##0 first_match((q_s, v=v-1'b1) [*1:$] ##0 v<=0);
// (v>0, v=count) ##0 ((q_s, v=v-1'b1) [*1:$] ##0 v==0); // Incorrect
endsequence
sequence dynamic_delay(count);
int v;
(1, v=count) ##0 first_match((1, v=v-1'b1) [*0:$] ##1 v<=0);
endsequence
endpackage
/* The repeat value MUST BE > 0
package sva_delay_repeat_pkg;
sequence dynamic_repeat(q_s, count);
int v=count;
(v>0, v=count) ##0 ((q_s, v=v-1'b1) [*1:$] ##0 v==0);
endsequence
sequence dynamic_delay(count);
int v;
(1, v=count) ##0 first_match((1, v=v-1'b1) [*0:$] ##1 v<=0);
endsequence
endpackage */
import uvm_pkg::*; `include "uvm_macros.svh"
import sva_delay_repeat_pkg::*;
module top;
timeunit 1ns; timeprecision 100ps;
bit clk, a, b, c=1;
int r=2;
default clocking @(posedge clk);
endclocking
initial forever #10 clk=!clk;
sequence q1;
a ##1 b;
endsequence
ap_abr: assert property(a |-> dynamic_repeat(q1, r) ##1 c);
ap_abr_fix2: assert property(a |-> q1[*2] ##1 c);
ap_abr_fix0: assert property(a |-> q1[*0] ##1 c);
ap_delay:assert property(a |-> dynamic_delay(r) ##0 b);
ap_delay_fix2:assert property(a |-> ##2 1'b1 ##0 b);
ap_delay_fix0:assert property(a |-> ##0 1'b1 ##0 b);
property p_or;
int v;
($rose(a), v=r) |-> (##1 (1,v=v+1'b1) ##1 dynamic_delay(v) ##0 c) or
(dynamic_delay(v) ##0 c);
endproperty
ap_or: assert property(p_or);
initial begin
repeat(100) begin
@(posedge clk); #2;
if (!randomize(a, b, c) with
{ a dist {1'b1:=1, 1'b0:=1};
b dist {1'b1:=1, 1'b0:=1};
c dist {1'b1:=1, 1'b0:=1};
}) `uvm_error("MYERR", "This is a randomize error")
end
#1 r=0;
repeat(100) begin
@(posedge clk); #2;
if (!randomize(a, b, c) with
{ a dist {1'b1:=1, 1'b0:=1};
b dist {1'b1:=1, 1'b0:=1};
c dist {1'b1:=1, 1'b0:=1};
}) `uvm_error("MYERR", "This is a randomize error")
end
$stop;
end
endmodule
Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact Home - My cvcblr
- SVA Handbook 4th Edition, 2016 ISBN 978-1518681448
- Real Chip Design and Verification Using Verilog and VHDL, 2002 isbn 978-1539769712
- A Pragmatic Approach to VMM Adoption 2006 ISBN 0-9705394-9-5
- Using PSL/SUGAR for Formal and Dynamic Verification 2nd Edition, 2004, ISBN 0-9705394-6-0
- Component Design by Example ", 2001 ISBN 0-9705394-0-1
- VHDL Coding Styles and Methodologies, 2nd Edition, 1999 ISBN 0-7923-8474-1
- VHDL Answers to Frequently Asked Questions, 2nd Edition ISBN 0-7923-8115