Memory Backdoor Scoreboard
The mem_model_pkg checks write value matches with previous write value, but there are some limitations.
- Can’t check memory ECC if encoding and decoding match each other.
- Can’t check the read value if the address hasn’t been written after init or after a key request.
- Can’t check the write value if the address isn’t read after the write.
- Not aware of any B2B hazard (such as RAW). This scoreboard can cover all above limitations, as it checks read/write value matches with backdoor value. B2B hazard will be handled when predicting expected value. All kinds of hazard corner cases will be sampled in functional coverage.
get_bkdr_val(mem_addr_t addr);
User must override this pure virtual function to return backdoor value from the memory based on the given address.
read_start(mem_addr_t addr, mem_mask_t mask)
This function should be called when a read request is latched by design. Predicted read value is calculated in this function:
- If there is a pending write with same address (RAW hazard), the expected value is from this write (also depends on which bytes is enabled)
- If no RAW hazard, the expected value is from latching backdoor value at the time of calling this function.
read_finish(mem_data_t act_data, mem_addr_t addr, mem_mask_t mask, bit en_check_consistency)
This function should be called when a read transaction is done. It compares the read
value with expected value calculated at read_start
.
write_start(mem_addr_t addr, mem_mask_t mask)
This function should be called when a write request is latched by design. Write items will be stored in the queue for checking RAW hazard and future comparison.
write_finish(mem_addr_t addr, mem_mask_t mask, bit en_check_consistency)
This function should be called once the write data is written into the memory. This function will read back the data from backdoor and compare with write value stored in write_item_q.