@@ -1192,4 +1192,80 @@ module ccc
1192
1192
.address_o (entdaa_address),
1193
1193
.address_valid_o (entdaa_addres_valid)
1194
1194
);
1195
+
1196
+ `ifndef SYNTHESIS
1197
+ `ifndef VERILATOR
1198
+ // Detect each SETDASA CCC targeted to us while we don't have dynamic address set
1199
+ property cover_first_both_dyn_setdasa;
1200
+ @ (posedge clk_i) ($rose (direct_addr_ack) && (command_code == `I3C_DIRECT_SETDASA )) | =>
1201
+ ## 1 @ (posedge bus_rx_done_i) ## 1
1202
+ ## 1 @ (posedge clk_i) ## 2
1203
+ (
1204
+ ($rose (virtual_target_dyn_address_valid_i) ## 0 $changed (virtual_target_dyn_address_i)) or
1205
+ ($rose (target_dyn_address_valid_i) ## 0 $changed (target_dyn_address_i))
1206
+ );
1207
+ endproperty : cover_first_both_dyn_setdasa
1208
+ covprop_first_both_dyn_setdasa: cover property (cover_first_both_dyn_setdasa);
1209
+
1210
+ // Detect each SETDASA CCC targeted to us while we have dynamic address set
1211
+ property cover_not_first_both_dyn_setdasa;
1212
+ @ (posedge clk_i)
1213
+ (
1214
+ $rose (bus_rx_done_i) && (command_code == `I3C_DIRECT_SETDASA ) && ccc_valid_i &&
1215
+ $stable (bus_rx_req_byte_o) && bus_rx_req_byte_o ## 1
1216
+ $rose (is_byte_our_static_addr) || $rose (is_byte_our_virtual_static_addr)
1217
+ ) | =>
1218
+ @ (posedge bus_rx_done_i) ## 1
1219
+ ## 1 @ (posedge clk_i) ## 2
1220
+ (
1221
+ ($stable (direct_addr_ack) && ~ direct_addr_ack) and
1222
+ (
1223
+ ($stable (virtual_target_dyn_address_valid_i) && virtual_target_dyn_address_valid_i ## 0 $stable (virtual_target_dyn_address_i) && virtual_target_dyn_address_i) or
1224
+ ($stable (target_dyn_address_valid_i) && target_dyn_address_valid_i ## 0 $stable (target_dyn_address_i) && target_dyn_address_i)
1225
+ )
1226
+ );
1227
+ endproperty : cover_not_first_both_dyn_setdasa
1228
+ covprop_not_first_both_dyn_setdasa: cover property (cover_not_first_both_dyn_setdasa);
1229
+
1230
+ // Detect each SETAASA CCC while we don't have dynamic address set
1231
+ property cover_first_both_dyn_setaasa;
1232
+ @ (posedge clk_i) $rose (ccc_valid_i) ## 1 (command_code == `I3C_BCAST_SETAASA ) && ~ (virtual_target_dyn_address_valid_i & target_dyn_address_valid_i)| =>
1233
+ ## 1 @ (posedge bus_rx_done_i)
1234
+ ## 1 @ (posedge clk_i) ## 2
1235
+ (
1236
+ ($rose (virtual_target_dyn_address_valid_i) ## 0 $changed (virtual_target_dyn_address_i)) or
1237
+ ($rose (target_dyn_address_valid_i) ## 0 $changed (target_dyn_address_i))
1238
+ );
1239
+ endproperty : cover_first_both_dyn_setaasa
1240
+ covprop_first_both_dyn_setaasa: cover property (cover_first_both_dyn_setaasa);
1241
+
1242
+ // Detect each SETAASA CCC while we have dynamic address set
1243
+ property cover_not_first_both_dyn_setaasa;
1244
+ @ (posedge clk_i) $rose (ccc_valid_i) ## 1 (command_code == `I3C_BCAST_SETAASA ) && (virtual_target_dyn_address_valid_i & target_dyn_address_valid_i)| =>
1245
+ ## 1 @ (posedge bus_rx_done_i)
1246
+ ## 1 @ (posedge clk_i) ## 2
1247
+ (
1248
+ ($stable (virtual_target_dyn_address_valid_i) ## 0 $stable (virtual_target_dyn_address_i)) and
1249
+ ($stable (target_dyn_address_valid_i) ## 0 $stable (target_dyn_address_i))
1250
+ );
1251
+ endproperty : cover_not_first_both_dyn_setaasa
1252
+ covprop_not_first_both_dyn_setaasa: cover property (cover_not_first_both_dyn_setaasa);
1253
+
1254
+ // Detect each SETDASA CCC targeted to us
1255
+ property cover_recv_setdasa;
1256
+ @ (posedge clk_i)
1257
+ (
1258
+ ccc_valid_i && (command_code == `I3C_DIRECT_SETDASA ) &&
1259
+ ($rose (is_byte_our_addr) || $rose (is_byte_virtual_addr))
1260
+ );
1261
+ endproperty : cover_recv_setdasa
1262
+ covprop_recv_setdasa: cover property (cover_recv_setdasa);
1263
+
1264
+ // Detect each SETAASA CCC
1265
+ property cover_recv_setaasa;
1266
+ @ (posedge clk_i) ($rose (ccc_valid_i) ## 1 (command_code == `I3C_BCAST_SETAASA ));
1267
+ endproperty : cover_recv_setaasa
1268
+ covprop_recv_setaasa: cover property (cover_recv_setaasa);
1269
+ `endif
1270
+ `endif
1195
1271
endmodule
0 commit comments