Hi,
I am making an environment in UVM to check the functionality of FIFO. In order to do this in driver class I have defined write and read tasks and also defined a variable called “count” as static. The purpose of this variable to track the size of the fifo and check it’s output signals fifo_ful and fifo_empty. For example if fifo size = 10 , then whenever write function is called count gets incremented by 1 and whenever read function is called count gets decremented by 1. Now I have defined two properties in interface like this :
fifo_driver drv_count;
property check_for_fifofull;
@(posedge WCLK) (drv_count.count == `FIFO_SIZE) |=> FIFO_FULL ;
endproperty
property check_for_fifoempty;
@(posedge RCLK) (drv_count.count == 0 ) |=> FIFO_EMPTY ;
endproperty
check_full : assert property (check_for_fifofull)
else
`uvm_error(“CHECK FOR FIFO FULL FAILED”,“fifo”)
check_empty : assert property (check_for_fifoempty)
else
`uvm_error(“CHECK FOR FIFO EMPTY FAILED”,“fifo”)
I am getting the following error while compilation.
Error-[ETTNATE] Invalid type in temporal expression
/proj/ams_ddrphy_funcv/users/maitri/lpddr4_24th_sep/verif/fifo/apb_interface.sv, 30
check_full, “drv_count.count”
Expressions involving real, string, event and dynamic SystemVerilog types
are not allowed in Boolean expressions in properties and sequences.
can I write an assertion like this ? Can I access the member of the class from property ?
Thanks,
Maitri