while (yield dut.x_stall):
yield
+
def read_from_addr(dut, addr):
yield dut.x_addr.eq(addr)
yield dut.x_load.eq(1)
assert (yield dut.x_valid)
return (yield dut.m_load_data)
+
def write_byte(dut, addr, val):
offset = addr & 0x3
yield dut.x_addr.eq(addr)
while (yield dut.x_stall):
yield
+
def read_byte(dut, addr):
offset = addr & 0x3
yield dut.x_addr.eq(addr)
val = (yield dut.m_load_data)
return (val >> (offset * 8)) & 0xff
+
if __name__ == '__main__':
m = Module()
dut = TestMemLoadStoreUnit(regwid=32, addrwid=4)
badwid = addr_wid-log2_int(mask_wid) # TODO: is this correct?
# INPUTS
- self.x_addr = Signal(addr_wid) # The address used for loads/stores
+ self.x_addr = Signal(addr_wid) # address used for loads/stores
self.x_mask = Signal(mask_wid) # Mask of which bytes to write
self.x_load = Signal() # set to do a memory load
self.x_store = Signal() # set to do a memory store
self.x_store_data = Signal(data_wid) # The data to write when storing
self.x_stall = Signal() # do nothing until low
- self.x_valid = Signal() # Whether the x pipeline stage is
+ self.x_valid = Signal() # Whether x pipeline stage is
# currently enabled (I
# think?). Set to 1 for #now
self.m_stall = Signal() # do nothing until low
- self.m_valid = Signal() # Whether the m pipeline stage is
+ self.m_valid = Signal() # Whether m pipeline stage is
# currently enabled. Set
# to 1 for now
# OUTPUTS
self.x_busy = Signal() # set when the memory is busy
self.m_busy = Signal() # set when the memory is busy
- self.m_load_data = Signal(data_wid) # Data returned from a memory read
+ self.m_load_data = Signal(data_wid) # Data returned from memory read
# Data validity is NOT indicated by m_valid or x_valid as
# those are inputs. I believe it is valid on the next cycle
# after raising m_load where busy is low
- self.m_load_error = Signal() # Whether there was an error when loading
- self.m_store_error = Signal() # Whether there was an error when storing
+ self.m_load_error = Signal() # if there was an error when loading
+ self.m_store_error = Signal() # if there was an error when storing
self.m_badaddr = Signal(badwid) # The address of the load/store error