add jtag through pinmux
authorNeel <neelgala@gmail.com>
Sat, 21 Jul 2018 12:03:33 +0000 (17:33 +0530)
committerNeel <neelgala@gmail.com>
Sat, 21 Jul 2018 12:03:33 +0000 (17:33 +0530)
src/bsv/bsv_lib/slow_peripherals_template.bsv
src/bsv/peripheral_gen.py
src/bsv/pinmux_generator.py
src/spec/minitest.py

index 1f1d1c8f97a5813597c49eedd0db5dd8a58843c9..88cebac0d1ed4d0f80e805ca4779195d25e950d5 100644 (file)
@@ -360,6 +360,7 @@ package slow_peripherals;
     // NEEL EDIT
     interface iocell_side=pinmux.iocell_side;
     interface pad_config0= gpioa.pad_config;
+{9}
     // NEEL EDIT OVER
                /*===================================*/
        endmodule
index eee4cf7eac90a0d2269c7fb8c96bb657f3ed10ae..ff74a04ec92a7901d362d86cc10541e53704eb3b 100644 (file)
@@ -9,6 +9,9 @@ class PBase(object):
     def slowifdeclmux(self):
         return ''
 
+    def slowifinstance(self):
+        return ''
+
     def slowimport(self):
         return ''
 
@@ -331,6 +334,39 @@ eint_pincon_template = '''\
 '''
 
 
+class jtag(PBase):
+
+    def axi_slave_name(self, name, ifacenum):
+        return ''
+
+    def axi_slave_idx(self, idx, name, ifacenum):
+        return ('', 0)
+
+    def axi_addr_map(self, name, ifacenum):
+        return ''
+
+    def slowifdeclmux(self):
+        return "            method  Action jtag_ms (Bit#(1) in);\n" +  \
+               "            method  Bit#(1) jtag_di;\n" + \
+               "            method  Action jtag_do (Bit#(1) in);\n" + \
+               "            method  Action jtag_ck (Bit#(1) in);"
+
+    def slowifinstance(self):
+        return jtag_method_template # bit of a lazy hack this...
+
+jtag_method_template = """\
+    method  Action jtag_ms (Bit#(1) in);
+      pinmux.peripheral_side.jtag_ms(in);
+    endmethod
+    method  Bit#(1) jtag_di=pinmux.peripheral_side.jtag_di;
+    method  Action jtag_do (Bit#(1) in);
+      pinmux.peripheral_side.jtag_do(in);
+    endmethod
+    method  Action jtag_ck (Bit#(1) in);
+      pinmux.peripheral_side.jtag_ck(in);
+    endmethod
+"""
+
 class sdmmc(PBase):
 
     def slowimport(self):
@@ -620,7 +656,8 @@ class PeripheralIface(object):
         if slow:
             self.slow = slow(ifacename)
             self.slow.peripheral = self
-        for fname in ['slowimport', 'slowifdecl', 'slowifdeclmux',
+        for fname in ['slowimport', 
+                      'slowifinstance', 'slowifdecl', 'slowifdeclmux',
                       'mkslow_peripheral',
                       'mk_connection', 'mk_cellconn', 'mk_pincon']:
             fn = CallFn(self, fname)
@@ -661,6 +698,13 @@ class PeripheralInterfaces(object):
             ret.append(self.data[name].slowimport())
         return '\n'.join(list(filter(None, ret)))
 
+    def slowifinstance(self, *args):
+        ret = []
+        for (name, count) in self.ifacecount:
+            #print "slowimport", name, self.data[name].slowimport
+            ret.append(self.data[name].slowifinstance())
+        return '\n'.join(list(filter(None, ret)))
+
     def slowifdeclmux(self, *args):
         ret = []
         for (name, count) in self.ifacecount:
@@ -762,6 +806,7 @@ class PFactory(object):
                      'pwm': pwm,
                      'eint': eint,
                      'sd': sdmmc,
+                     'jtag': jtag,
                      'gpio': gpio
                      }.items():
             if name.startswith(k):
index 680f6598abf7198dd3bf70946cbf67ef33d18405..ae39958ed2e05a3bcb3a296fd46ca1fb41f36975 100644 (file)
@@ -120,10 +120,11 @@ def write_slow(slow, template, p, ifaces, iocells):
     mkcon = ifaces.mk_connection()
     mkcellcon = ifaces.mk_cellconn()
     pincon = ifaces.mk_pincon()
+    inst = ifaces.slowifinstance()
     with open(slow, "w") as bsv_file:
         bsv_file.write(template.format(imports, ifdecl, regdef, slavedecl,
                                        fnaddrmap, mkslow, mkcon, mkcellcon,
-                                       pincon))
+                                       pincon, inst))
 
 
 def write_bus(bus, p, ifaces):
index a60d31eb9db4e1f20efb75bc0cb773fe6ccaab05..fb3901fdd7ad594a9db5b7f4275e7e61921c61cf 100644 (file)
@@ -33,8 +33,7 @@ def pinspec():
     function_names = {'EINT': 'External Interrupt',
                       'FB': 'MC68k FlexBus',
                       'IIS': 'I2S Audio',
-                      'JTAG0': 'JTAG (same as JTAG1, JTAG_SEL=LOW)',
-                      'JTAG1': 'JTAG (same as JTAG0, JTAG_SEL=HIGH)',
+                      'JTAG': 'JTAG (JTAG_SEL=HI/LO)',
                       'LCD': '24-pin RGB/TTL LCD',
                       'RG': 'RGMII Ethernet',
                       'MMC': 'eMMC 1/2/4/8 pin',
@@ -73,10 +72,10 @@ def pinspec():
     ps.eint("", ('A', 20), 2, 4, 1)
     ps.eint("", ('A', 23), 1, 5, 1)
     ps.sdmmc("1", ('A', 4), 3)
-    ps.jtag("1", ('A', 10), 3)
+    ps.jtag("", ('A', 10), 3)
     ps.uartfull("0", ('A', 14), 3)
     ps.uartfull("1", ('A', 18), 3)
-    ps.jtag("0", ('A', 24), 2)
+    ps.jtag("", ('A', 24), 2)
     ps.spi("1", ('A', 24), 1)
     ps.i2c("0", ('A', 0), 2)
     ps.uart("1", ('A', 2), 2)
@@ -95,7 +94,7 @@ def pinspec():
     minitest_pwm = ['B2:PWM_0']
     descriptions = {
         'MMC': 'internal (on Card)',
-        'SD0': 'user-facing: internal (on Card), multiplexed with JTAG1\n'
+        'SD0': 'user-facing: internal (on Card), multiplexed with JTAG\n'
         'and UART2, for debug purposes',
         'TWI2': 'I2C.\n',
         'E2:SD1': '',