Hi Dilip,
Thanks for response, but there something I don’t understand
It’s my first time to see the expression before and after the implication:
1- req_delay=delay+1’b1, this an initialization to the delay to the desired value, correct ?
So it can be req_delay = ble_tx_phy_ce_dly*(ble_div+1)
2- What follows the implication (till the CONSEQUENT) is confusing a bit, could you please clarify more or use a simpler example ?
The delay inside property should be a CONSTANT VALUE or a PARAMETER.
But an alternate is there to specify a variable in delay.
Pls follow the example below in your case to specify VARIABLE DELAY in a property
(ANTECEDENT, req_delay=delay+1’b1) |-> (1, req_delay=req_delay-1’b1)[*0:$] ##1 req_delay==0 ##0 CONSEQUENT;
You need to do something like the following, basically setting a local variable to the desired delay, and then do a repeat while decrementing the counter until the value is 0.
module range1;
int ble_tx_phy_ce_dly, ble_div;
bit[15:0] ble_irq_sts;
bit ble_clk, phy_ce, ble_rst_n, ble_ena ;
/* property p1; //When a Tx complete interrupt is asserted, assert phy_ce is dropped after ble_tx_phy_ce_dly bits
@(posedge ble_clk) disable iff(!ble_rst_n || !ble_ena)
ble_irq_sts[0] |-> ##(int'(ble_tx_phy_ce_dly*(ble_div+1))) !phy_ce;
endproperty */
// assume that (int'(ble_tx_phy_ce_dly*(ble_div+1'b1))) is of value 1 or greater
property p1; //When a Tx complete interrupt is asserted, assert phy_ce is dropped after ble_tx_phy_ce_dly bits
int v;
@(posedge ble_clk) disable iff(!ble_rst_n || !ble_ena)
(ble_irq_sts[0], v= (int'(ble_tx_phy_ce_dly*(ble_div+1'b1)))) |=>
(1, v=v-1'b1)[*1:$] ##0 v<= 0 ##0 !phy_ce;
endproperty
assert property(p1);
endmodule