| ## Mem_bkdr Interface |
| The `mem_bkdr_if` interface provides a way to manipulate the memory array directly. |
| It includes a set of functions to backdoor read or write any address location within the memory. |
| The interface is bound to the memory using the `bind` keyword. |
| A virtual handle to it is passed on to the UVM side via `uvm_config_db` for controllability within various components. |
| |
| ### Assumptions |
| The following assumptions are made to ensure the interface works: |
| * This interface will be bound to one of the following modules: |
| `prim_ram_1p`, `prim_ram_2p`, `prim_rom` |
| * The sub hierarchy from within these instances to the memory element will be fixed to |
| `gen_generic.u_impl_generic.mem` |
| |
| ### Useful methods |
| This interface supports basic backdoor methods to access memory. Useful methods are: |
| * `is_addr_valid`: Check if input address is valid |
| The input address is assumed to be the byte addressable address into memory |
| starting at 0. It is user's responsibility to mask the upper bits. |
| * `read8`, `read16`, `read32`, `read64`: Functions to read one byte, two bytes, four bytes, and eight bytes respectively |
| at specified input address |
| * `write8`, `write16`, `write32`, `write64`: Functions to write one byte, two bytes, four bytes, and eight bytes respectively |
| with input data at specified input address |
| * `load_mem_from_file`: Load memory from a file specified by input string |
| * `print_mem`: Print the content of the memory |
| * `clear_mem`: Clear the memory to all 0s |
| * `set_mem`: Set the memory to all 1s |
| * `randomize_mem`: Randomize contents of the memory |