add slow spr regfile regspec support
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 5 Jul 2020 12:12:28 +0000 (13:12 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 5 Jul 2020 12:12:28 +0000 (13:12 +0100)
src/soc/decoder/power_regspec_map.py
src/soc/regfile/regfiles.py
src/soc/simple/issuer.py

index 2fc32fe0213e9390aa90fa5793823fa266dbd805..6f461c963408bee852bd6abd3ddf23a5cf634360 100644 (file)
@@ -94,7 +94,10 @@ def regspec_decode_read(e, regfile, name):
             return e.read_fast2.ok, 1<<e.read_fast2.data
 
     if regfile == 'SPR':
-        assert False, "regfile TODO %s %s" % (regfile, name)
+        # Int register numbering is *binary* encoded
+        if name == 'spr1':
+            return e.read_spr1.ok, e.read_spr1.data
+
     assert False, "regspec not found %s %s" % (regfile, name)
 
 
@@ -149,6 +152,9 @@ def regspec_decode_write(e, regfile, name):
             return e.write_fast2, 1<<e.write_fast2.data
 
     if regfile == 'SPR':
-        assert False, "regfile TODO %s %s" % (regfile, name)
+        # Int register numbering is *binary* encoded
+        if name == 'spr1': # SPR1
+            return e.write_spr, e.write_spr.data
+
     assert False, "regspec not found %s %s" % (regfile, name)
 
index 5461eec59d637bd97f664cd7ab5c3f3bfc4663d4..74c283f3e036c8c79545795a49bc15b37088af3f 100644 (file)
@@ -136,8 +136,8 @@ class SPRRegs(RegFile):
     def __init__(self):
         n_sprs = len(SPR)
         super().__init__(64, n_sprs)
-        self.w_ports = {'spr': self.write_port(name="dest")}
-        self.r_ports = {'spr': self.read_port("src")}
+        self.w_ports = {'spr1': self.write_port(name="dest")}
+        self.r_ports = {'spr1': self.read_port("src")}
 
 
 # class containing all regfiles: int, cr, xer, fast, spr
index 0ba749970e089fb0e82a9782b31fd33674b70967..9feafaf1f9151f66a0d403df81e675ba254fe1eb 100644 (file)
@@ -162,6 +162,7 @@ class TestIssuer(Elaboratable):
 
 if __name__ == '__main__':
     units = {'alu': 1, 'cr': 1, 'branch': 1, 'trap': 1, 'logical': 1,
+             'spr': 1,
              'shiftrot': 1}
     pspec = TestMemPspec(ldst_ifacetype='bare_wb',
                          imem_ifacetype='bare_wb',