cocotb/c4m_jtag: support trst_n to be None.
[c4m-jtag.git] / sim / cocotb / c4m_jtag.py
index 5deb89a1362f05293fecfac467ca24d2baa5b63a..1dd13b1ee0d1a0c3e47859421735bc27db5dd0a5 100644 (file)
@@ -1,8 +1,10 @@
 import cocotb
 from cocotb.triggers import Timer
-from cocotb.utils import get_sim_steps
 from cocotb.binary import BinaryValue
 
+class JTAGException(Exception):
+    pass
+
 class JTAG_Clock(object):
     """
     Class for the JTAG clock, run cycle by cycle
@@ -42,7 +44,8 @@ class JTAG_Master(object):
         tdi <= 0
         self.tdo = tdo
         self.trst_n = trst_n
-        trst_n <= 1
+        if trst_n is not None:
+            trst_n <= 1
         self.period = Timer(clk_period)
 
         # Standard commands
@@ -62,7 +65,7 @@ class JTAG_Master(object):
 
     @cocotb.coroutine
     def cycle_clock(self, cycles=1):
-        if self.state == "Run" and self.tms:
+        if self.state == "Run" and self.tms == 1:
             self.state = "Scan"
         yield self.clkgen.Cycle(cycles)
 
@@ -84,6 +87,12 @@ class JTAG_Master(object):
 
     @cocotb.coroutine
     def change_state(self, tms_list):
+        """
+        Put TAP in other state by giving a TMS sequence
+        This function does not detect if one ends up in reset or run
+        state afterwards, self.state has to be updated by caller
+        if that is the case.
+        """
         tms_copy = list(tms_list)
         while tms_copy:
             self.tms <= tms_copy.pop()