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