-
Notifications
You must be signed in to change notification settings - Fork 807
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[dd, aon_timer cov_closure] CCOV exclusion file for aon_timer #25705
[dd, aon_timer cov_closure] CCOV exclusion file for aon_timer #25705
Conversation
91fbc3f
to
268e0fd
Compare
268e0fd
to
22abc8c
Compare
Condition 2 "1682497780" "(dst_req_i && ((!gen_wr_req.dst_req_q)) && gen_wr_req.busy) 1 -1" (2 "101") | ||
CHECKSUM: "2815520955 4109606122" | ||
INSTANCE: tb.dut.u_reg.u_wkup_count_lo_cdc.u_arb | ||
ANNOTATION: "It can't be hit because dst_update_ack won't be set prior to dst_update_req" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is the same comment as the one for line 117?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've created a PR for this: #25814
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know that I haven't got to the bottom of the list, but I think there are a few items to work through so far :-)
71c55ec
to
d2a959e
Compare
I think this is easy, but should these two commits be squashed? |
` end else if (dst_req_i && busy) begin` is equivalent to ` end else if (dst_req_i && busy) begin`. In order to guarantee the above happens an assertion has been added checking: `dst_req_i |-> !dst_req_q` The reasoning for the simplification is: In prim_reg_cdc, we expect to see a request that comes from the SW as a signal on the src domain (either src_we_i or src_re_i). This gets synchronised to the destination clock by u_src_to_dst_req. This then appears to the arbiter as dst_req_i. If there is another request in flight (probably an update from HW), the SW request get stored in the dst_req_q register. The stored request gets cleared on the first posedge of the dst clock after the previous request is complete, because it causes dst_lat_d to be high. To see dst_req_i && dst_req_q, we would need prim_reg_cdc to send another request before that happened. When the first SW request appears in prim_reg_cdc, we set busy until we see src_ack. This goes high when the SW request has been synchronised to the dst clock by u_dst_update_sync. As such, we can't see another request from prim_reg_cdc before src_req_q has been cleared. Clearing src_req_q takes exactly one clock crossing time and allowing prim_reg_cdc to send the second request takes the same time. This is part of the efforts to close code coverage for AON timer and taken as feedback from Rupert in PR: lowRISC#25705 (comment) Signed-off-by: Antonio Martinez Zambrana <[email protected]>
` end else if (dst_req_i && busy) begin` is equivalent to ` end else if (dst_req_i && busy) begin`. In order to guarantee the above happens an assertion has been added checking: `dst_req_i |-> !dst_req_q` The reasoning for the simplification is: In prim_reg_cdc, we expect to see a request that comes from the SW as a signal on the src domain (either src_we_i or src_re_i). This gets synchronised to the destination clock by u_src_to_dst_req. This then appears to the arbiter as dst_req_i. If there is another request in flight (probably an update from HW), the SW request get stored in the dst_req_q register. The stored request gets cleared on the first posedge of the dst clock after the previous request is complete, because it causes dst_lat_d to be high. To see dst_req_i && dst_req_q, we would need prim_reg_cdc to send another request before that happened. When the first SW request appears in prim_reg_cdc, we set busy until we see src_ack. This goes high when the SW request has been synchronised to the dst clock by u_dst_update_sync. As such, we can't see another request from prim_reg_cdc before src_req_q has been cleared. Clearing src_req_q takes exactly one clock crossing time and allowing prim_reg_cdc to send the second request takes the same time. This is part of the efforts to close code coverage for AON timer and taken as feedback from Rupert in PR: lowRISC#25705 (comment) Signed-off-by: Antonio Martinez Zambrana <[email protected]>
`end else if (dst_req_i && !dst_req_q && busy) begin` is equivalent to `end else if (dst_req_i && busy) begin`. In order to guarantee the above happens an assertion has been added checking: `dst_req_i |-> !dst_req_q` The reasoning for the simplification is: In prim_reg_cdc, we expect to see a request that comes from the SW as a signal on the src domain (either src_we_i or src_re_i). This gets synchronised to the destination clock by u_src_to_dst_req. This then appears to the arbiter as dst_req_i. If there is another request in flight (probably an update from HW), the SW request get stored in the dst_req_q register. The stored request gets cleared on the first posedge of the dst clock after the previous request is complete, because it causes dst_lat_d to be high. To see dst_req_i && dst_req_q, we would need prim_reg_cdc to send another request before that happened. When the first SW request appears in prim_reg_cdc, we set busy until we see src_ack. This goes high when the SW request has been synchronised to the dst clock by u_dst_update_sync. As such, we can't see another request from prim_reg_cdc before src_req_q has been cleared. Clearing src_req_q takes exactly one clock crossing time and allowing prim_reg_cdc to send the second request takes the same time. This is part of the efforts to close code coverage for AON timer and taken as feedback from Rupert in PR: lowRISC#25705 (comment) Signed-off-by: Antonio Martinez Zambrana <[email protected]>
`end else if (dst_req_i && !dst_req_q && busy) begin` is equivalent to `end else if (dst_req_i && busy) begin`. In order to guarantee the above happens an assertion has been added checking: `dst_req_i |-> !dst_req_q` The reasoning for the simplification is: In prim_reg_cdc, we expect to see a request that comes from the SW as a signal on the src domain (either src_we_i or src_re_i). This gets synchronised to the destination clock by u_src_to_dst_req. This then appears to the arbiter as dst_req_i. If there is another request in flight (probably an update from HW), the SW request get stored in the dst_req_q register. The stored request gets cleared on the first posedge of the dst clock after the previous request is complete, because it causes dst_lat_d to be high. To see dst_req_i && dst_req_q, we would need prim_reg_cdc to send another request before that happened. When the first SW request appears in prim_reg_cdc, we set busy until we see src_ack. This goes high when the SW request has been synchronised to the dst clock by u_dst_update_sync. As such, we can't see another request from prim_reg_cdc before src_req_q has been cleared. Clearing src_req_q takes exactly one clock crossing time and allowing prim_reg_cdc to send the second request takes the same time. This is part of the efforts to close code coverage for AON timer and taken as feedback from Rupert in PR: #25705 (comment) Signed-off-by: Antonio Martinez Zambrana <[email protected]>
d2a959e
to
a468271
Compare
@rswarbrick I've removed the exclusions that have been addressed via RTL modifications and have squashed both commits together! Also @vogelpi : Do you mind taking a look at comment it would be helpful to get your two cents on it :) |
All the exclusions in this file are unreachable In addition, rtl exclusions added to config file Signed-off-by: Antonio Martinez Zambrana <[email protected]>
a468271
to
46f6249
Compare
@rswarbrick : I've just pushed the changes to removed the exclusion that's no longer needed after your PR #26072 makes it to master |
I've just worked through the discussion on this PR and I'm pretty convinced! :-) @antmarzam: Do you think this exclusion list is correct for the current head of |
Yeah I think it's ready to be merged :) |
This is great, thanks! |
All the exclusions in this file are unreachable