[dv/doc] Memory model documentation
diff --git a/hw/dv/sv/mem_model/README.md b/hw/dv/sv/mem_model/README.md
new file mode 100644
index 0000000..dc8c818
--- /dev/null
+++ b/hw/dv/sv/mem_model/README.md
@@ -0,0 +1,26 @@
+## 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 paramterized 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.