connect up LD to memory: set transparent mode to False.
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 9 Mar 2020 16:28:45 +0000 (16:28 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Mon, 9 Mar 2020 16:28:45 +0000 (16:28 +0000)
need to check if the memory is valid one clock later

src/soc/experiment/compldst.py
src/soc/experiment/testmem.py

index f9458cdf5a592583c516cbc69ec580441eae2192..853e2c80afe456e6c9867a1fdea384dedb7f525d 100644 (file)
@@ -253,6 +253,7 @@ class LDSTCompUnit(Elaboratable):
                 m.d.comb += self.alu.p_valid_i.eq(1) # so indicate valid
 
         # put the register directly onto the output bus on a go_write
+        # this is "ALU mode".  go_wr_i *must* be deasserted on next clock
         with m.If(self.go_wr_i):
             comb += self.data_o.eq(data_r)
 
@@ -260,14 +261,24 @@ class LDSTCompUnit(Elaboratable):
         with m.If(self.go_ad_i):
             comb += self.addr_o.eq(data_r)
 
-        # TODO: think about moving this to another module
-        # connect ST to memory
+        # TODO: think about moving these to another module
+
+        # connect ST to memory.  NOTE: unit *must* be set back
+        # to start again by dropping go_st_i on next clock
         with m.If(self.stwd_mem_o):
             wrport = self.mem.wrport
             comb += wrport.addr.eq(self.addr_o)
             comb += wrport.data.eq(src2_r)
             comb += wrport.en.eq(1)
 
+        # connect LD to memory.  NOTE: unit *must* be set back
+        # to start again by dropping go_ad_i on next clock
+        with m.If(self.load_mem_o):
+            rdport = self.mem.rdport
+            comb += rdport.addr.eq(self.addr_o)
+            comb += self.data_o.eq(rdport.data)
+            comb += rdport.en.eq(1)
+
         return m
 
     def __iter__(self):
index 848bab7b0cc8380c892ad4a0b696a9f8c01f1383..72b1a2833db3cadb3abf661a1fefd3816d46c1fe 100644 (file)
@@ -6,7 +6,7 @@ class TestMemory(Elaboratable):
         self.ddepth = 1 # regwid //8
         depth = (1<<addrw) // self.ddepth
         self.mem   = Memory(width=regwid, depth=depth, init=range(0, depth))
-        self.rdport = self.mem.read_port()
+        self.rdport = self.mem.read_port(transparent=False)
         self.wrport = self.mem.write_port()
 
     def elaborate(self, platform):