| # Memory Model |
| |
| The memory model UVC models a memory device which any host interface can read |
| from or write to. It is implemented as a `uvm_object`, and instantiates an |
| associative array of bytes `system_memory`. This class is parameterized by both |
| the address width and the data width, and creates two `typedefs` to represent |
| both, `mem_addr_t` and `mem_data_t`. |
| The `mem_model` class has four main functions, which are detailed below. |
| |
| ### `read_byte(mem_addr_t addr)` |
| This function looks up the byte of data corresponding to the memory address |
| passed in, and returns it. If the address does not exist in `system_memory`, it |
| will randomize the returned data and throw a `UVM_ERROR`. |
| |
| ### `write_byte(mem_addr_t addr, bit [7:0] data)` |
| This function simply assigns the given data to the specified memory address |
| location in `system_memory`. |
| |
| ### `write(input mem_addr_t addr, mem_data_t data)` |
| This function writes a full memory word of width `mem_data_t` to the specified |
| address, breaking it down into a series of back-to-back calls to `write_byte()` |
| to correctly byte-address the memory. |
| |
| ### `read(mem_addr_t addr)` |
| This function reads a full memory word of width `mem_data_t` from the specified |
| address, breaking it down into a series of back-to-back calls to `read_byte()` |
| to correctly byte-address the memory. |