+ iotype = resiotypes[padpin.dir] # look up the C4M-JTAG IOType
+ io = self.jtag.add_io(iotype=iotype, name=padpin.name) # IOConn
+ self.jtag.ios[padpin.name] = io # store IOConn Record by pin name
+
+ # and connect up core to pads based on type
+ if padpin.dir == 'i':
+ print ("jtag_request add input pin", padpin)
+ print (" corepin", corepin)
+ print (" jtag io core", io.core)
+ print (" jtag io pad", io.pad)
+ # corepin is to be returned, here. so, connect jtag corein to it
+ m.d.comb += corepin.i.eq(io.core.i)
+ # and padpin to JTAG pad
+ m.d.comb += io.pad.i.eq(padpin.i)
+ elif padpin.dir == 'o':
+ print ("jtag_request add output pin", padpin)
+ print (" corepin", corepin)
+ print (" jtag io core", io.core)
+ print (" jtag io pad", io.pad)
+ # corepin is to be returned, here. connect it to jtag core out
+ m.d.comb += io.core.o.eq(corepin.o)
+ # and JTAG pad to padpin
+ m.d.comb += padpin.o.eq(io.pad.o)
+ elif padpin.dir == 'io':
+ print ("jtag_request add io pin", padpin)
+ print (" corepin", corepin)
+ print (" jtag io core", io.core)
+ print (" jtag io pad", io.pad)
+ # corepin is to be returned, here. so, connect jtag corein to it
+ m.d.comb += corepin.i.eq(io.core.i)
+ # and padpin to JTAG pad
+ m.d.comb += io.pad.i.eq(padpin.i)
+ # corepin is to be returned, here. connect it to jtag core out
+ m.d.comb += io.core.o.eq(corepin.o)
+ # and JTAG pad to padpin
+ m.d.comb += padpin.o.eq(io.pad.o)
+ # corepin is to be returned, here. connect it to jtag core out
+ m.d.comb += io.core.oe.eq(corepin.oe)
+ # and JTAG pad to padpin
+ m.d.comb += padpin.oe.eq(io.pad.oe)
+
+ # finally return the *CORE* value just like ResourceManager.request()
+ # so that the module using this can connect to *CORE* i/o to the
+ # resource. pads are taken care of
+ return value